diff --git a/.circleci/config.yml b/.circleci/config.yml index 0742d13b65..adc3134399 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,27 +1,27 @@ aliases: - &restore-yarn-cache-10 keys: - - v5-yarn-10-{{ .Branch }}-{{ checksum "yarn.lock" }} + - v10-yarn-10-{{ .Branch }}-{{ checksum "common/config/rush/yarn.lock" }} # Fallback in case checksum fails - - v5-yarn-10-{{ .Branch }}- + - v10-yarn-10-{{ .Branch }}- - &save-yarn-cache-10 paths: - - node_modules - - ~/.cache/yarn - key: v5-yarn-10-{{ .Branch }}-{{ checksum "yarn.lock" }} + - common/temp/node_modules + - common/temp/yarn-cache + key: v10-yarn-10-{{ .Branch }}-{{ checksum "common/config/rush/yarn.lock" }} - &restore-yarn-cache-12 keys: - - v5-yarn-12-{{ .Branch }}-{{ checksum "yarn.lock" }} + - v10-yarn-12-{{ .Branch }}-{{ checksum "common/config/rush/yarn.lock" }} # Fallback in case checksum fails - - v5-yarn-12-{{ .Branch }}- + - v10-yarn-12-{{ .Branch }}- - &save-yarn-cache-12 paths: - - node_modules - - ~/.cache/yarn - key: v5-yarn-12-{{ .Branch }}-{{ checksum "yarn.lock" }} + - common/temp/node_modules + - common/temp/yarn-cache + key: v10-yarn-12-{{ .Branch }}-{{ checksum "common/config/rush/yarn.lock" }} - &filter-ignore-bors-tmp branches: @@ -29,127 +29,113 @@ aliases: - staging.tmp - trying.tmp - - &yarn | - yarn install --non-interactive --cache-folder ~/.cache/yarn --ignore-engines + - &install | + node common/scripts/install-run-rush.js install - - &lint + - &nit working_directory: ~/neo-one steps: - checkout - restore-cache: *restore-yarn-cache-12 - - run: *yarn + - run: *install - save-cache: *save-yarn-cache-12 - run: - name: Prettier - command: yarn nit + name: Changelog + command: node common/scripts/install-run-rush.js change -v when: always - run: - name: Typescript - command: yarn tsc + name: Lint + command: node common/scripts/install-run-rush.js lint -p 8 when: always - run: - name: Lint - command: yarn lint + name: Prettier + command: node common/scripts/install-run-rush.js nit when: always - - &build-e2e10 + - &build-10 working_directory: ~/neo-one steps: - checkout - restore-cache: *restore-yarn-cache-10 - - run: *yarn + - run: *install - save-cache: *save-yarn-cache-10 - run: name: Build - command: yarn build:e2e + command: node common/scripts/install-run-rush.js rebuild + - run: + name: Check Type Dependencies + command: node common/scripts/install-run-rush.js check-type-deps - persist_to_workspace: root: ~/neo-one paths: - - dist - - node_modules + - common/temp/node_modules + - packages/*/dist + - packages/*/node_modules - &test10 working_directory: ~/neo-one steps: - checkout - - restore-cache: *restore-yarn-cache-10 - - run: *yarn - - save-cache: *save-yarn-cache-10 + - attach_workspace: + at: ./ - run: name: Test - command: yarn test-ci $(circleci tests glob "packages/*/src/__tests__/**/*.test.ts" | circleci tests split --split-by=timings) --coverage + command: node common/scripts/install-run-rush.js test-ci --test-path-pattern '$(circleci tests glob packages/*/src/__tests__/**.test.ts)' --coverage - run: name: Upload Unit Test Coverage - command: yarn run codecov -f coverage/coverage-final.json -F unit + command: node common/scripts/install-run-rush.js upload-coverage -F unit when: always - - store_test_results: - path: reports - parallelism: 2 - - - &e2e10 - working_directory: ~/neo-one - steps: - - checkout - - attach_workspace: - at: ./ - run: name: E2E - command: yarn nyc --reporter json yarn e2e-ci $(circleci tests glob "packages/*/src/__e2e__/**/*.test.ts" | circleci tests split --split-by=timings) - - run: - name: Upload E2E Test Coverage - command: yarn run codecov -f coverage/coverage-final.json -F e2e - when: always + command: node common/scripts/install-run-rush.js e2e-ci + # - run: + # name: Upload E2E Test Coverage + # command: node common/scripts/install-run-rush.js upload-coverage -F e2e + # when: always - store_test_results: path: reports parallelism: 2 - - &build-e2e12 + - &build-12 working_directory: ~/neo-one steps: - checkout - restore-cache: *restore-yarn-cache-12 - - run: *yarn + - run: *install - save-cache: *save-yarn-cache-12 - run: name: Build - command: yarn build:e2e + command: node common/scripts/install-run-rush.js rebuild + - run: + name: Check Type Dependencies + command: node common/scripts/install-run-rush.js check-type-deps - persist_to_workspace: root: ~/neo-one paths: - - dist - - node_modules + - common/temp/node_modules + - packages/*/dist + - packages/*/node_modules - &test12 working_directory: ~/neo-one steps: - checkout - - restore-cache: *restore-yarn-cache-12 - - run: *yarn - - save-cache: *save-yarn-cache-12 + - attach_workspace: + at: ./ - run: name: Test - command: yarn test-ci $(circleci tests glob "packages/*/src/__tests__/**/*.test.ts" | circleci tests split --split-by=timings) --coverage + command: node common/scripts/install-run-rush.js test-ci --test-path-pattern '$(circleci tests glob packages/*/src/__tests__/**.test.ts)' --coverage - run: name: Upload Unit Test Coverage - command: yarn run codecov -f coverage/coverage-final.json -F unit + command: node common/scripts/install-run-rush.js upload-coverage -F unit when: always - - store_test_results: - path: reports - parallelism: 2 - - - &e2e12 - working_directory: ~/neo-one - steps: - - checkout - - attach_workspace: - at: ./ - run: name: E2E - command: yarn nyc --reporter json yarn e2e-ci $(circleci tests glob "packages/*/src/__e2e__/**/*.test.ts" | circleci tests split --split-by=timings) - - run: - name: Upload E2E Test Coverage - command: yarn run codecov -f coverage/coverage-final.json -F e2e - when: always + command: node common/scripts/install-run-rush.js e2e-ci + # - run: + # name: Upload E2E Test Coverage + # command: node common/scripts/install-run-rush.js upload-coverage -F e2e + # when: always - store_test_results: path: reports parallelism: 2 @@ -167,50 +153,41 @@ jobs: test10: <<: *node10 <<: *test10 - e2e10: - <<: *node10 - <<: *e2e10 - build-e2e10: + build-10: <<: *node10 - <<: *build-e2e10 + <<: *build-10 test12: <<: *node12 <<: *test12 - e2e12: + build-12: <<: *node12 - <<: *e2e12 - build-e2e12: - <<: *node12 - <<: *build-e2e12 + <<: *build-12 - lint: + nit: <<: *node12 - <<: *lint + <<: *nit workflows: version: 2 test10: jobs: - - build-e2e10: + - nit: + filters: *filter-ignore-bors-tmp + - build-10: filters: *filter-ignore-bors-tmp - test10: filters: *filter-ignore-bors-tmp - - e2e10: requires: - - build-e2e10 - filters: *filter-ignore-bors-tmp - - lint: - filters: *filter-ignore-bors-tmp + - build-10 + test12: jobs: - - build-e2e12: + - nit: + filters: *filter-ignore-bors-tmp + - build-12: filters: *filter-ignore-bors-tmp - test12: filters: *filter-ignore-bors-tmp - - e2e12: requires: - - build-e2e12 - filters: *filter-ignore-bors-tmp - - lint: - filters: *filter-ignore-bors-tmp + - build-12 diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..261b1c1bdf --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +**/node_modules** +**/package-deps.json +**/*.log diff --git a/.github/workflows/website.yaml b/.github/workflows/website.yaml index 245c27ea83..e2cc9e1c7d 100644 --- a/.github/workflows/website.yaml +++ b/.github/workflows/website.yaml @@ -18,13 +18,21 @@ jobs: - name: Checkout Code uses: actions/checkout@94d077c24971944d312dd9197c1bdfba62b39878 - name: Install Node - run: brew update-reset && brew update && export PATH="/usr/local/bin:$PATH" && brew unlink node@6 && brew install node + run: brew update-reset && brew update && brew unlink node@12 && brew install node@10 && brew link node@10 --force - name: Install Chrome run: brew cask install google-chrome - - name: Yarn Install - run: yarn install --non-interactive --ignore-engines + - name: Install Rush + run: npm i -g @microsoft/rush@latest + - name: Rush Install + run: rush install + - name: Rush Rebuild + run: rush rebuild + - name: Prune node_modules + run: rush prune-node-modules + - name: Rush Link Root + run: rush link-root - name: Run Cypress Express Test - run: yarn test:cypress-express + run: rush test-cypress --express - name: Store Cypress Screenshots if: failure() continue-on-error: true diff --git a/.gitignore b/.gitignore index b63632664f..2df4223226 100644 --- a/.gitignore +++ b/.gitignore @@ -5,18 +5,23 @@ /dist/ /build/ /tmp -/packages/*/lib /packages/*/dist -/packages/*/dist-ts +/packages/*/lib/bin +/packages/*/lib/obj .rpt2_cache /reports .nyc_output .awcache .cache-loader +# Release Files +/packages/*/LICENSE +/packages/*/README.md + # Playground /packages/neo-one-playground +# Website /packages/neo-one-website/tmp /packages/neo-one-website/build /packages/neo-one-website/dist @@ -77,3 +82,8 @@ cypress/screenshots # React-Static Artifacts /packages/neo-one-website/artifacts/ + +# Rush files +common/temp/** +package-deps.json +/packages/*/.rush diff --git a/.huskyrc.js b/.huskyrc.js new file mode 100644 index 0000000000..db9fb912dd --- /dev/null +++ b/.huskyrc.js @@ -0,0 +1,16 @@ +const path = require('path'); + +const basePath = path.resolve(__dirname, '.git'); + +const hooks = + process.env.NEO_ONE_PUBLISH === 'true' + ? {} + : { + 'pre-commit': `rush check && rush lint:staged -p 16 && rush build && GIT_DIR=${basePath} rush change -v`, + 'post-merge': 'rush install', + 'post-rewrite': 'rush install', + }; + +module.exports = { + hooks, +}; diff --git a/.lintstagedrc.js b/.lintstagedrc.js new file mode 100644 index 0000000000..e5bfbf1466 --- /dev/null +++ b/.lintstagedrc.js @@ -0,0 +1,19 @@ +const path = require('path'); + +module.exports = { + '**/src/**/*.ts?(x)': (filenames) => + filenames.reduce((acc, filename) => { + return acc.concat([ + `${path.resolve( + __dirname, + 'common', + 'temp', + 'node_modules', + '.bin', + 'prettier', + )} --write ${filename}`, + `git add ${path.resolve(process.cwd(), filename)}`, + `node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js --staged --pattern \"${filename}\"`, + ]); + }, []), +}; diff --git a/.prettierrc b/.prettierrc index 27f0c27b56..99fe5d90c3 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,4 +1,3 @@ - { "arrowParens": "always", "printWidth": 120, diff --git a/.vscode/settings.json b/.vscode/settings.json index 11dc5e6888..3f0b27a512 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,5 @@ { - "typescript.tsdk": "node_modules/typescript/lib", + "typescript.tsdk": "common/temp/node_modules/typescript/lib", "typescript.format.insertSpaceBeforeFunctionParenthesis": false, "typescript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions": false, "typescript.format.enable": false, @@ -15,6 +15,13 @@ "deepscan.enable": true, "files.associations": { "[Dd]ockerfile*": "dockerfile", - "docker-compose*": "yaml" + "docker-compose*": "yaml", + "*.d.ts.map": "json" + }, + "search.exclude": { + "packages/*/dist/**": true + }, + "files.exclude": { + "packages/neo-one-csharp-vm/lib/obj/Debug/netcoreapp3.0/.NETCoreApp,Version=v3.0.AssemblyAttributes.cs": true } } diff --git a/README.md b/README.md index fb7a569ccb..847a92229f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,13 @@ +## Warning + +This branch is under heavy development during our migration to neo3 protocols. Please see the [master-2.x](https://github.com/neo-one-suite/neo-one/tree/master-2.x) branch for currently published source code. + +Currently we support syncing a NEOβ€’ONE node and retrieving information from it. +We have a node deployed publicly at `staging.neotracker.io/rpc` which can be used for demonstrating the current capabilities. +For a more in-depth view of currently supported features visit our demo repository at: https://github.com/neo-one-suite/neo-one-3.0-alpha-demo + # NEOβ€’ONE + [![All Contributors](https://img.shields.io/badge/all_contributors-5-orange.svg?style=shield)](#contributors) [![CircleCI](https://circleci.com/gh/neo-one-suite/neo-one.svg?style=shield)](https://circleci.com/gh/neo-one-suite/neo-one) [![codecov](https://codecov.io/gh/neo-one-suite/neo-one/branch/master/graph/badge.svg)](https://codecov.io/gh/neo-one-suite/neo-one) @@ -20,6 +29,7 @@ Thanks goes to these wonderful people ([emoji key](https://github.com/kentcdodds | [
Alex DiCarlo](https://github.com/dicarlo2)
[πŸ’»](https://github.com/neo-one-suite/neo-one/commits?author=dicarlo2 "Code") [πŸ›](https://github.com/neo-one-suite/neo-one/issues?q=author%3Adicarlo2 "Bug reports") [πŸ“–](https://github.com/neo-one-suite/neo-one/commits?author=dicarlo2 "Documentation") [πŸ”](#fundingFinding-dicarlo2 "Funding Finding") [πŸ‘€](#review-dicarlo2 "Reviewed Pull Requests") [πŸ“’](#talk-dicarlo2 "Talks") | [
Alex Fragapane](https://github.com/afragapane)
[πŸ’»](https://github.com/neo-one-suite/neo-one/commits?author=afragapane "Code") | [
davemneo](https://github.com/davemneo)
[πŸ’»](https://github.com/neo-one-suite/neo-one/commits?author=davemneo "Code") | [
Daniel Byrne](https://github.com/danwbyrne)
[πŸ’»](https://github.com/neo-one-suite/neo-one/commits?author=danwbyrne "Code") | [
Spencer Corwin](http://spencercorwin.com)
[πŸ’»](https://github.com/neo-one-suite/neo-one/commits?author=spencercorwin "Code") | | :---: | :---: | :---: | :---: | :---: | + This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind welcome! diff --git a/actions/dockerhub/Dockerfile b/actions/dockerhub/Dockerfile index d80b13ba80..0ed7a47cae 100644 --- a/actions/dockerhub/Dockerfile +++ b/actions/dockerhub/Dockerfile @@ -1,4 +1,4 @@ -FROM library/docker@sha256:1932552a0fc1717b0ac7de53ae9e14f910a0f80f956b88c19f00b41d9c22b0fd +FROM library/docker@sha256:18ff92d3d31725b53fa6633d60bed323effb6d5d4588be7b547078d384e0d4bf COPY entrypoint.sh /entrypoint.sh diff --git a/bors.toml b/bors.toml index b15a6800fb..f3f3f09625 100644 --- a/bors.toml +++ b/bors.toml @@ -1,10 +1,8 @@ status = [ - "ci/circleci: lint", + "ci/circleci: nit", "ci/circleci: test10", "ci/circleci: test12", - "ci/circleci: e2e10", - "ci/circleci: e2e12", - "ci/circleci: build-e2e10", - "ci/circleci: build-e2e12" + "ci/circleci: build-10", + "ci/circleci: build-12" ] timeout_sec = 18000 diff --git a/codecov.yml b/codecov.yml index bf69bd14be..122e429f09 100644 --- a/codecov.yml +++ b/codecov.yml @@ -3,13 +3,11 @@ codecov: - '!appveyor' ignore: - - 'jest' + - 'common' - 'scripts' - '**/__e2e__/**' - '**/__data__/**' - -fixes: - - 'dist/neo-one::' + - 'packages/neo-one-build-*/**' comment: layout: 'reach, diff, flags, files' diff --git a/common/changes/@neo-one/cli-common-node/3.0.1-changelog_2020-12-08-19-30.json b/common/changes/@neo-one/cli-common-node/3.0.1-changelog_2020-12-08-19-30.json new file mode 100644 index 0000000000..6006cc4af4 --- /dev/null +++ b/common/changes/@neo-one/cli-common-node/3.0.1-changelog_2020-12-08-19-30.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.1-preview3 release", + "type": "patch", + "packageName": "@neo-one/cli-common-node" + } + ], + "packageName": "@neo-one/cli-common-node", + "email": "danwbyrne@gmail.com" +} diff --git a/common/changes/@neo-one/cli/3.0.1-changelog_2020-12-08-19-30.json b/common/changes/@neo-one/cli/3.0.1-changelog_2020-12-08-19-30.json new file mode 100644 index 0000000000..f04035daec --- /dev/null +++ b/common/changes/@neo-one/cli/3.0.1-changelog_2020-12-08-19-30.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.1-preview3 release", + "type": "patch", + "packageName": "@neo-one/cli" + } + ], + "packageName": "@neo-one/cli", + "email": "danwbyrne@gmail.com" +} diff --git a/common/changes/@neo-one/cli/fixup-cli_2020-12-08-19-02.json b/common/changes/@neo-one/cli/fixup-cli_2020-12-08-19-02.json new file mode 100644 index 0000000000..e7394a5859 --- /dev/null +++ b/common/changes/@neo-one/cli/fixup-cli_2020-12-08-19-02.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/cli", + "comment": "fixup cli start network command", + "type": "patch" + } + ], + "packageName": "@neo-one/cli", + "email": "danwbyrne@gmail.com" +} diff --git a/common/changes/@neo-one/client-common/3.0.1-changelog_2020-12-08-19-30.json b/common/changes/@neo-one/client-common/3.0.1-changelog_2020-12-08-19-30.json new file mode 100644 index 0000000000..c46baf2239 --- /dev/null +++ b/common/changes/@neo-one/client-common/3.0.1-changelog_2020-12-08-19-30.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.1-preview3 release", + "type": "patch", + "packageName": "@neo-one/client-common" + } + ], + "packageName": "@neo-one/client-common", + "email": "danwbyrne@gmail.com" +} diff --git a/common/changes/@neo-one/client-common/misc-fixes_2020-12-15-20-03.json b/common/changes/@neo-one/client-common/misc-fixes_2020-12-15-20-03.json new file mode 100644 index 0000000000..e76ca8a888 --- /dev/null +++ b/common/changes/@neo-one/client-common/misc-fixes_2020-12-15-20-03.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client-common", + "comment": "disable `call` and edit `testInvoke` call", + "type": "minor" + } + ], + "packageName": "@neo-one/client-common", + "email": "danwbyrne@gmail.com" +} diff --git a/common/changes/@neo-one/client-core/3.0.1-changelog_2020-12-08-19-30.json b/common/changes/@neo-one/client-core/3.0.1-changelog_2020-12-08-19-30.json new file mode 100644 index 0000000000..65f3e8b35e --- /dev/null +++ b/common/changes/@neo-one/client-core/3.0.1-changelog_2020-12-08-19-30.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.1-preview3 release", + "type": "patch", + "packageName": "@neo-one/client-core" + } + ], + "packageName": "@neo-one/client-core", + "email": "danwbyrne@gmail.com" +} diff --git a/common/changes/@neo-one/client-core/fixup-cli_2020-12-08-19-02.json b/common/changes/@neo-one/client-core/fixup-cli_2020-12-08-19-02.json new file mode 100644 index 0000000000..3b3a7db585 --- /dev/null +++ b/common/changes/@neo-one/client-core/fixup-cli_2020-12-08-19-02.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client-core", + "comment": "", + "type": "none" + } + ], + "packageName": "@neo-one/client-core", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/client-core/misc-fixes_2020-12-15-20-03.json b/common/changes/@neo-one/client-core/misc-fixes_2020-12-15-20-03.json new file mode 100644 index 0000000000..c3a16415d1 --- /dev/null +++ b/common/changes/@neo-one/client-core/misc-fixes_2020-12-15-20-03.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/client-core", + "comment": "disable `call` and edit `testInvoke` call", + "type": "minor" + } + ], + "packageName": "@neo-one/client-core", + "email": "danwbyrne@gmail.com" +} diff --git a/common/changes/@neo-one/client-full-common/3.0.1-changelog_2020-12-08-19-30.json b/common/changes/@neo-one/client-full-common/3.0.1-changelog_2020-12-08-19-30.json new file mode 100644 index 0000000000..225d4cb966 --- /dev/null +++ b/common/changes/@neo-one/client-full-common/3.0.1-changelog_2020-12-08-19-30.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.1-preview3 release", + "type": "patch", + "packageName": "@neo-one/client-full-common" + } + ], + "packageName": "@neo-one/client-full-common", + "email": "danwbyrne@gmail.com" +} diff --git a/common/changes/@neo-one/node-bin/3.0.1-changelog_2020-12-08-19-30.json b/common/changes/@neo-one/node-bin/3.0.1-changelog_2020-12-08-19-30.json new file mode 100644 index 0000000000..3976e7b1c9 --- /dev/null +++ b/common/changes/@neo-one/node-bin/3.0.1-changelog_2020-12-08-19-30.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.1-preview3 release", + "type": "patch", + "packageName": "@neo-one/node-bin" + } + ], + "packageName": "@neo-one/node-bin", + "email": "danwbyrne@gmail.com" +} diff --git a/common/changes/@neo-one/node-blockchain/3.0.1-changelog_2020-12-08-19-30.json b/common/changes/@neo-one/node-blockchain/3.0.1-changelog_2020-12-08-19-30.json new file mode 100644 index 0000000000..d848a3d8a8 --- /dev/null +++ b/common/changes/@neo-one/node-blockchain/3.0.1-changelog_2020-12-08-19-30.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.1-preview3 release", + "type": "patch", + "packageName": "@neo-one/node-blockchain" + } + ], + "packageName": "@neo-one/node-blockchain", + "email": "danwbyrne@gmail.com" +} diff --git a/common/changes/@neo-one/node-blockchain/misc-fixes_2020-12-15-20-03.json b/common/changes/@neo-one/node-blockchain/misc-fixes_2020-12-15-20-03.json new file mode 100644 index 0000000000..88d5e2914c --- /dev/null +++ b/common/changes/@neo-one/node-blockchain/misc-fixes_2020-12-15-20-03.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-blockchain", + "comment": "remove `invokeTransaction` and `wrapExecuteScripts`", + "type": "minor" + } + ], + "packageName": "@neo-one/node-blockchain", + "email": "danwbyrne@gmail.com" +} diff --git a/common/changes/@neo-one/node-consensus/3.0.1-changelog_2020-12-08-19-30.json b/common/changes/@neo-one/node-consensus/3.0.1-changelog_2020-12-08-19-30.json new file mode 100644 index 0000000000..6dbeaf51cb --- /dev/null +++ b/common/changes/@neo-one/node-consensus/3.0.1-changelog_2020-12-08-19-30.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.1-preview3 release", + "type": "patch", + "packageName": "@neo-one/node-consensus" + } + ], + "packageName": "@neo-one/node-consensus", + "email": "danwbyrne@gmail.com" +} diff --git a/common/changes/@neo-one/node-core/3.0.1-changelog_2020-12-08-19-30.json b/common/changes/@neo-one/node-core/3.0.1-changelog_2020-12-08-19-30.json new file mode 100644 index 0000000000..0f4d9c1844 --- /dev/null +++ b/common/changes/@neo-one/node-core/3.0.1-changelog_2020-12-08-19-30.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.1-preview3 release", + "type": "patch", + "packageName": "@neo-one/node-core" + } + ], + "packageName": "@neo-one/node-core", + "email": "danwbyrne@gmail.com" +} diff --git a/common/changes/@neo-one/node-core/misc-fixes_2020-12-15-20-03.json b/common/changes/@neo-one/node-core/misc-fixes_2020-12-15-20-03.json new file mode 100644 index 0000000000..785c98ec53 --- /dev/null +++ b/common/changes/@neo-one/node-core/misc-fixes_2020-12-15-20-03.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-core", + "comment": "add log types, edit blockchain type", + "type": "minor" + } + ], + "packageName": "@neo-one/node-core", + "email": "danwbyrne@gmail.com" +} diff --git a/common/changes/@neo-one/node-native/3.0.1-changelog_2020-12-08-19-30.json b/common/changes/@neo-one/node-native/3.0.1-changelog_2020-12-08-19-30.json new file mode 100644 index 0000000000..d2b8a5fd9c --- /dev/null +++ b/common/changes/@neo-one/node-native/3.0.1-changelog_2020-12-08-19-30.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.1-preview3 release", + "type": "patch", + "packageName": "@neo-one/node-native" + } + ], + "packageName": "@neo-one/node-native", + "email": "danwbyrne@gmail.com" +} diff --git a/common/changes/@neo-one/node-neo-settings/3.0.1-changelog_2020-12-08-19-30.json b/common/changes/@neo-one/node-neo-settings/3.0.1-changelog_2020-12-08-19-30.json new file mode 100644 index 0000000000..4db5e8d399 --- /dev/null +++ b/common/changes/@neo-one/node-neo-settings/3.0.1-changelog_2020-12-08-19-30.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.1-preview3 release", + "type": "patch", + "packageName": "@neo-one/node-neo-settings" + } + ], + "packageName": "@neo-one/node-neo-settings", + "email": "danwbyrne@gmail.com" +} diff --git a/common/changes/@neo-one/node-protocol/3.0.1-changelog_2020-12-08-19-30.json b/common/changes/@neo-one/node-protocol/3.0.1-changelog_2020-12-08-19-30.json new file mode 100644 index 0000000000..8d063adbc5 --- /dev/null +++ b/common/changes/@neo-one/node-protocol/3.0.1-changelog_2020-12-08-19-30.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.1-preview3 release", + "type": "patch", + "packageName": "@neo-one/node-protocol" + } + ], + "packageName": "@neo-one/node-protocol", + "email": "danwbyrne@gmail.com" +} diff --git a/common/changes/@neo-one/node-rpc-handler/3.0.1-changelog_2020-12-08-19-30.json b/common/changes/@neo-one/node-rpc-handler/3.0.1-changelog_2020-12-08-19-30.json new file mode 100644 index 0000000000..8eb60e9f59 --- /dev/null +++ b/common/changes/@neo-one/node-rpc-handler/3.0.1-changelog_2020-12-08-19-30.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.1-preview3 release", + "type": "patch", + "packageName": "@neo-one/node-rpc-handler" + } + ], + "packageName": "@neo-one/node-rpc-handler", + "email": "danwbyrne@gmail.com" +} diff --git a/common/changes/@neo-one/node-storage-common/3.0.1-changelog_2020-12-08-19-30.json b/common/changes/@neo-one/node-storage-common/3.0.1-changelog_2020-12-08-19-30.json new file mode 100644 index 0000000000..64746b3dbd --- /dev/null +++ b/common/changes/@neo-one/node-storage-common/3.0.1-changelog_2020-12-08-19-30.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.1-preview3 release", + "type": "patch", + "packageName": "@neo-one/node-storage-common" + } + ], + "packageName": "@neo-one/node-storage-common", + "email": "danwbyrne@gmail.com" +} diff --git a/common/changes/@neo-one/node-storage-levelup/3.0.1-changelog_2020-12-08-19-30.json b/common/changes/@neo-one/node-storage-levelup/3.0.1-changelog_2020-12-08-19-30.json new file mode 100644 index 0000000000..802f0d534c --- /dev/null +++ b/common/changes/@neo-one/node-storage-levelup/3.0.1-changelog_2020-12-08-19-30.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.1-preview3 release", + "type": "patch", + "packageName": "@neo-one/node-storage-levelup" + } + ], + "packageName": "@neo-one/node-storage-levelup", + "email": "danwbyrne@gmail.com" +} diff --git a/common/changes/@neo-one/node-vm/3.0.1-changelog_2020-12-08-19-30.json b/common/changes/@neo-one/node-vm/3.0.1-changelog_2020-12-08-19-30.json new file mode 100644 index 0000000000..954f9aa83c --- /dev/null +++ b/common/changes/@neo-one/node-vm/3.0.1-changelog_2020-12-08-19-30.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.1-preview3 release", + "type": "patch", + "packageName": "@neo-one/node-vm" + } + ], + "packageName": "@neo-one/node-vm", + "email": "danwbyrne@gmail.com" +} diff --git a/common/changes/@neo-one/node-vm/misc-fixes_2020-12-15-20-03.json b/common/changes/@neo-one/node-vm/misc-fixes_2020-12-15-20-03.json new file mode 100644 index 0000000000..6dd1026b6f --- /dev/null +++ b/common/changes/@neo-one/node-vm/misc-fixes_2020-12-15-20-03.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-vm", + "comment": "add log support, update neo fork version", + "type": "minor" + } + ], + "packageName": "@neo-one/node-vm", + "email": "danwbyrne@gmail.com" +} diff --git a/common/changes/@neo-one/node-vm/vm-env-fixup_2020-12-09-19-41.json b/common/changes/@neo-one/node-vm/vm-env-fixup_2020-12-09-19-41.json new file mode 100644 index 0000000000..09e60b2c02 --- /dev/null +++ b/common/changes/@neo-one/node-vm/vm-env-fixup_2020-12-09-19-41.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node-vm", + "comment": "add default environment variable instead of requiring them from the user", + "type": "none" + } + ], + "packageName": "@neo-one/node-vm", + "email": "danwbyrne@gmail.com" +} \ No newline at end of file diff --git a/common/changes/@neo-one/node/3.0.1-changelog_2020-12-08-19-30.json b/common/changes/@neo-one/node/3.0.1-changelog_2020-12-08-19-30.json new file mode 100644 index 0000000000..a3470bc3ca --- /dev/null +++ b/common/changes/@neo-one/node/3.0.1-changelog_2020-12-08-19-30.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.1-preview3 release", + "type": "patch", + "packageName": "@neo-one/node" + } + ], + "packageName": "@neo-one/node", + "email": "danwbyrne@gmail.com" +} diff --git a/common/changes/@neo-one/node/misc-fixes_2020-12-15-20-03.json b/common/changes/@neo-one/node/misc-fixes_2020-12-15-20-03.json new file mode 100644 index 0000000000..06e6c48ccd --- /dev/null +++ b/common/changes/@neo-one/node/misc-fixes_2020-12-15-20-03.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@neo-one/node", + "comment": "add log types", + "type": "minor" + } + ], + "packageName": "@neo-one/node", + "email": "danwbyrne@gmail.com" +} diff --git a/common/changes/@neo-one/utils/3.0.1-changelog_2020-12-08-19-30.json b/common/changes/@neo-one/utils/3.0.1-changelog_2020-12-08-19-30.json new file mode 100644 index 0000000000..5f9532114b --- /dev/null +++ b/common/changes/@neo-one/utils/3.0.1-changelog_2020-12-08-19-30.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "3.0.1-preview3 release", + "type": "patch", + "packageName": "@neo-one/utils" + } + ], + "packageName": "@neo-one/utils", + "email": "danwbyrne@gmail.com" +} diff --git a/common/config/rush/browser-approved-packages.json b/common/config/rush/browser-approved-packages.json new file mode 100644 index 0000000000..94f9774bbb --- /dev/null +++ b/common/config/rush/browser-approved-packages.json @@ -0,0 +1,1266 @@ +// DO NOT ADD COMMENTS IN THIS FILE. They will be lost when the Rush tool resaves it. +{ + "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/approved-packages.schema.json", + "packages": [ + { + "name": "@angular/core", + "allowedCategories": [ "production" ] + }, + { + "name": "@babel/code-frame", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "@babel/core", + "allowedCategories": [ "production", "tools" ] + }, + { + "name": "@babel/plugin-proposal-async-generator-functions", + "allowedCategories": [ "tools", "web" ] + }, + { + "name": "@babel/plugin-proposal-class-properties", + "allowedCategories": [ "web" ] + }, + { + "name": "@babel/plugin-proposal-numeric-separator", + "allowedCategories": [ "web" ] + }, + { + "name": "@babel/plugin-proposal-object-rest-spread", + "allowedCategories": [ "tools", "web" ] + }, + { + "name": "@babel/plugin-proposal-optional-catch-binding", + "allowedCategories": [ "web" ] + }, + { + "name": "@babel/plugin-syntax-dynamic-import", + "allowedCategories": [ "tools" ] + }, + { + "name": "@babel/plugin-syntax-numeric-separator", + "allowedCategories": [ "tools" ] + }, + { + "name": "@babel/plugin-syntax-optional-catch-binding", + "allowedCategories": [ "tools" ] + }, + { + "name": "@babel/plugin-syntax-typescript", + "allowedCategories": [ "tools" ] + }, + { + "name": "@babel/plugin-transform-modules-commonjs", + "allowedCategories": [ "web" ] + }, + { + "name": "@babel/plugin-transform-typescript", + "allowedCategories": [ "web" ] + }, + { + "name": "@babel/polyfill", + "allowedCategories": [ "tools" ] + }, + { + "name": "@babel/preset-env", + "allowedCategories": [ "tools", "web" ] + }, + { + "name": "@babel/preset-react", + "allowedCategories": [ "tools", "web" ] + }, + { + "name": "@babel/register", + "allowedCategories": [ "production" ] + }, + { + "name": "@babel/runtime", + "allowedCategories": [ "tools", "web" ] + }, + { + "name": "@babel/standalone", + "allowedCategories": [ "web" ] + }, + { + "name": "@cypress/webpack-preprocessor", + "allowedCategories": [ "tools" ] + }, + { + "name": "@emotion/core", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "@emotion/styled", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "@emotion/styled-base", + "allowedCategories": [ "tools", "web" ] + }, + { + "name": "@google-cloud/storage", + "allowedCategories": [ "production" ] + }, + { + "name": "@jest/types", + "allowedCategories": [ "web" ] + }, + { + "name": "@ledgerhq/hw-transport-node-hid", + "allowedCategories": [ "production" ] + }, + { + "name": "@ledgerhq/hw-transport-u2f", + "allowedCategories": [ "production" ] + }, + { + "name": "@microsoft/gulp-core-build", + "allowedCategories": [ "production" ] + }, + { + "name": "@microsoft/gulp-core-build-typescript", + "allowedCategories": [ "production" ] + }, + { + "name": "@microsoft/node-library-build", + "allowedCategories": [ "production", "tools" ] + }, + { + "name": "@microsoft/package-deps-hash", + "allowedCategories": [ "tools" ] + }, + { + "name": "@microsoft/rush-stack-compiler-3.4", + "allowedCategories": [ "production" ] + }, + { + "name": "@microsoft/rush-stack-compiler-3.5", + "allowedCategories": [ "production", "tools" ] + }, + { + "name": "@neo-one/build-configs", + "allowedCategories": [ "tools" ] + }, + { + "name": "@neo-one/build-tools", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "@neo-one/build-tools-common", + "allowedCategories": [ "tools" ] + }, + { + "name": "@neo-one/build-tools-web", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "@neo-one/built-tools", + "allowedCategories": [ "production" ] + }, + { + "name": "@neo-one/cli", + "allowedCategories": [ "production" ] + }, + { + "name": "@neo-one/cli-common", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "@neo-one/cli-common-node", + "allowedCategories": [ "production" ] + }, + { + "name": "@neo-one/client", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "@neo-one/client-common", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "@neo-one/client-core", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "@neo-one/client-full", + "allowedCategories": [ "production" ] + }, + { + "name": "@neo-one/client-full-common", + "allowedCategories": [ "production" ] + }, + { + "name": "@neo-one/client-full-core", + "allowedCategories": [ "production" ] + }, + { + "name": "@neo-one/client-switch", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "@neo-one/csharp-core", + "allowedCategories": [ "production" ] + }, + { + "name": "@neo-one/csharp-vm", + "allowedCategories": [ "production" ] + }, + { + "name": "@neo-one/developer-tools", + "allowedCategories": [ "production" ] + }, + { + "name": "@neo-one/developer-tools-frame", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "@neo-one/ec-key", + "allowedCategories": [ "production" ] + }, + { + "name": "@neo-one/edge", + "allowedCategories": [ "production" ] + }, + { + "name": "@neo-one/editor", + "allowedCategories": [ "web" ] + }, + { + "name": "@neo-one/http", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "@neo-one/http-context", + "allowedCategories": [ "production" ] + }, + { + "name": "@neo-one/local-browser", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "@neo-one/local-browser-worker", + "allowedCategories": [ "web" ] + }, + { + "name": "@neo-one/local-singleton", + "allowedCategories": [ "web" ] + }, + { + "name": "@neo-one/logger", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "@neo-one/logger-config", + "allowedCategories": [ "production" ] + }, + { + "name": "@neo-one/node", + "allowedCategories": [ "production" ] + }, + { + "name": "@neo-one/node-bin", + "allowedCategories": [ "production", "tools" ] + }, + { + "name": "@neo-one/node-blockchain", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "@neo-one/node-browser", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "@neo-one/node-browser-worker", + "allowedCategories": [ "web" ] + }, + { + "name": "@neo-one/node-consensus", + "allowedCategories": [ "production" ] + }, + { + "name": "@neo-one/node-core", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "@neo-one/node-http-rpc", + "allowedCategories": [ "production" ] + }, + { + "name": "@neo-one/node-native", + "allowedCategories": [ "production" ] + }, + { + "name": "@neo-one/node-neo-settings", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "@neo-one/node-network", + "allowedCategories": [ "production" ] + }, + { + "name": "@neo-one/node-offline", + "allowedCategories": [ "production" ] + }, + { + "name": "@neo-one/node-protocol", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "@neo-one/node-rpc-handler", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "@neo-one/node-storage-common", + "allowedCategories": [ "production" ] + }, + { + "name": "@neo-one/node-storage-levelup", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "@neo-one/node-vm", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "@neo-one/react", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "@neo-one/react-common", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "@neo-one/react-core", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "@neo-one/shared", + "allowedCategories": [ "production" ] + }, + { + "name": "@neo-one/smart-contract", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "@neo-one/smart-contract-codegen", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "@neo-one/smart-contract-compiler", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "@neo-one/smart-contract-compiler-node", + "allowedCategories": [ "production" ] + }, + { + "name": "@neo-one/smart-contract-lib", + "allowedCategories": [ "production", "tools" ] + }, + { + "name": "@neo-one/smart-contract-test", + "allowedCategories": [ "production", "tools" ] + }, + { + "name": "@neo-one/smart-contract-test-browser", + "allowedCategories": [ "web" ] + }, + { + "name": "@neo-one/smart-contract-test-common", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "@neo-one/smart-contract-typescript-plugin", + "allowedCategories": [ "production" ] + }, + { + "name": "@neo-one/ts-utils", + "allowedCategories": [ "production" ] + }, + { + "name": "@neo-one/typescript-concatenator", + "allowedCategories": [ "production" ] + }, + { + "name": "@neo-one/utils", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "@neo-one/utils-node", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "@neo-one/worker", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "@neotracker/core", + "allowedCategories": [ "production" ] + }, + { + "name": "@opencensus/core", + "allowedCategories": [ "production" ] + }, + { + "name": "@opencensus/exporter-jaeger", + "allowedCategories": [ "production" ] + }, + { + "name": "@opencensus/exporter-prometheus", + "allowedCategories": [ "production" ] + }, + { + "name": "@opencensus/nodejs-base", + "allowedCategories": [ "production" ] + }, + { + "name": "@opencensus/propagation-tracecontext", + "allowedCategories": [ "production" ] + }, + { + "name": "@opencensus/web-core", + "allowedCategories": [ "production" ] + }, + { + "name": "@opencensus/web-propagation-tracecontext", + "allowedCategories": [ "production" ] + }, + { + "name": "@opencensus/web-types", + "allowedCategories": [ "production" ] + }, + { + "name": "@reach/router", + "allowedCategories": [ "web" ] + }, + { + "name": "@reactivex/ix-es2015-cjs", + "allowedCategories": [ "production" ] + }, + { + "name": "@reactivex/ix-es2015-esm", + "allowedCategories": [ "production" ] + }, + { + "name": "@reactivex/ix-esnext-esm", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "@render-props/scrollable", + "allowedCategories": [ "web" ] + }, + { + "name": "@render-props/size-observer", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "@render-props/viewport", + "allowedCategories": [ "web" ] + }, + { + "name": "@types/jest", + "allowedCategories": [ "production" ] + }, + { + "name": "@types/lodash", + "allowedCategories": [ "production" ] + }, + { + "name": "@types/node", + "allowedCategories": [ "production" ] + }, + { + "name": "abstract-leveldown", + "allowedCategories": [ "production" ] + }, + { + "name": "ajv", + "allowedCategories": [ "tools" ] + }, + { + "name": "anser", + "allowedCategories": [ "web" ] + }, + { + "name": "app-root-dir", + "allowedCategories": [ "production", "tools" ] + }, + { + "name": "autoprefixer", + "allowedCategories": [ "tools" ] + }, + { + "name": "axios", + "allowedCategories": [ "web" ] + }, + { + "name": "babel-jest", + "allowedCategories": [ "tools" ] + }, + { + "name": "babel-loader", + "allowedCategories": [ "tools" ] + }, + { + "name": "babel-plugin-emotion", + "allowedCategories": [ "tools", "web" ] + }, + { + "name": "babel-plugin-lodash", + "allowedCategories": [ "tools" ] + }, + { + "name": "babel-plugin-module-resolver", + "allowedCategories": [ "tools" ] + }, + { + "name": "babel-plugin-universal-import", + "allowedCategories": [ "tools", "web" ] + }, + { + "name": "bignumber.js", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "bitwise", + "allowedCategories": [ "production" ] + }, + { + "name": "bloem", + "allowedCategories": [ "production" ] + }, + { + "name": "bloom-filter", + "allowedCategories": [ "production" ] + }, + { + "name": "bn.js", + "allowedCategories": [ "production", "tools" ] + }, + { + "name": "bs58", + "allowedCategories": [ "production" ] + }, + { + "name": "buffer-xor", + "allowedCategories": [ "production" ] + }, + { + "name": "cache-loader", + "allowedCategories": [ "tools" ] + }, + { + "name": "clipboard", + "allowedCategories": [ "web" ] + }, + { + "name": "codecov", + "allowedCategories": [ "tools" ] + }, + { + "name": "color", + "allowedCategories": [ "web" ] + }, + { + "name": "compression-webpack-plugin", + "allowedCategories": [ "tools" ] + }, + { + "name": "concurrently", + "allowedCategories": [ "tools", "web" ] + }, + { + "name": "core-js", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "cosmiconfig", + "allowedCategories": [ "production" ] + }, + { + "name": "cross-env", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "cross-fetch", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "cssnano", + "allowedCategories": [ "tools" ] + }, + { + "name": "cypress", + "allowedCategories": [ "tools" ] + }, + { + "name": "cypress-plugin-retries", + "allowedCategories": [ "tools" ] + }, + { + "name": "dataloader", + "allowedCategories": [ "production" ] + }, + { + "name": "date-fns", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "debug", + "allowedCategories": [ "production" ] + }, + { + "name": "detective", + "allowedCategories": [ "web" ] + }, + { + "name": "dgeni", + "allowedCategories": [ "web" ] + }, + { + "name": "dgeni-packages", + "allowedCategories": [ "web" ] + }, + { + "name": "edge-js", + "allowedCategories": [ "production" ] + }, + { + "name": "elliptic", + "allowedCategories": [ "production" ] + }, + { + "name": "emotion", + "allowedCategories": [ "web" ] + }, + { + "name": "emotion-theming", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "env-paths", + "allowedCategories": [ "production" ] + }, + { + "name": "execa", + "allowedCategories": [ "production", "tools" ] + }, + { + "name": "extract-css-chunks-webpack-plugin", + "allowedCategories": [ "tools" ] + }, + { + "name": "file-loader", + "allowedCategories": [ "tools", "web" ] + }, + { + "name": "find-cache-dir", + "allowedCategories": [ "tools" ] + }, + { + "name": "fs-extra", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "glob", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "graphlib", + "allowedCategories": [ "web" ] + }, + { + "name": "gray-matter", + "allowedCategories": [ "web" ] + }, + { + "name": "gulp", + "allowedCategories": [ "production", "tools" ] + }, + { + "name": "gulp-banner", + "allowedCategories": [ "tools" ] + }, + { + "name": "gulp-filter", + "allowedCategories": [ "tools" ] + }, + { + "name": "gulp-flatten", + "allowedCategories": [ "tools" ] + }, + { + "name": "gulp-if", + "allowedCategories": [ "tools" ] + }, + { + "name": "gulp-json-transform", + "allowedCategories": [ "tools" ] + }, + { + "name": "gulp-plumber", + "allowedCategories": [ "tools" ] + }, + { + "name": "gulp-rename", + "allowedCategories": [ "tools" ] + }, + { + "name": "gulp-replace", + "allowedCategories": [ "tools" ] + }, + { + "name": "gulp-sourcemaps", + "allowedCategories": [ "tools" ] + }, + { + "name": "gulp-typescript", + "allowedCategories": [ "tools" ] + }, + { + "name": "hash.js", + "allowedCategories": [ "production" ] + }, + { + "name": "html-entities", + "allowedCategories": [ "web" ] + }, + { + "name": "husky", + "allowedCategories": [ "tools" ] + }, + { + "name": "immer", + "allowedCategories": [ "web" ] + }, + { + "name": "import-local", + "allowedCategories": [ "production" ] + }, + { + "name": "ip-address", + "allowedCategories": [ "production" ] + }, + { + "name": "jest", + "allowedCategories": [ "production", "tools" ] + }, + { + "name": "jest-circus", + "allowedCategories": [ "tools", "web" ] + }, + { + "name": "jest-junit", + "allowedCategories": [ "tools" ] + }, + { + "name": "jest-matchers", + "allowedCategories": [ "web" ] + }, + { + "name": "jest-mock", + "allowedCategories": [ "web" ] + }, + { + "name": "js-priority-queue", + "allowedCategories": [ "production" ] + }, + { + "name": "json", + "allowedCategories": [ "tools" ] + }, + { + "name": "jszip", + "allowedCategories": [ "production" ] + }, + { + "name": "koa", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "koa-bodyparser", + "allowedCategories": [ "production" ] + }, + { + "name": "koa-compose", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "koa-compress", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "koa-convert", + "allowedCategories": [ "production" ] + }, + { + "name": "koa-cors", + "allowedCategories": [ "production" ] + }, + { + "name": "koa-router", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "koa-static", + "allowedCategories": [ "production" ] + }, + { + "name": "level-js", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "leveldown", + "allowedCategories": [ "production" ] + }, + { + "name": "levelup", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "lint-staged", + "allowedCategories": [ "tools" ] + }, + { + "name": "listr", + "allowedCategories": [ "production" ] + }, + { + "name": "loader-utils", + "allowedCategories": [ "tools" ] + }, + { + "name": "localforage", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "lodash", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "lodash-webpack-plugin", + "allowedCategories": [ "tools" ] + }, + { + "name": "lru-cache", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "lz4", + "allowedCategories": [ "production" ] + }, + { + "name": "markdown-it", + "allowedCategories": [ "web" ] + }, + { + "name": "markdown-it-anchor", + "allowedCategories": [ "web" ] + }, + { + "name": "markdown-it-container", + "allowedCategories": [ "web" ] + }, + { + "name": "memdown", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "mini-html-webpack-plugin", + "allowedCategories": [ "tools" ] + }, + { + "name": "minimatch", + "allowedCategories": [ "tools" ] + }, + { + "name": "mkdirp", + "allowedCategories": [ "tools" ] + }, + { + "name": "modernizr", + "allowedCategories": [ "web" ] + }, + { + "name": "monaco-editor", + "allowedCategories": [ "web" ] + }, + { + "name": "monaco-textmate", + "allowedCategories": [ "web" ] + }, + { + "name": "nanoid", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "nodemon", + "allowedCategories": [ "production", "tools" ] + }, + { + "name": "npm-package-arg", + "allowedCategories": [ "production" ] + }, + { + "name": "nyc", + "allowedCategories": [ "tools" ] + }, + { + "name": "onigasm", + "allowedCategories": [ "web" ] + }, + { + "name": "optimize-css-assets-webpack-plugin", + "allowedCategories": [ "tools" ] + }, + { + "name": "path", + "allowedCategories": [ "production", "tools" ] + }, + { + "name": "pify", + "allowedCategories": [ "tools" ] + }, + { + "name": "pino", + "allowedCategories": [ "production" ] + }, + { + "name": "pino-pretty", + "allowedCategories": [ "production" ] + }, + { + "name": "popper.js", + "allowedCategories": [ "production" ] + }, + { + "name": "postcss-flexbugs-fixes", + "allowedCategories": [ "tools" ] + }, + { + "name": "pouchdb", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "pouchdb-utils", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "prettier", + "allowedCategories": [ "production" ] + }, + { + "name": "prismjs", + "allowedCategories": [ "web" ] + }, + { + "name": "prompts", + "allowedCategories": [ "production" ] + }, + { + "name": "prop-types", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "raw-loader", + "allowedCategories": [ "web" ] + }, + { + "name": "rc", + "allowedCategories": [ "production" ] + }, + { + "name": "react", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "react-dom", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "react-draggable", + "allowedCategories": [ "production" ] + }, + { + "name": "react-headroom", + "allowedCategories": [ "web" ] + }, + { + "name": "react-hot-loader", + "allowedCategories": [ "web" ] + }, + { + "name": "react-icons", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "react-redux", + "allowedCategories": [ "web" ] + }, + { + "name": "react-select", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "react-static", + "allowedCategories": [ "web" ] + }, + { + "name": "react-static-plugin-emotion", + "allowedCategories": [ "web" ] + }, + { + "name": "react-static-plugin-reach-router", + "allowedCategories": [ "web" ] + }, + { + "name": "react-static-plugin-sitemap", + "allowedCategories": [ "web" ] + }, + { + "name": "react-static-plugin-source-filesystem", + "allowedCategories": [ "web" ] + }, + { + "name": "react-static-plugin-typescript", + "allowedCategories": [ "web" ] + }, + { + "name": "react-transition-group", + "allowedCategories": [ "web" ] + }, + { + "name": "react-universal-component", + "allowedCategories": [ "web" ] + }, + { + "name": "redux", + "allowedCategories": [ "web" ] + }, + { + "name": "redux-persist", + "allowedCategories": [ "web" ] + }, + { + "name": "regenerator-runtime", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "resize-observer-polyfill", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "resolve", + "allowedCategories": [ "web" ] + }, + { + "name": "rimraf", + "allowedCategories": [ "tools" ] + }, + { + "name": "rocksdb", + "allowedCategories": [ "production" ] + }, + { + "name": "rollup", + "allowedCategories": [ "tools" ] + }, + { + "name": "rollup-plugin-string", + "allowedCategories": [ "tools" ] + }, + { + "name": "rollup-plugin-typescript2", + "allowedCategories": [ "tools" ] + }, + { + "name": "rxjs", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "rxjs-tslint-rules", + "allowedCategories": [ "tools" ] + }, + { + "name": "safe-stable-stringify", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "schema-utils", + "allowedCategories": [ "production" ] + }, + { + "name": "scrypt-js", + "allowedCategories": [ "production" ] + }, + { + "name": "semver", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "serve", + "allowedCategories": [ "tools", "web" ] + }, + { + "name": "slugify", + "allowedCategories": [ "web" ] + }, + { + "name": "source-map", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "source-map-support", + "allowedCategories": [ "production", "web" ] + }, + { + "name": "stats-webpack-plugin", + "allowedCategories": [ "tools" ] + }, + { + "name": "styled-tools", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "synchronized-promise", + "allowedCategories": [ "production" ] + }, + { + "name": "tapable", + "allowedCategories": [ "production" ] + }, + { + "name": "tar", + "allowedCategories": [ "web" ] + }, + { + "name": "terser-webpack-plugin", + "allowedCategories": [ "tools" ] + }, + { + "name": "thread-loader", + "allowedCategories": [ "tools" ] + }, + { + "name": "through", + "allowedCategories": [ "production" ] + }, + { + "name": "through2", + "allowedCategories": [ "tools" ] + }, + { + "name": "tmp", + "allowedCategories": [ "tools" ] + }, + { + "name": "toposort", + "allowedCategories": [ "production" ] + }, + { + "name": "trackjs", + "allowedCategories": [ "production" ] + }, + { + "name": "ts-jest", + "allowedCategories": [ "tools" ] + }, + { + "name": "ts-loader", + "allowedCategories": [ "tools" ] + }, + { + "name": "ts-node", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "tslib", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "tslint", + "allowedCategories": [ "production", "tools" ] + }, + { + "name": "tslint-clean-code", + "allowedCategories": [ "tools" ] + }, + { + "name": "tslint-config-prettier", + "allowedCategories": [ "tools" ] + }, + { + "name": "tslint-consistent-codestyle", + "allowedCategories": [ "tools" ] + }, + { + "name": "tslint-immutable", + "allowedCategories": [ "tools" ] + }, + { + "name": "tslint-microsoft-contrib", + "allowedCategories": [ "tools" ] + }, + { + "name": "tslint-sonarts", + "allowedCategories": [ "tools" ] + }, + { + "name": "typescript", + "allowedCategories": [ "production", "tools", "web" ] + }, + { + "name": "typescript-fsa", + "allowedCategories": [ "web" ] + }, + { + "name": "typescript-fsa-reducers", + "allowedCategories": [ "web" ] + }, + { + "name": "url-loader", + "allowedCategories": [ "tools" ] + }, + { + "name": "webpack", + "allowedCategories": [ "tools", "web" ] + }, + { + "name": "webpack-bundle-analyzer", + "allowedCategories": [ "tools" ] + }, + { + "name": "webpack-dev-server", + "allowedCategories": [ "tools" ] + }, + { + "name": "webpack-node-externals", + "allowedCategories": [ "tools" ] + }, + { + "name": "webpack-stream", + "allowedCategories": [ "tools" ] + }, + { + "name": "webpackbar", + "allowedCategories": [ "tools" ] + }, + { + "name": "wif", + "allowedCategories": [ "production" ] + }, + { + "name": "workbox-webpack-plugin", + "allowedCategories": [ "tools" ] + }, + { + "name": "yargs", + "allowedCategories": [ "production", "tools" ] + }, + { + "name": "zone.js", + "allowedCategories": [ "production" ] + } + ] +} diff --git a/common/config/rush/command-line.json b/common/config/rush/command-line.json new file mode 100644 index 0000000000..6fe42b25f8 --- /dev/null +++ b/common/config/rush/command-line.json @@ -0,0 +1,485 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/command-line.schema.json", + "commands": [ + { + "commandKind": "global", + "name": "link-root", + "summary": "Copy node_modules to root (for prod website only)", + "description": "react-static errors in production mode if it doesn't find a root node_modules, this is a workaround for now", + "safeForSimultaneousRushProcesses": true, + "shellCommand": "cp -r ./common/temp/node_modules ./node_modules" + }, + { + "commandKind": "global", + "name": "unlink-root", + "summary": "Remove the root node_modules copy", + "description": "After finishing production website work you need to unlink the root node_modules", + "safeForSimultaneousRushProcesses": true, + "shellCommand": "rm -rf ./node_modules" + }, + { + "commandKind": "global", + "name": "prune-node-modules", + "summary": "Prune common/temp/node_modules/@neo-one", + "description": "Prune common/temp/node_modules/@neo-one of all @neo-one packages (except ec-key) that are pulled down from NPM for @neotracker/core. Used before building the NEOβ€’ONE website", + "safeForSimultaneousRushProcesses": true, + "shellCommand": "node common/scripts/neo-one-prune.js" + }, + { + "commandKind": "global", + "name": "compile-workers-dev", + "summary": "Compile workers", + "description": "Compile the NEOβ€’ONE website workers", + "safeForSimultaneousRushProcesses": true, + "shellCommand": "cross-env NODE_OPTIONS=\"--max-old-space-size=3072\" node ./packages/neo-one-build-tools-web/dist/compile --bundle workers --watch" + }, + { + "commandKind": "global", + "name": "compile-overlay-dev", + "summary": "Compile overlay [dev]", + "description": "Compile the NEOβ€’ONE website overlay", + "safeForSimultaneousRushProcesses": true, + "shellCommand": "cross-env NODE_OPTIONS=\"--max-old-space-size=3072\" node ./packages/neo-one-build-tools-web/dist/compile --bundle overlay --watch" + }, + { + "commandKind": "global", + "name": "compile-test-runner-dev", + "summary": "Compile test-runner [dev]", + "description": "Compile the NEOβ€’ONE test-runner [dev]", + "safeForSimultaneousRushProcesses": true, + "shellCommand": "cross-env NODE_OPTIONS=\"--max-old-space-size=3072\" node ./packages/neo-one-build-tools-web/dist/compile --bundle testRunner --watch" + }, + { + "commandKind": "global", + "name": "compile-preview-dev", + "summary": "Compile preview [dev]", + "description": "Compile the NEOβ€’ONE editor preview", + "safeForSimultaneousRushProcesses": true, + "shellCommand": "cross-env NODE_OPTIONS=\"--max-old-space-size=3072\" node ./packages/neo-one-build-tools-web/dist/compile --bundle preview --watch" + }, + { + "commandKind": "global", + "name": "serve-server", + "summary": "Compile & serve editor server (only in dev mode)", + "description": "Build and run the NEOβ€’ONE editor server", + "safeForSimultaneousRushProcesses": true, + "shellCommand": "mkdir -p ./dist/server && touch ./dist/server/index.js && cross-env NODE_OPTIONS=\"--max-old-space-size=3072\" node ./packages/neo-one-build-tools-web/dist/compile --watch --bundle server" + }, + { + "commandKind": "global", + "name": "serve-static-dev", + "summary": "Build and serve static site [dev]", + "description": "Build and serve NEOβ€’ONE website with React Static [dev]", + "safeForSimultaneousRushProcesses": true, + "shellCommand": "cross-env NODE_OPTIONS=\"--max-old-space-size=6144\" TS_NODE_PROJECT=./packages/neo-one-build-tools/includes/build-configs/tsconfig.es2017.cjs.json react-static start --config ./packages/neo-one-website/static.config.js" + }, + { + "commandKind": "global", + "name": "compile-website-dev", + "summary": "Compile workers & overlay bundles [dev]", + "description": "Compile the workers and overlay bundles [dev]", + "safeForSimultaneousRushProcesses": true, + "shellCommand": "concurrently -n 'workers,overlay' --kill-others-on-fail \"rush compile-workers-dev\" \"rush compile-overlay-dev\"" + }, + { + "commandKind": "global", + "name": "run-website-dev", + "summary": "Run website in dev mode (run compile-website-dev first)", + "description": "Run the entire NEOβ€’ONE website [dev]", + "safeForSimultaneousRushProcesses": true, + "shellCommand": "concurrently -n 'preview,testRunner,server,static' --kill-others-on-fail \"rush compile-preview-dev\" \"rush compile-test-runner-dev\" \"rush serve-server\" \"rush serve-static-dev\"" + }, + { + "commandKind": "global", + "name": "compile-workers-prod", + "summary": "Compile workers [prod]", + "description": "Compile the NEOβ€’ONE website workers", + "safeForSimultaneousRushProcesses": true, + "shellCommand": "cross-env NEO_ONE_CACHE=true NEO_ONE_PROD=true NODE_OPTIONS=\"--max-old-space-size=3072\" node ./packages/neo-one-build-tools-web/dist/compile --bundle workers" + }, + { + "commandKind": "global", + "name": "compile-overlay-prod", + "summary": "Compile overlay [dev]", + "description": "Compile the NEOβ€’ONE website overlay", + "safeForSimultaneousRushProcesses": true, + "shellCommand": "cross-env NEO_ONE_CACHE=true NEO_ONE_PROD=true NODE_OPTIONS=\"--max-old-space-size=3072\" node ./packages/neo-one-build-tools-web/dist/compile --bundle overlay" + }, + { + "commandKind": "global", + "name": "serve-preview-prod", + "summary": "Compile & serve preview [prod]", + "description": "Compile and serve the NEOβ€’ONE editor preview [prod]", + "safeForSimultaneousRushProcesses": true, + "shellCommand": "cross-env NEO_ONE_CACHE=true NEO_ONE_PROD=true NODE_OPTIONS=\"--max-old-space-size=3072\" node ./packages/neo-one-build-tools-web/dist/compile --bundle preview && serve dist/preview -p 8080" + }, + { + "commandKind": "global", + "name": "serve-test-runner-prod", + "summary": "Compile & serve test-runner [prod]", + "description": "Compile and serve the NEOβ€’ONE test-runner [prod]", + "safeForSimultaneousRushProcesses": true, + "shellCommand": "cross-env NEO_ONE_CACHE=true NEO_ONE_PROD=true NODE_OPTIONS=\"--max-old-space-size=3072\" node ./packages/neo-one-build-tools-web/dist/compile --bundle testRunner && serve dist/testRunner -p 8081" + }, + { + "commandKind": "global", + "name": "serve-static-prod", + "summary": "Build and serve static with React Static and serve pkg", + "description": "Build and serve NEOβ€’ONE website with React Static and serve pkg", + "safeForSimultaneousRushProcesses": true, + "shellCommand": "rm -rf ./packages/neo-one-website/publicOut && cp -r ./dist/workers ./packages/neo-one-website/publicOut && cp -r ./packages/neo-one-website/public/* ./packages/neo-one-website/publicOut && cross-env NEO_ONE_STAGING=true NEO_ONE_CACHE=true NODE_OPTIONS=\"--max-old-space-size=6144\" TS_NODE_PROJECT=./packages/neo-one-build-tools/includes/build-configs/tsconfig.es2017.cjs.json react-static build --staging --config ./packages/neo-one-website/static.config.js && serve ./packages/neo-one-website/dist -p 3000" + }, + { + "commandKind": "global", + "name": "compile-website-prod", + "summary": "Compile workers & overlay bundles [prod]", + "description": "Compile the workers and overlay bundles [prod]", + "safeForSimultaneousRushProcesses": true, + "shellCommand": "concurrently -n 'workers,overlay' --kill-others-on-fail \"rush compile-workers-prod\" \"rush compile-overlay-prod\"" + }, + { + "commandKind": "global", + "name": "run-website-prod", + "summary": "Run entire website in prod (run compile-website-prod & link-root before, run unlink-root when done)", + "description": "Run the entire NEOβ€’ONE website [prod]", + "safeForSimultaneousRushProcesses": true, + "shellCommand": "concurrently -n 'preview,testRunner,server,static' --kill-others-on-fail \"rush serve-preview-prod\" \"rush serve-test-runner-prod\" \"rush serve-server\" \"rush serve-static-prod\"" + }, + { + "commandKind": "global", + "name": "compile-all-live", + "summary": "Only compile all website pieces for live deployment to NOW", + "description": "Compile all website pieces and do nothing else", + "safeForSimultaneousRushProcesses": true, + "shellCommand": "rm -rf ./dist && rm -rf ./packages/neo-one-website/dist && rush compile-website-prod && node ./packages/neo-one-build-tools-web/dist/compile --bundle testRunner && node ./packages/neo-one-build-tools-web/dist/compile --bundle server && node ./packages/neo-one-build-tools-web/dist/compile --bundle preview && rm -rf ./packages/neo-one-website/publicOut && cp -r ./dist/workers ./packages/neo-one-website/publicOut && cp -r ./packages/neo-one-website/public/* ./packages/neo-one-website/publicOut && cross-env NODE_OPTIONS=\"--max-old-space-size=6144\" TS_NODE_PROJECT=./packages/neo-one-build-tools/includes/build-configs/tsconfig.es2017.cjs.json react-static build --config ./packages/neo-one-website/static.config.js && sh ./scripts/rm-cruft" + }, + { + "commandKind": "global", + "name": "deploy-all-live", + "summary": "Deploy all website pieces to NOW (run compile-all-live first)", + "description": "Deploy static, test-runner, preview, and server each to NOW", + "safeForSimultaneousRushProcesses": true, + "shellCommand": "rush compile-all-live && rush deploy-static-live && rush deploy-test-runner-live && rush deploy-preview-live && rush deploy-server-live" + }, + { + "commandKind": "global", + "name": "deploy-static-live", + "summary": "Deploy website front end to NOW", + "description": "Deploy website front end to NOW", + "safeForSimultaneousRushProcesses": true, + "shellCommand": "cp ./packages/neo-one-build-tools-web/includes/now/static.now.json ./packages/neo-one-website/dist/now.json && cd ./packages/neo-one-website/dist && now --target production" + }, + { + "commandKind": "global", + "name": "deploy-test-runner-live", + "summary": "Deploy test runner to NOW", + "description": "Deploy the test runner to now", + "safeForSimultaneousRushProcesses": true, + "shellCommand": "cp ./packages/neo-one-build-tools-web/includes/now/testRunner.now.json ./dist/testRunner/now.json && cd ./dist/testRunner && now --target production" + }, + { + "commandKind": "global", + "name": "deploy-preview-live", + "summary": "Deploy preview to NOW", + "description": "Deploy the preview to NOW", + "safeForSimultaneousRushProcesses": true, + "shellCommand": "cp -r ./dist/overlay/* ./dist/preview && cp ./packages/neo-one-build-tools-web/includes/now/preview.now.json ./dist/preview/now.json && cd ./dist/preview && now --target production" + }, + { + "commandKind": "global", + "name": "deploy-server-live", + "summary": "Deploy the server to NOW", + "description": "Deploy the server to NOW", + "safeForSimultaneousRushProcesses": true, + "shellCommand": "cp ./packages/neo-one-build-tools-web/includes/now/server.now.json ./dist/server/now.json && cd ./dist/server && now --target production" + }, + { + "commandKind": "global", + "name": "test", + "summary": "Unit test runner", + "description": "Run all jest unit tests", + "safeForSimultaneousRushProcesses": false, + "shellCommand": "cross-env NODE_OPTIONS=\"--max-old-space-size=3072\" jest --config ./packages/neo-one-build-tests/jest/unit.js" + }, + { + "commandKind": "global", + "name": "test-ci", + "summary": "Unit test runner (CI)", + "description": "Run all jest unit tests using the CI config", + "shellCommand": "cross-env NODE_OPTIONS=\"--max-old-space-size=3072\" jest --config ./packages/neo-one-build-tests/jest/unit-ci.js --ci -w 2" + }, + { + "commandKind": "global", + "name": "e2e", + "summary": "e2e test runner", + "description": "Run all jest e2e tests", + "safeForSimultaneousRushProcesses": false, + "shellCommand": "cross-env NODE_OPTIONS=\"--max-old-space-size=3072\" jest --config ./packages/neo-one-build-tests/jest/e2e.js" + }, + { + "commandKind": "global", + "name": "e2e-ci", + "summary": "e2e test runner (CI)", + "description": "Run all jest e2e tests using the CI config", + "safeForSimultaneousRushProcesses": true, + "shellCommand": "cross-env NODE_OPTIONS=\"--max-old-space-size=3072\" jest --config ./packages/neo-one-build-tests/jest/e2e-ci.js --ci --runInBand" + }, + { + "commandKind": "global", + "name": "e2e-ci:coverage", + "summary": "e2e test runner (CI)", + "description": "Run all jest e2e tests using the CI config with nyc coverage", + "safeForSimultaneousRushProcesses": false, + "shellCommand": "nyc --reporter json cross-env NODE_OPTIONS=\"--max-old-space-size=3072\" jest --config ./packages/neo-one-build-tests/jest/e2e-ci.js --ci --runInBand" + }, + { + "commandKind": "global", + "name": "cypress-run", + "summary": "Run Cypress command", + "description": "Base command for running Cypress tests, used by the runCypress.ts script", + "safeForSimultaneousRushProcesses": false, + "shellCommand": "cypress run" + }, + { + "commandKind": "global", + "name": "test-cypress", + "summary": "Run Cypress tests. Run rush link-root/ rush unlink-root before/after (--express for express test, --local for shorter build wait)", + "description": "After finishing production website work you need to unlink the root node_modules", + "safeForSimultaneousRushProcesses": true, + "shellCommand": "node ./packages/neo-one-build-tools-web/dist/runCypress" + }, + { + "commandKind": "global", + "name": "upload-coverage", + "summary": "Upload coverage (CI)", + "description": "Upload codecov coverage reports from unit tests", + "safeForSimultaneousRushProcesses": false, + "shellCommand": "codecov -f coverage/coverage-final.json" + }, + { + "commandKind": "global", + "name": "prepare", + "summary": "Prepare packages for NPM release", + "description": "Copy License/README to packages for NPM release", + "safeForSimultaneousRushProcesses": false, + "shellCommand": "cross-env NODE_OPTIONS=\"--max-old-space-size=6144\" node ./packages/neo-one-build-tools/bin/neo-one-prepare.js" + }, + { + "commandKind": "global", + "name": "clean", + "summary": "Clean up NEOβ€’ONE packages", + "description": "Remove build logs from all packages (and optionally dist/* and .rush/* directories)", + "safeForSimultaneousRushProcesses": false, + "shellCommand": "cross-env NODE_OPTIONS=\"--max-old-space-size=6144\" node ./packages/neo-one-build-tools/bin/neo-one-clean.js" + }, + { + "commandKind": "global", + "name": "nit", + "summary": "Find issues with formatting", + "description": "Run prettier with the `--list-different` parameter for CI", + "safeForSimultaneousRushProcesses": false, + "shellCommand": "prettier --config .prettierrc --list-different \"packages/*/src/**/*.{ts,tsx}\"" + }, + { + "commandKind": "global", + "name": "prettier", + "summary": "Run prettier on the repo", + "description": "Run prettier across packages typescript files", + "safeForSimultaneousRushProcesses": false, + "shellCommand": "prettier --config .prettierrc --write \"packages/*/src/**/*.{ts,tsx}\"" + }, + { + "commandKind": "global", + "name": "check-type-deps", + "summary": "Run check.ts script", + "description": "Run check.ts script", + "safeForSimultaneousRushProcesses": true, + "shellCommand": "node ./packages/neo-one-build-tools/dist/check" + }, + { + "commandKind": "bulk", + "name": "tsc", + "summary": "Run tsc --noEmit in each package", + "description": "Run tsc --noEmit in each package using that package's tsconfig", + "incremental": true, + "safeForSimultaneousRushProcesses": false, + "ignoreDependencyOrder": true, + "enableParallelism": true, + "ignoreMissingScript": true + }, + { + "commandKind": "bulk", + "name": "lint:staged", + "summary": "Run prettier/tslint across staged files", + "description": "Run `lint:staged` across packages", + "safeForSimultaneousRushProcesses": true, + "ignoreDependencyOrder": true, + "enableParallelism": true, + "ignoreMissingScript": true + }, + { + "commandKind": "bulk", + "name": "lint", + "summary": "Run tslint for every package", + "description": "Run tslint for every file in package", + "safeForSimultaneousRushProcesses": true, + "ignoreDependencyOrder": true, + "enableParallelism": true, + "ignoreMissingScript": true + } + ], + "parameters": [ + { + "parameterKind": "flag", + "longName": "--express", + "shortName": "-e", + "description": "flag to enable Cypress' express test", + "associatedCommands": [ + "test-cypress" + ] + }, + { + "parameterKind": "flag", + "longName": "--local", + "shortName": "-l", + "description": "flag to enable a shorter wait time for building the website when running Cypress", + "associatedCommands": [ + "test-cypress" + ] + }, + { + "parameterKind": "string", + "longName": "--browser", + "argumentName": "BROWSER", + "description": "specify the browser for Cypress to use", + "associatedCommands": [ + "cypress-run" + ] + }, + { + "parameterKind": "string", + "longName": "--spec", + "argumentName": "SPEC", + "description": "specify the tests that Cypress should run", + "associatedCommands": [ + "cypress-run" + ] + }, + { + "parameterKind": "flag", + "longName": "--coverage", + "shortName": "-c", + "description": "flag to enable coverage collection for jest", + "associatedCommands": [ + "test", + "test-ci" + ] + }, + { + "parameterKind": "flag", + "longName": "--update-snapshot", + "shortName": "-u", + "description": "update snapshot tests", + "associatedCommands": [ + "test", + "e2e" + ] + }, + { + "parameterKind": "flag", + "longName": "--debug", + "shortName": "-d", + "description": "enables logging/debug mode for associated command", + "associatedCommands": [ + "clean" + ] + }, + { + "parameterKind": "flag", + "longName": "--full", + "shortName": "-f", + "description": "enables cleaning of dist/* and rush/* directories", + "associatedCommands": [ + "clean" + ] + }, + { + "parameterKind": "flag", + "longName": "--detect-open-handles", + "description": "pass through of jest's detectOpenHandle flag", + "associatedCommands": [ + "test", + "test-ci", + "e2e", + "e2e-ci" + ] + }, + { + "parameterKind": "string", + "longName": "--test-path-pattern", + "shortName": "-t", + "argumentName": "PATTERN", + "description": "jest pattern matching parameter", + "associatedCommands": [ + "test", + "test-ci", + "e2e", + "e2e-ci", + "e2e-ci:coverage" + ] + }, + { + "parameterKind": "string", + "longName": "--max-workers", + "shortName": "-w", + "argumentName": "PATTERN", + "description": "jest maximum concurrent worker flag", + "associatedCommands": [ + "e2e" + ] + }, + { + "parameterKind": "choice", + "longName": "--format", + "shortName": "-b", + "description": "specify an output build format (main, esm, browserify)", + "associatedCommands": [ + "build", + "rebuild" + ], + "alternatives": [ + { + "name": "main", + "description": "the main output format (cjs)" + }, + { + "name": "next", + "description": "esnext module format (esm)" + }, + { + "name": "browserify", + "description": "special browserify format" + } + ] + }, + { + "parameterKind": "choice", + "longName": "--flags", + "shortName": "-F", + "description": "add a code coverage flag", + "associatedCommands": [ + "upload-coverage" + ], + "alternatives": [ + { + "name": "unit", + "description": "flag for unit test coverage" + }, + { + "name": "e2e", + "description": "flag for e2e test coverage" + } + ] + } + ] +} diff --git a/common/config/rush/common-versions.json b/common/config/rush/common-versions.json new file mode 100644 index 0000000000..7e77f5e653 --- /dev/null +++ b/common/config/rush/common-versions.json @@ -0,0 +1,26 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/common-versions.schema.json", + "preferredVersions": { + "@types/node": "^12.7.7", + "concurrently": "^4.1.2", + "cross-env": "^6.0.0", + "cypress": "3.4.1", + "cypress-plugin-retries": "^1.2.2", + "json": "^9.0.6", + "husky": "^3.1.0", + "lint-staged": "^9.4.1", + "rxjs-tslint-rules": "^4.24.3", + "serve": "^11.2.0", + "tslint": "^5.20.0", + "tslint-clean-code": "^0.2.9", + "tslint-config-prettier": "^1.18.0", + "tslint-consistent-codestyle": "^1.15.1", + "tslint-immutable": "^6.0.1", + "tslint-microsoft-contrib": "^6.2.0", + "tslint-sonarts": "^1.9.0", + "typescript": "3.9.5" + }, + "implicitlyPreferredVersions": true, + + "allowedAlternativeVersions": {} +} diff --git a/common/config/rush/nonbrowser-approved-packages.json b/common/config/rush/nonbrowser-approved-packages.json new file mode 100644 index 0000000000..b409b010ab --- /dev/null +++ b/common/config/rush/nonbrowser-approved-packages.json @@ -0,0 +1,5 @@ +// DO NOT ADD COMMENTS IN THIS FILE. They will be lost when the Rush tool resaves it. +{ + "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/approved-packages.schema.json", + "packages": [] +} diff --git a/common/config/rush/version-policies.json b/common/config/rush/version-policies.json new file mode 100644 index 0000000000..bf4669ad41 --- /dev/null +++ b/common/config/rush/version-policies.json @@ -0,0 +1,20 @@ +[ + { + "definitionName": "lockStepVersion", + "policyName": "CoreReleasePolicy", + "version": "2.7.0", + "nextBump": "minor" + }, + { + "definitionName": "lockStepVersion", + "policyName": "NodeReleasePolicy", + "version": "2.7.0", + "nextBump": "minor" + }, + { + "definitionName": "lockStepVersion", + "policyName": "WebReleasePolicy", + "version": "2.7.0", + "nextBump": "minor" + } +] diff --git a/yarn.lock b/common/config/rush/yarn.lock similarity index 70% rename from yarn.lock rename to common/config/rush/yarn.lock index d4a045d35c..306650dcdd 100644 --- a/yarn.lock +++ b/common/config/rush/yarn.lock @@ -2,72 +2,62 @@ # yarn lockfile v1 -"@angular/core@^8.2.4": - version "8.2.11" - resolved "https://registry.yarnpkg.com/@angular/core/-/core-8.2.11.tgz#85d1feca5ab7423ddc7468dd03ebe7c1ed7f3f06" - integrity sha512-TRfoJPcTjjiFh1dquqDc7LDI4sqD/LPCC9y2HP4r8644xJawhPJ0Ms6gWaeobCeP2k0vKsjrFmbPWeolOig/YA== +"@angular/core@^8.2.7": + version "8.2.14" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-8.2.14.tgz#35566f5b19480369229477e7e0e0fde740bd5204" + integrity sha512-zeePkigi+hPh3rN7yoNENG/YUBUsIvUXdxx+AZq+QPaFeKEA2FBSrKn36ojHFrdJUjKzl0lPMEiGC2b6a6bo6g== dependencies: tslib "^1.9.0" "@babel/cli@^7.5.5": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.6.4.tgz#9b35a4e15fa7d8f487418aaa8229c8b0bc815f20" - integrity sha512-tqrDyvPryBM6xjIyKKUwr3s8CzmmYidwgdswd7Uc/Cv0ogZcuS1TYQTLx/eWKP3UbJ6JxZAiYlBZabXm/rtRsQ== + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.8.4.tgz#505fb053721a98777b2b175323ea4f090b7d3c1c" + integrity sha512-XXLgAm6LBbaNxaGhMAznXXaxtCWfuv6PIDJ9Alsy9JYTOh+j2jJz+L/162kkfU1j/pTSxK1xGmlwI4pdIMkoag== dependencies: - commander "^2.8.1" + commander "^4.0.1" convert-source-map "^1.1.0" fs-readdir-recursive "^1.1.0" glob "^7.0.0" lodash "^4.17.13" - mkdirp "^0.5.1" - output-file-sync "^2.0.0" + make-dir "^2.1.0" slash "^2.0.0" source-map "^0.5.0" optionalDependencies: chokidar "^2.1.8" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" - integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== - dependencies: - "@babel/highlight" "^7.0.0" - -"@babel/core@>=7.2.2", "@babel/core@^7.0.1", "@babel/core@^7.1.0": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.5.5.tgz#17b2686ef0d6bc58f963dddd68ab669755582c30" - integrity sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.5.5" - "@babel/helpers" "^7.5.5" - "@babel/parser" "^7.5.5" - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.5.5" - "@babel/types" "^7.5.5" - convert-source-map "^1.1.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" + integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== + dependencies: + "@babel/highlight" "^7.8.3" -"@babel/core@^7.5.5": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.4.tgz#6ebd9fe00925f6c3e177bb726a188b5f578088ff" - integrity sha512-Rm0HGw101GY8FTzpWSyRbki/jzq+/PkNQJ+nSulrdY6gFGOsNseCqD6KHRYe2E+EdzuBdr2pxCp6s4Uk6eJ+XQ== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.6.4" - "@babel/helpers" "^7.6.2" - "@babel/parser" "^7.6.4" - "@babel/template" "^7.6.0" - "@babel/traverse" "^7.6.3" - "@babel/types" "^7.6.3" - convert-source-map "^1.1.0" +"@babel/compat-data@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.9.6.tgz#3f604c40e420131affe6f2c8052e9a275ae2049b" + integrity sha512-5QPTrNen2bm7RBc7dsOmcA5hbrS4O2Vhmk5XOL4zWW/zD/hV0iinpefDlkm+tBBy8kDtFaaeEvmAqt+nURAV2g== + dependencies: + browserslist "^4.11.1" + invariant "^2.2.4" + semver "^5.5.0" + +"@babel/core@^7.0.1", "@babel/core@^7.1.0", "@babel/core@^7.5.5", "@babel/core@^7.6.2": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.6.tgz#d9aa1f580abf3b2286ef40b6904d390904c63376" + integrity sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.9.6" + "@babel/helper-module-transforms" "^7.9.0" + "@babel/helpers" "^7.9.6" + "@babel/parser" "^7.9.6" + "@babel/template" "^7.8.6" + "@babel/traverse" "^7.9.6" + "@babel/types" "^7.9.6" + convert-source-map "^1.7.0" debug "^4.1.0" - json5 "^2.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" lodash "^4.17.13" resolve "^1.3.2" semver "^5.4.1" @@ -84,218 +74,233 @@ source-map "^0.5.0" trim-right "^1.0.1" -"@babel/generator@^7.4.0": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.5.5.tgz#873a7f936a3c89491b43536d12245b626664e3cf" - integrity sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ== - dependencies: - "@babel/types" "^7.5.5" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" - trim-right "^1.0.1" - -"@babel/generator@^7.5.5", "@babel/generator@^7.6.3", "@babel/generator@^7.6.4": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.4.tgz#a4f8437287bf9671b07f483b76e3bb731bc97671" - integrity sha512-jsBuXkFoZxk0yWLyGI9llT9oiQ2FeTASmRFE32U+aaDTfoE92t78eroO7PTpU/OrYq38hlcDM6vbfLDaOLy+7w== +"@babel/generator@^7.4.0", "@babel/generator@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.6.tgz#5408c82ac5de98cda0d77d8124e99fa1f2170a43" + integrity sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ== dependencies: - "@babel/types" "^7.6.3" + "@babel/types" "^7.9.6" jsesc "^2.5.1" lodash "^4.17.13" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" - integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q== +"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee" + integrity sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.8.3" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" - integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz#c84097a427a061ac56a1c30ebf54b7b22d241503" + integrity sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw== dependencies: - "@babel/helper-explode-assignable-expression" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/helper-explode-assignable-expression" "^7.8.3" + "@babel/types" "^7.8.3" -"@babel/helper-builder-react-jsx@^7.3.0": - version "7.3.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz#a1ac95a5d2b3e88ae5e54846bf462eeb81b318a4" - integrity sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw== +"@babel/helper-builder-react-jsx-experimental@^7.9.0": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.5.tgz#0b4b3e04e6123f03b404ca4dfd6528fe6bb92fe3" + integrity sha512-HAagjAC93tk748jcXpZ7oYRZH485RCq/+yEv9SIWezHRPv9moZArTnkUNciUNzvwHUABmiWKlcxJvMcu59UwTg== dependencies: - "@babel/types" "^7.3.0" - esutils "^2.0.0" + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-module-imports" "^7.8.3" + "@babel/types" "^7.9.5" -"@babel/helper-call-delegate@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43" - integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ== +"@babel/helper-builder-react-jsx@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz#16bf391990b57732700a3278d4d9a81231ea8d32" + integrity sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw== dependencies: - "@babel/helper-hoist-variables" "^7.4.4" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/types" "^7.9.0" -"@babel/helper-create-class-features-plugin@^7.5.5", "@babel/helper-create-class-features-plugin@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.6.0.tgz#769711acca889be371e9bc2eb68641d55218021f" - integrity sha512-O1QWBko4fzGju6VoVvrZg0RROCVifcLxiApnGP3OWfWzvxRZFCoBD81K5ur5e3bVY2Vf/5rIJm8cqPKn8HUJng== +"@babel/helper-compilation-targets@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.9.6.tgz#1e05b7ccc9d38d2f8b40b458b380a04dcfadd38a" + integrity sha512-x2Nvu0igO0ejXzx09B/1fGBxY9NXQlBW2kZsSxCJft+KHN8t9XWzIvFxtPHnBOAXpVsdxZKZFbRUC8TsNKajMw== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-member-expression-to-functions" "^7.5.5" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.5.5" - "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/compat-data" "^7.9.6" + browserslist "^4.11.1" + invariant "^2.2.4" + levenary "^1.1.1" + semver "^5.5.0" -"@babel/helper-define-map@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz#3dec32c2046f37e09b28c93eb0b103fd2a25d369" - integrity sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg== - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/types" "^7.5.5" +"@babel/helper-create-class-features-plugin@^7.8.3", "@babel/helper-create-class-features-plugin@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.9.6.tgz#965c8b0a9f051801fd9d3b372ca0ccf200a90897" + integrity sha512-6N9IeuyHvMBRyjNYOMJHrhwtu4WJMrYf8hVbEHD3pbbbmNOk1kmXSQs7bA4dYDUaIx4ZEzdnvo6NwC3WHd/Qow== + dependencies: + "@babel/helper-function-name" "^7.9.5" + "@babel/helper-member-expression-to-functions" "^7.8.3" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-replace-supers" "^7.9.6" + "@babel/helper-split-export-declaration" "^7.8.3" + +"@babel/helper-create-regexp-features-plugin@^7.8.3", "@babel/helper-create-regexp-features-plugin@^7.8.8": + version "7.8.8" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz#5d84180b588f560b7864efaeea89243e58312087" + integrity sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-regex" "^7.8.3" + regexpu-core "^4.7.0" + +"@babel/helper-define-map@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz#a0655cad5451c3760b726eba875f1cd8faa02c15" + integrity sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g== + dependencies: + "@babel/helper-function-name" "^7.8.3" + "@babel/types" "^7.8.3" lodash "^4.17.13" -"@babel/helper-explode-assignable-expression@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" - integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA== +"@babel/helper-explode-assignable-expression@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz#a728dc5b4e89e30fc2dfc7d04fa28a930653f982" + integrity sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw== dependencies: - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" -"@babel/helper-function-name@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" - integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== +"@babel/helper-function-name@^7.8.3", "@babel/helper-function-name@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c" + integrity sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw== dependencies: - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/types" "^7.9.5" -"@babel/helper-get-function-arity@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" - integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== +"@babel/helper-get-function-arity@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" + integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.8.3" -"@babel/helper-hoist-variables@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a" - integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w== +"@babel/helper-hoist-variables@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz#1dbe9b6b55d78c9b4183fc8cdc6e30ceb83b7134" + integrity sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg== dependencies: - "@babel/types" "^7.4.4" + "@babel/types" "^7.8.3" -"@babel/helper-member-expression-to-functions@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz#1fb5b8ec4453a93c439ee9fe3aeea4a84b76b590" - integrity sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA== +"@babel/helper-member-expression-to-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" + integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA== dependencies: - "@babel/types" "^7.5.5" + "@babel/types" "^7.8.3" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.0.0-beta.49": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" - integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A== +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" + integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.8.3" -"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz#f84ff8a09038dcbca1fd4355661a500937165b4a" - integrity sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw== +"@babel/helper-module-transforms@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" + integrity sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA== dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/template" "^7.4.4" - "@babel/types" "^7.5.5" + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.6" + "@babel/helper-simple-access" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/template" "^7.8.6" + "@babel/types" "^7.9.0" lodash "^4.17.13" -"@babel/helper-optimise-call-expression@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" - integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g== +"@babel/helper-optimise-call-expression@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" + integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.8.3" -"@babel/helper-plugin-utils@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" - integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" + integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== -"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351" - integrity sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw== +"@babel/helper-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965" + integrity sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ== dependencies: lodash "^4.17.13" -"@babel/helper-remap-async-to-generator@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" - integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-wrap-function" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-replace-supers@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz#f84ce43df031222d2bad068d2626cb5799c34bc2" - integrity sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.5.5" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.5.5" - "@babel/types" "^7.5.5" - -"@babel/helper-simple-access@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" - integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w== - dependencies: - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-split-export-declaration@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" - integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== - dependencies: - "@babel/types" "^7.4.4" - -"@babel/helper-wrap-function@^7.1.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" - integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ== - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.2.0" - -"@babel/helpers@^7.5.5", "@babel/helpers@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.6.2.tgz#681ffe489ea4dcc55f23ce469e58e59c1c045153" - integrity sha512-3/bAUL8zZxYs1cdX2ilEE0WobqbCmKWr/889lf2SS0PpDcpEIY8pb1CCyz0pEcX3pEb+MCbks1jIokz2xLtGTA== - dependencies: - "@babel/template" "^7.6.0" - "@babel/traverse" "^7.6.2" - "@babel/types" "^7.6.0" - -"@babel/highlight@^7.0.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" - integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== - dependencies: +"@babel/helper-remap-async-to-generator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz#273c600d8b9bf5006142c1e35887d555c12edd86" + integrity sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-wrap-function" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-replace-supers@^7.8.3", "@babel/helper-replace-supers@^7.8.6", "@babel/helper-replace-supers@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz#03149d7e6a5586ab6764996cd31d6981a17e1444" + integrity sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.8.3" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/traverse" "^7.9.6" + "@babel/types" "^7.9.6" + +"@babel/helper-simple-access@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" + integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw== + dependencies: + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-split-export-declaration@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" + integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80" + integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g== + +"@babel/helper-wrap-function@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz#9dbdb2bb55ef14aaa01fe8c99b629bd5352d8610" + integrity sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ== + dependencies: + "@babel/helper-function-name" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helpers@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.6.tgz#092c774743471d0bb6c7de3ad465ab3d3486d580" + integrity sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw== + dependencies: + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.9.6" + "@babel/types" "^7.9.6" + +"@babel/highlight@^7.8.3": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" + integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ== + dependencies: + "@babel/helper-validator-identifier" "^7.9.0" chalk "^2.0.0" - esutils "^2.0.2" js-tokens "^4.0.0" "@babel/parser@7.0.0-beta.54": @@ -303,675 +308,643 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.0.0-beta.54.tgz#c01aa63b57c9c8dce8744796c81d9df121f20db4" integrity sha1-wBqmO1fJyNzodEeWyB2d8SHyDbQ= -"@babel/parser@^7.0.0", "@babel/parser@^7.4.4", "@babel/parser@^7.5.5", "@babel/parser@^7.6.0", "@babel/parser@^7.6.3", "@babel/parser@^7.6.4": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.4.tgz#cb9b36a7482110282d5cb6dd424ec9262b473d81" - integrity sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A== - -"@babel/parser@^7.1.0", "@babel/parser@^7.4.3": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.5.tgz#02f077ac8817d3df4a832ef59de67565e71cca4b" - integrity sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g== +"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.8.6", "@babel/parser@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.6.tgz#3b1bbb30dabe600cd72db58720998376ff653bc7" + integrity sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q== -"@babel/plugin-proposal-async-generator-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" - integrity sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ== +"@babel/plugin-proposal-async-generator-functions@^7.2.0", "@babel/plugin-proposal-async-generator-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz#bad329c670b382589721b27540c7d288601c6e6f" + integrity sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-remap-async-to-generator" "^7.8.3" + "@babel/plugin-syntax-async-generators" "^7.8.0" "@babel/plugin-proposal-class-properties@^7.5.0", "@babel/plugin-proposal-class-properties@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz#a974cfae1e37c3110e71f3c6a2e48b8e71958cd4" - integrity sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A== + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz#5e06654af5cd04b608915aada9b2a6788004464e" + integrity sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.5.5" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-create-class-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-proposal-dynamic-import@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz#e532202db4838723691b10a67b8ce509e397c506" - integrity sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw== +"@babel/plugin-proposal-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz#38c4fe555744826e97e2ae930b0fb4cc07e66054" + integrity sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" "@babel/plugin-proposal-export-default-from@^7.5.2": - version "7.5.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.5.2.tgz#2c0ac2dcc36e3b2443fead2c3c5fc796fb1b5145" - integrity sha512-wr9Itk05L1/wyyZKVEmXWCdcsp/e185WUNl6AfYZeEKYaUPPvHXRDqO5K1VH7/UamYqGJowFRuCv30aDYZawsg== + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.8.3.tgz#4cb7c2fdeaed490b60d9bfd3dc8a20f81f9c2e7c" + integrity sha512-PYtv2S2OdCdp7GSPDg5ndGZFm9DmWFvuLoS5nBxZCgOBggluLnhTScspJxng96alHQzPyrrHxvC9/w4bFuspeA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-export-default-from" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-export-default-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" - integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg== +"@babel/plugin-proposal-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz#da5216b238a98b58a1e05d6852104b10f9a70d6b" + integrity sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" -"@babel/plugin-proposal-numeric-separator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.2.0.tgz#646854daf4cd22fd6733f6076013a936310443ac" - integrity sha512-DohMOGDrZiMKS7LthjUZNNcWl8TAf5BZDwZAH4wpm55FuJTHgfqPGdibg7rZDmont/8Yg0zA03IgT6XLeP+4sg== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2" + integrity sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-numeric-separator" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" -"@babel/plugin-proposal-object-rest-spread@^7.5.5", "@babel/plugin-proposal-object-rest-spread@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz#8ffccc8f3a6545e9f78988b6bf4fe881b88e8096" - integrity sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw== +"@babel/plugin-proposal-numeric-separator@^7.2.0", "@babel/plugin-proposal-numeric-separator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz#5d6769409699ec9b3b68684cd8116cedff93bad8" + integrity sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" -"@babel/plugin-proposal-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" - integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g== +"@babel/plugin-proposal-object-rest-spread@^7.5.5", "@babel/plugin-proposal-object-rest-spread@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.6.tgz#7a093586fcb18b08266eb1a7177da671ac575b63" + integrity sha512-Ga6/fhGqA9Hj+y6whNpPv8psyaK5xzrQwSPsGPloVkvmH+PqW1ixdnfJ9uIO06OjQNYol3PMnfmJ8vfZtkzF+A== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.9.5" -"@babel/plugin-proposal-optional-chaining@^7.2.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.6.0.tgz#e9bf1f9b9ba10c77c033082da75f068389041af8" - integrity sha512-kj4gkZ6qUggkprRq3Uh5KP8XnE1MdIO0J7MhdDX8+rAbB6dJ2UrensGIS+0NPZAaaJ1Vr0PN6oLUgXMU1uMcSg== +"@babel/plugin-proposal-optional-catch-binding@^7.2.0", "@babel/plugin-proposal-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz#9dee96ab1650eed88646ae9734ca167ac4a9c5c9" + integrity sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-chaining" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.6.2.tgz#05413762894f41bfe42b9a5e80919bd575dcc802" - integrity sha512-NxHETdmpeSCtiatMRYWVJo7266rrvAC3DTeG5exQBIH/fMIUK7ejDNznBbn3HQl/o9peymRRg7Yqkx6PdUXmMw== +"@babel/plugin-proposal-optional-chaining@^7.2.0", "@babel/plugin-proposal-optional-chaining@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz#31db16b154c39d6b8a645292472b98394c292a58" + integrity sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.6.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" -"@babel/plugin-syntax-async-generators@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" - integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg== +"@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.8.3": + version "7.8.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz#ee3a95e90cdc04fe8cd92ec3279fa017d68a0d1d" + integrity sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-create-regexp-features-plugin" "^7.8.8" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-dynamic-import@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612" - integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w== +"@babel/plugin-syntax-async-generators@^7.8.0": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-export-default-from@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.2.0.tgz#edd83b7adc2e0d059e2467ca96c650ab6d2f3820" - integrity sha512-c7nqUnNST97BWPtoe+Ssi+fJukc9P9/JMZ71IOMNQWza2E+Psrd46N6AEvtw6pqK+gt7ChjXyrw4SPDO79f3Lw== +"@babel/plugin-syntax-dynamic-import@^7.2.0", "@babel/plugin-syntax-dynamic-import@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" - integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg== +"@babel/plugin-syntax-export-default-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.8.3.tgz#f1e55ce850091442af4ba9c2550106035b29d678" + integrity sha512-a1qnnsr73KLNIQcQlcQ4ZHxqqfBKM6iNQZW2OMTyxNbA2WC7SHWHtGVpFzWtQAuS2pspkWVzdEBXXx8Ik0Za4w== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-jsx@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7" - integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw== +"@babel/plugin-syntax-json-strings@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.2.0.tgz#7470fe070c2944469a756752a69a6963135018be" - integrity sha512-DroeVNkO/BnGpL2R7+ZNZqW+E24aR/4YWxP3Qb15d6lPU8KDzF8HlIUIRCOJRn4X77/oyW4mJY+7FHfY82NLtQ== +"@babel/plugin-syntax-jsx@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz#521b06c83c40480f1e58b4fd33b92eceb1d6ea94" + integrity sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" - integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c" - integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w== +"@babel/plugin-syntax-numeric-separator@^7.2.0", "@babel/plugin-syntax-numeric-separator@^7.8.0", "@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz#0e3fb63e09bea1b11e96467271c8308007e7c41f" + integrity sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-optional-chaining@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.2.0.tgz#a59d6ae8c167e7608eaa443fda9fa8fa6bf21dff" - integrity sha512-HtGCtvp5Uq/jH/WNUPkK6b7rufnCPLLlDAFN7cmACoIjaOOiXxUt3SswU5loHqrhtqTsa/WoLQ1OQ1AGuZqaWA== +"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-typescript@^7.2.0", "@babel/plugin-syntax-typescript@^7.3.3": - version "7.3.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz#a7cc3f66119a9f7ebe2de5383cce193473d65991" - integrity sha512-dGwbSMA1YhVS8+31CnPR7LB4pcbrzcV99wQzby4uAfrkZPYZlQ7ImwdpzLqi6Z6IL02b8IAL379CaMwo0x5Lag== +"@babel/plugin-syntax-optional-catch-binding@^7.2.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-transform-arrow-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" - integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg== +"@babel/plugin-syntax-optional-chaining@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-transform-async-to-generator@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz#89a3848a0166623b5bc481164b5936ab947e887e" - integrity sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg== +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz#3acdece695e6b13aaf57fc291d1a800950c71391" + integrity sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g== dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-block-scoped-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" - integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w== +"@babel/plugin-syntax-typescript@^7.3.3", "@babel/plugin-syntax-typescript@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.8.3.tgz#c1f659dda97711a569cef75275f7e15dcaa6cabc" + integrity sha512-GO1MQ/SGGGoiEXY0e0bSpHimJvxqB7lktLLIq2pv8xG7WZ8IMEle74jIe1FhprHBWjwjZtXHkycDLZXIWM5Wfg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-block-scoping@^7.5.5", "@babel/plugin-transform-block-scoping@^7.6.3": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.3.tgz#6e854e51fbbaa84351b15d4ddafe342f3a5d542a" - integrity sha512-7hvrg75dubcO3ZI2rjYTzUrEuh1E9IyDEhhB6qfcooxhDA33xx2MasuLVgdxzcP6R/lipAC6n9ub9maNW6RKdw== +"@babel/plugin-transform-arrow-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz#82776c2ed0cd9e1a49956daeb896024c9473b8b6" + integrity sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - lodash "^4.17.13" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-classes@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz#d094299d9bd680a14a2a0edae38305ad60fb4de9" - integrity sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg== +"@babel/plugin-transform-async-to-generator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz#4308fad0d9409d71eafb9b1a6ee35f9d64b64086" + integrity sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-define-map" "^7.5.5" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.5.5" - "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-remap-async-to-generator" "^7.8.3" + +"@babel/plugin-transform-block-scoped-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz#437eec5b799b5852072084b3ae5ef66e8349e8a3" + integrity sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-block-scoping@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz#97d35dab66857a437c166358b91d09050c868f3a" + integrity sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + lodash "^4.17.13" + +"@babel/plugin-transform-classes@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz#800597ddb8aefc2c293ed27459c1fcc935a26c2c" + integrity sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-define-map" "^7.8.3" + "@babel/helper-function-name" "^7.9.5" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.6" + "@babel/helper-split-export-declaration" "^7.8.3" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" - integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA== +"@babel/plugin-transform-computed-properties@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz#96d0d28b7f7ce4eb5b120bb2e0e943343c86f81b" + integrity sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-destructuring@^7.5.0", "@babel/plugin-transform-destructuring@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz#44bbe08b57f4480094d57d9ffbcd96d309075ba6" - integrity sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ== +"@babel/plugin-transform-destructuring@^7.5.0", "@babel/plugin-transform-destructuring@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz#72c97cf5f38604aea3abf3b935b0e17b1db76a50" + integrity sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-dotall-regex@^7.4.4", "@babel/plugin-transform-dotall-regex@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.6.2.tgz#44abb948b88f0199a627024e1508acaf8dc9b2f9" - integrity sha512-KGKT9aqKV+9YMZSkowzYoYEiHqgaDhGmPNZlZxX6UeHC4z30nC1J9IrZuGqbYFB1jaIGdv91ujpze0exiVK8bA== +"@babel/plugin-transform-dotall-regex@^7.4.4", "@babel/plugin-transform-dotall-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz#c3c6ec5ee6125c6993c5cbca20dc8621a9ea7a6e" + integrity sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.6.0" + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-duplicate-keys@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz#c5dbf5106bf84cdf691222c0974c12b1df931853" - integrity sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ== +"@babel/plugin-transform-duplicate-keys@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz#8d12df309aa537f272899c565ea1768e286e21f1" + integrity sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-exponentiation-operator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" - integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A== +"@babel/plugin-transform-exponentiation-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz#581a6d7f56970e06bf51560cd64f5e947b70d7b7" + integrity sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-for-of@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556" - integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ== +"@babel/plugin-transform-for-of@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz#0f260e27d3e29cd1bb3128da5e76c761aa6c108e" + integrity sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-function-name@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad" - integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA== +"@babel/plugin-transform-function-name@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz#279373cb27322aaad67c2683e776dfc47196ed8b" + integrity sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" - integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg== +"@babel/plugin-transform-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz#aef239823d91994ec7b68e55193525d76dbd5dc1" + integrity sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-member-expression-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d" - integrity sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA== +"@babel/plugin-transform-member-expression-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz#963fed4b620ac7cbf6029c755424029fa3a40410" + integrity sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-modules-amd@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz#ef00435d46da0a5961aa728a1d2ecff063e4fb91" - integrity sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg== +"@babel/plugin-transform-modules-amd@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.6.tgz#8539ec42c153d12ea3836e0e3ac30d5aae7b258e" + integrity sha512-zoT0kgC3EixAyIAU+9vfaUVKTv9IxBDSabgHoUCBP6FqEJ+iNiN7ip7NBKcYqbfUDfuC2mFCbM7vbu4qJgOnDw== dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/helper-module-transforms" "^7.9.0" + "@babel/helper-plugin-utils" "^7.8.3" + babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.2.0", "@babel/plugin-transform-modules-commonjs@^7.5.0", "@babel/plugin-transform-modules-commonjs@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz#39dfe957de4420445f1fcf88b68a2e4aa4515486" - integrity sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g== +"@babel/plugin-transform-modules-commonjs@^7.2.0", "@babel/plugin-transform-modules-commonjs@^7.5.0", "@babel/plugin-transform-modules-commonjs@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.6.tgz#64b7474a4279ee588cacd1906695ca721687c277" + integrity sha512-7H25fSlLcn+iYimmsNe3uK1at79IE6SKW9q0/QeEHTMC9MdOZ+4bA+T1VFB5fgOqBWoqlifXRzYD0JPdmIrgSQ== dependencies: - "@babel/helper-module-transforms" "^7.4.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/helper-module-transforms" "^7.9.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-simple-access" "^7.8.3" + babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz#e75266a13ef94202db2a0620977756f51d52d249" - integrity sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg== +"@babel/plugin-transform-modules-systemjs@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.6.tgz#207f1461c78a231d5337a92140e52422510d81a4" + integrity sha512-NW5XQuW3N2tTHim8e1b7qGy7s0kZ2OH3m5octc49K1SdAKGxYxeIx7hiIz05kS1R2R+hOWcsr1eYwcGhrdHsrg== dependencies: - "@babel/helper-hoist-variables" "^7.4.4" - "@babel/helper-plugin-utils" "^7.0.0" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/helper-hoist-variables" "^7.8.3" + "@babel/helper-module-transforms" "^7.9.0" + "@babel/helper-plugin-utils" "^7.8.3" + babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae" - integrity sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw== +"@babel/plugin-transform-modules-umd@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz#e909acae276fec280f9b821a5f38e1f08b480697" + integrity sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ== dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-module-transforms" "^7.9.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-named-capturing-groups-regex@^7.4.5", "@babel/plugin-transform-named-capturing-groups-regex@^7.6.3": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.3.tgz#aaa6e409dd4fb2e50b6e2a91f7e3a3149dbce0cf" - integrity sha512-jTkk7/uE6H2s5w6VlMHeWuH+Pcy2lmdwFoeWCVnvIrDUnB5gQqTVI8WfmEAhF2CDEarGrknZcmSFg1+bkfCoSw== +"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c" + integrity sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw== dependencies: - regexpu-core "^4.6.0" + "@babel/helper-create-regexp-features-plugin" "^7.8.3" -"@babel/plugin-transform-new-target@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5" - integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA== +"@babel/plugin-transform-new-target@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz#60cc2ae66d85c95ab540eb34babb6434d4c70c43" + integrity sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-object-super@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz#c70021df834073c65eb613b8679cc4a381d1a9f9" - integrity sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ== +"@babel/plugin-transform-object-super@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz#ebb6a1e7a86ffa96858bd6ac0102d65944261725" + integrity sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.5.5" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.3" -"@babel/plugin-transform-parameters@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16" - integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw== +"@babel/plugin-transform-parameters@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz#173b265746f5e15b2afe527eeda65b73623a0795" + integrity sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA== dependencies: - "@babel/helper-call-delegate" "^7.4.4" - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-property-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905" - integrity sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ== +"@babel/plugin-transform-property-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz#33194300d8539c1ed28c62ad5087ba3807b98263" + integrity sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-react-display-name@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz#ebfaed87834ce8dc4279609a4f0c324c156e3eb0" - integrity sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A== +"@babel/plugin-transform-react-display-name@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz#70ded987c91609f78353dd76d2fb2a0bb991e8e5" + integrity sha512-3Jy/PCw8Fe6uBKtEgz3M82ljt+lTg+xJaM4og+eyu83qLT87ZUSckn0wy7r31jflURWLO83TW6Ylf7lyXj3m5A== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-react-jsx-self@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz#461e21ad9478f1031dd5e276108d027f1b5240ba" - integrity sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg== +"@babel/plugin-transform-react-jsx-development@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.9.0.tgz#3c2a130727caf00c2a293f0aed24520825dbf754" + integrity sha512-tK8hWKrQncVvrhvtOiPpKrQjfNX3DtkNLSX4ObuGcpS9p0QrGetKmlySIGR07y48Zft8WVgPakqd/bk46JrMSw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" + "@babel/helper-builder-react-jsx-experimental" "^7.9.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-jsx" "^7.8.3" -"@babel/plugin-transform-react-jsx-source@^7.0.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.5.0.tgz#583b10c49cf057e237085bcbd8cc960bd83bd96b" - integrity sha512-58Q+Jsy4IDCZx7kqEZuSDdam/1oW8OdDX8f+Loo6xyxdfg1yF0GE2XNJQSTZCaMol93+FBzpWiPEwtbMloAcPg== +"@babel/plugin-transform-react-jsx-self@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.9.0.tgz#f4f26a325820205239bb915bad8e06fcadabb49b" + integrity sha512-K2ObbWPKT7KUTAoyjCsFilOkEgMvFG+y0FqOl6Lezd0/13kMkkjHskVsZvblRPj1PHA44PrToaZANrryppzTvQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-jsx" "^7.8.3" -"@babel/plugin-transform-react-jsx@^7.0.0": - version "7.3.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz#f2cab99026631c767e2745a5368b331cfe8f5290" - integrity sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg== +"@babel/plugin-transform-react-jsx-source@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.9.0.tgz#89ef93025240dd5d17d3122294a093e5e0183de0" + integrity sha512-K6m3LlSnTSfRkM6FcRk8saNEeaeyG5k7AVkBU2bZK3+1zdkSED3qNdsWrUgQBeTVD2Tp3VMmerxVO2yM5iITmw== dependencies: - "@babel/helper-builder-react-jsx" "^7.3.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-jsx" "^7.8.3" -"@babel/plugin-transform-regenerator@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f" - integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA== +"@babel/plugin-transform-react-jsx@^7.9.4": + version "7.9.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.9.4.tgz#86f576c8540bd06d0e95e0b61ea76d55f6cbd03f" + integrity sha512-Mjqf3pZBNLt854CK0C/kRuXAnE6H/bo7xYojP+WGtX8glDGSibcwnsWwhwoSuRg0+EBnxPC1ouVnuetUIlPSAw== dependencies: - regenerator-transform "^0.14.0" + "@babel/helper-builder-react-jsx" "^7.9.0" + "@babel/helper-builder-react-jsx-experimental" "^7.9.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-jsx" "^7.8.3" -"@babel/plugin-transform-reserved-words@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz#4792af87c998a49367597d07fedf02636d2e1634" - integrity sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw== +"@babel/plugin-transform-regenerator@^7.8.7": + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz#5e46a0dca2bee1ad8285eb0527e6abc9c37672f8" + integrity sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz#9a0635ac4e665d29b162837dd3cc50745dfdf1f5" + integrity sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-runtime@^7.5.5": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.6.2.tgz#2669f67c1fae0ae8d8bf696e4263ad52cb98b6f8" - integrity sha512-cqULw/QB4yl73cS5Y0TZlQSjDvNkzDbu0FurTZyHlJpWE5T3PCMdnyV+xXoH1opr1ldyHODe3QAX3OMAii5NxA== + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.6.tgz#3ba804438ad0d880a17bca5eaa0cdf1edeedb2fd" + integrity sha512-qcmiECD0mYOjOIt8YHNsAP1SxPooC/rDmfmiSK9BNY72EitdSc7l44WTEklaWuFtbOEBjNhWWyph/kOImbNJ4w== dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" resolve "^1.8.1" semver "^5.5.1" -"@babel/plugin-transform-shorthand-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" - integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg== +"@babel/plugin-transform-shorthand-properties@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz#28545216e023a832d4d3a1185ed492bcfeac08c8" + integrity sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-spread@^7.2.0", "@babel/plugin-transform-spread@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz#fc77cf798b24b10c46e1b51b1b88c2bf661bb8dd" - integrity sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg== +"@babel/plugin-transform-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz#9c8ffe8170fdfb88b114ecb920b82fb6e95fe5e8" + integrity sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-sticky-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1" - integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw== +"@babel/plugin-transform-sticky-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz#be7a1290f81dae767475452199e1f76d6175b100" + integrity sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-regex" "^7.8.3" -"@babel/plugin-transform-template-literals@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0" - integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g== +"@babel/plugin-transform-template-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz#7bfa4732b455ea6a43130adc0ba767ec0e402a80" + integrity sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-typeof-symbol@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2" - integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw== +"@babel/plugin-transform-typeof-symbol@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz#ede4062315ce0aaf8a657a920858f1a2f35fc412" + integrity sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-typescript@^7.5.2": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.6.3.tgz#dddb50cf3b8b2ef70b22e5326e9a91f05a1db13b" - integrity sha512-aiWINBrPMSC3xTXRNM/dfmyYuPNKY/aexYqBgh0HBI5Y+WO5oRAqW/oROYeYHrF4Zw12r9rK4fMk/ZlAmqx/FQ== + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.9.6.tgz#2248971416a506fc78278fc0c0ea3179224af1e9" + integrity sha512-8OvsRdvpt3Iesf2qsAn+YdlwAJD7zJ+vhFZmDCa4b8dTp7MmHtKk5FF2mCsGxjZwuwsy/yIIay/nLmxST1ctVQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.6.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-typescript" "^7.2.0" + "@babel/helper-create-class-features-plugin" "^7.9.6" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-typescript" "^7.8.3" -"@babel/plugin-transform-unicode-regex@^7.4.4", "@babel/plugin-transform-unicode-regex@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.6.2.tgz#b692aad888a7e8d8b1b214be6b9dc03d5031f698" - integrity sha512-orZI6cWlR3nk2YmYdb0gImrgCUwb5cBUwjf6Ks6dvNVvXERkwtJWOQaEOjPiu0Gu1Tq6Yq/hruCZZOOi9F34Dw== +"@babel/plugin-transform-unicode-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz#0cef36e3ba73e5c57273effb182f46b91a1ecaad" + integrity sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.6.0" + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/preset-env@^7.0.0": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.5.5.tgz#bc470b53acaa48df4b8db24a570d6da1fef53c9a" - integrity sha512-GMZQka/+INwsMz1A5UEql8tG015h5j/qjptpKY2gJ7giy8ohzU710YciJB5rcKsWGWHiW3RUnHib0E5/m3Tp3A== +"@babel/polyfill@^7.6.0": + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.8.7.tgz#151ec24c7135481336168c3bd8b8bf0cf91c032f" + integrity sha512-LeSfP9bNZH2UOZgcGcZ0PIHUt1ZuHub1L3CVmEyqLxCeDLm4C5Gi8jRH8ZX2PNpDhQCo0z6y/+DIs2JlliXW8w== dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.2.0" - "@babel/plugin-proposal-dynamic-import" "^7.5.0" - "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.5.5" - "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-syntax-async-generators" "^7.2.0" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.5.0" - "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.5.5" - "@babel/plugin-transform-classes" "^7.5.5" - "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.5.0" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/plugin-transform-duplicate-keys" "^7.5.0" - "@babel/plugin-transform-exponentiation-operator" "^7.2.0" - "@babel/plugin-transform-for-of" "^7.4.4" - "@babel/plugin-transform-function-name" "^7.4.4" - "@babel/plugin-transform-literals" "^7.2.0" - "@babel/plugin-transform-member-expression-literals" "^7.2.0" - "@babel/plugin-transform-modules-amd" "^7.5.0" - "@babel/plugin-transform-modules-commonjs" "^7.5.0" - "@babel/plugin-transform-modules-systemjs" "^7.5.0" - "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.5" - "@babel/plugin-transform-new-target" "^7.4.4" - "@babel/plugin-transform-object-super" "^7.5.5" - "@babel/plugin-transform-parameters" "^7.4.4" - "@babel/plugin-transform-property-literals" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.4.5" - "@babel/plugin-transform-reserved-words" "^7.2.0" - "@babel/plugin-transform-shorthand-properties" "^7.2.0" - "@babel/plugin-transform-spread" "^7.2.0" - "@babel/plugin-transform-sticky-regex" "^7.2.0" - "@babel/plugin-transform-template-literals" "^7.4.4" - "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.4.4" - "@babel/types" "^7.5.5" - browserslist "^4.6.0" - core-js-compat "^3.1.1" + core-js "^2.6.5" + regenerator-runtime "^0.13.4" + +"@babel/preset-env@^7.0.0", "@babel/preset-env@^7.5.5", "@babel/preset-env@^7.6.3": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.9.6.tgz#df063b276c6455ec6fcfc6e53aacc38da9b0aea6" + integrity sha512-0gQJ9RTzO0heXOhzftog+a/WyOuqMrAIugVYxMYf83gh1CQaQDjMtsOpqOwXyDL/5JcWsrCm8l4ju8QC97O7EQ== + dependencies: + "@babel/compat-data" "^7.9.6" + "@babel/helper-compilation-targets" "^7.9.6" + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-proposal-async-generator-functions" "^7.8.3" + "@babel/plugin-proposal-dynamic-import" "^7.8.3" + "@babel/plugin-proposal-json-strings" "^7.8.3" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-proposal-numeric-separator" "^7.8.3" + "@babel/plugin-proposal-object-rest-spread" "^7.9.6" + "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" + "@babel/plugin-proposal-optional-chaining" "^7.9.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.8.0" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + "@babel/plugin-transform-arrow-functions" "^7.8.3" + "@babel/plugin-transform-async-to-generator" "^7.8.3" + "@babel/plugin-transform-block-scoped-functions" "^7.8.3" + "@babel/plugin-transform-block-scoping" "^7.8.3" + "@babel/plugin-transform-classes" "^7.9.5" + "@babel/plugin-transform-computed-properties" "^7.8.3" + "@babel/plugin-transform-destructuring" "^7.9.5" + "@babel/plugin-transform-dotall-regex" "^7.8.3" + "@babel/plugin-transform-duplicate-keys" "^7.8.3" + "@babel/plugin-transform-exponentiation-operator" "^7.8.3" + "@babel/plugin-transform-for-of" "^7.9.0" + "@babel/plugin-transform-function-name" "^7.8.3" + "@babel/plugin-transform-literals" "^7.8.3" + "@babel/plugin-transform-member-expression-literals" "^7.8.3" + "@babel/plugin-transform-modules-amd" "^7.9.6" + "@babel/plugin-transform-modules-commonjs" "^7.9.6" + "@babel/plugin-transform-modules-systemjs" "^7.9.6" + "@babel/plugin-transform-modules-umd" "^7.9.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" + "@babel/plugin-transform-new-target" "^7.8.3" + "@babel/plugin-transform-object-super" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.9.5" + "@babel/plugin-transform-property-literals" "^7.8.3" + "@babel/plugin-transform-regenerator" "^7.8.7" + "@babel/plugin-transform-reserved-words" "^7.8.3" + "@babel/plugin-transform-shorthand-properties" "^7.8.3" + "@babel/plugin-transform-spread" "^7.8.3" + "@babel/plugin-transform-sticky-regex" "^7.8.3" + "@babel/plugin-transform-template-literals" "^7.8.3" + "@babel/plugin-transform-typeof-symbol" "^7.8.4" + "@babel/plugin-transform-unicode-regex" "^7.8.3" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.9.6" + browserslist "^4.11.1" + core-js-compat "^3.6.2" invariant "^2.2.2" - js-levenshtein "^1.1.3" + levenary "^1.1.1" semver "^5.5.0" -"@babel/preset-env@^7.5.5": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.6.3.tgz#9e1bf05a2e2d687036d24c40e4639dc46cef2271" - integrity sha512-CWQkn7EVnwzlOdR5NOm2+pfgSNEZmvGjOhlCHBDq0J8/EStr+G+FvPEiz9B56dR6MoiUFjXhfE4hjLoAKKJtIQ== +"@babel/preset-modules@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" + integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg== dependencies: - "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.2.0" - "@babel/plugin-proposal-dynamic-import" "^7.5.0" - "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.6.2" - "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.6.2" - "@babel/plugin-syntax-async-generators" "^7.2.0" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.5.0" - "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.6.3" - "@babel/plugin-transform-classes" "^7.5.5" - "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.6.0" - "@babel/plugin-transform-dotall-regex" "^7.6.2" - "@babel/plugin-transform-duplicate-keys" "^7.5.0" - "@babel/plugin-transform-exponentiation-operator" "^7.2.0" - "@babel/plugin-transform-for-of" "^7.4.4" - "@babel/plugin-transform-function-name" "^7.4.4" - "@babel/plugin-transform-literals" "^7.2.0" - "@babel/plugin-transform-member-expression-literals" "^7.2.0" - "@babel/plugin-transform-modules-amd" "^7.5.0" - "@babel/plugin-transform-modules-commonjs" "^7.6.0" - "@babel/plugin-transform-modules-systemjs" "^7.5.0" - "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.6.3" - "@babel/plugin-transform-new-target" "^7.4.4" - "@babel/plugin-transform-object-super" "^7.5.5" - "@babel/plugin-transform-parameters" "^7.4.4" - "@babel/plugin-transform-property-literals" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.4.5" - "@babel/plugin-transform-reserved-words" "^7.2.0" - "@babel/plugin-transform-shorthand-properties" "^7.2.0" - "@babel/plugin-transform-spread" "^7.6.2" - "@babel/plugin-transform-sticky-regex" "^7.2.0" - "@babel/plugin-transform-template-literals" "^7.4.4" - "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.6.2" - "@babel/types" "^7.6.3" - browserslist "^4.6.0" - core-js-compat "^3.1.1" - invariant "^2.2.2" - js-levenshtein "^1.1.3" - semver "^5.5.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" "@babel/preset-react@^7.0.0": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.6.3.tgz#d5242c828322520205ae4eda5d4f4f618964e2f6" - integrity sha512-07yQhmkZmRAfwREYIQgW0HEwMY9GBJVuPY4Q12UC72AbfaawuupVWa8zQs2tlL+yun45Nv/1KreII/0PLfEsgA== + version "7.9.4" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.9.4.tgz#c6c97693ac65b6b9c0b4f25b948a8f665463014d" + integrity sha512-AxylVB3FXeOTQXNXyiuAQJSvss62FEotbX2Pzx3K/7c+MKJMdSg6Ose6QYllkdCFA8EInCJVw7M/o5QbLuA4ZQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-react-jsx-self" "^7.0.0" - "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-transform-react-display-name" "^7.8.3" + "@babel/plugin-transform-react-jsx" "^7.9.4" + "@babel/plugin-transform-react-jsx-development" "^7.9.0" + "@babel/plugin-transform-react-jsx-self" "^7.9.0" + "@babel/plugin-transform-react-jsx-source" "^7.9.0" "@babel/preset-stage-0@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/preset-stage-0/-/preset-stage-0-7.0.0.tgz#999aaec79ee8f0a763042c68c06539c97c6e0646" - integrity sha512-FBMd0IiARPtH5aaOFUVki6evHiJQiY0pFy7fizyRF7dtwc+el3nwpzvhb9qBNzceG1OIJModG1xpE0DDFjPXwA== + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/preset-stage-0/-/preset-stage-0-7.8.3.tgz#b6a0eca1a3b72e07f9caf58f998e97568028f6f5" + integrity sha512-+l6FlG1j73t4wh78W41StbcCz0/9a1/y+vxfnjtHl060kSmcgMfGzK9MEkLvrCOXfhp9RCX+d88sm6rOqxEIEQ== "@babel/register@^7.5.5": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.6.2.tgz#25765a922202cb06f8bdac5a3b1e70cd6bf3dd45" - integrity sha512-xgZk2LRZvt6i2SAUWxc7ellk4+OYRgS3Zpsnr13nMS1Qo25w21Uu8o6vTOAqNaxiqrnv30KTYzh9YWY2k21CeQ== + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.9.0.tgz#02464ede57548bddbb5e9f705d263b7c3f43d48b" + integrity sha512-Tv8Zyi2J2VRR8g7pC5gTeIN8Ihultbmk0ocyNz8H2nEZbmhp1N6q0A1UGsQbDvGP/sNinQKUHf3SqXwqjtFv4Q== dependencies: find-cache-dir "^2.0.0" lodash "^4.17.13" - mkdirp "^0.5.1" + make-dir "^2.1.0" pirates "^4.0.0" - source-map-support "^0.5.9" - -"@babel/runtime-corejs2@^7.2.0": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.6.3.tgz#de3f446b3fb688b98cbd220474d1a7cad909bcb8" - integrity sha512-nuA2o+rgX2+PrNTZ063ehncVcg7sn+tU71BB81SaWRVUbGwCOlb0+yQA1e0QqmzOfRSYOxfvf8cosYqFbJEiwQ== - dependencies: - core-js "^2.6.5" - regenerator-runtime "^0.13.2" + source-map-support "^0.5.16" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.0", "@babel/runtime@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.5.5.tgz#74fba56d35efbeca444091c7850ccd494fd2f132" - integrity sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ== +"@babel/runtime-corejs3@^7.8.3": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.9.6.tgz#67aded13fffbbc2cb93247388cf84d77a4be9a71" + integrity sha512-6toWAfaALQjt3KMZQc6fABqZwUDDuWzz+cAfPhqyEnzxvdWOAkjwPNxgF8xlmo7OWLsSjaKjsskpKHRLaMArOA== dependencies: - regenerator-runtime "^0.13.2" + core-js-pure "^3.0.0" + regenerator-runtime "^0.13.4" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.2.0", "@babel/runtime@^7.4.2", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.4", "@babel/runtime@^7.6.3": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.3.tgz#935122c74c73d2240cafd32ddb5fc2a6cd35cf1f" - integrity sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA== +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.0", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.6.tgz#a9102eb5cadedf3f31d08a9ecf294af7827ea29f" + integrity sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ== dependencies: - regenerator-runtime "^0.13.2" + regenerator-runtime "^0.13.4" "@babel/standalone@^7.5.4": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.6.4.tgz#10686768f27aa4ce4b5927b9791776738f6cb0e1" - integrity sha512-ikqLCCQ3iSaRhkE1xgVc6+f49s+ZbMu8gvaW1VNJdKE+pQMAp+2CALy4rRKopaLfYWULvtfeKrs4suICO64/dg== - -"@babel/template@^7.1.0", "@babel/template@^7.4.4", "@babel/template@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6" - integrity sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.6.0" - "@babel/types" "^7.6.0" - -"@babel/template@^7.4.0": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237" - integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.4.4" - "@babel/types" "^7.4.4" - -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.6.2", "@babel/traverse@^7.6.3": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.3.tgz#66d7dba146b086703c0fb10dd588b7364cec47f9" - integrity sha512-unn7P4LGsijIxaAJo/wpoU11zN+2IaClkQAxcJWBNCMS6cmVh802IyLHNkAjQ0iYnRS3nnxk5O3fuXW28IMxTw== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.6.3" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.6.3" - "@babel/types" "^7.6.3" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" - -"@babel/traverse@^7.4.3": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.5.5.tgz#f664f8f368ed32988cd648da9f72d5ca70f165bb" - integrity sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.5.5" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.5.5" - "@babel/types" "^7.5.5" + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.9.6.tgz#7a5f82c6fa29959b12f708213be6de8ec0b79338" + integrity sha512-UE0vm/4vuwzGgGNY9wR78ft3DUcHvAU0o/esXas2qjUL8yHMAEc04OmLkb3dfkUwlqbQ4+vC1OLBzwhcoIqLsA== + +"@babel/template@^7.4.0", "@babel/template@^7.8.3", "@babel/template@^7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" + integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/parser" "^7.8.6" + "@babel/types" "^7.8.6" + +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.8.3", "@babel/traverse@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.6.tgz#5540d7577697bf619cc57b92aa0f1c231a94f442" + integrity sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.9.6" + "@babel/helper-function-name" "^7.9.5" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/parser" "^7.9.6" + "@babel/types" "^7.9.6" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.13" @@ -985,61 +958,23 @@ lodash "^4.17.5" to-fast-properties "^2.0.0" -"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.6.0", "@babel/types@^7.6.3": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.3.tgz#3f07d96f854f98e2fbd45c64b0cb942d11e8ba09" - integrity sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA== - dependencies: - esutils "^2.0.2" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - -"@babel/types@^7.0.0-beta.49", "@babel/types@^7.4", "@babel/types@^7.4.0": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.5.5.tgz#97b9f728e182785909aa4ab56264f090a028d18a" - integrity sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw== +"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0", "@babel/types@^7.9.5", "@babel/types@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.6.tgz#2c5502b427251e9de1bd2dff95add646d95cc9f7" + integrity sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA== dependencies: - esutils "^2.0.2" + "@babel/helper-validator-identifier" "^7.9.5" lodash "^4.17.13" to-fast-properties "^2.0.0" "@cnakazawa/watch@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" - integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== dependencies: exec-sh "^0.3.2" minimist "^1.2.0" -"@commitlint/execute-rule@^8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-8.1.0.tgz#e8386bd0836b3dcdd41ebb9d5904bbeb447e4715" - integrity sha512-+vpH3RFuO6ypuCqhP2rSqTjFTQ7ClzXtUvXphpROv9v9+7zH4L+Ex+wZLVkL8Xj2cxefSLn/5Kcqa9XyJTn3kg== - -"@commitlint/load@>6.1.1": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-8.1.0.tgz#63b72ae5bb9152b8fa5b17c5428053032a9a49c8" - integrity sha512-ra02Dvmd7Gp1+uFLzTY3yGOpHjPzl5T9wYg/xrtPJNiOWXvQ0Mw7THw+ucd1M5iLUWjvdavv2N87YDRc428wHg== - dependencies: - "@commitlint/execute-rule" "^8.1.0" - "@commitlint/resolve-extends" "^8.1.0" - babel-runtime "^6.23.0" - chalk "2.4.2" - cosmiconfig "^5.2.0" - lodash "4.17.14" - resolve-from "^5.0.0" - -"@commitlint/resolve-extends@^8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-8.1.0.tgz#ed67f2ee484160ac8e0078bae52f172625157472" - integrity sha512-r/y+CeKW72Oa9BUctS1+I/MFCDiI3lfhwfQ65Tpfn6eZ4CuBYKzrCRi++GTHeAFKE3y8q1epJq5Rl/1GBejtBw== - dependencies: - "@types/node" "^12.0.2" - import-fresh "^3.0.0" - lodash "4.17.14" - resolve-from "^5.0.0" - resolve-global "^1.0.0" - "@cypress/listr-verbose-renderer@0.4.1": version "0.4.1" resolved "https://registry.yarnpkg.com/@cypress/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#a77492f4b11dcc7c446a34b3e28721afd33c642a" @@ -1051,12 +986,12 @@ figures "^1.7.0" "@cypress/webpack-preprocessor@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@cypress/webpack-preprocessor/-/webpack-preprocessor-4.1.0.tgz#8c4debc0b1abf045b62524d1996dd9aeaf7e86a8" - integrity sha512-LbxsdYVpHGoC2fMOdW0aQvuvVRD7aZx8p8DrP53HISpl7bD1PqLGWKzhHn7cGG24UHycBJrbaEeKEosW29W1dg== + version "4.1.5" + resolved "https://registry.yarnpkg.com/@cypress/webpack-preprocessor/-/webpack-preprocessor-4.1.5.tgz#b47d515d2540af977ee8b69d7c4eed64e3027668" + integrity sha512-B4miSaS3VCMVSlfuvbWCjytTywdnquRsF1tQ3quC7TGUzEXnQZ4+o8WUKibjMozrOomALkUdMxqOJ1ib5oFkKw== dependencies: - bluebird "3.5.0" - debug "3.1.0" + bluebird "3.7.1" + debug "4.1.1" optionalDependencies: "@babel/core" "^7.0.1" "@babel/preset-env" "^7.0.0" @@ -1070,124 +1005,112 @@ debug "^3.1.0" lodash.once "^4.1.1" -"@emmetio/extract-abbreviation@0.1.6": - version "0.1.6" - resolved "https://registry.yarnpkg.com/@emmetio/extract-abbreviation/-/extract-abbreviation-0.1.6.tgz#e4a9856c1057f0aff7d443b8536477c243abe28c" - integrity sha512-Ce3xE2JvTSEbASFbRbA1gAIcMcZWdS2yUYRaQbeM0nbOzaZrUYfa3ePtcriYRZOZmr+CkKA+zbjhvTpIOAYVcw== - -"@emotion/cache@^10.0.14", "@emotion/cache@^10.0.17", "@emotion/cache@^10.0.9": - version "10.0.19" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.19.tgz#d258d94d9c707dcadaf1558def968b86bb87ad71" - integrity sha512-BoiLlk4vEsGBg2dAqGSJu0vJl/PgVtCYLBFJaEO8RmQzPugXewQCXZJNXTDFaRlfCs0W+quesayav4fvaif5WQ== +"@emotion/cache@^10.0.27", "@emotion/cache@^10.0.9": + version "10.0.29" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.29.tgz#87e7e64f412c060102d589fe7c6dc042e6f9d1e0" + integrity sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ== dependencies: - "@emotion/sheet" "0.9.3" - "@emotion/stylis" "0.8.4" - "@emotion/utils" "0.11.2" - "@emotion/weak-memoize" "0.2.4" + "@emotion/sheet" "0.9.4" + "@emotion/stylis" "0.8.5" + "@emotion/utils" "0.11.3" + "@emotion/weak-memoize" "0.2.5" -"@emotion/core@^10.0.16", "@emotion/core@^10.0.9": - version "10.0.21" - resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.0.21.tgz#2e8398d2b92fd90d4ed6ac4d0b66214971de3458" - integrity sha512-U9zbc7ovZ2ceIwbLXYZPJy6wPgnOdTNT4jENZ31ee6v2lojetV5bTbCVk6ciT8G3wQRyVaTTfUCH9WCrMzpRIw== +"@emotion/core@^10.0.22", "@emotion/core@^10.0.9": + version "10.0.28" + resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.0.28.tgz#bb65af7262a234593a9e952c041d0f1c9b9bef3d" + integrity sha512-pH8UueKYO5jgg0Iq+AmCLxBsvuGtvlmiDCOuv8fGNYn3cowFpLN98L8zO56U0H1PjDIyAlXymgL3Wu7u7v6hbA== dependencies: "@babel/runtime" "^7.5.5" - "@emotion/cache" "^10.0.17" - "@emotion/css" "^10.0.14" - "@emotion/serialize" "^0.11.10" - "@emotion/sheet" "0.9.3" - "@emotion/utils" "0.11.2" - -"@emotion/css@^10.0.14", "@emotion/css@^10.0.9": - version "10.0.14" - resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.14.tgz#95dacabdd0e22845d1a1b0b5968d9afa34011139" - integrity sha512-MozgPkBEWvorcdpqHZE5x1D/PLEHUitALQCQYt2wayf4UNhpgQs2tN0UwHYS4FMy5ROBH+0ALyCFVYJ/ywmwlg== - dependencies: - "@emotion/serialize" "^0.11.8" - "@emotion/utils" "0.11.2" - babel-plugin-emotion "^10.0.14" - -"@emotion/hash@0.7.3": - version "0.7.3" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.7.3.tgz#a166882c81c0c6040975dd30df24fae8549bd96f" - integrity sha512-14ZVlsB9akwvydAdaEnVnvqu6J2P6ySv39hYyl/aoB6w/V+bXX0tay8cF6paqbgZsN2n5Xh15uF4pE+GvE+itw== - -"@emotion/is-prop-valid@0.8.3": - version "0.8.3" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.3.tgz#cbe62ddbea08aa022cdf72da3971570a33190d29" - integrity sha512-We7VBiltAJ70KQA0dWkdPMXnYoizlxOXpvtjmu5/MBnExd+u0PGgV27WCYanmLAbCwAU30Le/xA0CQs/F/Otig== - dependencies: - "@emotion/memoize" "0.7.3" + "@emotion/cache" "^10.0.27" + "@emotion/css" "^10.0.27" + "@emotion/serialize" "^0.11.15" + "@emotion/sheet" "0.9.4" + "@emotion/utils" "0.11.3" + +"@emotion/css@^10.0.27", "@emotion/css@^10.0.9": + version "10.0.27" + resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.27.tgz#3a7458198fbbebb53b01b2b87f64e5e21241e14c" + integrity sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw== + dependencies: + "@emotion/serialize" "^0.11.15" + "@emotion/utils" "0.11.3" + babel-plugin-emotion "^10.0.27" + +"@emotion/hash@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" + integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== -"@emotion/is-prop-valid@^0.8.1": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.5.tgz#2dda0791f0eafa12b7a0a5b39858405cc7bde983" - integrity sha512-6ZODuZSFofbxSbcxwsFz+6ioPjb0ISJRRPLZ+WIbjcU2IMU0Io+RGQjjaTgOvNQl007KICBm7zXQaYQEC1r6Bg== +"@emotion/is-prop-valid@0.8.8", "@emotion/is-prop-valid@^0.8.1": + version "0.8.8" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a" + integrity sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA== dependencies: - "@emotion/memoize" "0.7.3" + "@emotion/memoize" "0.7.4" -"@emotion/memoize@0.7.3": - version "0.7.3" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.3.tgz#5b6b1c11d6a6dddf1f2fc996f74cf3b219644d78" - integrity sha512-2Md9mH6mvo+ygq1trTeVp2uzAKwE2P7In0cRpD/M9Q70aH8L+rxMLbb3JCN2JoSWsV2O+DdFjfbbXoMoLBczow== - -"@emotion/serialize@^0.11.10", "@emotion/serialize@^0.11.11", "@emotion/serialize@^0.11.8": - version "0.11.11" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.11.tgz#c92a5e5b358070a7242d10508143306524e842a4" - integrity sha512-YG8wdCqoWtuoMxhHZCTA+egL0RSGdHEc+YCsmiSBPBEDNuVeMWtjEWtGrhUterSChxzwnWBXvzSxIFQI/3sHLw== - dependencies: - "@emotion/hash" "0.7.3" - "@emotion/memoize" "0.7.3" - "@emotion/unitless" "0.7.4" - "@emotion/utils" "0.11.2" +"@emotion/memoize@0.7.4": + version "0.7.4" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" + integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== + +"@emotion/serialize@^0.11.15", "@emotion/serialize@^0.11.16": + version "0.11.16" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.16.tgz#dee05f9e96ad2fb25a5206b6d759b2d1ed3379ad" + integrity sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg== + dependencies: + "@emotion/hash" "0.8.0" + "@emotion/memoize" "0.7.4" + "@emotion/unitless" "0.7.5" + "@emotion/utils" "0.11.3" csstype "^2.5.7" -"@emotion/sheet@0.9.3": - version "0.9.3" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.3.tgz#689f135ecf87d3c650ed0c4f5ddcbe579883564a" - integrity sha512-c3Q6V7Df7jfwSq5AzQWbXHa5soeE4F5cbqi40xn0CzXxWW9/6Mxq48WJEtqfWzbZtW9odZdnRAkwCQwN12ob4A== +"@emotion/sheet@0.9.4": + version "0.9.4" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5" + integrity sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA== -"@emotion/styled-base@^10.0.17": - version "10.0.19" - resolved "https://registry.yarnpkg.com/@emotion/styled-base/-/styled-base-10.0.19.tgz#53655274797194d86453354fdb2c947b46032db6" - integrity sha512-Sz6GBHTbOZoeZQKvkE9gQPzaJ6/qtoQ/OPvyG2Z/6NILlYk60Es1cEcTgTkm26H8y7A0GSgp4UmXl+srvsnFPg== +"@emotion/styled-base@^10.0.24", "@emotion/styled-base@^10.0.27": + version "10.0.31" + resolved "https://registry.yarnpkg.com/@emotion/styled-base/-/styled-base-10.0.31.tgz#940957ee0aa15c6974adc7d494ff19765a2f742a" + integrity sha512-wTOE1NcXmqMWlyrtwdkqg87Mu6Rj1MaukEoEmEkHirO5IoHDJ8LgCQL4MjJODgxWxXibGR3opGp1p7YvkNEdXQ== dependencies: "@babel/runtime" "^7.5.5" - "@emotion/is-prop-valid" "0.8.3" - "@emotion/serialize" "^0.11.11" - "@emotion/utils" "0.11.2" + "@emotion/is-prop-valid" "0.8.8" + "@emotion/serialize" "^0.11.15" + "@emotion/utils" "0.11.3" -"@emotion/styled@^10.0.15": - version "10.0.17" - resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-10.0.17.tgz#0cd38b8b36259541f2c6717fc22607a120623654" - integrity sha512-zHMgWjHDMNjD+ux64POtDnjLAObniu3znxFBLSdV/RiEhSLjHIowfvSbbd/C33/3uwtI6Uzs2KXnRZtka/PpAQ== +"@emotion/styled@^10.0.23": + version "10.0.27" + resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-10.0.27.tgz#12cb67e91f7ad7431e1875b1d83a94b814133eaf" + integrity sha512-iK/8Sh7+NLJzyp9a5+vIQIXTYxfT4yB/OJbjzQanB2RZpvmzBQOHZWhpAMZWYEKRNNbsD6WfBw5sVWkb6WzS/Q== dependencies: - "@emotion/styled-base" "^10.0.17" - babel-plugin-emotion "^10.0.17" + "@emotion/styled-base" "^10.0.27" + babel-plugin-emotion "^10.0.27" -"@emotion/stylis@0.8.4": - version "0.8.4" - resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.4.tgz#6c51afdf1dd0d73666ba09d2eb6c25c220d6fe4c" - integrity sha512-TLmkCVm8f8gH0oLv+HWKiu7e8xmBIaokhxcEKPh1m8pXiV/akCiq50FvYgOwY42rjejck8nsdQxZlXZ7pmyBUQ== +"@emotion/stylis@0.8.5": + version "0.8.5" + resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04" + integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== -"@emotion/unitless@0.7.4", "@emotion/unitless@^0.7.0": - version "0.7.4" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.4.tgz#a87b4b04e5ae14a88d48ebef15015f6b7d1f5677" - integrity sha512-kBa+cDHOR9jpRJ+kcGMsysrls0leukrm68DmFQoMIWQcXdr2cZvyvypWuGYT7U+9kAExUE7+T7r6G3C3A6L8MQ== +"@emotion/unitless@0.7.5", "@emotion/unitless@^0.7.0": + version "0.7.5" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" + integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== -"@emotion/utils@0.11.2": - version "0.11.2" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.2.tgz#713056bfdffb396b0a14f1c8f18e7b4d0d200183" - integrity sha512-UHX2XklLl3sIaP6oiMmlVzT0J+2ATTVpf0dHQVyPJHTkOITvXfaSqnRk6mdDhV9pR8T/tHc3cex78IKXssmzrA== +"@emotion/utils@0.11.3": + version "0.11.3" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.3.tgz#a759863867befa7e583400d322652a3f44820924" + integrity sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw== -"@emotion/weak-memoize@0.2.4": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.4.tgz#622a72bebd1e3f48d921563b4b60a762295a81fc" - integrity sha512-6PYY5DVdAY1ifaQW6XYTnOMihmBVT27elqSjEoodchsGjzYlEsTQMcEhSud99kVawatyTZRTiVkJ/c6lwbQ7nA== +"@emotion/weak-memoize@0.2.5": + version "0.2.5" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" + integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== "@essentials/are-equal@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@essentials/are-equal/-/are-equal-1.0.1.tgz#7575b603d5c214fa81743d0e3fd1f037461c9218" - integrity sha512-3qzr3iVaUDw3sCe70A8MJfxA9BUrC6o5170oqhNckId40fPgUDRyPqbjPjcboZbPqCV3gUuQcCWR8+JP9Uissg== + version "1.0.2" + resolved "https://registry.yarnpkg.com/@essentials/are-equal/-/are-equal-1.0.2.tgz#2c22faf29a7e2a634c34d06f5e34fff5e1268523" + integrity sha512-VNtNqioYtXosqMYG5k62z6iiTknUoxpizi09v75buZeeWIbk+EabWmtPnrjemoodh5X3VFP3wjzOWDVZjBscRw== "@essentials/interpolate@^1.0.0": version "1.0.0" @@ -1197,95 +1120,24 @@ performance-now "^2.1.0" raf "^3.4.1" +"@essentials/raf@^1.1.2": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@essentials/raf/-/raf-1.1.3.tgz#0ed3d95ce7c59ffb7a4c2bd77e9e3301466b42fc" + integrity sha512-2pnbJu6M2agYKPhnD2lqRxLGG4GOfMFxIePw0WoIDmuTmnfrCoIJp9RlgDhVhbOGHXiQHARdrvGeiHgC3B5YnA== + "@essentials/request-interval@^1.0.1": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@essentials/request-interval/-/request-interval-1.0.2.tgz#402fb3c7159d1b803dca556d69d83c1eae5b394c" - integrity sha512-U7VaGqYsFfLliGlDSCudCfsbf4nP8RDBPbXjUyt4UopMusF441Df06UeErWnaQcdVu9QzRtIVdalcAJpoLdAHA== + version "1.1.0" + resolved "https://registry.yarnpkg.com/@essentials/request-interval/-/request-interval-1.1.0.tgz#a9908f0a55d3ae91361a1e218ffdcbb16a720a2b" + integrity sha512-3MSBJEnXeAr7qHTjmtffWkT7ZL+NcOgRBSJRDpTqMeTaPL21k+rakQfY3PNCTpcFBhMiT6Y1RkwFZtGkXnbFVA== dependencies: - performance-now "^2.1.0" - raf "^3.4.1" + "@essentials/raf" "^1.1.2" "@essentials/request-timeout@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@essentials/request-timeout/-/request-timeout-1.0.1.tgz#fd46f0d7ffdfc422229e5da7de89341fe434d1dd" - integrity sha512-31ronVRtN7bTKEwdMnh4/qvNT9pjHpKWt4HFTqNJAIbxeFlO2OLac1vSEH+c1deqkxK0h9wynMxmwRAmQinwwg== - dependencies: - performance-now "^2.1.0" - raf "^3.4.1" - -"@evocateur/libnpmaccess@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845" - integrity sha512-KSCAHwNWro0CF2ukxufCitT9K5LjL/KuMmNzSu8wuwN2rjyKHD8+cmOsiybK+W5hdnwc5M1SmRlVCaMHQo+3rg== - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - aproba "^2.0.0" - figgy-pudding "^3.5.1" - get-stream "^4.0.0" - npm-package-arg "^6.1.0" - -"@evocateur/libnpmpublish@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@evocateur/libnpmpublish/-/libnpmpublish-1.2.2.tgz#55df09d2dca136afba9c88c759ca272198db9f1a" - integrity sha512-MJrrk9ct1FeY9zRlyeoyMieBjGDG9ihyyD9/Ft6MMrTxql9NyoEx2hw9casTIP4CdqEVu+3nQ2nXxoJ8RCXyFg== - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - aproba "^2.0.0" - figgy-pudding "^3.5.1" - get-stream "^4.0.0" - lodash.clonedeep "^4.5.0" - normalize-package-data "^2.4.0" - npm-package-arg "^6.1.0" - semver "^5.5.1" - ssri "^6.0.1" - -"@evocateur/npm-registry-fetch@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@evocateur/npm-registry-fetch/-/npm-registry-fetch-4.0.0.tgz#8c4c38766d8d32d3200fcb0a83f064b57365ed66" - integrity sha512-k1WGfKRQyhJpIr+P17O5vLIo2ko1PFLKwoetatdduUSt/aQ4J2sJrJwwatdI5Z3SiYk/mRH9S3JpdmMFd/IK4g== - dependencies: - JSONStream "^1.3.4" - bluebird "^3.5.1" - figgy-pudding "^3.4.1" - lru-cache "^5.1.1" - make-fetch-happen "^5.0.0" - npm-package-arg "^6.1.0" - safe-buffer "^5.1.2" - -"@evocateur/pacote@^9.6.3": - version "9.6.5" - resolved "https://registry.yarnpkg.com/@evocateur/pacote/-/pacote-9.6.5.tgz#33de32ba210b6f17c20ebab4d497efc6755f4ae5" - integrity sha512-EI552lf0aG2nOV8NnZpTxNo2PcXKPmDbF9K8eCBFQdIZwHNGN/mi815fxtmUMa2wTa1yndotICIDt/V0vpEx2w== + version "1.2.0" + resolved "https://registry.yarnpkg.com/@essentials/request-timeout/-/request-timeout-1.2.0.tgz#00aabcbb4ca20a731f030a44588acf0c8491d9bc" + integrity sha512-7HbQnSxy2lpf2/wz5XNwjzKakyyZAtptTGYzfIaS4xTXgXs64xfXM8UT4fG40sEEJitXFkwzxgCCXVrokorGLQ== dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - bluebird "^3.5.3" - cacache "^12.0.3" - chownr "^1.1.2" - figgy-pudding "^3.5.1" - get-stream "^4.1.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^5.1.1" - make-fetch-happen "^5.0.0" - minimatch "^3.0.4" - minipass "^2.3.5" - mississippi "^3.0.0" - mkdirp "^0.5.1" - normalize-package-data "^2.5.0" - npm-package-arg "^6.1.0" - npm-packlist "^1.4.4" - npm-pick-manifest "^3.0.0" - osenv "^0.1.5" - promise-inflight "^1.0.1" - promise-retry "^1.1.1" - protoduck "^5.0.1" - rimraf "^2.6.3" - safe-buffer "^5.2.0" - semver "^5.7.0" - ssri "^6.0.1" - tar "^4.4.10" - unique-filename "^1.1.1" - which "^1.3.1" + "@essentials/raf" "^1.1.2" "@fimbul/bifrost@^0.21.0": version "0.21.0" @@ -1306,6 +1158,67 @@ reflect-metadata "^0.1.12" tslib "^1.8.1" +"@google-cloud/common@^2.1.1": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@google-cloud/common/-/common-2.4.0.tgz#2783b7de8435024a31453510f2dab5a6a91a4c82" + integrity sha512-zWFjBS35eI9leAHhjfeOYlK5Plcuj/77EzstnrJIZbKgF/nkqjcQuGiMCpzCwOfPyUbz8ZaEOYgbHa759AKbjg== + dependencies: + "@google-cloud/projectify" "^1.0.0" + "@google-cloud/promisify" "^1.0.0" + arrify "^2.0.0" + duplexify "^3.6.0" + ent "^2.2.0" + extend "^3.0.2" + google-auth-library "^5.5.0" + retry-request "^4.0.0" + teeny-request "^6.0.0" + +"@google-cloud/paginator@^2.0.0": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@google-cloud/paginator/-/paginator-2.0.3.tgz#c7987ad05d1c3ebcef554381be80e9e8da4e4882" + integrity sha512-kp/pkb2p/p0d8/SKUu4mOq8+HGwF8NPzHWkj+VKrIPQPyMRw8deZtrO/OcSiy9C/7bpfU5Txah5ltUNfPkgEXg== + dependencies: + arrify "^2.0.0" + extend "^3.0.2" + +"@google-cloud/projectify@^1.0.0": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@google-cloud/projectify/-/projectify-1.0.4.tgz#28daabebba6579ed998edcadf1a8f3be17f3b5f0" + integrity sha512-ZdzQUN02eRsmTKfBj9FDL0KNDIFNjBn/d6tHQmA/+FImH5DO6ZV8E7FzxMgAUiVAUq41RFAkb25p1oHOZ8psfg== + +"@google-cloud/promisify@^1.0.0": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-1.0.4.tgz#ce86ffa94f9cfafa2e68f7b3e4a7fad194189723" + integrity sha512-VccZDcOql77obTnFh0TbNED/6ZbbmHDf8UMNnzO1d5g9V0Htfm4k5cllY8P1tJsRKC3zWYGRLaViiupcgVjBoQ== + +"@google-cloud/storage@^4.3.2": + version "4.7.0" + resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-4.7.0.tgz#a7466086a83911c7979cc238d00a127ffb645615" + integrity sha512-f0guAlbeg7Z0m3gKjCfBCu7FG9qS3M3oL5OQQxlvGoPtK7/qg3+W+KQV73O2/sbuS54n0Kh2mvT5K2FWzF5vVQ== + dependencies: + "@google-cloud/common" "^2.1.1" + "@google-cloud/paginator" "^2.0.0" + "@google-cloud/promisify" "^1.0.0" + arrify "^2.0.0" + compressible "^2.0.12" + concat-stream "^2.0.0" + date-and-time "^0.13.0" + duplexify "^3.5.0" + extend "^3.0.2" + gaxios "^3.0.0" + gcs-resumable-upload "^2.2.4" + hash-stream-validation "^0.2.2" + mime "^2.2.0" + mime-types "^2.0.8" + onetime "^5.1.0" + p-limit "^2.2.0" + pumpify "^2.0.0" + readable-stream "^3.4.0" + snakeize "^0.1.0" + stream-events "^1.0.1" + through2 "^3.0.0" + xdg-basedir "^4.0.0" + "@gulp-sourcemaps/identity-map@1.X": version "1.0.2" resolved "https://registry.yarnpkg.com/@gulp-sourcemaps/identity-map/-/identity-map-1.0.2.tgz#1e6fe5d8027b1f285dc0d31762f566bccd73d5a9" @@ -1326,19 +1239,19 @@ through2 "^2.0.3" "@hapi/address@2.x.x": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.0.0.tgz#9f05469c88cb2fd3dcd624776b54ee95c312126a" - integrity sha512-mV6T0IYqb0xL1UALPFplXYQmR0twnXG0M6jUswpquqT2sD12BOiCiLy3EvMp/Fy7s3DZElC4/aPjEjo2jeZpvw== + version "2.1.4" + resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" + integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ== "@hapi/bourne@1.x.x", "@hapi/bourne@^1.3.2": version "1.3.2" resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a" integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA== -"@hapi/hoek@8.x.x": - version "8.2.1" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.2.1.tgz#924af04cbb22e17359c620d2a9c946e63f58eb77" - integrity sha512-JPiBy+oSmsq3St7XlipfN5pNA6bDJ1kpa73PrK/zR29CVClDVqy04AanM/M/qx5bSF+I61DdCfAvRrujau+zRg== +"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" + integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow== "@hapi/joi@^15.0.0": version "15.1.1" @@ -1351,11 +1264,11 @@ "@hapi/topo" "3.x.x" "@hapi/topo@3.x.x": - version "3.1.3" - resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.3.tgz#c7a02e0d936596d29f184e6d7fdc07e8b5efce11" - integrity sha512-JmS9/vQK6dcUYn7wc2YZTqzIKubAQcJKu2KCKAru6es482U5RT5fP1EXCPtlXpiK7PR0On/kpQKI4fRKkzpZBQ== + version "3.1.6" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29" + integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ== dependencies: - "@hapi/hoek" "8.x.x" + "@hapi/hoek" "^8.3.0" "@jest/console@^24.7.1", "@jest/console@^24.9.0": version "24.9.0" @@ -1505,62 +1418,72 @@ "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^13.0.0" -"@ledgerhq/devices@^4.72.2": - version "4.72.2" - resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-4.72.2.tgz#9f91371c6a08cd4d93be0d6fe1c5d53a9ccd4a14" - integrity sha512-iX6ZfxFrKxlO3A7rDypjsqbu1Ta2IB+OsOk/7jnd3fzcvwlSEQwflAHb81CsjOPhdVG2aPIFU/VxzMioDFz24g== +"@jest/types@^25.5.0": + version "25.5.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" + integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^15.0.0" + chalk "^3.0.0" + +"@ledgerhq/devices@^4.78.0": + version "4.78.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-4.78.0.tgz#149b572f0616096e2bd5eb14ce14d0061c432be6" + integrity sha512-tWKS5WM/UU82czihnVjRwz9SXNTQzWjGJ/7+j/xZ70O86nlnGJ1aaFbs5/WTzfrVKpOKgj1ZoZkAswX67i/JTw== dependencies: - "@ledgerhq/errors" "^4.72.2" + "@ledgerhq/errors" "^4.78.0" "@ledgerhq/logs" "^4.72.0" rxjs "^6.5.3" -"@ledgerhq/errors@^4.72.2": - version "4.72.2" - resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-4.72.2.tgz#62a87a249c3c05e7295f66c3d49d78e7d46d611f" - integrity sha512-Q9SnjsoIiNhoTujUWfNgGqvYHgaPGRLzuYAC0Rx2WjEKp7swO42BMukYtSgXyyrz4yfHhMBMYerEF2sonBVzXw== +"@ledgerhq/errors@^4.78.0": + version "4.78.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-4.78.0.tgz#23daf3af54d03b1bda3e616002b555da1bdb705a" + integrity sha512-FX6zHZeiNtegBvXabK6M5dJ+8OV8kQGGaGtuXDeK/Ss5EmG4Ltxc6Lnhe8hiHpm9pCHtktOsnUVL7IFBdHhYUg== -"@ledgerhq/hw-transport-node-hid-noevents@^4.72.2": - version "4.72.2" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-4.72.2.tgz#3991614bd6793a1bf66a27c9fe50ec23ba2aa5ec" - integrity sha512-yzsN5dDAeZlC3FzYQbCN8yeyWvHzNNRrYQFwtWFDs43ZD2k0p9j1xr5rozAIP9NTzVlAyAow0VCRTQEzUb9QuA== +"@ledgerhq/hw-transport-node-hid-noevents@^4.78.0": + version "4.78.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-4.78.0.tgz#6f0dbe1bbfad6516b42ad2d6b6b34a8b07e4cd46" + integrity sha512-CJPVR4wksq+apiXH2GnsttguBxmj9zdM2HjqZ3dHZN8SFW/9Xj3k+baS+pYoUISkECVxDrdfaW3Bd5dWv+jPUg== dependencies: - "@ledgerhq/devices" "^4.72.2" - "@ledgerhq/errors" "^4.72.2" - "@ledgerhq/hw-transport" "^4.72.2" + "@ledgerhq/devices" "^4.78.0" + "@ledgerhq/errors" "^4.78.0" + "@ledgerhq/hw-transport" "^4.78.0" "@ledgerhq/logs" "^4.72.0" node-hid "^0.7.9" "@ledgerhq/hw-transport-node-hid@^4.68.2": - version "4.72.2" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-4.72.2.tgz#921b6d5757f31fff6209dba5148a4b74b10c7a4a" - integrity sha512-KGFt/GqJUO8gDTA0HzXckvDcGgvGRA6jFrsRLaRBPmflaVMOjJ7UkeTL9kSLkJCyxFp1YuJ0eZaGIO25dACn0g== - dependencies: - "@ledgerhq/devices" "^4.72.2" - "@ledgerhq/errors" "^4.72.2" - "@ledgerhq/hw-transport" "^4.72.2" - "@ledgerhq/hw-transport-node-hid-noevents" "^4.72.2" + version "4.78.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-4.78.0.tgz#abd99e0f918b810a61c035e5ab8c2bd8807aff55" + integrity sha512-OMrY2ecfQ1XjMAuuHqu3n3agMPR06HN1s0ENrKc+Twbb5A17jujpv07WzjxfTN2V1G7vgeZpRqrg2ulhowWbdg== + dependencies: + "@ledgerhq/devices" "^4.78.0" + "@ledgerhq/errors" "^4.78.0" + "@ledgerhq/hw-transport" "^4.78.0" + "@ledgerhq/hw-transport-node-hid-noevents" "^4.78.0" "@ledgerhq/logs" "^4.72.0" lodash "^4.17.15" node-hid "^0.7.9" usb "^1.6.0" "@ledgerhq/hw-transport-u2f@^4.68.2": - version "4.72.2" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-u2f/-/hw-transport-u2f-4.72.2.tgz#8017c6e6fbad13dec7fe62f64d79aecc1dd63ef1" - integrity sha512-QkwRXBBXyHcTYrOOqDo7792TpAuzUtLZrcHtaaaFvBy0+o/SVRcp3qs0fxPfhw6qYT2eulsTYThkdL2fr6F4YA== + version "4.78.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-u2f/-/hw-transport-u2f-4.78.0.tgz#0ba67cbe2eb813da18c55f24f7215d552eff5938" + integrity sha512-+0Gw5cIr8zCHM+HCS3ACgxmCLZMvJKepFplsjNq7AnRzlXcrMnReiPwt4kw+wXizIDvNQpzi7QFSYtfxa/Gdng== dependencies: - "@ledgerhq/errors" "^4.72.2" - "@ledgerhq/hw-transport" "^4.72.2" + "@ledgerhq/errors" "^4.78.0" + "@ledgerhq/hw-transport" "^4.78.0" "@ledgerhq/logs" "^4.72.0" u2f-api "0.2.7" -"@ledgerhq/hw-transport@^4.72.2": - version "4.72.2" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-4.72.2.tgz#b13d1797ba7530b9b94ebee71f3d0d2185153988" - integrity sha512-HYe3kTNoA9YHGCsktAzMURpXqZ1QvMUreI24GhMKfec6AIuB0d05avn2j7z8QeOpAUh5L6/OaPPWi9t4KpqG5A== +"@ledgerhq/hw-transport@^4.78.0": + version "4.78.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-4.78.0.tgz#714786658e1f2fbc0569e06e2abf8d15d310d931" + integrity sha512-xQu16OMPQjFYLjqCysij+8sXtdWv2YLxPrB6FoLvEWGTlQ7yL1nUBRQyzyQtWIYqZd4THQowQmzm1VjxuN6SZw== dependencies: - "@ledgerhq/devices" "^4.72.2" - "@ledgerhq/errors" "^4.72.2" + "@ledgerhq/devices" "^4.78.0" + "@ledgerhq/errors" "^4.78.0" events "^3.0.0" "@ledgerhq/logs@^4.72.0": @@ -1568,675 +1491,10 @@ resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-4.72.0.tgz#43df23af013ad1135407e5cf33ca6e4c4c7708d5" integrity sha512-o+TYF8vBcyySRsb2kqBDv/KMeme8a2nwWoG+lAWzbDmWfb2/MrVWYCVYDYvjXdSoI/Cujqy1i0gIDrkdxa9chA== -"@lerna/add@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.18.0.tgz#86e38f14d7a0a7c61315dccb402377feb1c9db83" - integrity sha512-Z5EaQbBnJn1LEPb0zb0Q2o9T8F8zOnlCsj6JYpY6aSke17UUT7xx0QMN98iBK+ueUHKjN/vdFdYlNCYRSIdujA== - dependencies: - "@evocateur/pacote" "^9.6.3" - "@lerna/bootstrap" "3.18.0" - "@lerna/command" "3.18.0" - "@lerna/filter-options" "3.18.0" - "@lerna/npm-conf" "3.16.0" - "@lerna/validation-error" "3.13.0" - dedent "^0.7.0" - npm-package-arg "^6.1.0" - p-map "^2.1.0" - semver "^6.2.0" - -"@lerna/bootstrap@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.18.0.tgz#705d9eb51a24d549518796a09f24d24526ed975b" - integrity sha512-3DZKWIaKvr7sUImoKqSz6eqn84SsOVMnA5QHwgzXiQjoeZ/5cg9x2r+Xj3+3w/lvLoh0j8U2GNtrIaPNis4bKQ== - dependencies: - "@lerna/command" "3.18.0" - "@lerna/filter-options" "3.18.0" - "@lerna/has-npm-version" "3.16.5" - "@lerna/npm-install" "3.16.5" - "@lerna/package-graph" "3.18.0" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/rimraf-dir" "3.16.5" - "@lerna/run-lifecycle" "3.16.2" - "@lerna/run-topologically" "3.18.0" - "@lerna/symlink-binary" "3.17.0" - "@lerna/symlink-dependencies" "3.17.0" - "@lerna/validation-error" "3.13.0" - dedent "^0.7.0" - get-port "^4.2.0" - multimatch "^3.0.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - p-finally "^1.0.0" - p-map "^2.1.0" - p-map-series "^1.0.0" - p-waterfall "^1.0.0" - read-package-tree "^5.1.6" - semver "^6.2.0" - -"@lerna/changed@3.18.3": - version "3.18.3" - resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.18.3.tgz#50529e8bd5d7fe2d0ace046a6e274d3de652a493" - integrity sha512-xZW7Rm+DlDIGc0EvKGyJZgT9f8FFa4d52mr/Y752dZuXR2qRmf9tXhVloRG39881s2A6yi3jqLtXZggKhsQW4Q== - dependencies: - "@lerna/collect-updates" "3.18.0" - "@lerna/command" "3.18.0" - "@lerna/listable" "3.18.0" - "@lerna/output" "3.13.0" - "@lerna/version" "3.18.3" - -"@lerna/check-working-tree@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-3.16.5.tgz#b4f8ae61bb4523561dfb9f8f8d874dd46bb44baa" - integrity sha512-xWjVBcuhvB8+UmCSb5tKVLB5OuzSpw96WEhS2uz6hkWVa/Euh1A0/HJwn2cemyK47wUrCQXtczBUiqnq9yX5VQ== - dependencies: - "@lerna/collect-uncommitted" "3.16.5" - "@lerna/describe-ref" "3.16.5" - "@lerna/validation-error" "3.13.0" - -"@lerna/child-process@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-3.16.5.tgz#38fa3c18064aa4ac0754ad80114776a7b36a69b2" - integrity sha512-vdcI7mzei9ERRV4oO8Y1LHBZ3A5+ampRKg1wq5nutLsUA4mEBN6H7JqjWOMY9xZemv6+kATm2ofjJ3lW5TszQg== - dependencies: - chalk "^2.3.1" - execa "^1.0.0" - strong-log-transformer "^2.0.0" - -"@lerna/clean@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.18.0.tgz#cc67d7697db969a70e989992fdf077126308fb2e" - integrity sha512-BiwBELZNkarRQqj+v5NPB1aIzsOX+Y5jkZ9a5UbwHzEdBUQ5lQa0qaMLSOve/fSkaiZQxe6qnTyatN75lOcDMg== - dependencies: - "@lerna/command" "3.18.0" - "@lerna/filter-options" "3.18.0" - "@lerna/prompt" "3.13.0" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/rimraf-dir" "3.16.5" - p-map "^2.1.0" - p-map-series "^1.0.0" - p-waterfall "^1.0.0" - -"@lerna/cli@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-3.18.0.tgz#2b6f8605bee299c6ada65bc2e4b3ed7bf715af3a" - integrity sha512-AwDyfGx7fxJgeaZllEuyJ9LZ6Tdv9yqRD9RX762yCJu+PCAFvB9bp6OYuRSGli7QQgM0CuOYnSg4xVNOmuGKDA== - dependencies: - "@lerna/global-options" "3.13.0" - dedent "^0.7.0" - npmlog "^4.1.2" - yargs "^14.2.0" - -"@lerna/collect-uncommitted@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-3.16.5.tgz#a494d61aac31cdc7aec4bbe52c96550274132e63" - integrity sha512-ZgqnGwpDZiWyzIQVZtQaj9tRizsL4dUOhuOStWgTAw1EMe47cvAY2kL709DzxFhjr6JpJSjXV5rZEAeU3VE0Hg== - dependencies: - "@lerna/child-process" "3.16.5" - chalk "^2.3.1" - figgy-pudding "^3.5.1" - npmlog "^4.1.2" - -"@lerna/collect-updates@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-3.18.0.tgz#6086c64df3244993cc0a7f8fc0ddd6a0103008a6" - integrity sha512-LJMKgWsE/var1RSvpKDIxS8eJ7POADEc0HM3FQiTpEczhP6aZfv9x3wlDjaHpZm9MxJyQilqxZcasRANmRcNgw== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/describe-ref" "3.16.5" - minimatch "^3.0.4" - npmlog "^4.1.2" - slash "^2.0.0" - -"@lerna/command@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.18.0.tgz#1e40399324a69d26a78969d59cf60e19b2f13fc3" - integrity sha512-JQ0TGzuZc9Ky8xtwtSLywuvmkU8X62NTUT3rMNrUykIkOxBaO+tE0O98u2yo/9BYOeTRji9IsjKZEl5i9Qt0xQ== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/package-graph" "3.18.0" - "@lerna/project" "3.18.0" - "@lerna/validation-error" "3.13.0" - "@lerna/write-log-file" "3.13.0" - dedent "^0.7.0" - execa "^1.0.0" - is-ci "^2.0.0" - lodash "^4.17.14" - npmlog "^4.1.2" - -"@lerna/conventional-commits@3.16.4": - version "3.16.4" - resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.16.4.tgz#bf464f11b2f6534dad204db00430e1651b346a04" - integrity sha512-QSZJ0bC9n6FVaf+7KDIq5zMv8WnHXnwhyL5jG1Nyh3SgOg9q2uflqh7YsYB+G6FwaRfnPaKosh6obijpYg0llA== - dependencies: - "@lerna/validation-error" "3.13.0" - conventional-changelog-angular "^5.0.3" - conventional-changelog-core "^3.1.6" - conventional-recommended-bump "^5.0.0" - fs-extra "^8.1.0" - get-stream "^4.0.0" - lodash.template "^4.5.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - pify "^4.0.1" - semver "^6.2.0" - -"@lerna/create-symlink@3.16.2": - version "3.16.2" - resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-3.16.2.tgz#412cb8e59a72f5a7d9463e4e4721ad2070149967" - integrity sha512-pzXIJp6av15P325sgiIRpsPXLFmkisLhMBCy4764d+7yjf2bzrJ4gkWVMhsv4AdF0NN3OyZ5jjzzTtLNqfR+Jw== - dependencies: - "@zkochan/cmd-shim" "^3.1.0" - fs-extra "^8.1.0" - npmlog "^4.1.2" - -"@lerna/create@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.18.0.tgz#78ba4af5eced661944a12b9d7da8553c096c390d" - integrity sha512-y9oS7ND5T13c+cCTJHa2Y9in02ppzyjsNynVWFuS40eIzZ3z058d9+3qSBt1nkbbQlVyfLoP6+bZPsjyzap5ig== - dependencies: - "@evocateur/pacote" "^9.6.3" - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.18.0" - "@lerna/npm-conf" "3.16.0" - "@lerna/validation-error" "3.13.0" - camelcase "^5.0.0" - dedent "^0.7.0" - fs-extra "^8.1.0" - globby "^9.2.0" - init-package-json "^1.10.3" - npm-package-arg "^6.1.0" - p-reduce "^1.0.0" - pify "^4.0.1" - semver "^6.2.0" - slash "^2.0.0" - validate-npm-package-license "^3.0.3" - validate-npm-package-name "^3.0.0" - whatwg-url "^7.0.0" - -"@lerna/describe-ref@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-3.16.5.tgz#a338c25aaed837d3dc70b8a72c447c5c66346ac0" - integrity sha512-c01+4gUF0saOOtDBzbLMFOTJDHTKbDFNErEY6q6i9QaXuzy9LNN62z+Hw4acAAZuJQhrVWncVathcmkkjvSVGw== - dependencies: - "@lerna/child-process" "3.16.5" - npmlog "^4.1.2" - -"@lerna/diff@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.18.0.tgz#9638ff4b46e2a8b0d4ebf54cf2f267ac2f8fdb29" - integrity sha512-3iLNlpurc2nV9k22w8ini2Zjm2UPo3xtQgWyqdA6eJjvge0+5AlNAWfPoV6cV+Hc1xDbJD2YDSFpZPJ1ZGilRw== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.18.0" - "@lerna/validation-error" "3.13.0" - npmlog "^4.1.2" - -"@lerna/exec@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.18.0.tgz#d9ec0b7ca06b7521f0b9f14a164e2d4ca5e1b3b9" - integrity sha512-hwkuzg1+38+pbzdZPhGtLIYJ59z498/BCNzR8d4/nfMYm8lFbw9RgJJajLcdbuJ9LJ08cZ93hf8OlzetL84TYg== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.18.0" - "@lerna/filter-options" "3.18.0" - "@lerna/run-topologically" "3.18.0" - "@lerna/validation-error" "3.13.0" - p-map "^2.1.0" - -"@lerna/filter-options@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-3.18.0.tgz#406667dc75a8fc813c26a91bde754b6a73e1a868" - integrity sha512-UGVcixs3TGzD8XSmFSbwUVVQnAjaZ6Rmt8Vuq2RcR98ULkGB1LiGNMY89XaNBhaaA8vx7yQWiLmJi2AfmD63Qg== - dependencies: - "@lerna/collect-updates" "3.18.0" - "@lerna/filter-packages" "3.18.0" - dedent "^0.7.0" - figgy-pudding "^3.5.1" - npmlog "^4.1.2" - -"@lerna/filter-packages@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-3.18.0.tgz#6a7a376d285208db03a82958cfb8172e179b4e70" - integrity sha512-6/0pMM04bCHNATIOkouuYmPg6KH3VkPCIgTfQmdkPJTullERyEQfNUKikrefjxo1vHOoCACDpy65JYyKiAbdwQ== - dependencies: - "@lerna/validation-error" "3.13.0" - multimatch "^3.0.0" - npmlog "^4.1.2" - -"@lerna/get-npm-exec-opts@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.13.0.tgz#d1b552cb0088199fc3e7e126f914e39a08df9ea5" - integrity sha512-Y0xWL0rg3boVyJk6An/vurKzubyJKtrxYv2sj4bB8Mc5zZ3tqtv0ccbOkmkXKqbzvNNF7VeUt1OJ3DRgtC/QZw== - dependencies: - npmlog "^4.1.2" - -"@lerna/get-packed@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-3.16.0.tgz#1b316b706dcee86c7baa55e50b087959447852ff" - integrity sha512-AjsFiaJzo1GCPnJUJZiTW6J1EihrPkc2y3nMu6m3uWFxoleklsSCyImumzVZJssxMi3CPpztj8LmADLedl9kXw== - dependencies: - fs-extra "^8.1.0" - ssri "^6.0.1" - tar "^4.4.8" - -"@lerna/github-client@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-3.16.5.tgz#2eb0235c3bf7a7e5d92d73e09b3761ab21f35c2e" - integrity sha512-rHQdn8Dv/CJrO3VouOP66zAcJzrHsm+wFuZ4uGAai2At2NkgKH+tpNhQy2H1PSC0Ezj9LxvdaHYrUzULqVK5Hw== - dependencies: - "@lerna/child-process" "3.16.5" - "@octokit/plugin-enterprise-rest" "^3.6.1" - "@octokit/rest" "^16.28.4" - git-url-parse "^11.1.2" - npmlog "^4.1.2" - -"@lerna/gitlab-client@3.15.0": - version "3.15.0" - resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-3.15.0.tgz#91f4ec8c697b5ac57f7f25bd50fe659d24aa96a6" - integrity sha512-OsBvRSejHXUBMgwWQqNoioB8sgzL/Pf1pOUhHKtkiMl6aAWjklaaq5HPMvTIsZPfS6DJ9L5OK2GGZuooP/5c8Q== - dependencies: - node-fetch "^2.5.0" - npmlog "^4.1.2" - whatwg-url "^7.0.0" - -"@lerna/global-options@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-3.13.0.tgz#217662290db06ad9cf2c49d8e3100ee28eaebae1" - integrity sha512-SlZvh1gVRRzYLVluz9fryY1nJpZ0FHDGB66U9tFfvnnxmueckRQxLopn3tXj3NU1kc3QANT2I5BsQkOqZ4TEFQ== - -"@lerna/has-npm-version@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-3.16.5.tgz#ab83956f211d8923ea6afe9b979b38cc73b15326" - integrity sha512-WL7LycR9bkftyqbYop5rEGJ9sRFIV55tSGmbN1HLrF9idwOCD7CLrT64t235t3t4O5gehDnwKI5h2U3oxTrF8Q== - dependencies: - "@lerna/child-process" "3.16.5" - semver "^6.2.0" - -"@lerna/import@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.18.0.tgz#c6b124b346a097e6c0f3f1ed4921a278d18bc80b" - integrity sha512-2pYIkkBTZsEdccfc+dPsKZeSw3tBzKSyl0b2lGrfmNX2Y41qqOzsJCyI1WO1uvEIP8aOaLy4hPpqRIBe4ee7hw== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.18.0" - "@lerna/prompt" "3.13.0" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/validation-error" "3.13.0" - dedent "^0.7.0" - fs-extra "^8.1.0" - p-map-series "^1.0.0" - -"@lerna/init@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.18.0.tgz#b23b9170cce1f4630170dd744e8ee75785ea898d" - integrity sha512-/vHpmXkMlSaJaq25v5K13mcs/2L7E32O6dSsEkHaZCDRiV2BOqsZng9jjbE/4ynfsWfLLlU9ZcydwG72C3I+mQ== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.18.0" - fs-extra "^8.1.0" - p-map "^2.1.0" - write-json-file "^3.2.0" - -"@lerna/link@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.18.0.tgz#bc72dc62ef4d8fb842b3286887980f98b764781d" - integrity sha512-FbbIpH0EpsC+dpAbvxCoF3cn7F1MAyJjEa5Lh3XkDGATOlinMFuKCbmX0NLpOPQZ5zghvrui97cx+jz5F2IlHw== - dependencies: - "@lerna/command" "3.18.0" - "@lerna/package-graph" "3.18.0" - "@lerna/symlink-dependencies" "3.17.0" - p-map "^2.1.0" - slash "^2.0.0" - -"@lerna/list@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.18.0.tgz#6e5fe545ce4ba7c1eeb6d6cf69240d06c02bd496" - integrity sha512-mpB7Q6T+n2CaiPFz0LuOE+rXphDfHm0mKIwShnyS/XDcii8jXv+z9Iytj8p3rfCH2I1L80j2qL6jWzyGy/uzKA== - dependencies: - "@lerna/command" "3.18.0" - "@lerna/filter-options" "3.18.0" - "@lerna/listable" "3.18.0" - "@lerna/output" "3.13.0" - -"@lerna/listable@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-3.18.0.tgz#752b014406a9a012486626d22e940edb8205973a" - integrity sha512-9gLGKYNLSKeurD+sJ2RA+nz4Ftulr91U127gefz0RlmAPpYSjwcJkxwa0UfJvpQTXv9C7yzHLnn0BjyAQRjuew== - dependencies: - "@lerna/query-graph" "3.18.0" - chalk "^2.3.1" - columnify "^1.5.4" - -"@lerna/log-packed@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-3.16.0.tgz#f83991041ee77b2495634e14470b42259fd2bc16" - integrity sha512-Fp+McSNBV/P2mnLUYTaSlG8GSmpXM7krKWcllqElGxvAqv6chk2K3c2k80MeVB4WvJ9tRjUUf+i7HUTiQ9/ckQ== - dependencies: - byte-size "^5.0.1" - columnify "^1.5.4" - has-unicode "^2.0.1" - npmlog "^4.1.2" - -"@lerna/npm-conf@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-3.16.0.tgz#1c10a89ae2f6c2ee96962557738685300d376827" - integrity sha512-HbO3DUrTkCAn2iQ9+FF/eisDpWY5POQAOF1m7q//CZjdC2HSW3UYbKEGsSisFxSfaF9Z4jtrV+F/wX6qWs3CuA== - dependencies: - config-chain "^1.1.11" - pify "^4.0.1" - -"@lerna/npm-dist-tag@3.18.1": - version "3.18.1" - resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-3.18.1.tgz#d4dd82ea92e41e960b7117f83102ebcd7a23e511" - integrity sha512-vWkZh2T/O9OjPLDrba0BTWO7ug/C3sCwjw7Qyk1aEbxMBXB/eEJPqirwJTWT+EtRJQYB01ky3K8ZFOhElVyjLw== - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - "@lerna/otplease" "3.16.0" - figgy-pudding "^3.5.1" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - -"@lerna/npm-install@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-3.16.5.tgz#d6bfdc16f81285da66515ae47924d6e278d637d3" - integrity sha512-hfiKk8Eku6rB9uApqsalHHTHY+mOrrHeWEs+gtg7+meQZMTS3kzv4oVp5cBZigndQr3knTLjwthT/FX4KvseFg== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/get-npm-exec-opts" "3.13.0" - fs-extra "^8.1.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - signal-exit "^3.0.2" - write-pkg "^3.1.0" - -"@lerna/npm-publish@3.16.2": - version "3.16.2" - resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-3.16.2.tgz#a850b54739446c4aa766a0ceabfa9283bb0be676" - integrity sha512-tGMb9vfTxP57vUV5svkBQxd5Tzc+imZbu9ZYf8Mtwe0+HYfDjNiiHLIQw7G95w4YRdc5KsCE8sQ0uSj+f2soIg== - dependencies: - "@evocateur/libnpmpublish" "^1.2.2" - "@lerna/otplease" "3.16.0" - "@lerna/run-lifecycle" "3.16.2" - figgy-pudding "^3.5.1" - fs-extra "^8.1.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - pify "^4.0.1" - read-package-json "^2.0.13" - -"@lerna/npm-run-script@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-3.16.5.tgz#9c2ec82453a26c0b46edc0bb7c15816c821f5c15" - integrity sha512-1asRi+LjmVn3pMjEdpqKJZFT/3ZNpb+VVeJMwrJaV/3DivdNg7XlPK9LTrORuKU4PSvhdEZvJmSlxCKyDpiXsQ== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/get-npm-exec-opts" "3.13.0" - npmlog "^4.1.2" - -"@lerna/otplease@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-3.16.0.tgz#de66aec4f3e835a465d7bea84b58a4ab6590a0fa" - integrity sha512-uqZ15wYOHC+/V0WnD2iTLXARjvx3vNrpiIeyIvVlDB7rWse9mL4egex/QSgZ+lDx1OID7l2kgvcUD9cFpbqB7Q== - dependencies: - "@lerna/prompt" "3.13.0" - figgy-pudding "^3.5.1" - -"@lerna/output@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/output/-/output-3.13.0.tgz#3ded7cc908b27a9872228a630d950aedae7a4989" - integrity sha512-7ZnQ9nvUDu/WD+bNsypmPG5MwZBwu86iRoiW6C1WBuXXDxM5cnIAC1m2WxHeFnjyMrYlRXM9PzOQ9VDD+C15Rg== - dependencies: - npmlog "^4.1.2" - -"@lerna/pack-directory@3.16.4": - version "3.16.4" - resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-3.16.4.tgz#3eae5f91bdf5acfe0384510ed53faddc4c074693" - integrity sha512-uxSF0HZeGyKaaVHz5FroDY9A5NDDiCibrbYR6+khmrhZtY0Bgn6hWq8Gswl9iIlymA+VzCbshWIMX4o2O8C8ng== - dependencies: - "@lerna/get-packed" "3.16.0" - "@lerna/package" "3.16.0" - "@lerna/run-lifecycle" "3.16.2" - figgy-pudding "^3.5.1" - npm-packlist "^1.4.4" - npmlog "^4.1.2" - tar "^4.4.10" - temp-write "^3.4.0" - -"@lerna/package-graph@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-3.18.0.tgz#eb42d14404a55b26b2472081615e26b0817cd91a" - integrity sha512-BLYDHO5ihPh20i3zoXfLZ5ZWDCrPuGANgVhl7k5pCmRj90LCvT+C7V3zrw70fErGAfvkcYepMqxD+oBrAYwquQ== - dependencies: - "@lerna/prerelease-id-from-version" "3.16.0" - "@lerna/validation-error" "3.13.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - semver "^6.2.0" - -"@lerna/package@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/package/-/package-3.16.0.tgz#7e0a46e4697ed8b8a9c14d59c7f890e0d38ba13c" - integrity sha512-2lHBWpaxcBoiNVbtyLtPUuTYEaB/Z+eEqRS9duxpZs6D+mTTZMNy6/5vpEVSCBmzvdYpyqhqaYjjSLvjjr5Riw== - dependencies: - load-json-file "^5.3.0" - npm-package-arg "^6.1.0" - write-pkg "^3.1.0" - -"@lerna/prerelease-id-from-version@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-3.16.0.tgz#b24bfa789f5e1baab914d7b08baae9b7bd7d83a1" - integrity sha512-qZyeUyrE59uOK8rKdGn7jQz+9uOpAaF/3hbslJVFL1NqF9ELDTqjCPXivuejMX/lN4OgD6BugTO4cR7UTq/sZA== - dependencies: - semver "^6.2.0" - -"@lerna/project@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/project/-/project-3.18.0.tgz#56feee01daeb42c03cbdf0ed8a2a10cbce32f670" - integrity sha512-+LDwvdAp0BurOAWmeHE3uuticsq9hNxBI0+FMHiIai8jrygpJGahaQrBYWpwbshbQyVLeQgx3+YJdW2TbEdFWA== - dependencies: - "@lerna/package" "3.16.0" - "@lerna/validation-error" "3.13.0" - cosmiconfig "^5.1.0" - dedent "^0.7.0" - dot-prop "^4.2.0" - glob-parent "^5.0.0" - globby "^9.2.0" - load-json-file "^5.3.0" - npmlog "^4.1.2" - p-map "^2.1.0" - resolve-from "^4.0.0" - write-json-file "^3.2.0" - -"@lerna/prompt@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-3.13.0.tgz#53571462bb3f5399cc1ca6d335a411fe093426a5" - integrity sha512-P+lWSFokdyvYpkwC3it9cE0IF2U5yy2mOUbGvvE4iDb9K7TyXGE+7lwtx2thtPvBAfIb7O13POMkv7df03HJeA== - dependencies: - inquirer "^6.2.0" - npmlog "^4.1.2" - -"@lerna/publish@3.18.3": - version "3.18.3" - resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.18.3.tgz#478bb94ee712a40b723413e437bcb9e307d3709c" - integrity sha512-XlfWOWIhaSK0Y2sX5ppNWI5Y3CDtlxMcQa1hTbZlC5rrDA6vD32iutbmH6Ix3c6wtvVbSkgA39GWsQEXxPS+7w== - dependencies: - "@evocateur/libnpmaccess" "^3.1.2" - "@evocateur/npm-registry-fetch" "^4.0.0" - "@evocateur/pacote" "^9.6.3" - "@lerna/check-working-tree" "3.16.5" - "@lerna/child-process" "3.16.5" - "@lerna/collect-updates" "3.18.0" - "@lerna/command" "3.18.0" - "@lerna/describe-ref" "3.16.5" - "@lerna/log-packed" "3.16.0" - "@lerna/npm-conf" "3.16.0" - "@lerna/npm-dist-tag" "3.18.1" - "@lerna/npm-publish" "3.16.2" - "@lerna/otplease" "3.16.0" - "@lerna/output" "3.13.0" - "@lerna/pack-directory" "3.16.4" - "@lerna/prerelease-id-from-version" "3.16.0" - "@lerna/prompt" "3.13.0" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/run-lifecycle" "3.16.2" - "@lerna/run-topologically" "3.18.0" - "@lerna/validation-error" "3.13.0" - "@lerna/version" "3.18.3" - figgy-pudding "^3.5.1" - fs-extra "^8.1.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - p-finally "^1.0.0" - p-map "^2.1.0" - p-pipe "^1.2.0" - semver "^6.2.0" - -"@lerna/pulse-till-done@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-3.13.0.tgz#c8e9ce5bafaf10d930a67d7ed0ccb5d958fe0110" - integrity sha512-1SOHpy7ZNTPulzIbargrgaJX387csN7cF1cLOGZiJQA6VqnS5eWs2CIrG8i8wmaUavj2QlQ5oEbRMVVXSsGrzA== - dependencies: - npmlog "^4.1.2" - -"@lerna/query-graph@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-3.18.0.tgz#43801a2f1b80a0ea0bfd9d42d470605326a3035d" - integrity sha512-fgUhLx6V0jDuKZaKj562jkuuhrfVcjl5sscdfttJ8dXNVADfDz76nzzwLY0ZU7/0m69jDedohn5Fx5p7hDEVEg== - dependencies: - "@lerna/package-graph" "3.18.0" - figgy-pudding "^3.5.1" - -"@lerna/resolve-symlink@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-3.16.0.tgz#37fc7095fabdbcf317c26eb74e0d0bde8efd2386" - integrity sha512-Ibj5e7njVHNJ/NOqT4HlEgPFPtPLWsO7iu59AM5bJDcAJcR96mLZ7KGVIsS2tvaO7akMEJvt2P+ErwCdloG3jQ== - dependencies: - fs-extra "^8.1.0" - npmlog "^4.1.2" - read-cmd-shim "^1.0.1" - -"@lerna/rimraf-dir@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-3.16.5.tgz#04316ab5ffd2909657aaf388ea502cb8c2f20a09" - integrity sha512-bQlKmO0pXUsXoF8lOLknhyQjOZsCc0bosQDoX4lujBXSWxHVTg1VxURtWf2lUjz/ACsJVDfvHZbDm8kyBk5okA== - dependencies: - "@lerna/child-process" "3.16.5" - npmlog "^4.1.2" - path-exists "^3.0.0" - rimraf "^2.6.2" - -"@lerna/run-lifecycle@3.16.2": - version "3.16.2" - resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-3.16.2.tgz#67b288f8ea964db9ea4fb1fbc7715d5bbb0bce00" - integrity sha512-RqFoznE8rDpyyF0rOJy3+KjZCeTkO8y/OB9orPauR7G2xQ7PTdCpgo7EO6ZNdz3Al+k1BydClZz/j78gNCmL2A== - dependencies: - "@lerna/npm-conf" "3.16.0" - figgy-pudding "^3.5.1" - npm-lifecycle "^3.1.2" - npmlog "^4.1.2" - -"@lerna/run-topologically@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-3.18.0.tgz#9508604553cfbeba106cd84b711fade17947f94a" - integrity sha512-lrfEewwuUMC3ioxf9Z9NdHUakN6ihekcPfdYbzR2slmdbjYKmIA5srkWdrK8NwOpQCAuekpOovH2s8X3FGEopg== - dependencies: - "@lerna/query-graph" "3.18.0" - figgy-pudding "^3.5.1" - p-queue "^4.0.0" - -"@lerna/run@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.18.0.tgz#b7069880f6313e4c6026b564b7b76e5d0f30a521" - integrity sha512-sblxHBZ9djaaG7wefPcfEicDqzrB7CP1m/jIB0JvPEQwG4C2qp++ewBpkjRw/mBtjtzg0t7v0nNMXzaWYrQckQ== - dependencies: - "@lerna/command" "3.18.0" - "@lerna/filter-options" "3.18.0" - "@lerna/npm-run-script" "3.16.5" - "@lerna/output" "3.13.0" - "@lerna/run-topologically" "3.18.0" - "@lerna/timer" "3.13.0" - "@lerna/validation-error" "3.13.0" - p-map "^2.1.0" - -"@lerna/symlink-binary@3.17.0": - version "3.17.0" - resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-3.17.0.tgz#8f8031b309863814883d3f009877f82e38aef45a" - integrity sha512-RLpy9UY6+3nT5J+5jkM5MZyMmjNHxZIZvXLV+Q3MXrf7Eaa1hNqyynyj4RO95fxbS+EZc4XVSk25DGFQbcRNSQ== - dependencies: - "@lerna/create-symlink" "3.16.2" - "@lerna/package" "3.16.0" - fs-extra "^8.1.0" - p-map "^2.1.0" - -"@lerna/symlink-dependencies@3.17.0": - version "3.17.0" - resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-3.17.0.tgz#48d6360e985865a0e56cd8b51b308a526308784a" - integrity sha512-KmjU5YT1bpt6coOmdFueTJ7DFJL4H1w5eF8yAQ2zsGNTtZ+i5SGFBWpb9AQaw168dydc3s4eu0W0Sirda+F59Q== - dependencies: - "@lerna/create-symlink" "3.16.2" - "@lerna/resolve-symlink" "3.16.0" - "@lerna/symlink-binary" "3.17.0" - fs-extra "^8.1.0" - p-finally "^1.0.0" - p-map "^2.1.0" - p-map-series "^1.0.0" - -"@lerna/timer@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-3.13.0.tgz#bcd0904551db16e08364d6c18e5e2160fc870781" - integrity sha512-RHWrDl8U4XNPqY5MQHkToWS9jHPnkLZEt5VD+uunCKTfzlxGnRCr3/zVr8VGy/uENMYpVP3wJa4RKGY6M0vkRw== - -"@lerna/validation-error@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-3.13.0.tgz#c86b8f07c5ab9539f775bd8a54976e926f3759c3" - integrity sha512-SiJP75nwB8GhgwLKQfdkSnDufAaCbkZWJqEDlKOUPUvVOplRGnfL+BPQZH5nvq2BYSRXsksXWZ4UHVnQZI/HYA== - dependencies: - npmlog "^4.1.2" - -"@lerna/version@3.18.3": - version "3.18.3" - resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.18.3.tgz#01344b39c0749fdeb6c178714733bacbde4d602f" - integrity sha512-IXXRlyM3Q/jrc+QZio+bgjG4ZaK+4LYmY4Yql1xyY0wZhAKsWP/Q6ho7e1EJNjNC5dUJO99Fq7qB05MkDf2OcQ== - dependencies: - "@lerna/check-working-tree" "3.16.5" - "@lerna/child-process" "3.16.5" - "@lerna/collect-updates" "3.18.0" - "@lerna/command" "3.18.0" - "@lerna/conventional-commits" "3.16.4" - "@lerna/github-client" "3.16.5" - "@lerna/gitlab-client" "3.15.0" - "@lerna/output" "3.13.0" - "@lerna/prerelease-id-from-version" "3.16.0" - "@lerna/prompt" "3.13.0" - "@lerna/run-lifecycle" "3.16.2" - "@lerna/run-topologically" "3.18.0" - "@lerna/validation-error" "3.13.0" - chalk "^2.3.1" - dedent "^0.7.0" - load-json-file "^5.3.0" - minimatch "^3.0.4" - npmlog "^4.1.2" - p-map "^2.1.0" - p-pipe "^1.2.0" - p-reduce "^1.0.0" - p-waterfall "^1.0.0" - semver "^6.2.0" - slash "^2.0.0" - temp-write "^3.4.0" - write-json-file "^3.2.0" - -"@lerna/write-log-file@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-3.13.0.tgz#b78d9e4cfc1349a8be64d91324c4c8199e822a26" - integrity sha512-RibeMnDPvlL8bFYW5C8cs4mbI3AHfQef73tnJCQ/SgrXZHehmHnsyWUiE7qDQCAo+B1RfTapvSyFF69iPj326A== - dependencies: - npmlog "^4.1.2" - write-file-atomic "^2.3.0" - "@material-ui/core@^3.7.1": - version "3.9.3" - resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-3.9.3.tgz#d378c1f4beb18df9a534ca7258c2c33fb8e0e51f" - integrity sha512-REIj62+zEvTgI/C//YL4fZxrCVIySygmpZglsu/Nl5jPqy3CDjZv1F9ubBYorHqmRgeVPh64EghMMWqk4egmfg== + version "3.9.4" + resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-3.9.4.tgz#5297fd4ad9e739a87da4a6d34fc4af5396886e13" + integrity sha512-r8QFLSexcYZbnqy/Hn4v8xzmAJV41yaodUVjmbGLi1iGDLG3+W941hEtEiBmxTRRqv2BdK3r4ijILcqKmDv/Sw== dependencies: "@babel/runtime" "^7.2.0" "@material-ui/system" "^3.0.0-alpha.0" @@ -2293,40 +1551,210 @@ call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" -"@neo-one/ec-key@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@neo-one/ec-key/-/ec-key-0.1.0.tgz#400caf0dcd63834671364a8c13f6fb0846c54112" - integrity sha512-qciOVDhfXGlSiamCu+yntG9+2fyEJGvraWNGROBxtOlbRQLS+H92vNJVonMqYKyZDeDBu+JWprcEg525K5wJLA== +"@neo-one/client-common@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@neo-one/client-common/-/client-common-2.6.0.tgz#bbce2295872e564cd67870a7d4a1a5f093a694a1" + integrity sha512-tymMNgzHLc7XDsM4Sl1VZfNc0cvop3m2PTN4YMlMvQSu6TJG/JdadhfODEHFx7qV/j7Oj5wdBH+eNMESo/urKA== dependencies: - asn1.js "^1.0.4" + "@neo-one/ec-key" "^0.1.0" + "@neo-one/utils" "^2.5.0" + bignumber.js "^9.0.0" + bn.js "^5.0.0" + bs58 "^4.0.1" + buffer-xor "^2.0.2" + elliptic "^6.5.0" + hash.js "^1.1.7" + lodash "^4.17.15" + rxjs "^6.5.3" + safe-stable-stringify "^1.1.0" + scrypt-js "^2.0.3" + source-map "^0.7.3" + tslib "^1.10.0" + wif "^2.0.6" -"@neotracker/core@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@neotracker/core/-/core-1.3.0.tgz#1b057e376f31473c55aa283ec53b8bd919db238d" - integrity sha512-4ZOhR2NmBWXH1urenFqdMC/hNxFwXptXiXZWL/eoGUozQAu2B/CSBca/3h79zqkV80sGxgUfuUWYQU4CJ/cq8g== +"@neo-one/client-core@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@neo-one/client-core/-/client-core-2.6.0.tgz#05d3e3083750f5604cdcd315a816a0f81a7c6a30" + integrity sha512-Ayqw/csaP5xeQC3JCkOsdfCfTdk5/WJTsUTQX8rdMxgllVgrylq6KDxJNXbgwb+JG/oPfOqzlcb9rxtse/FIPA== + dependencies: + "@neo-one/client-common" "^2.6.0" + "@neo-one/client-switch" "^2.5.0" + "@neo-one/utils" "^2.5.0" + "@reactivex/ix-es2015-cjs" "^2.5.3" + "@reactivex/ix-esnext-esm" "^2.5.3" + bignumber.js "^9.0.0" + bn.js "^5.0.0" + cross-fetch "^3.0.4" + dataloader "^2.0.0" + debug "^4.1.1" + lodash "^4.17.15" + rxjs "^6.5.3" + safe-stable-stringify "^1.1.0" + tapable "^1.1.3" + tslib "^1.10.0" + +"@neo-one/client-full-common@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@neo-one/client-full-common/-/client-full-common-2.5.0.tgz#d4a6b0d727a5770f636689a375e932ea36f8fdb7" + integrity sha512-G/nUrG4pBH44lyxXiPGrzal2UuKQDkeZ57jo6JVcOjLQcsj1LHZKlEfNeGRlO/RSBX7FW1diRfWUl8Vob4vDCQ== dependencies: - "@material-ui/core" "^3.7.1" - "@neo-one/client" "2.3.0" - "@neo-one/client-full" "2.3.0" - "@neo-one/client-switch" "2.3.0" - "@neo-one/node-core" "2.3.0" - "@neo-one/node-neo-settings" "2.3.0" - "@neo-one/utils" "2.3.0" - apollo-cache-inmemory "^1.3.10" - apollo-client "^2.4.6" - apollo-link "^1.2.3" - app-root-dir "^1.0.2" + "@neo-one/client-common" "^2.6.0" + "@neo-one/utils" "^2.5.0" + tslib "^1.10.0" + +"@neo-one/client-full-core@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@neo-one/client-full-core/-/client-full-core-2.5.0.tgz#f1255fbdb532739f0bf15f47f8cf56286537e55c" + integrity sha512-ecqTyrOyI7IhW8Mw0MXldz0qIFDHZeI0hT7RSpz9PQKgtSOLBrk0igmzGCN/mHViNgw1EL4ahWOSY4wqOi8DKg== + dependencies: + "@neo-one/client-common" "^2.6.0" + "@neo-one/client-core" "^2.6.0" + "@neo-one/client-full-common" "^2.5.0" + "@neo-one/client-switch" "^2.5.0" + "@neo-one/utils" "^2.5.0" bignumber.js "^9.0.0" - bn.js "^4.11.8" - change-case "^3.0.2" - chokidar "^2.0.3" - classnames "^2.2.6" - cross-fetch "^3.0.0" - cryptocompare "^0.6.0" - css.escape "^1.5.1" - dataloader "^1.4.0" - execa "^3.2.0" - fs-extra "^7.0.1" + lodash "^4.17.15" + tslib "^1.10.0" + +"@neo-one/client-full@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@neo-one/client-full/-/client-full-2.5.0.tgz#c4dbe00d3f2d3d929a6940bd297311879bf3be65" + integrity sha512-fOpBO3abRw5KkmrPIsOx5pH6iaIgiEz5tiWY43N2M3nWb8u2gv6zhDGj79nZN9dOVin9dlkamGnJQ63h0QL2dA== + dependencies: + "@neo-one/client" "^2.6.0" + "@neo-one/client-full-core" "^2.5.0" + +"@neo-one/client-switch@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@neo-one/client-switch/-/client-switch-2.5.0.tgz#d3bb843d6ef4dbbf9f27fe3c4d3f3385df990eb5" + integrity sha512-mTeCd2UIR5Deqfv+rbjSGGzoklnKDzWkSEHppscEQ21E9vA4cRXeKnB7Lk3NAHpvVwdNfWCNKJORzBDm88hoPg== + dependencies: + "@babel/code-frame" "^7.0.0" + "@ledgerhq/hw-transport-u2f" "^4.68.2" + "@neo-one/client-common" "^2.6.0" + "@neo-one/node-vm" "^2.5.0" + "@neo-one/utils" "^2.5.0" + lodash "^4.17.15" + regenerator-runtime "^0.13.3" + source-map "^0.7.3" + tslib "^1.10.0" + optionalDependencies: + "@ledgerhq/hw-transport-node-hid" "^4.68.2" + +"@neo-one/client@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@neo-one/client/-/client-2.6.0.tgz#bc315aaf6c0fe6ca66788798087a2dec48cc6d9d" + integrity sha512-4o4JWRG9tS8qGraGADkxlmzZ+GZSABv+k1pee5nrJOXX0h9cTayK/uFZ4Cn2Gn8Qv1A+Tym5go7JrqTd5ojs6g== + dependencies: + "@neo-one/client-common" "^2.6.0" + "@neo-one/client-core" "^2.6.0" + "@neo-one/developer-tools" "^2.5.0" + +"@neo-one/developer-tools@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@neo-one/developer-tools/-/developer-tools-2.5.0.tgz#6ac5f7b2be2ce14307728e20fab239fafa8b1867" + integrity sha512-OmxkroHGbuIRPxYqdWm3nPhn1dWvxfkhxXrUUP8DumBvFmP/hgnQD0IM4aT33F+rBhRf2UgOGWgiQ6xLVdkTow== + dependencies: + "@neo-one/client-core" "^2.6.0" + resize-observer-polyfill "^1.5.0" + tslib "^1.10.0" + +"@neo-one/ec-key@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@neo-one/ec-key/-/ec-key-0.1.0.tgz#400caf0dcd63834671364a8c13f6fb0846c54112" + integrity sha512-qciOVDhfXGlSiamCu+yntG9+2fyEJGvraWNGROBxtOlbRQLS+H92vNJVonMqYKyZDeDBu+JWprcEg525K5wJLA== + dependencies: + asn1.js "^1.0.4" + +"@neo-one/edge@^15.0.0": + version "15.0.0" + resolved "https://registry.yarnpkg.com/@neo-one/edge/-/edge-15.0.0.tgz#e76de2a71f647e3a2ecc7e1e12912c24224e4c61" + integrity sha512-oBxcE1r5vNHreZmQYWnVZLniJXBVv6A5VY5Viqd3hF7WcEa9aT2Z+3bSgvHtT6TykIJhonXwBoilcFdS08Ux6A== + dependencies: + edge-cs "1.2.1" + nan "^2.14.0" + +"@neo-one/node-core@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@neo-one/node-core/-/node-core-2.5.0.tgz#9a6b071e4f7c8f5589080634acfe36d02020a2f5" + integrity sha512-DbNVUVo+KTlOY4DIaCtjbRrcahad74/GOv81TUhKZkOh1O0NbgUKiRdWxEkLt+ap9XdUEanXZjp34ZXCZFmhgQ== + dependencies: + "@neo-one/client-common" "^2.6.0" + "@neo-one/client-full-common" "^2.5.0" + "@neo-one/utils" "^2.5.0" + bignumber.js "^9.0.0" + bn.js "^5.0.0" + lodash "^4.17.15" + rxjs "^6.5.3" + through "^2.3.8" + tslib "^1.10.0" + +"@neo-one/node-neo-settings@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@neo-one/node-neo-settings/-/node-neo-settings-2.5.0.tgz#f128861d9e58139031cf630aea1dde1109b1b74c" + integrity sha512-vyy1NHcM4Op/na8wQ3WoO0xm/Q2I36cxJj5F403PcMkJIGJx1oj8u1yoz5HF7joE4weBptq7Kxe/4RUfMvj3FQ== + dependencies: + "@neo-one/client-common" "^2.6.0" + "@neo-one/node-core" "^2.5.0" + "@neo-one/utils" "^2.5.0" + bn.js "^5.0.0" + lodash "^4.17.15" + tslib "^1.10.0" + +"@neo-one/node-vm@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@neo-one/node-vm/-/node-vm-2.5.0.tgz#089e9d7ac7166aa6ef2014ba368f70ba25c23a81" + integrity sha512-mNhyMGL6AcbtM/Kl5WY9CfR3Eq88q4HhX5NxaflFGO692K0RRGOnVDnmRxge1Lb1RikP1ovAcqixHSvRn61h/g== + dependencies: + "@neo-one/client-common" "^2.6.0" + "@neo-one/client-full-common" "^2.5.0" + "@neo-one/node-core" "^2.5.0" + "@neo-one/utils" "^2.5.0" + "@reactivex/ix-es2015-cjs" "^2.5.3" + "@reactivex/ix-esnext-esm" "^2.5.3" + bitwise "^2.0.3" + bn.js "^5.0.0" + lodash "^4.17.15" + rxjs "^6.5.3" + tslib "^1.10.0" + +"@neo-one/utils@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@neo-one/utils/-/utils-2.5.0.tgz#76b25753a171283e0d36af5b9aa41bf62ac4345c" + integrity sha512-JR7M67RcsIOYQqjzosKRI9aN5X7/juouTyr0ZsVw9RRf/8pPn8PdIm0q59HlGtJwI1Axqbkjcff1qymgXlwjjg== + dependencies: + "@types/node" "^12.7.7" + lodash "^4.17.15" + rxjs "^6.5.3" + tslib "^1.10.0" + +"@neotracker/core@1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@neotracker/core/-/core-1.4.1.tgz#eb9d34542ac33df0f709c509250b583c74f09eb7" + integrity sha512-vkKmjVvYTf95UlyQLaXr4ioezUzpPckTghEu+qvrUwZxMdVuq4BIy/EBjj7PmbU/lCQRlZzQ45PlbhCAO6MVug== + dependencies: + "@material-ui/core" "^3.7.1" + "@neo-one/client-common" "^2.6.0" + "@neo-one/client-core" "^2.6.0" + "@neo-one/client-full" "^2.5.0" + "@neo-one/node-core" "^2.5.0" + "@neo-one/node-neo-settings" "^2.5.0" + "@neo-one/utils" "^2.5.0" + apollo-cache-inmemory "^1.3.10" + apollo-client "^2.4.6" + apollo-link "^1.2.3" + app-root-dir "^1.0.2" + bignumber.js "^9.0.0" + bn.js "^4.11.8" + change-case "^3.0.2" + chokidar "^2.0.3" + classnames "^2.2.6" + cross-fetch "^3.0.0" + cryptocompare "^0.6.0" + css.escape "^1.5.1" + dataloader "^1.4.0" + execa "^3.2.0" + fs-extra "^7.0.1" graphql "14.5.8" graphql-tag "^2.10.0" graphql-tools "^4.0.3" @@ -2339,14 +1767,14 @@ js-sha3 "^0.8.0" jss "^9.8.7" jss-preset-default "^4.3.0" - knex "^0.15.2" + knex "0.20.8" koa "^2.11.0" koa-better-body "^3.1.13" koa-compose "^4.1.0" koa-compress "^3.0.0" koa-convert "^1.2.0" koa-cors "^0.0.16" - koa-helmet "^4.0.0" + koa-helmet "^5.2.0" koa-ratelimit-lru "^1.0.2" koa-router "^7.4.0" locale2 "^2.3.1" @@ -2356,12 +1784,11 @@ objection "^1.4.0" pg "^7.7.1" pino "^5.13.2" - pino-pretty "^3.2.1" prop-types "^15.6.2" qr-image "^3.2.0" rc "^1.2.8" - react "16.7.0" - react-dom "16.7.0" + react "^16.7.0" + react-dom "^16.7.0" react-helmet "^5.2.0" react-jss "^8.6.1" react-known-props "^2.4.0" @@ -2385,11 +1812,11 @@ safe-stable-stringify "^1.1.0" scrypt-js "^2.0.4" semver "^5.6.0" - serialize-javascript "^1.5.0" + serialize-javascript "^2.1.2" sitemap "^5.0.1" source-map-support "^0.5.16" sql-summary "^1.0.1" - sqlite3 "^4.0.4" + sqlite3 "4.0.9" styled-components "^4.1.3" timeago.js "^4.0.0-beta.1" toobusy-js "^0.5.1" @@ -2423,244 +1850,1178 @@ "@nodelib/fs.scandir" "2.1.3" fastq "^1.6.0" -"@octokit/endpoint@^5.1.0": - version "5.4.1" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-5.4.1.tgz#8f4c747d6cf8f352683d35a7fe8664db487cb730" - integrity sha512-iwn46orWg3F4iqIzAVRfbzhnROyx7BQ7zJE0B7SEeaMIBvk3qmWtswtRk14QkMNUuNiCHQ6mAM00VJxWqrdM1g== +"@phenomnomnominal/tsquery@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@phenomnomnominal/tsquery/-/tsquery-4.0.0.tgz#610e8ac968137e4a0f98c842c919bb8ad0e85718" + integrity sha512-s2Yet/MCj9Jh6nR6GfldrUPT6Y+aM1jIAdiKcOKEzmeKALT0Tc7SFIkYP3KvzjzbkKK5W7BiJ3cWy2UOa4ITbw== dependencies: - is-plain-object "^3.0.0" - universal-user-agent "^4.0.0" + esquery "^1.0.1" -"@octokit/plugin-enterprise-rest@^3.6.1": - version "3.6.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-3.6.2.tgz#74de25bef21e0182b4fa03a8678cd00a4e67e561" - integrity sha512-3wF5eueS5OHQYuAEudkpN+xVeUsg8vYEMMenEzLphUZ7PRZ8OJtDcsreL3ad9zxXmBbaFWzLmFcdob5CLyZftA== +"@reach/router@^1.2.1": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@reach/router/-/router-1.3.3.tgz#58162860dce6c9449d49be86b0561b5ef46d80db" + integrity sha512-gOIAiFhWdiVGSVjukKeNKkCRBLmnORoTPyBihI/jLunICPgxdP30DroAvPQuf1eVfQbfGJQDJkwhJXsNPMnVWw== + dependencies: + create-react-context "0.3.0" + invariant "^2.2.3" + prop-types "^15.6.1" + react-lifecycles-compat "^3.0.4" -"@octokit/request-error@^1.0.1", "@octokit/request-error@^1.0.2": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-1.0.4.tgz#15e1dc22123ba4a9a4391914d80ec1e5303a23be" - integrity sha512-L4JaJDXn8SGT+5G0uX79rZLv0MNJmfGa4vb4vy1NnpjSnWDLJRy6m90udGwvMmavwsStgbv2QNkPzzTCMmL+ig== +"@reactivex/ix-es2015-cjs@^2.5.3": + version "2.5.5" + resolved "https://registry.yarnpkg.com/@reactivex/ix-es2015-cjs/-/ix-es2015-cjs-2.5.5.tgz#768423b499ea14961efc1ebd8323f5d5f8d02e79" + integrity sha512-q5aBLwmAhwl5+xBUjFyzQ/OkeIWozni8CAajYsFvHoqOmrJSyhtfKb08WflRaHdKU+eF3uxQWjFjKet126XCVQ== dependencies: - deprecation "^2.0.0" - once "^1.4.0" + "@types/node" "^11.11.6" + tslib "^1.9.3" -"@octokit/request@^5.2.0": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.2.1.tgz#d8076b4bd415802c2dbffc82cf9b8b78f49551a3" - integrity sha512-onjQo4QKyiMAqLM6j3eH8vWw1LEfNCpoZUl6a+TrZVJM1wysBC8F0GhK9K/Vc9UsScSmVs2bstOVD34xpQ2wqQ== +"@reactivex/ix-esnext-esm@^2.5.3": + version "2.5.5" + resolved "https://registry.yarnpkg.com/@reactivex/ix-esnext-esm/-/ix-esnext-esm-2.5.5.tgz#b8719ee5ebd3b22cbcd3e0f923d811d1022b414a" + integrity sha512-VOWI2m6XK2XkVZ4uJ/oUJ7U3lgPkGo3W5rsltEDjOt4fn4UrT7Djj+VQPZYx25Qd9Bh10pPYLhRf7Fz4qZrRoA== dependencies: - "@octokit/endpoint" "^5.1.0" - "@octokit/request-error" "^1.0.1" - deprecation "^2.0.0" - is-plain-object "^3.0.0" - node-fetch "^2.3.0" - once "^1.4.0" - universal-user-agent "^4.0.0" - -"@octokit/rest@^16.28.4": - version "16.33.1" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.33.1.tgz#19229f5fd28d8e071644d37c249775ee40add433" - integrity sha512-lOQ+fJZwkeJ/1PRTdnY1uNja01aKOMioRhQfZtei64gZMXIX3EAfF4koMQMvoLFwsnVBu3ifj1JW1WAAKdXcnA== - dependencies: - "@octokit/request" "^5.2.0" - "@octokit/request-error" "^1.0.2" - atob-lite "^2.0.0" - before-after-hook "^2.0.0" - btoa-lite "^1.0.0" - deprecation "^2.0.0" - lodash.get "^4.4.2" - lodash.set "^4.3.2" - lodash.uniq "^4.5.0" - octokit-pagination-methods "^1.1.0" - once "^1.4.0" - universal-user-agent "^4.0.0" + "@types/node" "^11.11.6" + tslib "^1.9.3" -"@opencensus/core@^0.0.16": - version "0.0.16" - resolved "https://registry.yarnpkg.com/@opencensus/core/-/core-0.0.16.tgz#52bd612432b6f1ac2eec3332cdcf0c8046fc27f1" - integrity sha512-SZv5VpdLAzjLZAXwycj0XnvOWiVLu4HYanEZxXZNpvtXA6tQDlMP8Qssrd7Lz7+mWxAeRNaHiCf9Vy+A15R8tA== +"@render-props/events@^0.1.12", "@render-props/events@^0.1.2": + version "0.1.13" + resolved "https://registry.yarnpkg.com/@render-props/events/-/events-0.1.13.tgz#a0c4d9e4578fad8ba87118813256bb80cae43d52" + integrity sha512-VM4RK4vz6JX/0v2+f6PWxpUVQCyiu9jtJY4tpsGYV/b+bFLqf90F4y/QEPcEqNZW5iam7boX32KeIasjKDpFTA== dependencies: - continuation-local-storage "^3.2.1" - log-driver "^1.2.7" - semver "^6.0.0" - shimmer "^1.2.0" - uuid "^3.2.1" + "@babel/runtime" "^7.4.0" -"@opencensus/core@^0.0.17": - version "0.0.17" - resolved "https://registry.yarnpkg.com/@opencensus/core/-/core-0.0.17.tgz#2cd7c211168eeda48667f8db19717c93955f5372" - integrity sha512-cFaS72oQmZJZdTEFOnHEopOVbgYbyVC0kaVt2IDNgjZV6cuKxTyWEKCLEAW8/VdWPz2MnflJZfeE0cRXQ1AB0g== +"@render-props/rect@^0.1.16", "@render-props/rect@^0.1.21": + version "0.1.22" + resolved "https://registry.yarnpkg.com/@render-props/rect/-/rect-0.1.22.tgz#f418b8e3bb3802e8181ca7deafa107baf619e1a0" + integrity sha512-C+Ys49uLpAC80WhaiEQE4z18eiUook1mIz41RoLMcZdTZxeV8x0xtBdFHZ3n/yl+M28sEcNYy79F3QZSh611aQ== dependencies: - continuation-local-storage "^3.2.1" - log-driver "^1.2.7" - semver "^6.0.0" - shimmer "^1.2.0" - uuid "^3.2.1" + "@babel/runtime" "^7.4.0" + "@render-props/events" "^0.1.2" + "@render-props/throttle" "^0.1.5" -"@opencensus/exporter-jaeger@^0.0.17": - version "0.0.17" - resolved "https://registry.yarnpkg.com/@opencensus/exporter-jaeger/-/exporter-jaeger-0.0.17.tgz#c8366a51e314300f0c5a3afba2db966012b6fd62" - integrity sha512-8XrHUgnO0LLdXgazaCXWbuaOKoE9hpXuaw8I5DlIzZCv0aZyWH/MuHgJB+FfC18UWoQzOK221NF7Ko5epe7jyA== +"@render-props/scrollable@^0.1.19", "@render-props/scrollable@^0.1.20": + version "0.1.20" + resolved "https://registry.yarnpkg.com/@render-props/scrollable/-/scrollable-0.1.20.tgz#d299b1569e58d5db6e831e7e4debad3edcdb6b16" + integrity sha512-iF5ht7D22+nKBENaZmLm6OiPNs+1OnlqO71uh30rna4HwqssiDy8COhFyFG6uhwfk/nB77CTtfxwIdCMaX7YCQ== dependencies: - "@opencensus/core" "^0.0.17" - jaeger-client "~3.15.0" + "@babel/runtime" "^7.4.0" + "@render-props/events" "^0.1.2" + "@render-props/throttle" "^0.1.5" + "@render-props/utils" "^0.2.1" -"@opencensus/exporter-prometheus@^0.0.16": - version "0.0.16" - resolved "https://registry.yarnpkg.com/@opencensus/exporter-prometheus/-/exporter-prometheus-0.0.16.tgz#53ce7492d0ef9215feece3624aa2785107ce2cc6" - integrity sha512-nbYQYuC6l2ikoiBVgZUIh3EwASGajkwkpSMz4BkHg9Os+9Pq4zUK7qaIAbtmj2MO+z/cFCC84hlcoQU1k8LNEQ== +"@render-props/size-observer@^0.1.18": + version "0.1.18" + resolved "https://registry.yarnpkg.com/@render-props/size-observer/-/size-observer-0.1.18.tgz#5d2614e1e27101d89588999de96f82a4675fc9ee" + integrity sha512-bUk+s249KmX1LJGoJzpXd5ki4vS/tlBHxaUFHvwky/+yabqbW/4uwh8KtxiO/VFtfMyW3dMd+FdrXUOE0x0LCQ== dependencies: - "@opencensus/core" "^0.0.16" - express "^4.16.3" - prom-client "^11.1.1" + "@babel/runtime" "^7.4.0" + "@render-props/rect" "^0.1.16" + "@render-props/utils" "^0.2.1" -"@opencensus/nodejs-base@^0.0.16": - version "0.0.16" - resolved "https://registry.yarnpkg.com/@opencensus/nodejs-base/-/nodejs-base-0.0.16.tgz#39b643b48f14cc029d749fe88befa543a3d5fcca" - integrity sha512-qM0D9VT6B6aL5cRwrUAVNqx9Rt7Sn5Tzw6oncWcpEKNxQ+nuaEDJre6Ey/UoorAH4VGurM1V74Deq+MV0xgnJw== +"@render-props/throttle@^0.1.15", "@render-props/throttle@^0.1.5": + version "0.1.18" + resolved "https://registry.yarnpkg.com/@render-props/throttle/-/throttle-0.1.18.tgz#6418911a8448822b52e886ebea7c49e0c8129ecd" + integrity sha512-NIURBJ3oOtotWl2++O7lauiG4tzEClKSf13nBAI3QblWycO6X5OJ7+S1QaogpOkufz/nwFE5RdcwYDvoOBkV1w== dependencies: - "@opencensus/core" "^0.0.16" - extend "^3.0.2" - require-in-the-middle "^4.0.0" + "@babel/runtime" "^7.4.0" + raf "^3.4.1" -"@opencensus/propagation-tracecontext@^0.0.16": - version "0.0.16" - resolved "https://registry.yarnpkg.com/@opencensus/propagation-tracecontext/-/propagation-tracecontext-0.0.16.tgz#29ab552d04fbd00d3ae7e97c26c3c90718a2a9f8" - integrity sha512-3WCWEyFfCfFOnznpH6NAydJ1dlPIbNY4BPzR3dz60HWv6OfyjUQo56vfCmbGjH/GIDftoRhuDIYON8T7GgYOHw== +"@render-props/utils@^0.2.1", "@render-props/utils@^0.2.11": + version "0.2.15" + resolved "https://registry.yarnpkg.com/@render-props/utils/-/utils-0.2.15.tgz#c5aa11f6f09ad740881e7a91bd1f64e5dac693e3" + integrity sha512-PaZxTb/AQen5fZWwKKosl0fdJsh4n3ljDajwIIdLxVOnhd46m5lJnx2FK6E3UHrgfCTfHzLeftQE0vo7OKNqdg== dependencies: - "@opencensus/core" "^0.0.16" + "@essentials/are-equal" "^1.0.0" + "@essentials/interpolate" "^1.0.0" + "@essentials/request-interval" "^1.0.1" + "@essentials/request-timeout" "^1.0.0" -"@opencensus/web-core@^0.0.6": - version "0.0.6" - resolved "https://registry.yarnpkg.com/@opencensus/web-core/-/web-core-0.0.6.tgz#e2aed61c6881fdba106c1ed5a48701fe763b5e8b" - integrity sha512-qLIZPsbCGEYNEyfH8/ietJDYhfMfqbWtXp7mFCpE3RvCW/QBUzDnfDRyLJTF6s0Ad5VnlJQ9yF2baDkDAaanpg== +"@render-props/viewport@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@render-props/viewport/-/viewport-0.3.1.tgz#09d4690298315a26d9ee634e7c509caa8c545a79" + integrity sha512-q3PTAvWWs2L/jQ9iyER8tc+0tpXnzjWTslDQCmL8eHrAcHAY+knX9qdVA0XIZYt7GA+meDJ9Hqvc+LlgMfDfnA== dependencies: - "@opencensus/web-types" "^0.0.6" - "@types/node" "^12.6.9" + "@babel/runtime" "^7.4.0" + "@render-props/events" "^0.1.12" + "@render-props/rect" "^0.1.21" + "@render-props/scrollable" "^0.1.19" + "@render-props/throttle" "^0.1.15" + "@render-props/utils" "^0.2.11" -"@opencensus/web-core@^0.0.7": - version "0.0.7" - resolved "https://registry.yarnpkg.com/@opencensus/web-core/-/web-core-0.0.7.tgz#daa5fed6d5909be867f8eecd4ff88ac818b0aec3" - integrity sha512-UHAwQMP2kgWKuLkrEGpH0/NSLeiib4/E2SIMCUdTpqXgDWVEBab2hnBLQDWkfC6TgFLMWNDP7BI13HqIyKhQvQ== +"@rush-temp/build-tests@file:./projects/build-tests.tgz": + version "0.0.0" + resolved "file:./projects/build-tests.tgz" dependencies: - "@opencensus/web-types" "^0.0.7" - "@types/node" "^12.6.9" + "@babel/preset-env" "^7.6.3" + app-root-dir "^1.0.2" + babel-jest "^24.9.0" + bn.js "^5.0.0" + codecov "^3.6.1" + execa "^3.2.0" + fs-extra "^8.1.0" + jest "^24.9.0" + jest-circus "^24.9.0" + jest-junit "^10.0.0" + lodash "^4.17.15" + nyc "^14.1.1" + tmp "^0.1.0" + ts-jest "^24.1.0" -"@opencensus/web-propagation-tracecontext@^0.0.7": - version "0.0.7" - resolved "https://registry.yarnpkg.com/@opencensus/web-propagation-tracecontext/-/web-propagation-tracecontext-0.0.7.tgz#c037eb5e90964464643bcea55d2a827851c16dce" - integrity sha512-nsoftaJ2I4axkBsNertmSlTxSlc34IeW28UVK5sesC6RO3RiWnDHHG3EzTfjoH0f0Vfx53DqhrO0cPjca228fA== +"@rush-temp/build-tools-web@file:./projects/build-tools-web.tgz": + version "0.0.0" + resolved "file:./projects/build-tools-web.tgz" dependencies: - "@opencensus/web-core" "^0.0.7" + "@babel/core" "^7.6.2" + "@babel/plugin-proposal-async-generator-functions" "^7.2.0" + "@babel/plugin-proposal-object-rest-spread" "^7.5.5" + "@babel/plugin-syntax-dynamic-import" "^7.2.0" + "@babel/plugin-syntax-numeric-separator" "^7.2.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + "@babel/plugin-syntax-typescript" "^7.3.3" + "@babel/polyfill" "^7.6.0" + "@babel/preset-env" "^7.6.3" + "@babel/preset-react" "^7.0.0" + "@babel/runtime" "^7.6.3" + "@cypress/webpack-preprocessor" "^4.1.0" + "@types/autoprefixer" "^9.6.1" + "@types/cssnano" "^4.0.0" + "@types/fs-extra" "^8.0.0" + "@types/gulp" "^4.0.6" + "@types/gulp-flatten" "^0.0.31" + "@types/gulp-plumber" "^0.0.32" + "@types/gulp-rename" "^0.0.33" + "@types/gulp-replace" "^0.0.31" + "@types/gulp-sourcemaps" "^0.0.32" + "@types/lodash" "^4.14.138" + "@types/react" "^16.9.15" + "@types/webpack" "^4.39.0" + "@types/webpack-bundle-analyzer" "^2.13.2" + "@types/webpack-dev-server" "^3.1.7" + "@types/yargs" "^13.0.3" + ajv "^6.10.2" + autoprefixer "^9.6.1" + babel-loader "^8.0.6" + babel-plugin-emotion "^10.0.21" + babel-plugin-lodash "^3.3.4" + babel-plugin-module-resolver "^3.2.0" + babel-plugin-universal-import "^4.0.0" + cache-loader "^4.1.0" + compression-webpack-plugin "^3.0.0" + cssnano "^4.1.10" + execa "^3.2.0" + extract-css-chunks-webpack-plugin "^4.7.1" + file-loader "^5.0.2" + find-cache-dir "^3.0.0" + fs-extra "^8.1.0" + gulp "~4.0.2" + gulp-rename "^2.0.0" + gulp-typescript "^5.0.1" + loader-utils "^1.2.3" + lodash "^4.17.15" + lodash-webpack-plugin "^0.11.5" + mini-html-webpack-plugin "^2.0.0" + nodemon "^2.0.1" + optimize-css-assets-webpack-plugin "^5.0.3" + postcss-flexbugs-fixes "^4.1.0" + react "^16.12.0" + rxjs "^6.5.3" + stats-webpack-plugin "^0.7.0" + terser-webpack-plugin "^2.2.1" + thread-loader "^2.1.3" + ts-loader "^6.1.0" + ts-node "^8.4.1" + tslint "^5.20.0" + typescript "3.9.5" + url-loader "^3.0.0" + webpack "^4.40.2" + webpack-bundle-analyzer "^3.4.1" + webpack-dev-server "^3.8.0" + webpack-node-externals "^1.7.2" + webpackbar "^4.0.0" + workbox-webpack-plugin "^4.3.1" + yargs "^14.2.0" -"@opencensus/web-types@^0.0.6": - version "0.0.6" - resolved "https://registry.yarnpkg.com/@opencensus/web-types/-/web-types-0.0.6.tgz#1f80b7ff3d3b2779559e5f53f46a38223a096aff" - integrity sha512-KiVZgqRneE6bpfvRlVn1CMfyibeBqgw4cmGHtKTtRvqyRMmR3rKDfZx/2YaevJGlx+BXduC5qAB7lwCHK0MD8g== +"@rush-temp/build-tools@file:./projects/build-tools.tgz": + version "0.0.0" + resolved "file:./projects/build-tools.tgz" + dependencies: + "@types/fs-extra" "^8.0.0" + "@types/gulp" "^4.0.6" + "@types/gulp-filter" "^3.0.33" + "@types/gulp-flatten" "^0.0.31" + "@types/gulp-if" "^0.0.33" + "@types/gulp-plumber" "^0.0.32" + "@types/gulp-rename" "^0.0.33" + "@types/gulp-replace" "^0.0.31" + "@types/gulp-sourcemaps" "^0.0.32" + "@types/lodash" "^4.14.138" + "@types/minimatch" "^3.0.3" + "@types/yargs" "^13.0.3" + execa "^3.2.0" + fs-extra "^8.1.0" + glob "^7.1.4" + gulp "~4.0.2" + gulp-banner "^0.1.3" + gulp-filter "^6.0.0" + gulp-flatten "^0.4.0" + gulp-if "^3.0.0" + gulp-json-transform "^0.4.7" + gulp-plumber "^1.2.1" + gulp-rename "^2.0.0" + gulp-replace "^1.0.0" + gulp-sourcemaps "^2.6.5" + gulp-typescript "^5.0.1" + lint-staged "^9.4.1" + lodash "^4.17.15" + minimatch "^3.0.4" + rollup "^1.21.4" + rollup-plugin-string "^3.0.0" + rollup-plugin-typescript2 "^0.25.0" + rxjs-tslint-rules "^4.24.3" + ts-node "^8.4.1" + tslint "^5.20.0" + tslint-clean-code "^0.2.9" + tslint-config-prettier "^1.18.0" + tslint-consistent-codestyle "^1.15.1" + tslint-immutable "^6.0.1" + tslint-microsoft-contrib "^6.2.0" + tslint-sonarts "^1.9.0" + typescript "3.9.5" + yargs "^14.2.0" -"@opencensus/web-types@^0.0.7": - version "0.0.7" - resolved "https://registry.yarnpkg.com/@opencensus/web-types/-/web-types-0.0.7.tgz#4426de1fe5aa8f624db395d2152b902874f0570a" - integrity sha512-xB+w7ZDAu3YBzqH44rCmG9/RlrOmFuDPt/bpf17eJr8eZSrLt7nc7LnWdxM9Mmoj/YKMHpxRg28txu3TcpiL+g== +"@rush-temp/cli-common-node@file:./projects/cli-common-node.tgz": + version "0.0.0" + resolved "file:./projects/cli-common-node.tgz" + dependencies: + "@types/fs-extra" "^8.0.0" + "@types/lodash" "^4.14.138" + "@types/prompts" "^2.0.1" + "@types/schema-utils" "^1.0.0" + cosmiconfig "^6.0.0" + fs-extra "^8.1.0" + gulp "~4.0.2" + lodash "^4.17.15" + prompts "^2.2.1" + schema-utils "^2.1.0" + ts-node "^8.4.1" + tslib "^1.10.0" -"@phenomnomnominal/tsquery@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@phenomnomnominal/tsquery/-/tsquery-3.0.0.tgz#6f2f4dbf6304ff52b12cc7a5b979f20c3794a22a" - integrity sha512-SW8lKitBHWJ9fAYkJ9kJivuctwNYCh3BUxLdH0+XiR1GPBiu+7qiZzh8p8jqlj1LgVC1TbvfNFroaEsmYlL8Iw== +"@rush-temp/cli-common@file:./projects/cli-common.tgz": + version "0.0.0" + resolved "file:./projects/cli-common.tgz" dependencies: - esquery "^1.0.1" + bignumber.js "^9.0.0" + gulp "~4.0.2" + tslib "^1.10.0" -"@reach/router@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@reach/router/-/router-1.2.1.tgz#34ae3541a5ac44fa7796e5506a5d7274a162be4e" - integrity sha512-kTaX08X4g27tzIFQGRukaHmNbtMYDS3LEWIS8+l6OayGIw6Oyo1HIF/JzeuR2FoF9z6oV+x/wJSVSq4v8tcUGQ== +"@rush-temp/cli@file:./projects/cli.tgz": + version "0.0.0" + resolved "file:./projects/cli.tgz" dependencies: - create-react-context "^0.2.1" - invariant "^2.2.3" - prop-types "^15.6.1" - react-lifecycles-compat "^3.0.4" - warning "^3.0.0" + "@angular/core" "^8.2.7" + "@babel/core" "^7.6.2" + "@babel/register" "^7.5.5" + "@neotracker/core" "1.4.1" + "@types/bn.js" "^4.11.5" + "@types/fs-extra" "^8.0.0" + "@types/jest" "^24.0.18" + "@types/listr" "^0.14.2" + "@types/lodash" "^4.14.138" + "@types/prompts" "^2.0.1" + "@types/react" "^16.9.15" + "@types/yargs" "^13.0.3" + bignumber.js "^9.0.0" + bn.js "^5.0.0" + cross-fetch "^3.0.4" + execa "^3.2.0" + fs-extra "^8.1.0" + gulp "~4.0.2" + import-local "^3.0.2" + jszip "^3.5.0" + listr "^0.14.3" + lodash "^4.17.15" + nodemon "^2.0.1" + prompts "^2.2.1" + react "^16.12.0" + rxjs "^6.5.3" + safe-stable-stringify "^1.1.0" + source-map "^0.7.3" + ts-node "^8.4.1" + tslib "^1.10.0" + typescript "3.9.5" + yargs "^14.2.0" + zone.js "^0.10.2" + +"@rush-temp/client-common@file:./projects/client-common.tgz": + version "0.0.0" + resolved "file:./projects/client-common.tgz" + dependencies: + "@neo-one/ec-key" "^0.1.0" + "@types/bn.js" "^4.11.5" + "@types/bs58" "^4.0.0" + "@types/buffer-xor" "^2.0.0" + "@types/elliptic" "^6.4.12" + "@types/jest" "^24.0.18" + "@types/lodash" "^4.14.138" + "@types/node" "^12.7.7" + "@types/scrypt-js" "^2.0.3" + "@types/wif" "^2.0.1" + bignumber.js "^9.0.0" + bn.js "^5.0.0" + bs58 "^4.0.1" + buffer-xor "^2.0.2" + elliptic "^6.5.3" + gulp "~4.0.2" + hash.js "^1.1.7" + lodash "^4.17.15" + rxjs "^6.5.3" + safe-stable-stringify "^1.1.0" + scrypt-js "^2.0.3" + source-map "^0.7.3" + tslib "^1.10.0" + wif "^2.0.6" + +"@rush-temp/client-core@file:./projects/client-core.tgz": + version "0.0.0" + resolved "file:./projects/client-core.tgz" + dependencies: + "@reactivex/ix-es2015-cjs" "^2.5.3" + "@reactivex/ix-esnext-esm" "^2.5.3" + "@types/bn.js" "^4.11.5" + "@types/debug" "^4.1.5" + "@types/jest" "^24.0.18" + "@types/lodash" "^4.14.138" + "@types/tapable" "^1.0.4" + bignumber.js "^9.0.0" + bn.js "^5.0.0" + cross-fetch "^3.0.4" + dataloader "^2.0.0" + debug "^4.1.1" + gulp "~4.0.2" + lodash "^4.17.15" + rxjs "^6.5.3" + safe-stable-stringify "^1.1.0" + synchronized-promise "^0.3.1" + tapable "^1.1.3" + tslib "^1.10.0" + +"@rush-temp/client-full-common@file:./projects/client-full-common.tgz": + version "0.0.0" + resolved "file:./projects/client-full-common.tgz" + dependencies: + "@types/jest" "^24.0.18" + gulp "~4.0.2" + tslib "^1.10.0" + +"@rush-temp/client-full-core@file:./projects/client-full-core.tgz": + version "0.0.0" + resolved "file:./projects/client-full-core.tgz" + dependencies: + "@reactivex/ix-es2015-cjs" "^2.5.3" + "@types/bn.js" "^4.11.5" + "@types/jest" "^24.0.18" + "@types/lodash" "^4.14.138" + bignumber.js "^9.0.0" + bn.js "^5.0.0" + gulp "~4.0.2" + lodash "^4.17.15" + rxjs "^6.5.3" + tslib "^1.10.0" + +"@rush-temp/client-full@file:./projects/client-full.tgz": + version "0.0.0" + resolved "file:./projects/client-full.tgz" + dependencies: + gulp "~4.0.2" + +"@rush-temp/client-switch@file:./projects/client-switch.tgz": + version "0.0.0" + resolved "file:./projects/client-switch.tgz" + dependencies: + "@babel/code-frame" "^7.0.0" + "@ledgerhq/hw-transport-u2f" "^4.68.2" + "@types/babel__code-frame" "^7.0.1" + "@types/ledgerhq__hw-transport" "^4.21.1" + "@types/ledgerhq__hw-transport-node-hid" "^4.22.1" + "@types/ledgerhq__hw-transport-u2f" "^4.21.1" + "@types/lodash" "^4.14.138" + gulp "~4.0.2" + lodash "^4.17.15" + regenerator-runtime "^0.13.3" + source-map "^0.7.3" + tslib "^1.10.0" + optionalDependencies: + "@ledgerhq/hw-transport-node-hid" "^4.68.2" + +"@rush-temp/client@file:./projects/client.tgz": + version "0.0.0" + resolved "file:./projects/client.tgz" + dependencies: + gulp "~4.0.2" + +"@rush-temp/developer-tools-frame@file:./projects/developer-tools-frame.tgz": + version "0.0.0" + resolved "file:./projects/developer-tools-frame.tgz" + dependencies: + "@emotion/core" "^10.0.22" + "@emotion/styled" "^10.0.23" + "@emotion/styled-base" "^10.0.24" + "@reactivex/ix-esnext-esm" "^2.5.3" + "@render-props/size-observer" "^0.1.18" + "@types/lodash" "^4.14.138" + "@types/react" "^16.9.15" + "@types/react-dom" "^16.9.4" + "@types/react-select" "^3.0.0" + bignumber.js "^9.0.0" + core-js "^3.2.1" + date-fns "^2.0.0-beta.5" + emotion-theming "^10.0.14" + localforage "^1.7.3" + lodash "^4.17.15" + prop-types "^15.6.2" + react "^16.12.0" + react-dom "^16.12.0" + react-icons "^3.7.0" + react-select "^3.0.4" + regenerator-runtime "^0.13.3" + rxjs "^6.5.3" + styled-tools "^1.7.1" + tslib "^1.10.0" + +"@rush-temp/developer-tools@file:./projects/developer-tools.tgz": + version "0.0.0" + resolved "file:./projects/developer-tools.tgz" + dependencies: + gulp "~4.0.2" + resize-observer-polyfill "^1.5.0" + tslib "^1.10.0" + +"@rush-temp/editor-server@file:./projects/editor-server.tgz": + version "0.0.0" + resolved "file:./projects/editor-server.tgz" + dependencies: + "@types/graphlib" "^2.1.5" + "@types/jest" "^24.0.18" + "@types/koa" "^2.0.49" + "@types/koa-compose" "^3.2.4" + "@types/koa-compress" "^2.0.9" + "@types/koa-router" "^7.0.42" + "@types/lodash" "^4.14.138" + "@types/lru-cache" "^5.1.0" + "@types/semver" "^6.0.2" + "@types/tar" "^4.0.1" + core-js "^3.2.1" + cross-fetch "^3.0.4" + detective "^5.2.0" + graphlib "^2.1.7" + koa "^2.7.0" + koa-compose "^4.1.0" + koa-compress "^3.0.0" + koa-router "^7.4.0" + lodash "^4.17.15" + lru-cache "^5.0.0" + rxjs "^6.5.3" + safe-stable-stringify "^1.1.0" + semver "^6.3.0" + tar "^5.0.0" + +"@rush-temp/editor@file:./projects/editor.tgz": + version "0.0.0" + resolved "file:./projects/editor.tgz" + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/plugin-proposal-async-generator-functions" "^7.2.0" + "@babel/plugin-proposal-class-properties" "^7.5.0" + "@babel/plugin-proposal-numeric-separator" "^7.2.0" + "@babel/plugin-proposal-object-rest-spread" "^7.5.5" + "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" + "@babel/plugin-transform-modules-commonjs" "^7.2.0" + "@babel/plugin-transform-typescript" "^7.5.2" + "@babel/preset-react" "^7.0.0" + "@babel/standalone" "^7.5.4" + "@emotion/core" "^10.0.22" + "@emotion/styled" "^10.0.23" + "@jest/types" "^24.8.0" + "@render-props/scrollable" "^0.1.20" + "@types/babel__code-frame" "^7.0.1" + "@types/color" "^3.0.0" + "@types/fs-extra" "^8.0.0" + "@types/glob" "^7.1.1" + "@types/html-entities" "^1.2.16" + "@types/jest" "^24.0.18" + "@types/jest-matchers" "^20.0.2" + "@types/lodash" "^4.14.138" + "@types/nanoid" "^2.0.0" + "@types/react" "^16.9.15" + "@types/react-dom" "^16.9.4" + "@types/react-redux" "^7.1.1" + "@types/resolve" "^0.0.8" + "@types/webpack" "^4.39.0" + anser "^1.4.8" + color "^3.1.2" + core-js "^3.2.1" + cross-fetch "^3.0.4" + file-loader "^5.0.2" + fs-extra "^8.1.0" + glob "^7.1.4" + html-entities "^1.2.1" + immer "^5.0.0" + jest-circus "^24.9.0" + jest-matchers "^20.0.3" + jest-mock "^24.0.0" + lodash "^4.17.15" + monaco-editor "^0.17.1" + monaco-textmate "^3.0.0" + nanoid "^2.0.3" + onigasm "^2.2.2" + prop-types "^15.6.2" + raw-loader "^4.0.0" + react "^16.12.0" + react-dom "^16.12.0" + react-hot-loader "^4.12.12" + react-icons "^3.7.0" + react-redux "^7.0.3" + redux "^4.0.4" + regenerator-runtime "^0.13.3" + resize-observer-polyfill "^1.5.0" + resolve "^1.12.0" + rxjs "^6.5.3" + source-map "^0.7.3" + source-map-support "^0.5.13" + styled-tools "^1.7.1" + ts-node "^8.4.1" + tslib "^1.10.0" + typescript "3.9.5" + typescript-fsa "^3.0.0-beta-2" + typescript-fsa-reducers "^1.2.1" + webpack "^4.40.2" + +"@rush-temp/http-context@file:./projects/http-context.tgz": + version "0.0.0" + resolved "file:./projects/http-context.tgz" + dependencies: + "@types/koa" "^2.0.49" + gulp "~4.0.2" + koa "^2.7.0" + tslib "^1.10.0" + +"@rush-temp/http@file:./projects/http.tgz": + version "0.0.0" + resolved "file:./projects/http.tgz" + dependencies: + "@types/koa" "^2.0.49" + "@types/koa-bodyparser" "^4.3.0" + "@types/koa-convert" "^1.2.2" + "@types/koa-cors" "^0.0.0" + gulp "~4.0.2" + koa "^2.7.0" + koa-bodyparser "^4.2.1" + koa-convert "^1.2.0" + koa-cors "^0.0.16" + tslib "^1.10.0" + +"@rush-temp/local-browser-worker@file:./projects/local-browser-worker.tgz": + version "0.0.0" + resolved "file:./projects/local-browser-worker.tgz" + dependencies: + "@types/nanoid" "^2.0.0" + "@types/pouchdb" "^6.4.0" + core-js "^3.2.1" + file-loader "^5.0.2" + nanoid "^2.0.3" + pouchdb "7.1.1" + regenerator-runtime "^0.13.3" + rxjs "^6.5.3" + +"@rush-temp/local-browser@file:./projects/local-browser.tgz": + version "0.0.0" + resolved "file:./projects/local-browser.tgz" + dependencies: + "@types/lodash" "^4.14.138" + "@types/nanoid" "^2.0.0" + "@types/pouchdb" "^6.4.0" + core-js "^3.2.1" + lodash "^4.17.15" + nanoid "^2.0.3" + pouchdb "7.1.1" + pouchdb-utils "^7.1.1" + rxjs "^6.5.3" + safe-stable-stringify "^1.1.0" + source-map "^0.7.3" + tslib "^1.10.0" + typescript "3.9.5" + +"@rush-temp/local-singleton@file:./projects/local-singleton.tgz": + version "0.0.0" + resolved "file:./projects/local-singleton.tgz" + dependencies: + core-js "^3.2.1" + tslib "^1.10.0" + +"@rush-temp/logger-config@file:./projects/logger-config.tgz": + version "0.0.0" + resolved "file:./projects/logger-config.tgz" + dependencies: + gulp "~4.0.2" + tslib "^1.10.0" + +"@rush-temp/logger@file:./projects/logger.tgz": + version "0.0.0" + resolved "file:./projects/logger.tgz" + dependencies: + "@types/pino" "^5.8.9" + gulp "~4.0.2" + pino "^5.12.6" + pino-pretty "^3.2.1" + tslib "^1.10.0" + +"@rush-temp/node-bin@file:./projects/node-bin.tgz": + version "0.0.0" + resolved "file:./projects/node-bin.tgz" + dependencies: + "@types/fs-extra" "^8.0.0" + "@types/jest" "^24.0.18" + "@types/rc" "^1.1.0" + "@types/yargs" "^13.0.3" + cross-fetch "^3.0.4" + env-paths "^2.2.0" + execa "^3.2.0" + fs-extra "^8.1.0" + gulp "~4.0.2" + import-local "^3.0.2" + rc "^1.2.8" + semver "^6.3.0" + source-map-support "^0.5.13" + tslib "^1.10.0" + yargs "^14.2.0" + +"@rush-temp/node-blockchain@file:./projects/node-blockchain.tgz": + version "0.0.0" + resolved "file:./projects/node-blockchain.tgz" + dependencies: + "@types/jest" "^24.0.18" + "@types/js-priority-queue" "^0.0.5" + "@types/leveldown" "^4.0.0" + "@types/levelup" "^3.1.1" + "@types/lodash" "^4.14.138" + "@types/lru-cache" "^5.1.0" + bn.js "^5.0.0" + gulp "~4.0.2" + js-priority-queue "^0.1.5" + leveldown "^5.1.1" + levelup "4.1.0" + lodash "^4.17.15" + lru-cache "^5.0.0" + rxjs "^6.5.3" + tslib "^1.10.0" + +"@rush-temp/node-browser-worker@file:./projects/node-browser-worker.tgz": + version "0.0.0" + resolved "file:./projects/node-browser-worker.tgz" + dependencies: + core-js "^3.2.1" + file-loader "^5.0.2" + regenerator-runtime "^0.13.3" + +"@rush-temp/node-browser@file:./projects/node-browser.tgz": + version "0.0.0" + resolved "file:./projects/node-browser.tgz" + dependencies: + "@types/level-js" "^4.0.1" + "@types/levelup" "^3.1.1" + "@types/memdown" "^3.0.0" + core-js "^3.2.1" + level-js "5.0.0" + levelup "4.1.0" + memdown "^5.0.0" + tslib "^1.10.0" + +"@rush-temp/node-consensus@file:./projects/node-consensus.tgz": + version "0.0.0" + resolved "file:./projects/node-consensus.tgz" + dependencies: + "@reactivex/ix-es2015-cjs" "^2.5.3" + "@reactivex/ix-esnext-esm" "^2.5.3" + "@types/bn.js" "^4.11.5" + "@types/jest" "^24.0.18" + "@types/lodash" "^4.14.138" + bignumber.js "^9.0.0" + bn.js "^5.0.0" + gulp "~4.0.2" + lodash "^4.17.15" + tslib "^1.10.0" + +"@rush-temp/node-core@file:./projects/node-core.tgz": + version "0.0.0" + resolved "file:./projects/node-core.tgz" + dependencies: + "@types/jest" "^24.0.18" + "@types/lodash" "^4.14.138" + "@types/through" "^0.0.30" + bignumber.js "^9.0.0" + bn.js "^5.0.0" + gulp "~4.0.2" + lodash "^4.17.15" + rxjs "^6.5.3" + through "^2.3.8" + tslib "^1.10.0" + +"@rush-temp/node-http-rpc@file:./projects/node-http-rpc.tgz": + version "0.0.0" + resolved "file:./projects/node-http-rpc.tgz" + dependencies: + "@types/koa" "^2.0.49" + "@types/koa-compose" "^3.2.4" + "@types/koa-compress" "^2.0.9" + "@types/koa-router" "^7.0.42" + "@types/koa-static" "^4.0.1" + "@types/lodash" "^4.14.138" + cross-fetch "^3.0.4" + execa "^3.2.0" + gulp "~4.0.2" + koa "^2.7.0" + koa-compose "^4.1.0" + koa-compress "^3.0.0" + koa-router "^7.4.0" + koa-static "^5.0.0" + lodash "^4.17.15" + tslib "^1.10.0" + +"@rush-temp/node-native@file:./projects/node-native.tgz": + version "0.0.0" + resolved "file:./projects/node-native.tgz" + dependencies: + "@types/jest" "^24.0.18" + "@types/lodash" "^4.14.138" + bn.js "^5.0.0" + gulp "~4.0.2" + lodash "^4.17.15" + rxjs "^6.5.3" + tslib "^1.10.0" + +"@rush-temp/node-neo-settings@file:./projects/node-neo-settings.tgz": + version "0.0.0" + resolved "file:./projects/node-neo-settings.tgz" + dependencies: + "@types/bn.js" "^4.11.5" + "@types/lodash" "^4.14.138" + bn.js "^5.0.0" + gulp "~4.0.2" + lodash "^4.17.15" + tslib "^1.10.0" + +"@rush-temp/node-network@file:./projects/node-network.tgz": + version "0.0.0" + resolved "file:./projects/node-network.tgz" + dependencies: + "@types/lodash" "^4.14.138" + gulp "~4.0.2" + lodash "^4.17.15" + tslib "^1.10.0" + +"@rush-temp/node-offline@file:./projects/node-offline.tgz": + version "0.0.0" + resolved "file:./projects/node-offline.tgz" + dependencies: + "@types/lodash" "^4.14.138" + gulp "~4.0.2" + lodash "^4.17.15" + tslib "^1.10.0" + +"@rush-temp/node-protocol@file:./projects/node-protocol.tgz": + version "0.0.0" + resolved "file:./projects/node-protocol.tgz" + dependencies: + "@types/bloem" "^0.2.0" + "@types/bloom-filter" "^0.2.0" + "@types/bn.js" "^4.11.5" + "@types/ip-address" "^5.8.2" + "@types/jest" "^24.0.18" + "@types/lodash" "^4.14.138" + "@types/lru-cache" "^5.1.0" + "@types/node" "^12.7.7" + bloem "^0.2.4" + bloom-filter "^0.2.0" + bn.js "^5.0.0" + cross-fetch "^3.0.4" + gulp "~4.0.2" + ip-address "^6.0.0" + lodash "^4.17.15" + lru-cache "^5.0.0" + lz4 "0.6.3" + tslib "^1.10.0" + +"@rush-temp/node-rpc-handler@file:./projects/node-rpc-handler.tgz": + version "0.0.0" + resolved "file:./projects/node-rpc-handler.tgz" + dependencies: + "@types/bn.js" "^4.11.5" + bn.js "^5.0.0" + gulp "~4.0.2" + rxjs "^6.5.3" + tslib "^1.10.0" + +"@rush-temp/node-storage-cache@file:./projects/node-storage-cache.tgz": + version "0.0.0" + resolved "file:./projects/node-storage-cache.tgz" + dependencies: + "@types/lru-cache" "^5.1.0" + gulp "~4.0.2" + lru-cache "^5.0.0" + tslib "^1.10.0" + +"@rush-temp/node-storage-common@file:./projects/node-storage-common.tgz": + version "0.0.0" + resolved "file:./projects/node-storage-common.tgz" + dependencies: + "@types/bn.js" "^4.11.5" + bn.js "^5.0.0" + gulp "~4.0.2" + tslib "^1.10.0" + +"@rush-temp/node-storage-levelup@file:./projects/node-storage-levelup.tgz": + version "0.0.0" + resolved "file:./projects/node-storage-levelup.tgz" + dependencies: + "@types/abstract-leveldown" "^5.0.1" + "@types/jest" "^24.0.18" + "@types/levelup" "^3.1.1" + "@types/memdown" "^3.0.0" + "@types/rocksdb" "3.0.0" + abstract-leveldown "^6.0.3" + bn.js "^5.0.0" + gulp "~4.0.2" + levelup "4.1.0" + memdown "^5.0.0" + rocksdb "^4.1.0" + rxjs "^6.5.3" + tslib "^1.10.0" + +"@rush-temp/node-tools@file:./projects/node-tools.tgz": + version "0.0.0" + resolved "file:./projects/node-tools.tgz" + dependencies: + "@google-cloud/storage" "^4.3.2" + "@types/fs-extra" "^8.0.0" + "@types/rc" "^1.1.0" + "@types/yargs" "^13.0.3" + execa "^3.2.0" + fs-extra "^8.1.0" + gulp "~4.0.2" + import-local "^3.0.2" + rc "^1.2.8" + semver "^6.3.0" + source-map-support "^0.5.13" + tslib "^1.10.0" + yargs "^14.2.0" + +"@rush-temp/node-vm@file:./projects/node-vm.tgz": + version "0.0.0" + resolved "file:./projects/node-vm.tgz" + dependencies: + "@neo-one/edge" "^15.0.0" + "@types/jest" "^24.0.18" + "@types/lodash" "^4.14.138" + bn.js "^5.0.0" + gulp "~4.0.2" + lodash "^4.17.15" + tslib "^1.10.0" + +"@rush-temp/node@file:./projects/node.tgz": + version "0.0.0" + resolved "file:./projects/node.tgz" + dependencies: + "@types/abstract-leveldown" "^5.0.1" + "@types/fs-extra" "^8.0.0" + "@types/jest" "^24.0.18" + "@types/leveldown" "^4.0.0" + "@types/levelup" "^3.1.1" + "@types/rocksdb" "3.0.0" + abstract-leveldown "^6.0.3" + bn.js "^5.0.0" + fs-extra "^8.1.0" + gulp "~4.0.2" + leveldown "^5.1.1" + levelup "4.1.0" + rocksdb "^4.1.0" + rxjs "^6.5.3" + tslib "^1.10.0" + +"@rush-temp/react-common@file:./projects/react-common.tgz": + version "0.0.0" + resolved "file:./projects/react-common.tgz" + dependencies: + "@emotion/core" "^10.0.22" + "@emotion/styled" "^10.0.23" + "@types/node" "^12.7.7" + "@types/react" "^16.9.15" + "@types/react-dom" "^16.9.4" + "@types/react-select" "^3.0.0" + gulp "~4.0.2" + popper.js "^1.15.0" + react "^16.12.0" + react-dom "^16.12.0" + react-draggable "^4.0.0" + react-select "^3.0.4" + styled-tools "^1.7.1" + trackjs "^3.7.0" + tslib "^1.10.0" + +"@rush-temp/react-core@file:./projects/react-core.tgz": + version "0.0.0" + resolved "file:./projects/react-core.tgz" + dependencies: + "@emotion/core" "^10.0.22" + "@emotion/styled" "^10.0.23" + "@types/react" "^16.9.15" + gulp "~4.0.2" + react "^16.12.0" + rxjs "^6.5.3" + styled-tools "^1.7.1" + tslib "^1.10.0" + +"@rush-temp/react@file:./projects/react.tgz": + version "0.0.0" + resolved "file:./projects/react.tgz" + dependencies: + "@types/react" "^16.0.0" + gulp "~4.0.2" + react "^16.0.0" + rxjs "^6.0.0" + tslib "^1.10.0" + +"@rush-temp/smart-contract-codegen@file:./projects/smart-contract-codegen.tgz": + version "0.0.0" + resolved "file:./projects/smart-contract-codegen.tgz" + dependencies: + "@types/jest" "^24.0.18" + "@types/lodash" "^4.14.138" + "@types/prettier" "^1.18.2" + gulp "~4.0.2" + lodash "^4.17.15" + prettier "^2.0.1" + safe-stable-stringify "^1.1.0" + source-map "^0.7.3" + tslib "^1.10.0" + +"@rush-temp/smart-contract-compiler-node@file:./projects/smart-contract-compiler-node.tgz": + version "0.0.0" + resolved "file:./projects/smart-contract-compiler-node.tgz" + dependencies: + "@types/app-root-dir" "^0.1.0" + "@types/glob" "^7.1.1" + app-root-dir "^1.0.2" + glob "^7.1.4" + gulp "~4.0.2" + tslib "^1.10.0" + typescript "3.9.5" + +"@rush-temp/smart-contract-compiler@file:./projects/smart-contract-compiler.tgz": + version "0.0.0" + resolved "file:./projects/smart-contract-compiler.tgz" + dependencies: + "@babel/code-frame" "^7.0.0" + "@types/app-root-dir" "^0.1.0" + "@types/babel__code-frame" "^7.0.1" + "@types/bn.js" "^4.11.5" + "@types/jest" "^24.0.18" + "@types/levelup" "^3.1.1" + "@types/lodash" "^4.14.138" + "@types/memdown" "^3.0.0" + app-root-dir "^1.0.2" + bignumber.js "^9.0.0" + bn.js "^5.0.0" + gulp "~4.0.2" + levelup "4.1.0" + lodash "^4.17.15" + memdown "^5.0.0" + safe-stable-stringify "^1.1.0" + source-map "^0.7.3" + tslib "^1.10.0" + typescript "3.9.5" -"@reactivex/ix-es2015-cjs@^2.5.3": - version "2.5.3" - resolved "https://registry.yarnpkg.com/@reactivex/ix-es2015-cjs/-/ix-es2015-cjs-2.5.3.tgz#d1b77821e86b50dbc655077074f00f9377227ffa" - integrity sha512-H2ZLNAwlJ6qjezFAlRlIj9AyeHvK3EtXhdYFUCB+iTFsy3jodQthbsaMTefmYTWF6HV+ITUCUC1RI94nQUuA+A== +"@rush-temp/smart-contract-lib@file:./projects/smart-contract-lib.tgz": + version "0.0.0" + resolved "file:./projects/smart-contract-lib.tgz" dependencies: - "@types/node" "^11.11.6" - tslib "^1.9.3" + "@types/jest" "^24.0.18" + bignumber.js "^9.0.0" + tslib "^1.10.0" -"@reactivex/ix-esnext-esm@^2.5.3": - version "2.5.3" - resolved "https://registry.yarnpkg.com/@reactivex/ix-esnext-esm/-/ix-esnext-esm-2.5.3.tgz#d324a7ceac8acf0347740655a218e8c6d6662534" - integrity sha512-zfYQ/4C45UrKUpWh6mzC/h9J8JNzEJUQTGT54xQdLhKvQklGZXMBSoAy6PNAOamumooDOpGqWfKo+fciu+yLVQ== +"@rush-temp/smart-contract-test-browser@file:./projects/smart-contract-test-browser.tgz": + version "0.0.0" + resolved "file:./projects/smart-contract-test-browser.tgz" dependencies: - "@types/node" "^11.11.6" - tslib "^1.9.3" + core-js "^3.2.1" + tslib "^1.10.0" -"@render-props/events@^0.1.12", "@render-props/events@^0.1.2": - version "0.1.13" - resolved "https://registry.yarnpkg.com/@render-props/events/-/events-0.1.13.tgz#a0c4d9e4578fad8ba87118813256bb80cae43d52" - integrity sha512-VM4RK4vz6JX/0v2+f6PWxpUVQCyiu9jtJY4tpsGYV/b+bFLqf90F4y/QEPcEqNZW5iam7boX32KeIasjKDpFTA== +"@rush-temp/smart-contract-test-common@file:./projects/smart-contract-test-common.tgz": + version "0.0.0" + resolved "file:./projects/smart-contract-test-common.tgz" dependencies: - "@babel/runtime" "^7.4.0" + bignumber.js "^9.0.0" + gulp "~4.0.2" + tslib "^1.10.0" -"@render-props/rect@^0.1.16", "@render-props/rect@^0.1.21": - version "0.1.22" - resolved "https://registry.yarnpkg.com/@render-props/rect/-/rect-0.1.22.tgz#f418b8e3bb3802e8181ca7deafa107baf619e1a0" - integrity sha512-C+Ys49uLpAC80WhaiEQE4z18eiUook1mIz41RoLMcZdTZxeV8x0xtBdFHZ3n/yl+M28sEcNYy79F3QZSh611aQ== +"@rush-temp/smart-contract-test@file:./projects/smart-contract-test.tgz": + version "0.0.0" + resolved "file:./projects/smart-contract-test.tgz" dependencies: - "@babel/runtime" "^7.4.0" - "@render-props/events" "^0.1.2" - "@render-props/throttle" "^0.1.5" + "@types/jest" "^24.0.18" + "@types/lodash" "^4.14.138" + "@types/memdown" "^3.0.0" + bignumber.js "^9.0.0" + gulp "~4.0.2" + lodash "^4.17.15" + memdown "^5.0.0" + tslib "^1.10.0" -"@render-props/scrollable@^0.1.19", "@render-props/scrollable@^0.1.20": - version "0.1.20" - resolved "https://registry.yarnpkg.com/@render-props/scrollable/-/scrollable-0.1.20.tgz#d299b1569e58d5db6e831e7e4debad3edcdb6b16" - integrity sha512-iF5ht7D22+nKBENaZmLm6OiPNs+1OnlqO71uh30rna4HwqssiDy8COhFyFG6uhwfk/nB77CTtfxwIdCMaX7YCQ== +"@rush-temp/smart-contract-typescript-plugin@file:./projects/smart-contract-typescript-plugin.tgz": + version "0.0.0" + resolved "file:./projects/smart-contract-typescript-plugin.tgz" dependencies: - "@babel/runtime" "^7.4.0" - "@render-props/events" "^0.1.2" - "@render-props/throttle" "^0.1.5" - "@render-props/utils" "^0.2.1" + gulp "~4.0.2" + typescript "3.9.5" -"@render-props/size-observer@^0.1.18": - version "0.1.18" - resolved "https://registry.yarnpkg.com/@render-props/size-observer/-/size-observer-0.1.18.tgz#5d2614e1e27101d89588999de96f82a4675fc9ee" - integrity sha512-bUk+s249KmX1LJGoJzpXd5ki4vS/tlBHxaUFHvwky/+yabqbW/4uwh8KtxiO/VFtfMyW3dMd+FdrXUOE0x0LCQ== +"@rush-temp/smart-contract@file:./projects/smart-contract.tgz": + version "0.0.0" + resolved "file:./projects/smart-contract.tgz" + +"@rush-temp/ts-utils@file:./projects/ts-utils.tgz": + version "0.0.0" + resolved "file:./projects/ts-utils.tgz" dependencies: - "@babel/runtime" "^7.4.0" - "@render-props/rect" "^0.1.16" - "@render-props/utils" "^0.2.1" + "@types/lodash" "^4.14.138" + gulp "~4.0.2" + lodash "^4.17.15" + source-map "^0.7.3" + tslib "^1.10.0" + typescript "3.9.5" -"@render-props/throttle@^0.1.15", "@render-props/throttle@^0.1.5": - version "0.1.18" - resolved "https://registry.yarnpkg.com/@render-props/throttle/-/throttle-0.1.18.tgz#6418911a8448822b52e886ebea7c49e0c8129ecd" - integrity sha512-NIURBJ3oOtotWl2++O7lauiG4tzEClKSf13nBAI3QblWycO6X5OJ7+S1QaogpOkufz/nwFE5RdcwYDvoOBkV1w== +"@rush-temp/typescript-concatenator@file:./projects/typescript-concatenator.tgz": + version "0.0.0" + resolved "file:./projects/typescript-concatenator.tgz" + dependencies: + "@types/app-root-dir" "^0.1.0" + "@types/fs-extra" "^8.0.0" + "@types/jest" "^24.0.18" + "@types/lodash" "^4.14.138" + "@types/toposort" "^2.0.1" + "@types/yargs" "^13.0.3" + app-root-dir "^1.0.2" + fs-extra "^8.1.0" + gulp "~4.0.2" + lodash "^4.17.15" + toposort "^2.0.2" + tslib "^1.10.0" + typescript "3.9.5" + yargs "^14.2.0" + +"@rush-temp/utils-node@file:./projects/utils-node.tgz": + version "0.0.0" + resolved "file:./projects/utils-node.tgz" dependencies: - "@babel/runtime" "^7.4.0" - raf "^3.4.1" + "@types/jest" "^24.0.18" + "@types/npm-package-arg" "^6.1.0" + "@types/pino" "^5.8.9" + "@types/yargs" "^13.0.3" + execa "^3.2.0" + gulp "~4.0.2" + npm-package-arg "^7.0.0" + pino "^5.12.6" + tslib "^1.10.0" + yargs "^14.2.0" -"@render-props/utils@^0.2.1", "@render-props/utils@^0.2.11": - version "0.2.15" - resolved "https://registry.yarnpkg.com/@render-props/utils/-/utils-0.2.15.tgz#c5aa11f6f09ad740881e7a91bd1f64e5dac693e3" - integrity sha512-PaZxTb/AQen5fZWwKKosl0fdJsh4n3ljDajwIIdLxVOnhd46m5lJnx2FK6E3UHrgfCTfHzLeftQE0vo7OKNqdg== +"@rush-temp/utils@file:./projects/utils.tgz": + version "0.0.0" + resolved "file:./projects/utils.tgz" dependencies: - "@essentials/are-equal" "^1.0.0" - "@essentials/interpolate" "^1.0.0" - "@essentials/request-interval" "^1.0.1" - "@essentials/request-timeout" "^1.0.0" + "@types/jest" "^24.0.18" + "@types/lodash" "^4.14.138" + "@types/node" "^12.7.7" + gulp "~4.0.2" + jest "^24.9.0" + lodash "^4.17.15" + rxjs "^6.5.3" + tslib "^1.10.0" + typescript "3.9.5" -"@render-props/viewport@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@render-props/viewport/-/viewport-0.3.1.tgz#09d4690298315a26d9ee634e7c509caa8c545a79" - integrity sha512-q3PTAvWWs2L/jQ9iyER8tc+0tpXnzjWTslDQCmL8eHrAcHAY+knX9qdVA0XIZYt7GA+meDJ9Hqvc+LlgMfDfnA== +"@rush-temp/website@file:./projects/website.tgz": + version "0.0.0" + resolved "file:./projects/website.tgz" dependencies: - "@babel/runtime" "^7.4.0" - "@render-props/events" "^0.1.12" - "@render-props/rect" "^0.1.21" - "@render-props/scrollable" "^0.1.19" - "@render-props/throttle" "^0.1.15" - "@render-props/utils" "^0.2.11" + "@babel/runtime" "^7.6.3" + "@emotion/core" "^10.0.22" + "@emotion/styled" "^10.0.23" + "@emotion/styled-base" "^10.0.24" + "@reach/router" "^1.2.1" + "@render-props/viewport" "^0.3.1" + "@types/clipboard" "^2.0.1" + "@types/fs-extra" "^8.0.0" + "@types/jest" "^24.0.18" + "@types/lodash" "^4.14.138" + "@types/markdown-it" "^0.0.9" + "@types/markdown-it-anchor" "^4.0.3" + "@types/modernizr" "^3.5.3" + "@types/prismjs" "^1.16.0" + "@types/reach__router" "^1.2.4" + "@types/react" "^16.9.15" + "@types/react-dom" "^16.9.4" + "@types/react-redux" "^7.1.1" + "@types/webpack" "^4.39.0" + babel-plugin-emotion "^10.0.21" + babel-plugin-universal-import "^4.0.0" + bignumber.js "^9.0.0" + clipboard "^2.0.3" + core-js "^3.2.1" + dgeni "^0.4.12" + dgeni-packages "^0.28.1" + emotion "^10.0.17" + emotion-theming "^10.0.14" + fs-extra "^8.1.0" + gray-matter "^4.0.2" + immer "^5.0.0" + localforage "^1.7.3" + lodash "^4.17.15" + markdown-it "^10.0.0" + markdown-it-anchor "^5.2.4" + markdown-it-container "^2.0.0" + modernizr "^3.7.1" + prismjs "^1.17.1" + prop-types "^15.6.2" + react "^16.12.0" + react-dom "^16.12.0" + react-headroom "^3.0.0" + react-hot-loader "^4.12.12" + react-icons "^3.7.0" + react-redux "^7.0.3" + react-static "^7.1.0" + react-static-plugin-emotion "^7.2.2" + react-static-plugin-reach-router "^7.2.3" + react-static-plugin-source-filesystem "^7.2.3" + react-transition-group "^4.2.1" + react-universal-component "^4.0.0" + redux "^4.0.4" + redux-persist "^6.0.0" + regenerator-runtime "^0.13.3" + rxjs "^6.5.3" + serve "^11.2.0" + slugify "^1.3.3" + styled-tools "^1.7.1" + ts-node "^8.4.1" + tslib "^1.10.0" + typescript "3.9.5" + typescript-fsa "^3.0.0-beta-2" + typescript-fsa-reducers "^1.2.1" + webpack "^4.40.2" + +"@rush-temp/worker@file:./projects/worker.tgz": + version "0.0.0" + resolved "file:./projects/worker.tgz" + dependencies: + core-js "^3.2.1" + rxjs "^6.5.3" + tslib "^1.10.0" "@samverschueren/stream-to-observable@^0.3.0": version "0.3.0" @@ -2669,11 +3030,28 @@ dependencies: any-observable "^0.3.0" +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + "@sindresorhus/is@^0.7.0": version "0.7.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + "@types/abstract-leveldown@*", "@types/abstract-leveldown@^5.0.1": version "5.0.1" resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-5.0.1.tgz#3c7750d0186b954c7f2d2f6acc8c3c7ba0c3412e" @@ -2697,9 +3075,9 @@ integrity sha512-hL5zdUZ6OZE2DQ38CTxvcTIPYT8YXQE5wq3cs4EWf6NTL+HbyD+9yKeta6qNTuYS68JfqSVgTpwPwoBEhNZLIA== "@types/autoprefixer@^9.6.1": - version "9.6.1" - resolved "https://registry.yarnpkg.com/@types/autoprefixer/-/autoprefixer-9.6.1.tgz#8bfaf43d18f5cd59a269b7a2364e690cadcdf210" - integrity sha512-9aofAxm/OWxzu/Fq7lU/m2rX03f9Sr1OXF/3kEp6FNFYRFLgFcIUjxhNGgWqc5KMpXbkqxlJmc7wfab7jFj2dw== + version "9.7.2" + resolved "https://registry.yarnpkg.com/@types/autoprefixer/-/autoprefixer-9.7.2.tgz#64b3251c9675feef5a631b7dd34cfea50a8fdbcc" + integrity sha512-QX7U7YW3zX3ex6MECtWO9folTGsXeP4b8bSjTq3I1ODM+H+sFHwGKuof+T+qBcDClGlCGtDb3SVfiTVfmcxw4g== dependencies: "@types/browserslist" "*" postcss "7.x.x" @@ -2710,9 +3088,9 @@ integrity sha512-FFfbQozKxYmOnCKFYV+EQprjBI7u2yaNc2ly/K9AhzyC8MzXtCtSRqptpw+HUJxhwCOo5mLwf1ATmzyhOaVbDg== "@types/babel__core@^7.1.0": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.2.tgz#608c74f55928033fce18b99b213c16be4b3d114f" - integrity sha512-cfCCrFmiGY/yq0NuKNxIQvZFy9kY/1immpSpTngOnyIbD4+eJOG5mxphhHDv3CHL9GltO4GcKr54kGBg3RNdbg== + version "7.1.7" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.7.tgz#1dacad8840364a57c98d0dd4855c6dd3752c6b89" + integrity sha512-RL62NqSFPCDK2FM1pSDH0scHpJvsXtZNiYlMB73DgPBaG1E38ZYVL+ei5EkWRbr+KC4YNiAUNBnRj+bgwpgjMw== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -2721,9 +3099,9 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.0.2.tgz#d2112a6b21fad600d7674274293c85dce0cb47fc" - integrity sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ== + version "7.6.1" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04" + integrity sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew== dependencies: "@babel/types" "^7.0.0" @@ -2736,19 +3114,12 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.7.tgz#2496e9ff56196cc1429c72034e07eab6121b6f3f" - integrity sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw== + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.11.tgz#1ae3010e8bf8851d324878b42acec71986486d18" + integrity sha512-ddHK5icION5U6q11+tV2f9Mo6CZVuT8GJKld2q9LqHSZbvLbH34Kcu2yFGckZut453+eQU6btIA3RihmnRgI+Q== dependencies: "@babel/types" "^7.3.0" -"@types/base-x@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/base-x/-/base-x-3.0.0.tgz#a1365259d1d3fa3ff973ab543192a6bdd4cb2f90" - integrity sha512-vnqSlpsv9uFX5/z8GyKWAfWHhLGJDBkrgRRsnxlsX23DHOlNyqP/eHQiv4TwnYcZULzQIxaWA/xRWU9Dyy4qzw== - dependencies: - "@types/node" "*" - "@types/bloem@^0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@types/bloem/-/bloem-0.2.0.tgz#45975a6582a1cde4bc5631d0fb43671c662dd290" @@ -2764,31 +3135,31 @@ "@types/node" "*" "@types/bn.js@*", "@types/bn.js@^4.11.5": - version "4.11.5" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.5.tgz#40e36197433f78f807524ec623afcf0169ac81dc" - integrity sha512-AEAZcIZga0JgVMHNtl1CprA/hXX7/wPt79AgR4XqaDt7jyj3QWYw6LPoOiznPtugDmlubUnAahMs2PFxGcQrng== + version "4.11.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" + integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== dependencies: "@types/node" "*" "@types/body-parser@*": - version "1.17.1" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.17.1.tgz#18fcf61768fb5c30ccc508c21d6fd2e8b3bf7897" - integrity sha512-RoX2EZjMiFMjZh9lmYrwgoP9RTpAjSHiJxdp4oidAQVO02T7HER3xj9UKue5534ULWeqVEkujhWcyvUce+d68w== + version "1.19.0" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f" + integrity sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ== dependencies: "@types/connect" "*" "@types/node" "*" "@types/browserslist@*": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@types/browserslist/-/browserslist-4.4.0.tgz#e2a5f7f8c7e97afb39f50812a77e5230d3ca2353" - integrity sha512-hrIjWSu7Hh96/rKlpChe58qHEwIZ0+F5Zf4QNdvSVP5LUXbaJM04g9tBjo702VTNqPZr5znEJeqNR3nAV3vJPg== + version "4.8.0" + resolved "https://registry.yarnpkg.com/@types/browserslist/-/browserslist-4.8.0.tgz#60489aefdf0fcb56c2d8eb65267ff08dad7a526d" + integrity sha512-4PyO9OM08APvxxo1NmQyQKlJdowPCOQIy5D/NLO3aO0vGC57wsMptvGp3b8IbYnupFZr92l1dlVief1JvS6STQ== "@types/bs58@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/bs58/-/bs58-4.0.0.tgz#baec75cb007b419ede3ec6b3410d2c8f14c92fc5" - integrity sha512-gYX+MHD4G/R+YGYwdhG5gbJj4LsEQGr3Vg6gVDAbe7xC5Bn8dNNG2Lpo6uDX/rT5dE7VBj0rGEFuV8L0AEx4Rg== + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/bs58/-/bs58-4.0.1.tgz#3d51222aab067786d3bc3740a84a7f5a0effaa37" + integrity sha512-yfAgiWgVLjFCmRv8zAcOIHywYATEwiTVccTLnRp6UxTNavT55M9d/uhK3T03St/+8/z/wW+CRjGKUNmEqoHHCA== dependencies: - "@types/base-x" "*" + base-x "^3.0.6" "@types/buffer-xor@^2.0.0": version "2.0.0" @@ -2809,15 +3180,15 @@ dependencies: "@types/color-name" "*" -"@types/color-name@*": +"@types/color-name@*", "@types/color-name@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== "@types/color@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/color/-/color-3.0.0.tgz#40f8a6bf2fd86e969876b339a837d8ff1b0a6e30" - integrity sha512-5qqtNia+m2I0/85+pd2YzAXaTyKO8j+svirO5aN+XaQJ5+eZ8nx0jPtEWZLxCi50xwYsX10xUHetFzfb1WEs4Q== + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/color/-/color-3.0.1.tgz#2900490ed04da8116c5058cd5dba3572d5a25071" + integrity sha512-oeUWVaAwI+xINDUx+3F2vJkl/vVB03VChFF/Gl3iQCdbcakjuoJyMOba+3BXRtnBhxZ7uBYqQBi9EpLnvSoztA== dependencies: "@types/color-convert" "*" @@ -2830,12 +3201,17 @@ "@types/node" "*" "@types/connect@*": - version "3.4.32" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.32.tgz#aa0e9616b9435ccad02bc52b5b454ffc2c70ba28" - integrity sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg== + version "3.4.33" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.33.tgz#31610c901eca573b8713c3330abc6e6b9f588546" + integrity sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A== dependencies: "@types/node" "*" +"@types/content-disposition@*": + version "0.5.3" + resolved "https://registry.yarnpkg.com/@types/content-disposition/-/content-disposition-0.5.3.tgz#0aa116701955c2faa0717fc69cd1596095e49d96" + integrity sha512-P1bffQfhD3O4LW0ioENXUhZ9OIa0Zn+P7M+pWgkCKaT53wVLSq0mrKksCID/FGHpFhRSxRGhgrQmfhRuzwtKdg== + "@types/cookies@*": version "0.7.4" resolved "https://registry.yarnpkg.com/@types/cookies/-/cookies-0.7.4.tgz#26dedf791701abc0e36b5b79a5722f40e455f87b" @@ -2846,13 +3222,6 @@ "@types/keygrip" "*" "@types/node" "*" -"@types/cosmiconfig@^5.0.3": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@types/cosmiconfig/-/cosmiconfig-5.0.3.tgz#880644bb155d4038d3b752159684b777b0a159dd" - integrity sha512-HgTGG7X5y9pLl3pixeo2XtDEFD8rq2EuH+S4mK6teCnAwWMucQl6v1D43hI4Uw1VJh6nu59lxLkqXHRl4uwThA== - dependencies: - "@types/node" "*" - "@types/cssnano@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/cssnano/-/cssnano-4.0.0.tgz#f1bb29d6d0813861a3d87e02946b2988d0110d4e" @@ -2865,55 +3234,62 @@ resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.5.tgz#b14efa8852b7768d898906613c23f688713e02cd" integrity sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ== -"@types/elliptic@^6.4.9": - version "6.4.10" - resolved "https://registry.yarnpkg.com/@types/elliptic/-/elliptic-6.4.10.tgz#352078ebc911484e30fc0d1eca3e3c865bf0e8f8" - integrity sha512-9h+Bw+aNiLzcq9DGstHccNxSsJ5iNId7mzruid7+kwm7F1IGvb4rBOOPo3+twt9ZPhI3y+JJ2m1UfgU8cOEJuQ== +"@types/elliptic@^6.4.12": + version "6.4.12" + resolved "https://registry.yarnpkg.com/@types/elliptic/-/elliptic-6.4.12.tgz#e8add831f9cc9a88d9d84b3733ff669b68eaa124" + integrity sha512-gP1KsqoouLJGH6IJa28x7PXb3cRqh83X8HCLezd2dF+XcAIMKYv53KV+9Zn6QA561E120uOqZBQ+Jy/cl+fviw== dependencies: "@types/bn.js" "*" "@types/estree@*": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + version "0.0.44" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.44.tgz#980cc5a29a3ef3bea6ff1f7d021047d7ea575e21" + integrity sha512-iaIVzr+w2ZJ5HkidlZ3EJM8VTZb2MJLCjw3V+505yVts0gRC4UMvjw0d1HPtGqI/HQC/KdsYtayfzl+AXY2R8g== "@types/events@*": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== -"@types/execa@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/execa/-/execa-2.0.0.tgz#4dd5523520c51834bf8d0c280f460814e5238281" - integrity sha512-aBnkJ0r3khaZkHzu9pDZeWXrDg1N/ZtDGRQkK+KIqNVvvTvW+URXMUHQQCQMYdb2GPrcwu9Fq6l9iiT+pirIbg== - dependencies: - execa "*" +"@types/expect@^1.20.4": + version "1.20.4" + resolved "https://registry.yarnpkg.com/@types/expect/-/expect-1.20.4.tgz#8288e51737bf7e3ab5d7c77bfa695883745264e5" + integrity sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg== "@types/express-serve-static-core@*": - version "4.16.10" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.16.10.tgz#3c1313c6e6b75594561b473a286f016a9abf2132" - integrity sha512-gM6evDj0OvTILTRKilh9T5dTaGpv1oYiFcJAfgSejuMJgGJUsD9hKEU2lB4aiTNy4WwChxRnjfYFuBQsULzsJw== + version "4.17.5" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.5.tgz#a00ac7dadd746ae82477443e4d480a6a93ea083c" + integrity sha512-578YH5Lt88AKoADy0b2jQGwJtrBxezXtVe/MBqWXKZpqx91SnC0pVkVCcxcytz3lWW+cHBYDi3Ysh0WXc+rAYw== dependencies: "@types/node" "*" "@types/range-parser" "*" "@types/express@*": - version "4.17.1" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.1.tgz#4cf7849ae3b47125a567dfee18bfca4254b88c5c" - integrity sha512-VfH/XCP0QbQk5B5puLqTLEeFgR8lfCJHZJKkInZ9mkYd+u8byX0kztXEQxEk4wZXJs8HI+7km2ALXjn4YKcX9w== + version "4.17.6" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.6.tgz#6bce49e49570507b86ea1b07b806f04697fac45e" + integrity sha512-n/mr9tZI83kd4azlPG5y997C/M4DNABK9yErhFM6hKdym4kkmd9j0vtsJyjFIwfRBxtrxZtAfGZCNRIBMFLK5w== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "*" + "@types/qs" "*" "@types/serve-static" "*" "@types/fs-extra@^8.0.0": - version "8.0.1" - resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-8.0.1.tgz#a2378d6e7e8afea1564e44aafa2e207dadf77686" - integrity sha512-J00cVDALmi/hJOYsunyT52Hva5TnJeKP5yd1r+mH/ZU0mbYZflR0Z5kw5kITtKTRYMhm1JMClOFYdHnQszEvqw== + version "8.1.0" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-8.1.0.tgz#1114834b53c3914806cd03b3304b37b3bd221a4d" + integrity sha512-UoOfVEzAUpeSPmjm7h1uk5MH6KZma2z2O7a75onTGjnNvAvMVrPzPL/vBbT65iIGHWj6rokwfmYcmxmlSf2uwg== + dependencies: + "@types/node" "*" + +"@types/glob-stream@*": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@types/glob-stream/-/glob-stream-6.1.0.tgz#7ede8a33e59140534f8d8adfb8ac9edfb31897bc" + integrity sha512-RHv6ZQjcTncXo3thYZrsbAVwoy4vSKosSWhuhuQxLOTv74OJuFQxXkmUuZCr3q9uNBEVCvIzmZL/FeRNbHZGUg== dependencies: + "@types/glob" "*" "@types/node" "*" -"@types/glob@^7.1.1": +"@types/glob@*", "@types/glob@^7.1.1": version "7.1.1" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== @@ -2927,10 +3303,71 @@ resolved "https://registry.yarnpkg.com/@types/graphlib/-/graphlib-2.1.5.tgz#ed0435f99c91531aaa93086529804bbe3cd42c3b" integrity sha512-ZNQa42alTPUbBZ6c2einxsHmnz/YX/CqB8a1P5QTmbBqr9Q4x01fqPdXwBmMBQOm67fg9rACpidyIaCtvg8RVQ== +"@types/gulp-filter@^3.0.33": + version "3.0.33" + resolved "https://registry.yarnpkg.com/@types/gulp-filter/-/gulp-filter-3.0.33.tgz#353f6a9a5c0edea1a704f50b14f7979179497134" + integrity sha512-LYwn+zTIt1h97RuGhqWT5DoeQQyfyiYIBOtPmeOYDEu0vo9GToiORUO+zBeYnCs5PIfJTAcHkGdhH61OTbSS4w== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + "@types/vinyl" "*" + +"@types/gulp-flatten@^0.0.31": + version "0.0.31" + resolved "https://registry.yarnpkg.com/@types/gulp-flatten/-/gulp-flatten-0.0.31.tgz#47f265d1ea95907afe97283264118f3b53f1166b" + integrity sha512-a34+IF4OT9zsCHBoz5JdwYEhKJlmvWFWPbg+K4v3kKdF0KdBT8n8v+II7E06mpPOlOYCiPFl4Uz5j2qsi41xMQ== + dependencies: + "@types/node" "*" + +"@types/gulp-if@^0.0.33": + version "0.0.33" + resolved "https://registry.yarnpkg.com/@types/gulp-if/-/gulp-if-0.0.33.tgz#edece22b7925d9a6db5f9c8c0d7882aa776fb678" + integrity sha512-J5lzff21X7r1x/4hSzn02GgIUEyjCqYIXZ9GgGBLhbsD3RiBdqwnkFWgF16/0jO5rcVZ52Zp+6MQMQdvIsWuKg== + dependencies: + "@types/node" "*" + "@types/vinyl" "*" + +"@types/gulp-plumber@^0.0.32": + version "0.0.32" + resolved "https://registry.yarnpkg.com/@types/gulp-plumber/-/gulp-plumber-0.0.32.tgz#81467e0af4592a86239220ba743718c81846fc6a" + integrity sha512-upPVrIjFivRIHS80b6ApIYafvyToiH/AoCR1r2b2ObKrbRY8C2bF+vFwQ72lSu6jLnLIKHkmAW5CWPXczUz3Wg== + dependencies: + "@types/node" "*" + +"@types/gulp-rename@^0.0.33": + version "0.0.33" + resolved "https://registry.yarnpkg.com/@types/gulp-rename/-/gulp-rename-0.0.33.tgz#38d146e97786569f74f5391a1b1f9b5198674b6c" + integrity sha512-FIZQvbZJj6V1gHPTzO+g/BCWpDur7fJrroae4gwV3LaoHBQ+MrR9sB+2HssK8fHv4WdY6hVNxkcft9bYatuPIA== + dependencies: + "@types/node" "*" + +"@types/gulp-replace@^0.0.31": + version "0.0.31" + resolved "https://registry.yarnpkg.com/@types/gulp-replace/-/gulp-replace-0.0.31.tgz#87c3ac90b437694c58d68d1da677fcaff38b25ff" + integrity sha512-dbgQ1u0N9ShXrzahBgQfMSu6qUh8nlTLt7whhQ0S0sEUHhV3scysppJ1UX0fl53PJENgAL99ueykddyrCaDt7g== + dependencies: + "@types/node" "*" + +"@types/gulp-sourcemaps@^0.0.32": + version "0.0.32" + resolved "https://registry.yarnpkg.com/@types/gulp-sourcemaps/-/gulp-sourcemaps-0.0.32.tgz#e79ee617e0cb15729874be4533fe59c07793a175" + integrity sha512-+7BAmptW2bxyJnJcCEuie7vLoop3FwWgCdBMzyv7MYXED/HeNMeQuX7uPCkp4vfU1TTu4CYFH0IckNPvo0VePA== + dependencies: + "@types/node" "*" + +"@types/gulp@^4.0.6": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@types/gulp/-/gulp-4.0.6.tgz#68fe0e1f0ff3657cfca46fb564806b744a1bf899" + integrity sha512-0E8/iV/7FKWyQWSmi7jnUvgXXgaw+pfAzEB06Xu+l0iXVJppLbpOye5z7E2klw5akXd+8kPtYuk65YBcZPM4ow== + dependencies: + "@types/undertaker" "*" + "@types/vinyl-fs" "*" + chokidar "^2.1.2" + "@types/history@*": - version "4.7.3" - resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.3.tgz#856c99cdc1551d22c22b18b5402719affec9839a" - integrity sha512-cS5owqtwzLN5kY+l+KgKdRJ/Cee8tlmQoGQuIE9tWnSmS3JMKzmxo2HIAk2wODMifGwO20d62xZQLYz+RLfXmw== + version "4.7.5" + resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.5.tgz#527d20ef68571a4af02ed74350164e7a67544860" + integrity sha512-wLD/Aq2VggCJXSjxEwrMafIP51Z+13H78nXIX0ABEuIGhmB5sNGbR113MOKo+yfw+RDo1ZU3DM6yfnnRF/+ouw== "@types/hoist-non-react-statics@^3.3.0": version "3.3.1" @@ -2960,9 +3397,9 @@ "@types/node" "*" "@types/http-proxy@*": - version "1.17.0" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.0.tgz#baf82ff6aa2723fd29f90e3ba1384e665006863e" - integrity sha512-l+s0IoxSHqhLFJPDHRfO235kgrCkvFD8JmdV/T9C4BKBYPIjrQopGFH4r7h2e3jQqgJRCthRCAZIxDoFnj1zwQ== + version "1.17.4" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.4.tgz#e7c92e3dbe3e13aa799440ff42e6d3a17a9d045b" + integrity sha512-IrSHl2u6AWXduUaDLqYpt45tLVCtYv7o4Z0s1KghBCDgIIS9oW5K1H8mZG/A2CfeLdEa7rTd1ACOiHBc1EMT2Q== dependencies: "@types/node" "*" @@ -2979,9 +3416,9 @@ integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== "@types/istanbul-lib-report@*": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#e5471e7fa33c61358dd38426189c037a58433b8c" - integrity sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg== + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== dependencies: "@types/istanbul-lib-coverage" "*" @@ -2993,11 +3430,6 @@ "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" -"@types/jest-diff@*": - version "20.0.1" - resolved "https://registry.yarnpkg.com/@types/jest-diff/-/jest-diff-20.0.1.tgz#35cc15b9c4f30a18ef21852e255fdb02f6d59b89" - integrity sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA== - "@types/jest-matchers@^20.0.2": version "20.0.2" resolved "https://registry.yarnpkg.com/@types/jest-matchers/-/jest-matchers-20.0.2.tgz#e016736d13f845a47f3665fa58bcfffdb9c69110" @@ -3006,18 +3438,19 @@ "@types/jest" "*" "@types/jest@*": - version "24.0.18" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.18.tgz#9c7858d450c59e2164a8a9df0905fc5091944498" - integrity sha512-jcDDXdjTcrQzdN06+TSVsPPqxvsZA/5QkYfIZlq1JMw7FdP5AZylbOc+6B/cuDurctRe+MziUMtQ3xQdrbjqyQ== + version "25.2.1" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-25.2.1.tgz#9544cd438607955381c1bdbdb97767a249297db5" + integrity sha512-msra1bCaAeEdkSyA0CZ6gW1ukMIvZ5YoJkdXw/qhQdsuuDlFTcEUrUw8CLCPt2rVRUfXlClVvK2gvPs9IokZaA== dependencies: - "@types/jest-diff" "*" + jest-diff "^25.2.1" + pretty-format "^25.2.1" "@types/jest@^24.0.18": - version "24.0.19" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.19.tgz#f7036058d2a5844fe922609187c0ad8be430aff5" - integrity sha512-YYiqfSjocv7lk5H/T+v5MjATYjaTMsUkbDnjGqSMoO88jWdtJXJV4ST/7DKZcoMHMBvB2SeSfyOzZfkxXHR5xg== + version "24.9.1" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.9.1.tgz#02baf9573c78f1b9974a5f36778b366aa77bd534" + integrity sha512-Fb38HkXSVA4L8fGKEZ6le5bB8r6MRWlOCZbVuWZcmOMSCd2wCYOwN1ibj8daIoV9naq7aaOZjrLCoCMptKU/4Q== dependencies: - "@types/jest-diff" "*" + jest-diff "^24.3.0" "@types/js-priority-queue@^0.0.5": version "0.0.5" @@ -3038,9 +3471,9 @@ indefinite-observable "^1.0.1" "@types/keygrip@*": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.1.tgz#ff540462d2fb4d0a88441ceaf27d287b01c3d878" - integrity sha1-/1QEYtL7TQqIRBzq8n0oewHD2Hg= + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.2.tgz#513abfd256d7ad0bf1ee1873606317b33b1b2a72" + integrity sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw== "@types/koa-bodyparser@^4.3.0": version "4.3.0" @@ -3050,9 +3483,9 @@ "@types/koa" "*" "@types/koa-compose@*", "@types/koa-compose@^3.2.4": - version "3.2.4" - resolved "https://registry.yarnpkg.com/@types/koa-compose/-/koa-compose-3.2.4.tgz#76a461634a59c3e13449831708bb9b355fb1548e" - integrity sha512-ioou0rxkuWL+yBQYsHUQAzRTfVxAg8Y2VfMftU+Y3RA03/MzuFL0x/M2sXXj3PkfnENbHsjeHR1aMdezLYpTeA== + version "3.2.5" + resolved "https://registry.yarnpkg.com/@types/koa-compose/-/koa-compose-3.2.5.tgz#85eb2e80ac50be95f37ccf8c407c09bbe3468e9d" + integrity sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ== dependencies: "@types/koa" "*" @@ -3065,9 +3498,9 @@ "@types/node" "*" "@types/koa-convert@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@types/koa-convert/-/koa-convert-1.2.2.tgz#98d0aabaf9a97258f134f1e8668a462ddc51c7a3" - integrity sha512-RhoEpAMFfj6CanUHwJBbMGaZ2y1WtD08n2NhLscYa/u8XSz0Mfuhg6M0Xm2HRPohAswEdgPngAxVe8b+04c7cQ== + version "1.2.3" + resolved "https://registry.yarnpkg.com/@types/koa-convert/-/koa-convert-1.2.3.tgz#8c54390aca943bbb846faf44a2cf735caaca4f24" + integrity sha512-3TKYhzKBk0jsaUgYu6eg4o9s1qwWlSfQQ/j90BblY0WYF3RyD6JiIBpigFrCwIhoNLDOYSz1mBzm5Oscy3WVvQ== dependencies: "@types/koa" "*" @@ -3079,9 +3512,9 @@ "@types/koa" "*" "@types/koa-router@^7.0.42": - version "7.0.42" - resolved "https://registry.yarnpkg.com/@types/koa-router/-/koa-router-7.0.42.tgz#0e5c01d4d0a2873d402d432114f08372d7c50eb1" - integrity sha512-mggrNY7Ywwjt7QjaMAlbb1ixE+v7AFskOeyKdmZT/NvPVEAo48gYUxIcF8ILlMc3eg1bo6SxNoUcbxhTv7edrA== + version "7.4.0" + resolved "https://registry.yarnpkg.com/@types/koa-router/-/koa-router-7.4.0.tgz#4a5f48ca4432281f7429faedd9510c20945939dc" + integrity sha512-CkNyhGOCJ6rpBEG0rlSQhwHsHNwMzGLE49tV3jE5f0TvMzy/SmoCAIlHWdOLs8Mro+BqtKFH6e/lDaibWkydag== dependencies: "@types/koa" "*" @@ -3101,11 +3534,12 @@ "@types/koa-send" "*" "@types/koa@*", "@types/koa@^2.0.49": - version "2.0.51" - resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.0.51.tgz#b08a57dc49e34aaf6b5cc004b5fef4b16ebe32e1" - integrity sha512-L5e/l6Z+SR9Jk6HM0wNYdkvWhSUBOvi+7Q5Uwn7kE/VmBXX7NIxARMigARWAyXAtXiv5Ry1P2HmebolFdvuIVg== + version "2.11.3" + resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.11.3.tgz#540ece376581b12beadf9a417dd1731bc31c16ce" + integrity sha512-ABxVkrNWa4O/Jp24EYI/hRNqEVRlhB9g09p48neQp4m3xL1TJtdWk2NyNQSMCU45ejeELMQZBYyfstyVvO2H3Q== dependencies: "@types/accepts" "*" + "@types/content-disposition" "*" "@types/cookies" "*" "@types/http-assert" "*" "@types/keygrip" "*" @@ -3129,14 +3563,7 @@ "@types/ledgerhq__hw-transport" "*" "@types/node" "*" -"@types/ledgerhq__hw-transport@*": - version "4.21.1" - resolved "https://registry.yarnpkg.com/@types/ledgerhq__hw-transport/-/ledgerhq__hw-transport-4.21.1.tgz#ceaaeb4fbd91d0244f2e2ef382e352879f4f8f3f" - integrity sha512-TPsB6seugMHuqGa3xPz4CgjSlmQdVf4VltxHGcdDSG3Fu7nKqD1zZVE+AnULq4oIgs2lIRcGHiDCgN7kZFDeUw== - dependencies: - "@types/node" "*" - -"@types/ledgerhq__hw-transport@^4.21.1": +"@types/ledgerhq__hw-transport@*", "@types/ledgerhq__hw-transport@^4.21.1": version "4.21.2" resolved "https://registry.yarnpkg.com/@types/ledgerhq__hw-transport/-/ledgerhq__hw-transport-4.21.2.tgz#92eaea9e4669df2c8ec5292b694097d1629b05c1" integrity sha512-NhJwkdxdsqj/ZTq9KuBYtN+rDYOVYrlR3ByYNfK78iUOIlmXcXFBtfkhBUpX8c7dbE5uJZOjDdM3EC7Kf3Fakg== @@ -3151,9 +3578,9 @@ "@types/abstract-leveldown" "*" "@types/leveldown@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/leveldown/-/leveldown-4.0.0.tgz#3725cd6593f723435c5d72215369ef969a2fcce5" - integrity sha512-1+h/AaqhhQK1/Q1Nr1sHyy7JDcVmKosL9uYLb4bhdLf7MQP4f4daWRLuFQKp8n/pRbai2XPUpR7z33N85m2Hng== + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/leveldown/-/leveldown-4.0.2.tgz#edb44a33668ae58656721bb1852345e6a2f2e42a" + integrity sha512-VW6QbUnPb5yLbUBcXEh93lFNphyxkBul7Ae41OCgROd76WfLM3qzAbuzErx1LtsTqwcNlbavTr9rWXHCiGVF8A== dependencies: "@types/abstract-leveldown" "*" "@types/node" "*" @@ -3180,9 +3607,9 @@ rxjs "^6.5.1" "@types/lodash@^4.14.138": - version "4.14.144" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.144.tgz#12e57fc99064bce45e5ab3c8bc4783feb75eab8e" - integrity sha512-ogI4g9W5qIQQUhXAclq6zhqgqNUr7UlFaqDHbch7WLSLeeM/7d3CRaw7GLajxvyFvhJqw4Rpcz5bhoaYtIx6Tg== + version "4.14.150" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.150.tgz#649fe44684c3f1fcb6164d943c5a61977e8cf0bd" + integrity sha512-kMNLM5JBcasgYscD9x/Gvr6lTAv2NVgsKtet/hm93qMyf/D1pt+7jeEZklKJKxMVmXjxbRVQQGfqDSfipYCO6w== "@types/lru-cache@^5.1.0": version "5.1.0" @@ -3196,13 +3623,26 @@ dependencies: "@types/markdown-it" "*" -"@types/markdown-it@*", "@types/markdown-it@^0.0.9": +"@types/markdown-it@*": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-10.0.1.tgz#94e252ab689c8e9ceb9aff2946e0a458390105eb" + integrity sha512-L1ibTdA5IUe/cRBlf3N3syAOBQSN1WCMGtAWir6mKxibiRl4LmpZM4jLz+7zAqiMnhQuAP1sqZOF9wXgn2kpEg== + dependencies: + "@types/linkify-it" "*" + "@types/mdurl" "*" + +"@types/markdown-it@^0.0.9": version "0.0.9" resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-0.0.9.tgz#a5d552f95216c478e0a27a5acc1b28dcffd989ce" integrity sha512-IFSepyZXbF4dgSvsk8EsgaQ/8Msv1I5eTL0BZ0X3iGO9jw6tCVtPG8HchIPm3wrkmGdqZOD42kE0zplVi1gYDA== dependencies: "@types/linkify-it" "*" +"@types/mdurl@*": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9" + integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA== + "@types/memdown@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/memdown/-/memdown-3.0.0.tgz#2d909cb507afd341e3132d77dafa213347e47455" @@ -3240,36 +3680,34 @@ "@types/node" "*" "@types/node-fetch@*": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.0.tgz#1c55616a4591bdd15a389fbd0da4a55b9502add5" - integrity sha512-TLFRywthBgL68auWj+ziWu+vnmmcHCDFC/sqCOQf1xTz4hRq8cu79z8CtHU9lncExGBsB8fXA4TiLDLt6xvMzw== + version "2.5.7" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.7.tgz#20a2afffa882ab04d44ca786449a276f9f6bbf3c" + integrity sha512-o2WVNf5UhWRkxlf6eq+jMZDu7kjgpgJfl4xVNlvryc95O/6F2ld8ztKX+qu+Rjyet93WAWm5LjeX9H5FGkODvw== dependencies: "@types/node" "*" + form-data "^3.0.0" "@types/node-hid@*": - version "0.7.2" - resolved "https://registry.yarnpkg.com/@types/node-hid/-/node-hid-0.7.2.tgz#d6f57103fe410aafe0bf4a62d564ee3068d9b142" - integrity sha512-uWSDOBaJ0qCiuyx6NSvxFFgKeC9DEmK/G2Nm4jZp5yt1p6gg2Gg7nkrWGlzkaYiLf3YNCqm3X260PTYylIxfsA== - -"@types/node@*": - version "12.11.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.11.2.tgz#75ba3beda30d690b89a5089ca1c6e8e386150b76" - integrity sha512-dsfE4BHJkLQW+reOS6b17xhZ/6FB1rB8eRRvO08nn5o+voxf3i74tuyFWNH6djdfgX7Sm5s6LD8t6mJug4dpDw== + version "1.2.0" + resolved "https://registry.yarnpkg.com/@types/node-hid/-/node-hid-1.2.0.tgz#e3e5dfaad07c84e957af96809f6b2f03fc267f80" + integrity sha512-OTum88c5BiabsVgixAmVqhUL4tm+OExYSqw6FxCNVUTTysB/evPP+CI34LhhGohS1YsYfdlXC7g4UHnduxWVlQ== + dependencies: + "@types/node" "*" -"@types/node@>=6", "@types/node@^12.12.3": - version "12.12.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.7.tgz#01e4ea724d9e3bd50d90c11fd5980ba317d8fa11" - integrity sha512-E6Zn0rffhgd130zbCbAr/JdXfXkoOUFAKNs/rF8qnafSJ8KYaA/j3oz7dcwal+lYjLA7xvdd5J4wdYpCTlP8+w== +"@types/node@*", "@types/node@>=6": + version "13.13.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.4.tgz#1581d6c16e3d4803eb079c87d4ac893ee7501c2c" + integrity sha512-x26ur3dSXgv5AwKS0lNfbjpCakGIduWU1DU91Zz58ONRWrIKGunmZBNv4P7N+e27sJkiGDsw/3fT4AtsqQBrBA== "@types/node@^11.11.6": - version "11.13.19" - resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.19.tgz#c7bd7009aa850464775d8a814e18138d633cd676" - integrity sha512-tLRDU1hmcWamtgRT2iVRdraAQVGFQGgtcqracSo9XyMN1VeZLSVGb8RJJxVqab7UGbijoUijGPVFMjmqzyZIUw== + version "11.15.12" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.15.12.tgz#bf5d348c4d37c026029ad81e874946fa6ad100ba" + integrity sha512-iefeBfpmhoYaZfj+gJM5z9H9eiTwhuzhPsJgH/flx4HP2SBI2FNDra1D3vKljqPLGDr9Cazvh9gP9Xszc30ncA== -"@types/node@^12.0.2", "@types/node@^12.6.9": - version "12.7.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.2.tgz#c4e63af5e8823ce9cc3f0b34f7b998c2171f0c44" - integrity sha512-dyYO+f6ihZEtNPDcWNR1fkoTDf3zAK3lAABDze3mz6POyIercH0lEUawUFXlG8xaQZmm1yEBON/4TsYv/laDYg== +"@types/node@^12.12.3", "@types/node@^12.7.7": + version "12.12.37" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.37.tgz#cb4782d847f801fa58316da5b4801ca3a59ae790" + integrity sha512-4mXKoDptrXAwZErQHrLzpe0FN/0Wmf5JRniSVIdwUrtDf9wnmEV1teCNLBo/TwuXhkK/bVegoEn/wmb+x0AuPg== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -3281,19 +3719,18 @@ resolved "https://registry.yarnpkg.com/@types/npm-package-arg/-/npm-package-arg-6.1.0.tgz#88bdfce72f6a3d5fa1053c8d44d655e7850642e4" integrity sha512-vbt5fb0y1svMhu++1lwtKmZL76d0uPChFlw7kEzyUmTwfmpHRcFb8i0R8ElT69q/L+QLgK2hgECivIAvaEDwag== -"@types/pino-std-serializers@*": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/pino-std-serializers/-/pino-std-serializers-2.4.0.tgz#8cad99175cb79c2448f7455a2d32fb3fde29579c" - integrity sha512-eAdu+NW1IkCdmp85SnhyKha+OOREQMT9lXaoICQxa7bhSauRiLzu3WSNt9Mf2piuJvWeXF/G0hGWHr63xNpIRA== +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== "@types/pino@^5.8.9": - version "5.8.12" - resolved "https://registry.yarnpkg.com/@types/pino/-/pino-5.8.12.tgz#76def3a0cedbf79bdfae52f57d0d8322b63330f2" - integrity sha512-hIqsIogqsiPhL/0VJhvWNo859rpFrQ+K0iVdtJBzP0alRYUJot9bSl7Nhypnpi+uvYMrzhfrRuNMzyvFyvKKNA== + version "5.20.0" + resolved "https://registry.yarnpkg.com/@types/pino/-/pino-5.20.0.tgz#d4bafa71d992d223d29c857c11988e8c3abc66f0" + integrity sha512-gz3Ahvx1UDEveXViOQtYqnUkjSVQFdoJqpZTW/63spEHwOGRJRJIi3JMJSClp5Sk1x1ljn9tHWjGczmP6s/rvg== dependencies: + "@types/events" "*" "@types/node" "*" - "@types/pino-std-serializers" "*" - "@types/sonic-boom" "*" "@types/pouchdb-adapter-cordova-sqlite@*": version "1.0.0" @@ -3372,18 +3809,18 @@ "@types/pouchdb-replication" "*" "@types/pouchdb-core@*": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@types/pouchdb-core/-/pouchdb-core-7.0.3.tgz#ba05e86f1e13c1cb2d5ecb446898d03509358e78" - integrity sha512-yslQtlIbDGyd9SJgbSO42iKb8/Lv7o3010p3/8vRLXUyOQNxDXDet7hvxjboscJmTFpFgY3kHVOXDkySRI+o8w== + version "7.0.5" + resolved "https://registry.yarnpkg.com/@types/pouchdb-core/-/pouchdb-core-7.0.5.tgz#d04af55159bc23afce409f4cb6cc90f8bd5e45e3" + integrity sha512-jTR9Yy0a7cNn0+zhwPQF0mQywC9fHD1cKLNwlCF/NX5EQLS7FN4R55gbo3CgcNJ3Gu59EJd4nkA9RzR66zwKRw== dependencies: "@types/debug" "*" "@types/node-fetch" "*" "@types/pouchdb-find" "*" "@types/pouchdb-find@*": - version "6.3.4" - resolved "https://registry.yarnpkg.com/@types/pouchdb-find/-/pouchdb-find-6.3.4.tgz#899256e9cc924ae6ab5414b5a978808f5b003919" - integrity sha512-yT959pA3JgQns4Z9mlmuuUd6kEg7mSgRnF+XVN/EjFjuhZjKgR79+ia2R/UtUPKLtsm63IX6uHZFSPvkDhU/rA== + version "6.3.5" + resolved "https://registry.yarnpkg.com/@types/pouchdb-find/-/pouchdb-find-6.3.5.tgz#439002c935b9f8cfab67a0faa044d098e566dfe5" + integrity sha512-YvtUQyi1xmPcx/I7AAWVpaX2uIWCnY9c0MvNyCcHOtdgPj2iG8d4tEZHmD2LJ9wvKoz4f+KV9LPeo6/BnsF22Q== dependencies: "@types/pouchdb-core" "*" @@ -3443,9 +3880,9 @@ "@types/pouchdb-replication" "*" "@types/prettier@^1.18.2": - version "1.18.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.18.3.tgz#64ff53329ce16139f17c3db9d3e0487199972cd8" - integrity sha512-48rnerQdcZ26odp+HOvDGX8IcUkYOCuMc2BodWYTe956MqkHlOGAG4oFQ83cjZ0a4GAgj7mb4GUClxYd2Hlodg== + version "1.19.1" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f" + integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ== "@types/prismjs@^1.16.0": version "1.16.0" @@ -3453,9 +3890,11 @@ integrity sha512-mEyuziLrfDCQ4juQP1k706BUU/c8OGn/ZFl69AXXY6dStHClKX4P+N8+rhqpul1vRDA2VOygzMRSJJZHyDEOfw== "@types/prompts@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/prompts/-/prompts-2.0.1.tgz#afae5a8b0616a33cd31557bec74e2fd4a32f4afe" - integrity sha512-AhtMcmETelF8wFDV1ucbChKhLgsc+ytXZXkNz/nnTAMSDeqsjALknEFxi7ZtLgS/G8bV2rp90LhDW5SGACimIQ== + version "2.0.8" + resolved "https://registry.yarnpkg.com/@types/prompts/-/prompts-2.0.8.tgz#350fc8341426b2b68a56f874ea3bae399f771800" + integrity sha512-lXXAa8c8ASoA61Tj9H5E5V2mRUTvNZ/dpJ5KxghI+O5geWMHt73NLZ9kEBBDK7zUUfMsMY3ZH4Sqeqh3SjSyfg== + dependencies: + "@types/node" "*" "@types/prop-types@*": version "15.7.3" @@ -3467,6 +3906,11 @@ resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8" integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== +"@types/qs@*": + version "6.9.1" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.1.tgz#937fab3194766256ee09fcd40b781740758617e7" + integrity sha512-lhbQXx9HKZAPgBkISrBcmAcMpZsmpe/Cd/hY7LGZS5OfkySUBItnPZHgQPssWYUET8elF+yCFBbP1Q0RZPTdaw== + "@types/range-parser@*": version "1.2.3" resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" @@ -3478,24 +3922,24 @@ integrity sha512-qw1q31xPnaeExbOA1daA3nfeKW2uZQN4Xg8QqZDM3vsXPHK/lyDpjWXJQIcrByRDcBzZJ3ccchSMMTDtCWgFpA== "@types/reach__router@^1.2.4": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@types/reach__router/-/reach__router-1.2.6.tgz#b14cf1adbd1a365d204bbf6605cd9dd7b8816c87" - integrity sha512-Oh5DAVr/L2svBvubw6QEFpXGu295Y406BPs4i9t1n2pp7M+q3pmCmhzb9oZV5wncR41KCD3NHl1Yhi7uKnTPsA== + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/reach__router/-/reach__router-1.3.5.tgz#14e1e981cccd3a5e50dc9e969a72de0b9d472f6d" + integrity sha512-h0NbqXN/tJuBY/xggZSej1SKQEstbHO7J/omt1tYoFGmj3YXOodZKbbqD4mNDh7zvEGYd7YFrac1LTtAr3xsYQ== dependencies: "@types/history" "*" "@types/react" "*" -"@types/react-dom@*", "@types/react-dom@^16.9.0": - version "16.9.2" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.2.tgz#90f9e6c161850be1feb31d2f448121be2a4f3b47" - integrity sha512-hgPbBoI1aTSTvZwo8HYw35UaTldW6n2ETLvHAcfcg1FaOuBV3olmyCe5eMpx2WybWMBPv0MdU2t5GOcQhP+3zA== +"@types/react-dom@*", "@types/react-dom@^16.9.4": + version "16.9.7" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.7.tgz#60844d48ce252d7b2dccf0c7bb937130e27c0cd2" + integrity sha512-GHTYhM8/OwUCf254WO5xqR/aqD3gC9kSTLpopWGpQLpnw23jk44RvMHsyUSEplvRJZdHxhJGMMLF0kCPYHPhQA== dependencies: "@types/react" "*" "@types/react-redux@^7.1.1": - version "7.1.5" - resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.5.tgz#c7a528d538969250347aa53c52241051cf886bd3" - integrity sha512-ZoNGQMDxh5ENY7PzU7MVonxDzS1l/EWiy8nUhDqxFqUZn4ovboCyvk4Djf68x6COb7vhGTKjyjxHxtFdAA5sUA== + version "7.1.8" + resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.8.tgz#3631feb559f7858d6ad9eea1d6ef41fa64fe7205" + integrity sha512-kpplH7Wg2SYU00sZVT98WBN0ou6QKrYcShRaW+5Vpe5l7bluKWJbWmAL+ieiso07OQzpcP5i1PeY3690640ZWg== dependencies: "@types/hoist-non-react-statics" "^3.3.0" "@types/react" "*" @@ -3503,18 +3947,18 @@ redux "^4.0.0" "@types/react-select@^3.0.0": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/react-select/-/react-select-3.0.5.tgz#c615c1f7a0ea98e828b469d0f5ddd39ba3f0d319" - integrity sha512-BodHwzj9WU1EWC1j8zx1iyAMDCrTURwdvMpOVvVFwDVU7fvs8Ks9fPTkUY3+BgYbpOJFr21bR3Jib/GonwanAQ== + version "3.0.12" + resolved "https://registry.yarnpkg.com/@types/react-select/-/react-select-3.0.12.tgz#84f6929b0e3aeae949a5abc851002d206c26f714" + integrity sha512-3NVEc1sbaNtI1b06smzr9dlNKTkYWttL27CdEsorMvd2EgTOM/PJmrzkClaVQmBDg52MzQO05xVwNZruEUKpHw== dependencies: "@types/react" "*" "@types/react-dom" "*" "@types/react-transition-group" "*" "@types/react-transition-group@*": - version "4.2.3" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.2.3.tgz#4924133f7268694058e415bf7aea2d4c21131470" - integrity sha512-Hk8jiuT7iLOHrcjKP/ZVSyCNXK73wJAUz60xm0mVhiRujrdiI++j4duLiL282VGxwAgxetHQFfqA29LgEeSkFA== + version "4.2.4" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.2.4.tgz#c7416225987ccdb719262766c1483da8f826838d" + integrity sha512-8DMUaDqh0S70TjkqU0DxOu80tFUiiaS9rxkWip/nb7gtvAsbqOXm02UCmR8zdcjWujgeYPiPNTVpVpKzUDotwA== dependencies: "@types/react" "*" @@ -3525,10 +3969,10 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^16.9.2": - version "16.9.9" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.9.tgz#a62c6f40f04bc7681be5e20975503a64fe783c3a" - integrity sha512-L+AudFJkDukk+ukInYvpoAPyJK5q1GanFOINOJnM0w6tUgITuWvJ4jyoBPFL7z4/L8hGLd+K/6xR5uUjXu0vVg== +"@types/react@*", "@types/react@^16.0.0", "@types/react@^16.9.15": + version "16.9.34" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.34.tgz#f7d5e331c468f53affed17a8a4d488cd44ea9349" + integrity sha512-8AJlYMOfPe1KGLKyHpflCg5z46n0b5DbRfqDksxBLBTUpB75ypDBAO9eCUcjNwE6LCUslwTz00yyG/X9gaVtow== dependencies: "@types/prop-types" "*" csstype "^2.2.0" @@ -3540,10 +3984,18 @@ dependencies: "@types/node" "*" +"@types/rocksdb@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/rocksdb/-/rocksdb-3.0.0.tgz#6d2cacb6809a53c7eeb09c078699e3009b2d8fe2" + integrity sha512-idP99dvZ0P8Q1cGXkUQhcvJrKdFJIfYQ46plfgoe8RB3/OkE88n8RmgL/LE8+gbe6mTRyvb6MOaeRZu59qL4cQ== + dependencies: + "@types/abstract-leveldown" "*" + "@types/node" "*" + "@types/sax@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@types/sax/-/sax-1.2.0.tgz#6025e0b7fc7cd5f3d83808a6809730bac798565d" - integrity sha512-D8ef/GGUjiHuUOiXV6tkJw6Zq2Sm8vcBScJSvj+monDI5YncJ6M3oNIXR7EtmWPVqJw0jsZF2ARN/X5gvGmQSA== + version "1.2.1" + resolved "https://registry.yarnpkg.com/@types/sax/-/sax-1.2.1.tgz#e0248be936ece791a82db1a57f3fb5f7c87e8172" + integrity sha512-dqYdvN7Sbw8QT/0Ci5rhjE4/iCMJEM0Y9rHpCu+gGXD9Lwbz28t6HI2yegsB6BoV1sShRMU6lAmAcgRjmFy7LA== dependencies: "@types/node" "*" @@ -3553,16 +4005,16 @@ integrity sha512-YesPanU1+WCigC/Aj1Mga8UCOjHIfMNHZ3zzDsUY7lI8GlKnh/Kv2QwJOQ+jNQ36Ru7IfzSedlG14hppYaN13A== "@types/scrypt-js@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/scrypt-js/-/scrypt-js-2.0.3.tgz#69dc2d3b41ab5611b759c19efe7f1553e41c7698" - integrity sha512-UNPQP74rdNzlP5ZVPQFTnGvyHkAvxwdCLwPsW9euo3WSmajIxP0mZMtWnHyqic0Dis7+vKlATi/yVlXB+/rpBg== + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/scrypt-js/-/scrypt-js-2.0.4.tgz#c75d17910357d79552a8aa102a8c907ebcd029d5" + integrity sha512-FCgSes9EwZrZEv3VmEKGSWeDgJSm6DJdR/QrBnZ1Y6Xhi9EAKmZqr6ocpPtZT/ZbJwaa/rpLyLq4uIy1Imzrhw== dependencies: "@types/node" "*" -"@types/semver@^6.0.1": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-6.0.2.tgz#5e8b09f0e4af53034b1d0fb9977a277847836205" - integrity sha512-G1Ggy7/9Nsa1Jt2yiBR2riEuyK2DFNnqow6R7cromXPMNynackRY1vqFTLz/gwnef1LHokbXThcPhqMRjUbkpQ== +"@types/semver@^6.0.2": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-6.2.1.tgz#a236185670a7860f1597cf73bea2e16d001461ba" + integrity sha512-+beqKQOh9PYxuHvijhVl+tIHvT6tuwOrE9m14zd+MT2A38KoKZhh7pYJ0SNleLtwDsiIxHDsIk9bv01oOxvSvA== "@types/serve-static@*": version "1.13.3" @@ -3572,13 +4024,6 @@ "@types/express-serve-static-core" "*" "@types/mime" "*" -"@types/sonic-boom@*": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@types/sonic-boom/-/sonic-boom-0.7.0.tgz#38337036293992a1df65dd3161abddf8fb9b7176" - integrity sha512-AfqR0fZMoUXUNwusgXKxcE9DPlHNDHQp6nKYUd4PSRpLobF5CCevSpyTEBcVZreqaWKCnGBr9KI1fHMTttoB7A== - dependencies: - "@types/node" "*" - "@types/source-list-map@*": version "0.1.2" resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" @@ -3590,9 +4035,9 @@ integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== "@types/tapable@*", "@types/tapable@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.4.tgz#b4ffc7dc97b498c969b360a41eee247f82616370" - integrity sha512-78AdXtlhpCHT0K3EytMpn4JNxaf5tbqbLcbIRoQIHzpTIyjpxLQKRoxU55ujBXAtg3Nl2h/XWvfDa9dsMOd0pQ== + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.5.tgz#9adbc12950582aa65ead76bffdf39fe0c27a3c02" + integrity sha512-/gG2M/Imw7cQFp8PGvz/SwocNrmKFjFsm5Pb8HdbHkZ1K8pmuPzOX4VeVoiEecFCVf4CsN1r3/BRvx+6sNqwtQ== "@types/tar@^4.0.1": version "4.0.3" @@ -3602,10 +4047,10 @@ "@types/minipass" "*" "@types/node" "*" -"@types/through@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/through/-/through-0.0.29.tgz#72943aac922e179339c651fa34a4428a4d722f93" - integrity sha512-9a7C5VHh+1BKblaYiq+7Tfc+EOmjMdZaD1MYtkQjSoxgB69tBjW98ry6SKsi4zEIWztLOMRuL87A3bdT/Fc/4w== +"@types/through@^0.0.30": + version "0.0.30" + resolved "https://registry.yarnpkg.com/@types/through/-/through-0.0.30.tgz#e0e42ce77e897bd6aead6f6ea62aeb135b8a3895" + integrity sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg== dependencies: "@types/node" "*" @@ -3615,24 +4060,35 @@ integrity sha512-jRtyvEu0Na/sy0oIxBW0f6wPQjidgVqlmCTJVHEGTNEUdL1f0YSvdPzHY7nX7MUWAZS6zcAa0KkqofHjy/xDZQ== "@types/uglify-js@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.0.4.tgz#96beae23df6f561862a830b4288a49e86baac082" - integrity sha512-SudIN9TRJ+v8g5pTG8RRCqfqTMNqgWCKKd3vtynhGzkIIjxaicNAMuY5TRadJ6tzDu3Dotf3ngaMILtmOdmWEQ== + version "3.9.0" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.9.0.tgz#4490a140ca82aa855ad68093829e7fd6ae94ea87" + integrity sha512-3ZcoyPYHVOCcLpnfZwD47KFLr8W/mpUcgjpf1M4Q78TMJIw7KMAHSjiCLJp1z3ZrBR9pTLbe191O0TldFK5zcw== dependencies: source-map "^0.6.1" -"@types/unist@*", "@types/unist@^2.0.0": +"@types/undertaker-registry@*": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/undertaker-registry/-/undertaker-registry-1.0.1.tgz#4306d4a03d7acedb974b66530832b90729e1d1da" + integrity sha512-Z4TYuEKn9+RbNVk1Ll2SS4x1JeLHecolIbM/a8gveaHsW0Hr+RQMraZACwTO2VD7JvepgA6UO1A1VrbktQrIbQ== + +"@types/undertaker@*": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@types/undertaker/-/undertaker-1.2.2.tgz#927da24d0d3279830af96386862b035e040ead74" + integrity sha512-j4iepCSuY2JGW/hShVtUBagic0klYNFIXP7VweavnYnNC2EjiKxJFeaS9uaJmAT0ty9sQSqTS1aagWMZMV0HyA== + dependencies: + "@types/undertaker-registry" "*" + +"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== "@types/vfile-message@*": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/vfile-message/-/vfile-message-1.0.1.tgz#e1e9895cc6b36c462d4244e64e6d0b6eaf65355a" - integrity sha512-mlGER3Aqmq7bqR1tTTIVHq8KSAFFRyGbrxuM8C/H82g6k7r2fS+IMEkIu3D7JHzG10NvPdR8DNx0jr0pwpp4dA== + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/vfile-message/-/vfile-message-2.0.0.tgz#690e46af0fdfc1f9faae00cd049cc888957927d5" + integrity sha512-GpTIuDpb9u4zIO165fUy9+fXcULdD8HFRNli04GehoMVbeNq7D6OBnqSmg3lxZnC+UvgUhEWKxdKiwYUkGltIw== dependencies: - "@types/node" "*" - "@types/unist" "*" + vfile-message "*" "@types/vfile@^3.0.0": version "3.0.2" @@ -3643,6 +4099,23 @@ "@types/unist" "*" "@types/vfile-message" "*" +"@types/vinyl-fs@*": + version "2.4.11" + resolved "https://registry.yarnpkg.com/@types/vinyl-fs/-/vinyl-fs-2.4.11.tgz#b98119b8bb2494141eaf649b09fbfeb311161206" + integrity sha512-2OzQSfIr9CqqWMGqmcERE6Hnd2KY3eBVtFaulVo3sJghplUcaeMdL9ZjEiljcQQeHjheWY9RlNmumjIAvsBNaA== + dependencies: + "@types/glob-stream" "*" + "@types/node" "*" + "@types/vinyl" "*" + +"@types/vinyl@*": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/vinyl/-/vinyl-2.0.4.tgz#9a7a8071c8d14d3a95d41ebe7135babe4ad5995a" + integrity sha512-2o6a2ixaVI2EbwBPg1QYLGQoHK56p/8X/sGfKbFC8N6sY9lfjsMf/GprtkQkSya0D4uRiutRZ2BWj7k3JvLsAQ== + dependencies: + "@types/expect" "^1.20.4" + "@types/node" "*" + "@types/webpack-bundle-analyzer@^2.13.2": version "2.13.3" resolved "https://registry.yarnpkg.com/@types/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.13.3.tgz#820c8f734e171f081cbf02d889b9cda687cc89dd" @@ -3650,10 +4123,10 @@ dependencies: "@types/webpack" "*" -"@types/webpack-dev-server@^3.4.0": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@types/webpack-dev-server/-/webpack-dev-server-3.4.0.tgz#8e29afafb8238185c0d4e94fb544f0e12f0248e1" - integrity sha512-cNxiXfGnMxVgXOjmo/SQdsIX2Muan0A44AvPgVfz9y1PfWogOJGEy+/nFkrF/luvFxykJXT+fZYPpyuIGZtRZg== +"@types/webpack-dev-server@^3.1.7": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@types/webpack-dev-server/-/webpack-dev-server-3.10.1.tgz#93b7133cc9dab1ca1b76659f5ef8b763ad54c28a" + integrity sha512-2nwwQ/qHRghUirvG/gEDkOQDa+d881UTJM7EG9ok5KNaYCjYVvy7fdaO528Lcym9OQDn75SvruPYVVvMJxqO0g== dependencies: "@types/connect-history-api-fallback" "*" "@types/express" "*" @@ -3662,18 +4135,18 @@ "@types/webpack" "*" "@types/webpack-sources@*": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-0.1.5.tgz#be47c10f783d3d6efe1471ff7f042611bd464a92" - integrity sha512-zfvjpp7jiafSmrzJ2/i3LqOyTYTuJ7u1KOXlKgDlvsj9Rr0x7ZiYu5lZbXwobL7lmsRNtPXlBfmaUD8eU2Hu8w== + version "0.1.7" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-0.1.7.tgz#0a330a9456113410c74a5d64180af0cbca007141" + integrity sha512-XyaHrJILjK1VHVC4aVlKsdNN5KBTwufMb43cQs+flGxtPAf/1Qwl8+Q0tp5BwEGaI8D6XT1L+9bSWXckgkjTLw== dependencies: "@types/node" "*" "@types/source-list-map" "*" source-map "^0.6.1" "@types/webpack@*", "@types/webpack@^4.39.0": - version "4.39.5" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.39.5.tgz#3671b65928d9e0c6fcd4adff3f8167d48b174681" - integrity sha512-9twG6D97ao13MBLvigwfBJe6rxtb04UY3TcYHBYkW5sXZjUrNhqIRxLYg74VzK/YAE8xlVhOyd+3Whr7E5RrBA== + version "4.41.12" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.12.tgz#0386ee2a2814368e2f2397abb036c0bf173ff6c3" + integrity sha512-BpCtM4NnBen6W+KEhrL9jKuZCXVtiH6+0b6cxdvNt2EwU949Al334PjQSl2BeAyvAX9mgoNNG21wvjP3xZJJ5w== dependencies: "@types/anymatch" "*" "@types/node" "*" @@ -3690,21 +4163,21 @@ "@types/node" "*" "@types/yargs-parser@*": - version "13.1.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228" - integrity sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg== + version "15.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" + integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== -"@types/yargs@^13.0.0": - version "13.0.2" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.2.tgz#a64674fc0149574ecd90ba746e932b5a5f7b3653" - integrity sha512-lwwgizwk/bIIU+3ELORkyuOgDjCh7zuWDFqRtPPhhVgq9N1F7CvLNKg1TX4f2duwtKQ0p044Au9r1PLIXHrIzQ== +"@types/yargs@^13.0.0", "@types/yargs@^13.0.3": + version "13.0.8" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.8.tgz#a38c22def2f1c2068f8971acb3ea734eb3c64a99" + integrity sha512-XAvHLwG7UQ+8M4caKIH0ZozIOYay5fQkAgyIXegXT9jPtdIGdhga+sUEdAr1CiG46aB+c64xQEYyEzlwWVTNzA== dependencies: "@types/yargs-parser" "*" -"@types/yargs@^13.0.2": - version "13.0.3" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.3.tgz#76482af3981d4412d65371a318f992d33464a380" - integrity sha512-K8/LfZq2duW33XW/tFwEAfnZlqIfVsoyRB3kfXdPXYhl0nfM8mmh7GS0jg7WrX2Dgq/0Ha/pR1PaR+BvmWwjiQ== +"@types/yargs@^15.0.0": + version "15.0.4" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.4.tgz#7e5d0f8ca25e9d5849f2ea443cf7c402decd8299" + integrity sha512-9T1auFmbPZoxHz0enUFlUuKRy3it01R+hlggyVUMtnCTQRunsQYifnSGb8hET4Xo8yiC0o0r1paW3ud5+rbURg== dependencies: "@types/yargs-parser" "*" @@ -3713,150 +4186,149 @@ resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.0.tgz#8b63ab7f1aa5321248aad5ac890a485656dcea4d" integrity sha512-te5lMAWii1uEJ4FwLjzdlbw3+n0FZNOvFXHxQDKeT0dilh7HOzdMzV2TrJVUzq8ep7J4Na8OUYPRLSQkJHAlrg== -"@webassemblyjs/ast@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" - integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ== +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== dependencies: - "@webassemblyjs/helper-module-context" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/wast-parser" "1.8.5" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" -"@webassemblyjs/floating-point-hex-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" - integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ== +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== -"@webassemblyjs/helper-api-error@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" - integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA== +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== -"@webassemblyjs/helper-buffer@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" - integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q== +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== -"@webassemblyjs/helper-code-frame@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" - integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ== +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== dependencies: - "@webassemblyjs/wast-printer" "1.8.5" + "@webassemblyjs/wast-printer" "1.9.0" -"@webassemblyjs/helper-fsm@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" - integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow== +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== -"@webassemblyjs/helper-module-context@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" - integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g== +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== dependencies: - "@webassemblyjs/ast" "1.8.5" - mamacro "^0.0.3" + "@webassemblyjs/ast" "1.9.0" -"@webassemblyjs/helper-wasm-bytecode@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" - integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ== +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== -"@webassemblyjs/helper-wasm-section@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" - integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA== +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" -"@webassemblyjs/ieee754@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" - integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g== +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" - integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A== +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" - integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw== +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== -"@webassemblyjs/wasm-edit@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" - integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/helper-wasm-section" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" - "@webassemblyjs/wasm-opt" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" - "@webassemblyjs/wast-printer" "1.8.5" - -"@webassemblyjs/wasm-gen@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" - integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg== +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/ieee754" "1.8.5" - "@webassemblyjs/leb128" "1.8.5" - "@webassemblyjs/utf8" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" -"@webassemblyjs/wasm-opt@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" - integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q== +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" -"@webassemblyjs/wasm-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" - integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw== +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-api-error" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/ieee754" "1.8.5" - "@webassemblyjs/leb128" "1.8.5" - "@webassemblyjs/utf8" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" -"@webassemblyjs/wast-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" - integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/floating-point-hex-parser" "1.8.5" - "@webassemblyjs/helper-api-error" "1.8.5" - "@webassemblyjs/helper-code-frame" "1.8.5" - "@webassemblyjs/helper-fsm" "1.8.5" +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" "@xtuc/long" "4.2.2" -"@webassemblyjs/wast-printer@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" - integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg== +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/wast-parser" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" "@xtuc/long" "4.2.2" "@wry/context@^0.4.0": @@ -3868,9 +4340,9 @@ tslib "^1.9.3" "@wry/equality@^0.1.2": - version "0.1.9" - resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.1.9.tgz#b13e18b7a8053c6858aa6c85b54911fb31e3a909" - integrity sha512-mB6ceGjpMGz1ZTza8HYnrPGos2mC6So4NhS1PtZ8s4Qt0K7fBiIGhpSxUbQmhwcSWE3no+bYxmI2OL6KuXYmoQ== + version "0.1.11" + resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.1.11.tgz#35cb156e4a96695aa81a9ecc4d03787bc17f1790" + integrity sha512-mwEVBDUVODlsQQ5dfuLUS5/Tf7jqUKyhKYHmVi4fPB6bDMOfWvUPJmKgS1Z7Za/sOI3vzWt4+O7yCiL/70MogA== dependencies: tslib "^1.9.3" @@ -3889,56 +4361,40 @@ resolved "https://registry.yarnpkg.com/@zeit/schemas/-/schemas-2.6.0.tgz#004e8e553b4cd53d538bd38eac7bcbf58a867fe3" integrity sha512-uUrgZ8AxS+Lio0fZKAipJjAh415JyrOZowliZAzmnJSsf7piVL5w+G0+gFJ0KSu3QRhvui/7zuvpLz03YjXAhg== -"@zkochan/cmd-shim@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz#2ab8ed81f5bb5452a85f25758eb9b8681982fd2e" - integrity sha512-o8l0+x7C7sMZU3v9GuJIAU10qQLtwR1dtRQIOmlNMtyaqhmpXOzx1HWiYoWfmmf9HHZoAkXpc9TM9PQYF9d4Jg== - dependencies: - is-windows "^1.0.0" - mkdirp-promise "^5.0.1" - mz "^2.5.0" - -JSONStream@^1.0.4, JSONStream@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - a-sync-waterfall@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz#75b6b6aa72598b497a125e7a2770f14f4c8a1fa7" integrity sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA== abab@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" - integrity sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w== + version "2.0.3" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" + integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -abstract-leveldown@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.1.1.tgz#f44bad5862d71c7b418110d7698ac25bedf24396" - integrity sha512-7fK/KySVqzKIomdhkSWzX4YBQhzkzEMbWSiaB6mSN9e+ZdV3KEeKxia/8xQzCkATA5xnnukdP88cFR0D2FsFXw== +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== dependencies: - level-concat-iterator "~2.0.0" - xtend "~4.0.0" + event-target-shim "^5.0.0" -abstract-leveldown@^6.0.3, abstract-leveldown@~6.2.1: - version "6.2.2" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.2.tgz#677425beeb28204367c7639e264e93ea4b49971a" - integrity sha512-/a+Iwj0rn//CX0EJOasNyZJd2o8xur8Ce9C57Sznti/Ilt/cb6Qd8/k98A4ZOklXgTG+iAYYUs1OTG0s1eH+zQ== +abstract-leveldown@^6.0.3, abstract-leveldown@^6.2.1: + version "6.3.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz#d25221d1e6612f820c35963ba4bd739928f6026a" + integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ== dependencies: + buffer "^5.5.0" + immediate "^3.2.3" level-concat-iterator "~2.0.0" level-supports "~1.0.0" xtend "~4.0.0" -abstract-leveldown@~6.0.0, abstract-leveldown@~6.0.1, abstract-leveldown@~6.0.3: +abstract-leveldown@~6.0.0, abstract-leveldown@~6.0.1: version "6.0.3" resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.0.3.tgz#b4b6159343c74b0c5197b2817854782d8f748c4a" integrity sha512-jzewKKpZbaYUa6HTThnrl+GrJhzjEAeuc7hTVpZdzg7kupXZFoqQDFwyOwLNbmJKJlmzw8yiipMPkDiuKkT06Q== @@ -3946,6 +4402,25 @@ abstract-leveldown@~6.0.0, abstract-leveldown@~6.0.1, abstract-leveldown@~6.0.3: level-concat-iterator "~2.0.0" xtend "~4.0.0" +abstract-leveldown@~6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.1.1.tgz#f44bad5862d71c7b418110d7698ac25bedf24396" + integrity sha512-7fK/KySVqzKIomdhkSWzX4YBQhzkzEMbWSiaB6mSN9e+ZdV3KEeKxia/8xQzCkATA5xnnukdP88cFR0D2FsFXw== + dependencies: + level-concat-iterator "~2.0.0" + xtend "~4.0.0" + +abstract-leveldown@~6.2.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" + integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== + dependencies: + buffer "^5.5.0" + immediate "^3.2.3" + level-concat-iterator "~2.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + accepts@^1.3.5, accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -3955,18 +4430,13 @@ accepts@^1.3.5, accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: negotiator "0.6.2" acorn-globals@^4.1.0: - version "4.3.3" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.3.tgz#a86f75b69680b8780d30edd21eee4e0ea170c05e" - integrity sha512-vkR40VwS2SYO98AIeFvzWWh+xyc2qi9s7OoXSFEGIP/rOJKzjnhykaZJNnHdoq4BL2gGxI5EZOU16z896EYnOQ== + version "4.3.4" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" + integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== dependencies: acorn "^6.0.1" acorn-walk "^6.0.1" -acorn-jsx@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384" - integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw== - acorn-node@^1.6.1: version "1.8.2" resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" @@ -3976,56 +4446,47 @@ acorn-node@^1.6.1: acorn-walk "^7.0.0" xtend "^4.0.2" -acorn-walk@^6.0.1, acorn-walk@^6.1.1: +acorn-walk@^6.0.1: version "6.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== -acorn-walk@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.0.0.tgz#c8ba6f0f1aac4b0a9e32d1f0af12be769528f36b" - integrity sha512-7Bv1We7ZGuU79zZbb6rRqcpxo3OY+zrdtloZWoyD8fmGX+FeXRjE+iuGkZjSXLVovLzrsvMGMy0EkwA0E0umxg== +acorn-walk@^7.0.0, acorn-walk@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.1.1.tgz#345f0dffad5c735e7373d2fec9a1023e6a44b83e" + integrity sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ== acorn@5.X, acorn@^5.0.3, acorn@^5.5.3: - version "5.7.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" - integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== + version "5.7.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" + integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== -acorn@^6.0.1, acorn@^6.0.7, acorn@^6.2.1: - version "6.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" - integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== +acorn@^6.0.1, acorn@^6.4.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" + integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== -acorn@^7.0.0, acorn@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" - integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== +acorn@^7.0.0, acorn@^7.1.0, acorn@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" + integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== after@0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= -agent-base@4, agent-base@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" - integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== - dependencies: - es6-promisify "^5.0.0" - -agent-base@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" - integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== - dependencies: - es6-promisify "^5.0.0" +agent-base@5: + version "5.1.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c" + integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g== -agentkeepalive@^3.4.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" - integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== +agent-base@6: + version "6.0.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.0.tgz#5d0101f19bbfaed39980b22ae866de153b93f09a" + integrity sha512-j1Q7cSCqN+AwrmDd+pzgqc0/NpC655x2bUf5ZjRIO77DcNBFmh+OgRNzF6OKdCC9RSCb19fGd99+bhXFdkRNqw== dependencies: - humanize-ms "^1.2.1" + debug "4" aggregate-error@^3.0.0: version "3.0.1" @@ -4055,32 +4516,16 @@ ajv@6.5.3: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: - version "6.10.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" - integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.5.5: + version "6.12.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd" + integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ== dependencies: - fast-deep-equal "^2.0.1" + fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" -all-contributors-cli@^6.8.1: - version "6.9.3" - resolved "https://registry.yarnpkg.com/all-contributors-cli/-/all-contributors-cli-6.9.3.tgz#84995eac024402107f15e836364a9d5bf39b0d46" - integrity sha512-iSJrwddd2gEI08qUW2Q3UR22zgaAAbnur5MrrB3+nHmw1uTwzdy+/dzPZe2xNCEwozBHm2fF/67h3i03sPqAsw== - dependencies: - "@babel/runtime" "^7.2.0" - async "^3.0.1" - chalk "^2.3.0" - didyoumean "^1.2.1" - inquirer "^6.2.1" - json-fixer "^1.3.1-0" - lodash "^4.11.2" - pify "^4.0.1" - request "^2.72.0" - yargs "^14.0.0" - alphanum-sort@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" @@ -4098,15 +4543,12 @@ ansi-align@^2.0.0: dependencies: string-width "^2.0.0" -ansi-color@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/ansi-color/-/ansi-color-0.2.1.tgz#3e75c037475217544ed763a8db5709fa9ae5bf9a" - integrity sha1-PnXAN0dSF1RO12Oo21cJ+prlv5o= - -ansi-colors@3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" - integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== +ansi-align@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" + integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== + dependencies: + string-width "^3.0.0" ansi-colors@^1.0.1: version "1.1.0" @@ -4138,11 +4580,11 @@ ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== ansi-escapes@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.2.1.tgz#4dccdb846c3eee10f6d64dea66273eab90c37228" - integrity sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q== + version "4.3.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== dependencies: - type-fest "^0.5.2" + type-fest "^0.11.0" ansi-gray@^0.1.1: version "0.1.1" @@ -4178,6 +4620,11 @@ ansi-regex@^4.0.0, ansi-regex@^4.1.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -4190,11 +4637,12 @@ ansi-styles@^3.0.0, ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.1.0.tgz#d3ba8047b818293eaaa7978321dd61bff9842cfc" - integrity sha512-Qts4KCLKG+waHc9C4m07weIY8qyeixoS0h6RnbsNVD6Fw+pEZGW3vTyObL3WXpE09Mq4Oi7/lBEyLmOiLtlYWQ== +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== dependencies: + "@types/color-name" "^1.1.1" color-convert "^2.0.1" ansi-wrap@0.1.0, ansi-wrap@^0.1.0: @@ -4229,57 +4677,57 @@ anymatch@~3.1.1: picomatch "^2.0.4" apollo-cache-inmemory@^1.3.10: - version "1.6.3" - resolved "https://registry.yarnpkg.com/apollo-cache-inmemory/-/apollo-cache-inmemory-1.6.3.tgz#826861d20baca4abc45f7ca7a874105905b8525d" - integrity sha512-S4B/zQNSuYc0M/1Wq8dJDTIO9yRgU0ZwDGnmlqxGGmFombOZb9mLjylewSfQKmjNpciZ7iUIBbJ0mHlPJTzdXg== + version "1.6.5" + resolved "https://registry.yarnpkg.com/apollo-cache-inmemory/-/apollo-cache-inmemory-1.6.5.tgz#2ccaa3827686f6ed7fb634203dbf2b8d7015856a" + integrity sha512-koB76JUDJaycfejHmrXBbWIN9pRKM0Z9CJGQcBzIOtmte1JhEBSuzsOUu7NQgiXKYI4iGoMREcnaWffsosZynA== dependencies: - apollo-cache "^1.3.2" - apollo-utilities "^1.3.2" + apollo-cache "^1.3.4" + apollo-utilities "^1.3.3" optimism "^0.10.0" ts-invariant "^0.4.0" - tslib "^1.9.3" + tslib "^1.10.0" -apollo-cache@1.3.2, apollo-cache@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/apollo-cache/-/apollo-cache-1.3.2.tgz#df4dce56240d6c95c613510d7e409f7214e6d26a" - integrity sha512-+KA685AV5ETEJfjZuviRTEImGA11uNBp/MJGnaCvkgr+BYRrGLruVKBv6WvyFod27WEB2sp7SsG8cNBKANhGLg== +apollo-cache@1.3.4, apollo-cache@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/apollo-cache/-/apollo-cache-1.3.4.tgz#0c9f63c793e1cd6e34c450f7668e77aff58c9a42" + integrity sha512-7X5aGbqaOWYG+SSkCzJNHTz2ZKDcyRwtmvW4mGVLRqdQs+HxfXS4dUS2CcwrAj449se6tZ6NLUMnjko4KMt3KA== dependencies: - apollo-utilities "^1.3.2" - tslib "^1.9.3" + apollo-utilities "^1.3.3" + tslib "^1.10.0" apollo-client@^2.4.6: - version "2.6.4" - resolved "https://registry.yarnpkg.com/apollo-client/-/apollo-client-2.6.4.tgz#872c32927263a0d34655c5ef8a8949fbb20b6140" - integrity sha512-oWOwEOxQ9neHHVZrQhHDbI6bIibp9SHgxaLRVPoGvOFy7OH5XUykZE7hBQAVxq99tQjBzgytaZffQkeWo1B4VQ== + version "2.6.8" + resolved "https://registry.yarnpkg.com/apollo-client/-/apollo-client-2.6.8.tgz#01cebc18692abf90c6b3806414e081696b0fa537" + integrity sha512-0zvJtAcONiozpa5z5zgou83iEKkBaXhhSSXJebFHRXs100SecDojyUWKjwTtBPn9HbM6o5xrvC5mo9VQ5fgAjw== dependencies: "@types/zen-observable" "^0.8.0" - apollo-cache "1.3.2" + apollo-cache "1.3.4" apollo-link "^1.0.0" - apollo-utilities "1.3.2" + apollo-utilities "1.3.3" symbol-observable "^1.0.2" ts-invariant "^0.4.0" - tslib "^1.9.3" + tslib "^1.10.0" zen-observable "^0.8.0" -apollo-link@^1.0.0, apollo-link@^1.2.3: - version "1.2.13" - resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.13.tgz#dff00fbf19dfcd90fddbc14b6a3f9a771acac6c4" - integrity sha512-+iBMcYeevMm1JpYgwDEIDt/y0BB7VWyvlm/7x+TIPNLHCTCMgcEgDuW5kH86iQZWo0I7mNwQiTOz+/3ShPFmBw== +apollo-link@^1.0.0, apollo-link@^1.2.14, apollo-link@^1.2.3: + version "1.2.14" + resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.14.tgz#3feda4b47f9ebba7f4160bef8b977ba725b684d9" + integrity sha512-p67CMEFP7kOG1JZ0ZkYZwRDa369w5PIjtMjvrQd/HnIV8FRsHRqLqK+oAZQnFa1DDdZtOtHTi+aMIW6EatC2jg== dependencies: apollo-utilities "^1.3.0" ts-invariant "^0.4.0" tslib "^1.9.3" - zen-observable-ts "^0.8.20" + zen-observable-ts "^0.8.21" -apollo-utilities@1.3.2, apollo-utilities@^1.0.1, apollo-utilities@^1.3.0, apollo-utilities@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.3.2.tgz#8cbdcf8b012f664cd6cb5767f6130f5aed9115c9" - integrity sha512-JWNHj8XChz7S4OZghV6yc9FNnzEXj285QYp/nLNh943iObycI5GTDO3NGR9Dth12LRrSFMeDOConPfPln+WGfg== +apollo-utilities@1.3.3, apollo-utilities@^1.0.1, apollo-utilities@^1.3.0, apollo-utilities@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.3.3.tgz#f1854715a7be80cd810bc3ac95df085815c0787c" + integrity sha512-F14aX2R/fKNYMvhuP2t9GD9fggID7zp5I96MF5QeKYWDWTrkRdHRp4+SVfXUVN+cXOaB/IebfvRtzPf25CM0zw== dependencies: "@wry/equality" "^0.1.2" fast-json-stable-stringify "^2.0.0" ts-invariant "^0.4.0" - tslib "^1.9.3" + tslib "^1.10.0" app-root-dir@^1.0.2: version "1.0.2" @@ -4305,11 +4753,6 @@ aproba@^1.0.3, aproba@^1.1.1: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -aproba@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - arch@2.1.1, arch@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.1.tgz#8f5c2731aa35a30929221bb0640eed65175ec84e" @@ -4341,9 +4784,9 @@ arg@2.0.0: integrity sha512-XxNTUzKnz1ctK3ZIcI2XUPlD96wbHP2nGqkPKpvk/HNRlPveYrXIVSTk9m3LcqOgDPg3B1nMvdV/K8wZd7PG4w== arg@^4.1.0, arg@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.1.tgz#485f8e7c390ce4c5f78257dbea80d4be11feda4c" - integrity sha512-SlmP3fEA88MBv0PypnXZ8ZfJhwmDeIE3SP71j37AiXQBXYosPV0x6uISAaHYSlSVhmHOVkomen0tbGk6Anlebw== + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== argparse@^1.0.7: version "1.0.10" @@ -4367,7 +4810,7 @@ argsarray@0.0.1: resolved "https://registry.yarnpkg.com/argsarray/-/argsarray-0.0.1.tgz#6e7207b4ecdb39b0af88303fa5ae22bda8df61cb" integrity sha1-bnIHtOzbObCviDA/pa4ivajfYcs= -argv@^0.0.2: +argv@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/argv/-/argv-0.0.2.tgz#ecbd16f8949b157183711b1bda334f37840185ab" integrity sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas= @@ -4426,11 +4869,6 @@ array-differ@^1.0.0: resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" integrity sha1-7/UuN1gknTO+QCuLuOVkuytdQDE= -array-differ@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-2.1.0.tgz#4b9c1c3f14b906757082925769e8ab904f4801b1" - integrity sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w== - array-differ@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" @@ -4446,10 +4884,10 @@ array-equal@^1.0.0: resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= +array-filter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" + integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= array-flatten@1.1.1: version "1.1.1" @@ -4461,11 +4899,6 @@ array-flatten@^2.1.0: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== -array-ify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" - integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= - array-initial@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/array-initial/-/array-initial-1.1.0.tgz#2fa74b26739371c3947bd7a7adc73be334b3d795" @@ -4500,7 +4933,7 @@ array-sort@^1.0.0: get-value "^2.0.6" kind-of "^5.0.2" -array-union@^1.0.1, array-union@^1.0.2: +array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= @@ -4532,17 +4965,12 @@ arraybuffer.slice@~0.0.7: resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - -arrify@^2.0.1: +arrify@^2.0.0, arrify@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== -asap@^2.0.0, asap@^2.0.3, asap@~2.0.3, asap@~2.0.6: +asap@^2.0.3, asap@~2.0.3, asap@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= @@ -4586,6 +5014,16 @@ assert@^1.1.1: object-assign "^4.1.1" util "0.10.3" +assert@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-2.0.0.tgz#95fc1c616d48713510680f2eaf2d10dd22e02d32" + integrity sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A== + dependencies: + es6-object-assign "^1.1.0" + is-nan "^1.2.1" + object-is "^1.0.1" + util "^0.12.0" + assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" @@ -4611,19 +5049,11 @@ async-each@^1.0.1: resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== -async-limiter@^1.0.0, async-limiter@~1.0.0: +async-limiter@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async-listener@^0.6.0: - version "0.6.10" - resolved "https://registry.yarnpkg.com/async-listener/-/async-listener-0.6.10.tgz#a7c97abe570ba602d782273c0de60a51e3e17cbc" - integrity sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw== - dependencies: - semver "^5.3.0" - shimmer "^1.1.0" - async-settle@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/async-settle/-/async-settle-1.0.0.tgz#1d0a914bb02575bec8a8f3a74e5080f72b2c0c6b" @@ -4645,11 +5075,6 @@ async@^2.6.2: dependencies: lodash "^4.17.14" -async@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/async/-/async-3.1.0.tgz#42b3b12ae1b74927b5217d8c0016baaf62463772" - integrity sha512-4vx/aaY6j/j3Lw3fbCHNWP0pPaTCew3F6F3hYyl/tHs/ndmV1q7NW9T5yuJ2XAGwdQrP+6Wu20x06U4APo/iQQ== - async@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/async/-/async-1.0.0.tgz#f8fc04ca3a13784ade9e1641af98578cfbd647a9" @@ -4660,28 +5085,35 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -atob-lite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" - integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY= - -atob@^2.1.1: +atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -autoprefixer@^9.5.1, autoprefixer@^9.6.1: - version "9.6.5" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.6.5.tgz#98f4afe7e93cccf323287515d426019619775e5e" - integrity sha512-rGd50YV8LgwFQ2WQp4XzOTG69u1qQsXn0amww7tjqV5jJuNazgFKYEVItEBngyyvVITKOg20zr2V+9VsrXJQ2g== +atomic-sleep@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" + integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== + +autoprefixer@^9.6.1: + version "9.7.6" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.6.tgz#63ac5bbc0ce7934e6997207d5bb00d68fa8293a4" + integrity sha512-F7cYpbN7uVVhACZTeeIeealwdGM6wMtfWARVLTy5xmKtgVdBNJvbDRoCK3YO1orcs7gv/KwYlb3iXwu9Ug9BkQ== dependencies: - browserslist "^4.7.0" - caniuse-lite "^1.0.30000999" + browserslist "^4.11.1" + caniuse-lite "^1.0.30001039" chalk "^2.4.2" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^7.0.18" - postcss-value-parser "^4.0.2" + postcss "^7.0.27" + postcss-value-parser "^4.0.3" + +available-typed-arrays@^1.0.0, available-typed-arrays@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz#6b098ca9d8039079ee3f77f7b783c4480ba513f5" + integrity sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ== + dependencies: + array-filter "^1.0.0" aws-sign2@~0.7.0: version "0.7.0" @@ -4689,17 +5121,16 @@ aws-sign2@~0.7.0: integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" - integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== + version "1.9.1" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" + integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== axios@^0.19.0: - version "0.19.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.0.tgz#8e09bff3d9122e133f7b8101c8fbdd00ed3d2ab8" - integrity sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ== + version "0.19.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" + integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== dependencies: follow-redirects "1.5.10" - is-buffer "^2.0.2" babel-code-frame@^6.26.0: version "6.26.0" @@ -4710,7 +5141,7 @@ babel-code-frame@^6.26.0: esutils "^2.0.2" js-tokens "^3.0.2" -babel-core@7.0.0-bridge.0, babel-core@^7.0.0-bridge.0: +babel-core@7.0.0-bridge.0: version "7.0.0-bridge.0" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== @@ -4812,14 +5243,15 @@ babel-jest@^24.9.0: slash "^2.0.0" babel-loader@^8.0.2, babel-loader@^8.0.6: - version "8.0.6" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb" - integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw== + version "8.1.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" + integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== dependencies: - find-cache-dir "^2.0.0" - loader-utils "^1.0.2" - mkdirp "^0.5.1" + find-cache-dir "^2.1.0" + loader-utils "^1.4.0" + mkdirp "^0.5.3" pify "^4.0.1" + schema-utils "^2.6.5" babel-messages@^6.23.0: version "6.23.0" @@ -4835,22 +5267,22 @@ babel-plugin-check-es2015-constants@^6.8.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-dynamic-import-node@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" - integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== dependencies: object.assign "^4.1.0" -babel-plugin-emotion@^10.0.14, babel-plugin-emotion@^10.0.16, babel-plugin-emotion@^10.0.17: - version "10.0.21" - resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.0.21.tgz#9ebeb12edeea3e60a5476b0e07c9868605e65968" - integrity sha512-03o+T6sfVAJhNDcSdLapgv4IeewcFPzxlvBUVdSf7o5PI57ZSxoDvmy+ZulVWSu+rOWAWkEejNcsb29TuzJHbg== +babel-plugin-emotion@^10.0.21, babel-plugin-emotion@^10.0.27: + version "10.0.33" + resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.0.33.tgz#ce1155dcd1783bbb9286051efee53f4e2be63e03" + integrity sha512-bxZbTTGz0AJQDHm8k6Rf3RQJ8tX2scsfsRyKVgAbiUPUNIRtlK+7JxP+TAd1kRLABFxe0CFm2VdK4ePkoA9FxQ== dependencies: "@babel/helper-module-imports" "^7.0.0" - "@emotion/hash" "0.7.3" - "@emotion/memoize" "0.7.3" - "@emotion/serialize" "^0.11.11" + "@emotion/hash" "0.8.0" + "@emotion/memoize" "0.7.4" + "@emotion/serialize" "^0.11.16" babel-plugin-macros "^2.0.0" babel-plugin-syntax-jsx "^6.18.0" convert-source-map "^1.5.0" @@ -4887,18 +5319,29 @@ babel-plugin-lodash@^3.3.4: require-package-name "^2.0.1" babel-plugin-macros@^2.0.0, babel-plugin-macros@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.6.1.tgz#41f7ead616fc36f6a93180e89697f69f51671181" - integrity sha512-6W2nwiXme6j1n2erPOnmRiWfObUhWH7Qw1LMi9XZy8cj+KtESu3T6asZvtk5bMQQjX8te35o7CFueiSdL/2NmQ== + version "2.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" + integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== dependencies: - "@babel/runtime" "^7.4.2" - cosmiconfig "^5.2.0" - resolve "^1.10.0" + "@babel/runtime" "^7.7.2" + cosmiconfig "^6.0.0" + resolve "^1.12.0" + +babel-plugin-module-resolver@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz#ddfa5e301e3b9aa12d852a9979f18b37881ff5a7" + integrity sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA== + dependencies: + find-babel-config "^1.1.0" + glob "^7.1.2" + pkg-up "^2.0.0" + reselect "^3.0.1" + resolve "^1.4.0" "babel-plugin-styled-components@>= 1": - version "1.10.6" - resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.10.6.tgz#f8782953751115faf09a9f92431436912c34006b" - integrity sha512-gyQj/Zf1kQti66100PhrCRjI5ldjaze9O0M3emXRPAN80Zsf8+e1thpTpaXJXVHXtaM4/+dJEgZHyS9Its+8SA== + version "1.10.7" + resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.10.7.tgz#3494e77914e9989b33cc2d7b3b29527a949d635c" + integrity sha512-MBMHGcIA22996n9hZRf/UJLVVgkEOITuR2SvjHLb5dSTUyR4ZRGn+ngITapes36FI3WLxZHfRhkA1ffHxihOrg== dependencies: "@babel/helper-annotate-as-pure" "^7.0.0" "@babel/helper-module-imports" "^7.0.0" @@ -5092,14 +5535,6 @@ babel-plugin-transform-flow-strip-types@^6.8.0: babel-plugin-syntax-flow "^6.18.0" babel-runtime "^6.22.0" -babel-plugin-transform-imports@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-imports/-/babel-plugin-transform-imports-2.0.0.tgz#9e5f49f751a9d34ba8f4bb988c7e48ed2419c6b6" - integrity sha512-65ewumYJ85QiXdcB/jmiU0y0jg6eL6CdnDqQAqQ8JMOKh1E52VPG3NJzbVKWcgovUR5GBH8IWpCXQ7I8Q3wjgw== - dependencies: - "@babel/types" "^7.4" - is-valid-path "^0.1.1" - babel-plugin-transform-object-rest-spread@^6.26.0, babel-plugin-transform-object-rest-spread@^6.8.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" @@ -5138,9 +5573,9 @@ babel-plugin-transform-strict-mode@^6.24.1: babel-types "^6.24.1" babel-plugin-universal-import@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-universal-import/-/babel-plugin-universal-import-4.0.0.tgz#e104049e8bd1ff3e028bbfb0a358554c3e28e347" - integrity sha512-f+1cav9o7y7AiugeIETdbPwdcHYs78UcqBo2JXM5eYQLSDGjJpa03oB3o8sUyj+viSzVnMTGiPJEeJIXQRzcng== + version "4.0.2" + resolved "https://registry.yarnpkg.com/babel-plugin-universal-import/-/babel-plugin-universal-import-4.0.2.tgz#8a92e4e8c795f68eae149ba91476820d023bfa5e" + integrity sha512-VTtHsmvwRBkX3yLK4e+pFwk88BC6iNFqS2J8CCx2ddQc7RjXoRhuXXIgYCng21DYNty9IicCwDdTDjdr+TM7eg== dependencies: "@babel/helper-module-imports" "^7.0.0" @@ -5265,19 +5700,19 @@ backo2@1.0.2: integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= bail@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.4.tgz#7181b66d508aa3055d3f6c13f0a0c720641dde9b" - integrity sha512-S8vuDB4w6YpRhICUDET3guPlQpaJl7od94tpZ0Fvnyp+MKW/HyDTcRDck+29C9g+d/qQHnddRH3+94kZdrW0Ww== + version "1.0.5" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" + integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base-x@^3.0.2: - version "3.0.6" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.6.tgz#de047ec95f5f7b99ae63d830a2a894c96538b2cd" - integrity sha512-4PaF8u2+AlViJxRVjurkLTxpp7CaFRD/jo5rPT9ONnKxyhQ8f59yzamEvq7EkriG56yn5On4ONyaG75HLqr46w== +base-x@^3.0.2, base-x@^3.0.6: + version "3.0.8" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.8.tgz#1e1106c2537f0162e8b52474a557ebb09000018d" + integrity sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA== dependencies: safe-buffer "^5.0.1" @@ -5286,7 +5721,7 @@ base64-arraybuffer@0.1.5: resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg= -base64-js@^1.0.2: +base64-js@^1.0.2, base64-js@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== @@ -5326,11 +5761,6 @@ beeper@^1.0.0: resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" integrity sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak= -before-after-hook@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" - integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== - better-assert@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" @@ -5358,6 +5788,11 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== +bignumber.js@^7.0.0: + version "7.2.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f" + integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ== + bignumber.js@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.0.tgz#805880f84a329b5eac6e7cb6f8274b6d82bdf075" @@ -5374,9 +5809,9 @@ binary-extensions@^2.0.0: integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== binaryextensions@2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.1.2.tgz#c83c3d74233ba7674e4f313cb2a2b70f54e94b7c" - integrity sha512-xVNN69YGDghOqCCtA6FI7avYrr02mTJjOgB0/f1VPD3pJC8QEvjTKWc4epDx8AqxxA75NI0QpVM2gPJXUbE4Tg== + version "2.2.0" + resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.2.0.tgz#e7c6ba82d4f5f5758c26078fe8eea28881233311" + integrity sha512-bHhs98rj/7i/RZpCSJ3uk55pLXOItjIrh2sRQZSM6OoktScX+LxJzvlU+FELp9j3TdcddTmmYArLSGptCTwjuw== bindings@^1.4.0, bindings@^1.5.0: version "1.5.0" @@ -5385,20 +5820,15 @@ bindings@^1.4.0, bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" -bintrees@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/bintrees/-/bintrees-1.0.1.tgz#0e655c9b9c2435eaab68bf4027226d2b55a34524" - integrity sha1-DmVcm5wkNeqraL9AJyJtK1WjRSQ= - bitbuffer@0.1.x: version "0.1.3" resolved "https://registry.yarnpkg.com/bitbuffer/-/bitbuffer-0.1.3.tgz#780feb1297caaf0fac9e48cfab946d6efd2bd397" integrity sha1-eA/rEpfKrw+snkjPq5Rtbv0r05c= bitwise@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/bitwise/-/bitwise-2.0.3.tgz#ee875d5b5c71a5de676896b91695b7b35d94ee8f" - integrity sha512-oNhwCqCWVq6pGtHIVmWgRTbUlbVElTZnuko7zIHba8ZWaVuI4z6+Twxm49GXxG0VY4D1Hqef/kGIhhmiPk2Rkg== + version "2.0.4" + resolved "https://registry.yarnpkg.com/bitwise/-/bitwise-2.0.4.tgz#3b6f95c43d614b83b980331d3b41d78b9c902039" + integrity sha512-ZOByl1Sc8SH2/owfRfR1apaC1ELNqHqAAtfqs1Ixqk/9Bod6VxWz10MiMYXkNiL95RdFAqOGQxm1TCGPf1iFyw== bl@^1.0.0: version "1.2.2" @@ -5408,12 +5838,14 @@ bl@^1.0.0: readable-stream "^2.3.5" safe-buffer "^5.1.1" -bl@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-3.0.0.tgz#3611ec00579fd18561754360b21e9f784500ff88" - integrity sha512-EUAyP5UHU5hxF8BPT0LKW8gjYLhq1DQIcneOX/pL/m2Alo+OYDQAJlHq+yseMP50Os2nHXOSic6Ss3vSQeyf4A== +bl@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.2.tgz#52b71e9088515d0606d9dd9cc7aa48dc1f98e73a" + integrity sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ== dependencies: - readable-stream "^3.0.1" + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" blob@0.0.5: version "0.0.5" @@ -5438,11 +5870,16 @@ bluebird@3.5.0: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" integrity sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw= -bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: +bluebird@3.7.1: version "3.7.1" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.1.tgz#df70e302b471d7473489acf26a93d63b53f874de" integrity sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg== +bluebird@^3.5.5, bluebird@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + bn.js@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-2.2.0.tgz#12162bc2ae71fc40a5626c33438f3a875cd37625" @@ -5454,9 +5891,9 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.11.8, bn.js@^4.4.0: integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== bn.js@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.0.0.tgz#5c3d398021b3ddb548c1296a16f857e908f35c70" - integrity sha512-bVwDX8AF+72fIUNuARelKAlQUNtPOfG2fRxorbVvFk4zpHbqLrPdOGfVg5vrKwVzLLePqPBiATaOZNELQzmS0A== + version "5.1.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.1.tgz#48efc4031a9c4041b9c99c6941d903463ab62eb5" + integrity sha512-IUTD/REb78Z2eodka1QZyyEk66pciRcP6Sroka0aI3tG/iwIdYLrBD62RsubR7vqdt3WyX8p4jxeatzmRSphtA== body-parser@1.19.0: version "1.19.0" @@ -5491,12 +5928,12 @@ boolbase@^1.0.0, boolbase@~1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= -bowser@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.7.0.tgz#96eab1fa07fab08c1ec4c75977a7c8ddf8e0fe1f" - integrity sha512-aIlMvstvu8x+34KEiOHD3AsBgdrzg6sxALYiukOWhFvGMbQI6TRP/iY0LMhUrHs56aD6P1G0Z7h45PUJaa5m9w== +bowser@2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.9.0.tgz#3bed854233b419b9a7422d9ee3e85504373821c9" + integrity sha512-2ld76tuLBNFekRgmJfT2+3j5MIrP6bFict8WAIT3beq+srz1gcKNAdNKMqHqauQt63NmAa88HfP1/Ypa9Er3HA== -boxen@1.3.0, boxen@^1.2.1: +boxen@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== @@ -5509,6 +5946,20 @@ boxen@1.3.0, boxen@^1.2.1: term-size "^1.2.0" widest-line "^2.0.0" +boxen@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" + integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^5.3.1" + chalk "^3.0.0" + cli-boxes "^2.2.0" + string-width "^4.1.0" + term-size "^2.1.0" + type-fest "^0.8.1" + widest-line "^3.1.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -5559,10 +6010,10 @@ brorand@^1.0.1: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= -browser-process-hrtime@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" - integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw== +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== browser-resolve@^1.11.3: version "1.11.3" @@ -5571,11 +6022,6 @@ browser-resolve@^1.11.3: dependencies: resolve "1.1.7" -browser-stdout@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" @@ -5642,23 +6088,15 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.0.0: - version "4.6.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.6.6.tgz#6e4bf467cde520bc9dbdf3747dafa03531cec453" - integrity sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA== +browserslist@^4.0.0, browserslist@^4.11.1, browserslist@^4.8.5: + version "4.12.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.12.0.tgz#06c6d5715a1ede6c51fc39ff67fd647f740b656d" + integrity sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg== dependencies: - caniuse-lite "^1.0.30000984" - electron-to-chromium "^1.3.191" - node-releases "^1.1.25" - -browserslist@^4.6.0, browserslist@^4.7.0, browserslist@^4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.1.tgz#bd400d1aea56538580e8c4d5f1c54ac11b5ab468" - integrity sha512-QtULFqKIAtiyNx7NhZ/p4rB8m3xDozVo/pi5VgTlADLF2tNigz/QH+v0m5qhn7XfHT7u+607NcCNOnC0HZAlMg== - dependencies: - caniuse-lite "^1.0.30000999" - electron-to-chromium "^1.3.284" - node-releases "^1.1.36" + caniuse-lite "^1.0.30001043" + electron-to-chromium "^1.3.413" + node-releases "^1.1.53" + pkg-up "^2.0.0" bs-logger@0.x: version "0.2.6" @@ -5683,18 +6121,13 @@ bs58check@<3.0.0: create-hash "^1.1.0" safe-buffer "^5.1.2" -bser@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.0.tgz#65fc784bf7f87c009b973c12db6546902fa9c7b5" - integrity sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg== +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== dependencies: node-int64 "^0.4.0" -btoa-lite@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" - integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= - buffer-alloc-unsafe@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" @@ -5713,6 +6146,11 @@ buffer-crc32@~0.2.3: resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= + buffer-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" @@ -5766,32 +6204,22 @@ buffer-xor@^2.0.2: safe-buffer "^5.1.1" buffer@^4.3.0: - version "4.9.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" - integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg= + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== dependencies: base64-js "^1.0.2" ieee754 "^1.1.4" isarray "^1.0.0" -buffer@^5.2.1: - version "5.4.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.4.3.tgz#3fbc9c69eb713d323e3fc1a895eee0710c072115" - integrity sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A== +buffer@^5.2.1, buffer@^5.5.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" + integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== dependencies: base64-js "^1.0.2" ieee754 "^1.1.4" -bufrw@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/bufrw/-/bufrw-1.3.0.tgz#28d6cfdaf34300376836310f5c31d57eeb40c8fa" - integrity sha512-jzQnSbdJqhIltU9O5KUiTtljP9ccw2u5ix59McQy4pV2xGhVLhRZIndY8GIrgh5HjXa6+QJ9AQhOd2QWQizJFQ== - dependencies: - ansi-color "^0.2.1" - error "^7.0.0" - hexer "^1.5.0" - xtend "^4.0.0" - builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" @@ -5807,16 +6235,6 @@ builtins@^1.0.3: resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= -byline@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" - integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= - -byte-size@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191" - integrity sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw== - bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -5827,30 +6245,10 @@ bytes@3.1.0, bytes@^3.0.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== -cacache@^11.2.0: - version "11.3.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.3.tgz#8bd29df8c6a718a6ebd2d010da4d7972ae3bbadc" - integrity sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - -cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: - version "12.0.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" - integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== +cacache@^12.0.2: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== dependencies: bluebird "^3.5.5" chownr "^1.1.1" @@ -5940,6 +6338,19 @@ cacheable-request@^2.1.1: normalize-url "2.0.1" responselike "1.0.2" +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + cachedir@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-1.3.0.tgz#5e01928bf2d95b5edd94b0942188246740e0dbc4" @@ -5947,11 +6358,6 @@ cachedir@1.3.0: dependencies: os-homedir "^1.0.1" -cachedir@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.2.0.tgz#19afa4305e05d79e417566882e0c8f960f62ff0e" - integrity sha512-VvxA0xhNqIIfg0V9AmJkDg91DaJwryutH5rVEZAhcNi4iJFj9f+QxmAjgK1LT9I8OgToX27fypX6/MeCXVbBjQ== - caching-transform@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-3.0.2.tgz#601d46b91eca87687a281e71cef99791b0efca70" @@ -6004,33 +6410,11 @@ camel-case@3.0.x, camel-case@^3.0.0: no-case "^2.2.0" upper-case "^1.1.1" -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase-keys@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" - integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= - dependencies: - camelcase "^4.1.0" - map-obj "^2.0.0" - quick-lru "^1.0.0" - camelcase@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== -camelcase@^2.0.0, camelcase@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= - camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" @@ -6061,15 +6445,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0: - version "1.0.30000989" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz#b9193e293ccf7e4426c5245134b8f2a56c0ac4b9" - integrity sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw== - -caniuse-lite@^1.0.30000984, caniuse-lite@^1.0.30000999: - version "1.0.30001002" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001002.tgz#ba999a737b1abd5bf0fd47efe43a09b9cadbe9b0" - integrity sha512-pRuxPE8wdrWmVPKcDmJJiGBxr6lFJq4ivdSeo9FTmGj5Rb8NX3Mby2pARG57MXF15hYAhZ0nHV5XxT2ig4bz3g== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001039, caniuse-lite@^1.0.30001043: + version "1.0.30001050" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001050.tgz#11218af4b6b85dc1089536f31e10e3181e849e71" + integrity sha512-OvGZqalCwmapci76ISq5q4kuAskb1ebqF3FEQBv1LE1kWht0pojlDDqzFlmk5jgYkuZN7MNZ1n+ULwe/7MaDNQ== canonical-path@^1.0.0: version "1.0.0" @@ -6088,15 +6467,10 @@ capture-exit@^2.0.0: dependencies: rsvp "^4.8.4" -capture-stack-trace@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" - integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== - case-sensitive-paths-webpack-plugin@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.2.0.tgz#3371ef6365ef9c25fa4b81c16ace0e9c7dc58c3e" - integrity sha512-u5ElzokS8A1pm9vM3/iDgTcI3xqHxuCao94Oz8etI3cf0Tio0p8izkDYbTIn09uP3yUUr6+veaE6IkjnTYS46g== + version "2.3.0" + resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz#23ac613cc9a856e4f88ff8bb73bbb5e989825cf7" + integrity sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ== caseless@~0.12.0: version "0.12.0" @@ -6121,18 +6495,9 @@ caw@^2.0.1: url-to-options "^1.0.1" ccount@^1.0.0, ccount@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.4.tgz#9cf2de494ca84060a2a8d2854edd6dfb0445f386" - integrity sha512-fpZ81yYfzentuieinmGnphk0pLkOTMm6MZdVqwd77ROvhko6iujLNGrHH5E7utq3ygWklwfmwuG+A7P+NpqT6w== - -chalk@2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65" - integrity sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" + version "1.0.5" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.5.tgz#ac82a944905a65ce204eb03023157edf29425c17" + integrity sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw== chalk@2.4.1: version "2.4.1" @@ -6143,7 +6508,7 @@ chalk@2.4.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: +chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -6163,6 +6528,14 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + change-case@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/change-case/-/change-case-3.0.0.tgz#6c9c8e35f8790870a82b6b0745be8c3cbef9b081" @@ -6217,35 +6590,20 @@ change-emitter@^0.1.2: integrity sha1-6LL+PX8at9aaMhma/5HqaTFAlRU= character-entities-html4@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.3.tgz#5ce6e01618e47048ac22f34f7f39db5c6fd679ef" - integrity sha512-SwnyZ7jQBCRHELk9zf2CN5AnGEc2nA+uKMZLHvcqhpPprjkYhiLn0DywMHgN5ttFZuITMATbh68M6VIVKwJbcg== + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125" + integrity sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g== character-entities-legacy@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.3.tgz#3c729991d9293da0ede6dddcaf1f2ce1009ee8b4" - integrity sha512-YAxUpPoPwxYFsslbdKkhrGnXAtXoHNgYjlBM3WMXkWGTl5RsY3QmOyhwAgL8Nxm9l5LBThXGawxKPn68y6/fww== - -character-entities@^1.0.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.3.tgz#bbed4a52fe7ef98cc713c6d80d9faa26916d54e6" - integrity sha512-yB4oYSAa9yLcGyTbB4ItFwHw43QHdH129IJ5R+WvxOkWlyFnR5FAaBNnUq4mcxsTVZGh28bHoeTHMKXH1wZf3w== - -character-reference-invalid@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.3.tgz#1647f4f726638d3ea4a750cf5d1975c1c7919a85" - integrity sha512-VOq6PRzQBam/8Jm6XBGk2fNEnHXAdGd6go0rtd4weAGECBamHDwwCQSOT12TACIYUZegUXnV6xBXqUssijtxIg== + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" + integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -charenc@~0.0.1: - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= - check-more-types@2.24.0: version "2.24.0" resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" @@ -6256,7 +6614,7 @@ check-types@^8.0.3: resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552" integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ== -chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.3, chokidar@^2.1.8: +chokidar@^2.0.0, chokidar@^2.0.3, chokidar@^2.1.2, chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== @@ -6275,10 +6633,10 @@ chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.3, chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chokidar@^3.0.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.2.2.tgz#a433973350021e09f2b853a2287781022c0dc935" - integrity sha512-bw3pm7kZ2Wa6+jQWYP/c7bAZy3i4GwiIiMO2EeRjrE48l8vBqC/WvFhSF0xyM8fQiPEGvwMY/5bqDG7sSEOuhg== +chokidar@^3.0.2, chokidar@^3.2.2, chokidar@^3.3.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8" + integrity sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ== dependencies: anymatch "~3.1.1" braces "~3.0.2" @@ -6286,14 +6644,14 @@ chokidar@^3.0.2: is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.2.0" + readdirp "~3.4.0" optionalDependencies: - fsevents "~2.1.1" + fsevents "~2.1.2" chownr@^1.1.1, chownr@^1.1.2, chownr@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" - integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== chrome-trace-event@^1.0.2: version "1.0.2" @@ -6341,9 +6699,9 @@ classnames@^2.2.5, classnames@^2.2.6: integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== clean-css@4.2.x: - version "4.2.1" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" - integrity sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g== + version "4.2.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" + integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== dependencies: source-map "~0.6.0" @@ -6357,6 +6715,11 @@ cli-boxes@^1.0.0: resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= +cli-boxes@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d" + integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w== + cli-cursor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" @@ -6385,14 +6748,14 @@ cli-truncate@^0.2.1: string-width "^1.0.1" cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== clipboard@^2.0.0, clipboard@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.4.tgz#836dafd66cf0fea5d71ce5d5b0bf6e958009112d" - integrity sha512-Vw26VSLRpJfBofiVaFb/I8PVfdI1OxKcYShe6fm0sP/DtmiWQNCjhM/okTvdCo0G+lMMm1rMYbk4IK4x1X+kgQ== + version "2.0.6" + resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.6.tgz#52921296eec0fdf77ead1749421b21c968647376" + integrity sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg== dependencies: good-listener "^1.2.2" select "^1.1.2" @@ -6406,7 +6769,7 @@ clipboardy@1.2.3: arch "^2.1.0" execa "^0.8.0" -cliui@^3.0.3, cliui@^3.2.0: +cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= @@ -6433,19 +6796,21 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + clone-buffer@1.0.0, clone-buffer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg= -clone-regexp@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-2.2.0.tgz#7d65e00885cd8796405c35a737e7a86b7429e36f" - integrity sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q== - dependencies: - is-regexp "^2.0.0" - -clone-response@1.0.2: +clone-response@1.0.2, clone-response@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= @@ -6462,7 +6827,7 @@ clone-stats@^1.0.0: resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA= -clone@^1.0.0, clone@^1.0.2: +clone@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= @@ -6510,21 +6875,16 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= -codecov@^3.5.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/codecov/-/codecov-3.6.1.tgz#f39fc49413445555f81f8e3ca5730992843b4517" - integrity sha512-IUJB6WG47nWK7o50etF8jBadxdMw7DmoQg05yIljstXFBGB6clOZsIj6iD4P82T2YaIU3qq+FFu8K9pxgkCJDQ== +codecov@^3.6.1: + version "3.6.5" + resolved "https://registry.yarnpkg.com/codecov/-/codecov-3.6.5.tgz#d73ce62e8a021f5249f54b073e6f2d6a513f172a" + integrity sha512-v48WuDMUug6JXwmmfsMzhCHRnhUf8O3duqXvltaYJKrO1OekZWpB/eH6iIoaxMl8Qli0+u3OxptdsBOYiD7VAQ== dependencies: - argv "^0.0.2" - ignore-walk "^3.0.1" - js-yaml "^3.13.1" - teeny-request "^3.11.3" - urlgrey "^0.4.4" - -collapse-white-space@^1.0.2: - version "1.0.5" - resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.5.tgz#c2495b699ab1ed380d29a1091e01063e75dbbe3a" - integrity sha512-703bOOmytCYAX9cXYqoikYIx6twmFCXsnzRQheBcTG3nzKYBR4P/+wkYeH+Mvj7qUz8zZDtdyzbxfnEi/kYzRQ== + argv "0.0.2" + ignore-walk "3.0.3" + js-yaml "3.13.1" + teeny-request "6.0.1" + urlgrey "0.4.4" collection-map@^1.0.0: version "1.0.0" @@ -6588,20 +6948,17 @@ color@^3.0.0, color@^3.1.2: color-convert "^1.9.1" color-string "^1.5.2" +colorette@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.1.0.tgz#1f943e5a357fac10b4e0f5aaef3b14cdc1af6ec7" + integrity sha512-6S062WDQUXi6hOfkO/sBPVwE5ASXY4G2+b4atvhJfSsuUUhIaUKlkjLe9692Ipyt5/a+IPF5aVTu3V5gvXq5cg== + colors@1.0.x: version "1.0.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= -columnify@^1.5.4: - version "1.5.4" - resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" - integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= - dependencies: - strip-ansi "^3.0.0" - wcwidth "^1.0.0" - -combined-stream@^1.0.6, combined-stream@~1.0.6: +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -6609,9 +6966,9 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: delayed-stream "~1.0.0" comma-separated-tokens@^1.0.0, comma-separated-tokens@^1.0.1: - version "1.0.7" - resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.7.tgz#419cd7fb3258b1ed838dc0953167a25e152f5b59" - integrity sha512-Jrx3xsP4pPv4AwJUDWY9wOXGtwPXARej6Xd99h4TUGotmf8APuquKMpK+dnD3UgyxK7OEWaisjZz+3b5jtL6xQ== + version "1.0.8" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" + integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== commander@2.15.1: version "2.15.1" @@ -6623,11 +6980,21 @@ commander@2.17.x: resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== -commander@^2.12.1, commander@^2.16.0, commander@^2.18.0, commander@^2.20.0, commander@^2.8.1, commander@~2.20.3: +commander@^2.12.1, commander@^2.18.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +commander@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" + integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== + +commander@^4.0.1, commander@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + commander@~2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" @@ -6640,27 +7007,6 @@ commander@~2.8.1: dependencies: graceful-readlink ">= 1.0.0" -commitizen@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/commitizen/-/commitizen-4.0.3.tgz#c19a4213257d0525b85139e2f36db7cc3b4f6dae" - integrity sha512-lxu0F/Iq4dudoFeIl5pY3h3CQJzkmQuh3ygnaOvqhAD8Wu2pYBI17ofqSuPHNsBTEOh1r1AVa9kR4Hp0FAHKcQ== - dependencies: - cachedir "2.2.0" - cz-conventional-changelog "3.0.1" - dedent "0.7.0" - detect-indent "6.0.0" - find-node-modules "2.0.0" - find-root "1.1.0" - fs-extra "8.1.0" - glob "7.1.4" - inquirer "6.5.0" - is-utf8 "^0.2.1" - lodash "4.17.15" - minimist "1.2.0" - shelljs "0.7.6" - strip-bom "4.0.0" - strip-json-comments "3.0.1" - common-tags@1.8.0, common-tags@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" @@ -6671,14 +7017,6 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= -compare-func@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648" - integrity sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg= - dependencies: - array-ify "^1.0.0" - dot-prop "^3.0.0" - component-bind@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" @@ -6699,23 +7037,23 @@ component-inherit@0.0.3: resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= -compressible@^2.0.0, compressible@~2.0.14, compressible@~2.0.16: - version "2.0.17" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.17.tgz#6e8c108a16ad58384a977f3a482ca20bff2f38c1" - integrity sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw== +compressible@^2.0.0, compressible@^2.0.12, compressible@~2.0.14, compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== dependencies: - mime-db ">= 1.40.0 < 2" + mime-db ">= 1.43.0 < 2" compression-webpack-plugin@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-3.0.0.tgz#097d2e4d95c3a14cb5c8ed20899009ab5b9bbca0" - integrity sha512-ls+oKw4eRbvaSv/hj9NmctihhBcR26j76JxV0bLRLcWhrUBdQFgd06z/Kgg7exyQvtWWP484wZxs0gIUX3NO0Q== + version "3.1.0" + resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-3.1.0.tgz#9f510172a7b5fae5aad3b670652e8bd7997aeeca" + integrity sha512-iqTHj3rADN4yHwXMBrQa/xrncex/uEQy8QHlaTKxGchT/hC0SdlJlmL/5eRqffmWq2ep0/Romw6Ld39JjTR/ug== dependencies: - cacache "^11.2.0" + cacache "^13.0.1" find-cache-dir "^3.0.0" neo-async "^2.5.0" - schema-utils "^1.0.0" - serialize-javascript "^1.4.0" + schema-utils "^2.6.1" + serialize-javascript "^2.1.2" webpack-sources "^1.0.1" compression@1.7.3: @@ -6769,13 +7107,13 @@ concat-stream@^2.0.0: readable-stream "^3.0.2" typedarray "^0.0.6" -concurrently@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-5.0.0.tgz#99c7567d009411fbdc98299d553c4b99a978612c" - integrity sha512-1yDvK8mduTIdxIxV9C60KoiOySUl/lfekpdbI+U5GXaPrgdffEavFa9QZB3vh68oWOpbCC+TuvxXV9YRPMvUrA== +concurrently@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-4.1.2.tgz#1a683b2b5c41e9ed324c9002b9f6e4c6e1f3b6d7" + integrity sha512-Kim9SFrNr2jd8/0yNYqDTFALzUX1tvimmwFWxmp/D4mRI+kbqIIwE2RkBDrxS2ic25O1UgQMI5AtBqdtX3ynYg== dependencies: chalk "^2.4.2" - date-fns "^2.0.1" + date-fns "^1.30.1" lodash "^4.17.15" read-pkg "^4.0.1" rxjs "^6.5.2" @@ -6792,17 +7130,17 @@ config-chain@^1.1.11: ini "^1.3.4" proto-list "~1.2.1" -configstore@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" - integrity sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw== +configstore@^5.0.0, configstore@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== dependencies: - dot-prop "^4.1.0" + dot-prop "^5.2.0" graceful-fs "^4.1.2" - make-dir "^1.0.0" - unique-string "^1.0.0" - write-file-atomic "^2.0.0" - xdg-basedir "^3.0.0" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" connect-history-api-fallback@^1.6.0: version "1.6.0" @@ -6810,16 +7148,14 @@ connect-history-api-fallback@^1.6.0: integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== consola@^2.10.0: - version "2.10.1" - resolved "https://registry.yarnpkg.com/consola/-/consola-2.10.1.tgz#4693edba714677c878d520e4c7e4f69306b4b927" - integrity sha512-4sxpH6SGFYLADfUip4vuY65f/gEogrzJoniVhNUYkJHtng0l8ZjnDCqxxrSVRHOHwKxsy8Vm5ONZh1wOR3/l/w== + version "2.11.3" + resolved "https://registry.yarnpkg.com/consola/-/consola-2.11.3.tgz#f7315836224c143ac5094b47fd4c816c2cd1560e" + integrity sha512-aoW0YIIAmeftGR8GSpw6CGQluNdkWMWh3yEFjH/hmynTYnMtibXszii3lxCXmk8YxJtI3FAK5aTiquA5VH68Gw== console-browserify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" - integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA= - dependencies: - date-now "^0.1.4" + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" @@ -6861,106 +7197,10 @@ content-type@^1.0.4, content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -continuation-local-storage@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz#11f613f74e914fe9b34c92ad2d28fe6ae1db7ffb" - integrity sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA== - dependencies: - async-listener "^0.6.0" - emitter-listener "^1.1.1" - -conventional-changelog-angular@^5.0.3: - version "5.0.5" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.5.tgz#69b541bcf3e538a8578b1e5fbaabe9bd8f572b57" - integrity sha512-RrkdWnL/TVyWV1ayWmSsrWorsTDqjL/VwG5ZSEneBQrd65ONcfeA1cW7FLtNweQyMiKOyriCMTKRSlk18DjTrw== - dependencies: - compare-func "^1.3.1" - q "^1.5.1" - -conventional-changelog-core@^3.1.6: - version "3.2.3" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-3.2.3.tgz#b31410856f431c847086a7dcb4d2ca184a7d88fb" - integrity sha512-LMMX1JlxPIq/Ez5aYAYS5CpuwbOk6QFp8O4HLAcZxe3vxoCtABkhfjetk8IYdRB9CDQGwJFLR3Dr55Za6XKgUQ== - dependencies: - conventional-changelog-writer "^4.0.6" - conventional-commits-parser "^3.0.3" - dateformat "^3.0.0" - get-pkg-repo "^1.0.0" - git-raw-commits "2.0.0" - git-remote-origin-url "^2.0.0" - git-semver-tags "^2.0.3" - lodash "^4.2.1" - normalize-package-data "^2.3.5" - q "^1.5.1" - read-pkg "^3.0.0" - read-pkg-up "^3.0.0" - through2 "^3.0.0" - -conventional-changelog-preset-loader@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.2.0.tgz#571e2b3d7b53d65587bea9eedf6e37faa5db4fcc" - integrity sha512-zXB+5vF7D5Y3Cb/rJfSyCCvFphCVmF8mFqOdncX3BmjZwAtGAPfYrBcT225udilCKvBbHgyzgxqz2GWDB5xShQ== - -conventional-changelog-writer@^4.0.6: - version "4.0.9" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.9.tgz#44ac4c48121bc90e71cb2947e1ea1a6c222ccd7f" - integrity sha512-2Y3QfiAM37WvDMjkVNaRtZgxVzWKj73HE61YQ/95T53yle+CRwTVSl6Gbv/lWVKXeZcM5af9n9TDVf0k7Xh+cw== - dependencies: - compare-func "^1.3.1" - conventional-commits-filter "^2.0.2" - dateformat "^3.0.0" - handlebars "^4.4.0" - json-stringify-safe "^5.0.1" - lodash "^4.2.1" - meow "^4.0.0" - semver "^6.0.0" - split "^1.0.0" - through2 "^3.0.0" - -conventional-commit-types@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/conventional-commit-types/-/conventional-commit-types-2.1.1.tgz#352eb53f56fbc7c1a6c1ba059c2b6670c90b2a8a" - integrity sha512-0Ts+fEdmjqYDOQ1yZ+LNgdSPO335XZw9qC10M7CxtLP3nIMGmeMhmkM8Taffa4+MXN13bRPlp0CtH+QfOzKTzw== - -conventional-commits-filter@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.2.tgz#f122f89fbcd5bb81e2af2fcac0254d062d1039c1" - integrity sha512-WpGKsMeXfs21m1zIw4s9H5sys2+9JccTzpN6toXtxhpw2VNF2JUXwIakthKBy+LN4DvJm+TzWhxOMWOs1OFCFQ== - dependencies: - lodash.ismatch "^4.4.0" - modify-values "^1.0.0" - -conventional-commits-parser@^3.0.3: - version "3.0.5" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.0.5.tgz#df471d6cb3f6fecfd1356ac72e0b577dbdae0a9c" - integrity sha512-qVz9+5JwdJzsbt7JbJ6P7NOXBGt8CyLFJYSjKAuPSgO+5UGfcsbk9EMR+lI8Unlvx6qwIc2YDJlrGIfay2ehNA== - dependencies: - JSONStream "^1.0.4" - is-text-path "^2.0.0" - lodash "^4.2.1" - meow "^4.0.0" - split2 "^2.0.0" - through2 "^3.0.0" - trim-off-newlines "^1.0.0" - -conventional-recommended-bump@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-5.0.1.tgz#5af63903947b6e089e77767601cb592cabb106ba" - integrity sha512-RVdt0elRcCxL90IrNP0fYCpq1uGt2MALko0eyeQ+zQuDVWtMGAy9ng6yYn3kax42lCj9+XBxQ8ZN6S9bdKxDhQ== - dependencies: - concat-stream "^2.0.0" - conventional-changelog-preset-loader "^2.1.1" - conventional-commits-filter "^2.0.2" - conventional-commits-parser "^3.0.3" - git-raw-commits "2.0.0" - git-semver-tags "^2.0.3" - meow "^4.0.0" - q "^1.5.1" - -convert-source-map@1.X, convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" - integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== +convert-source-map@1.X, convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== dependencies: safe-buffer "~5.1.1" @@ -7017,13 +7257,18 @@ copy-to@^2.0.1: resolved "https://registry.yarnpkg.com/copy-to/-/copy-to-2.0.1.tgz#2680fbb8068a48d08656b6098092bdafc906f4a5" integrity sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU= -core-js-compat@^3.1.1: - version "3.3.3" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.3.3.tgz#82642808cf484a35292b2f8e83ef9376884e760f" - integrity sha512-GNZkENsx5pMnS7Inwv7ZO/s3B68a9WU5kIjxqrD/tkNR8mtfXJRk8fAKRlbvWZSGPc59/TkiOBDYl5Cb65pTVA== +core-js-compat@^3.6.2: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" + integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng== dependencies: - browserslist "^4.7.1" - semver "^6.3.0" + browserslist "^4.8.5" + semver "7.0.0" + +core-js-pure@^3.0.0: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" + integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA== core-js@^1.0.0: version "1.2.7" @@ -7031,14 +7276,14 @@ core-js@^1.0.0: integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= core-js@^2.4.0, core-js@^2.5.0, core-js@^2.6.5: - version "2.6.10" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.10.tgz#8a5b8391f8cc7013da703411ce5b585706300d7f" - integrity sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA== + version "2.6.11" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" + integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== -core-js@^3.1.4: - version "3.3.3" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.3.3.tgz#b7048d3c6c1a52b5fe55a729c1d4ccdffe0891bb" - integrity sha512-0xmD4vUJRY8nfLyV9zcpC17FtSie5STXzw+HyYw2t8IIvmDnbq7RJUULECCo+NstpJtwK9kx8S+898iyqgeUow== +core-js@^3.2.1: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" + integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -7053,7 +7298,7 @@ cors@^2.8.5: object-assign "^4" vary "^1" -cosmiconfig@^5.0.0, cosmiconfig@^5.1.0, cosmiconfig@^5.2.0, cosmiconfig@^5.2.1: +cosmiconfig@^5.0.0, cosmiconfig@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== @@ -7063,6 +7308,17 @@ cosmiconfig@^5.0.0, cosmiconfig@^5.1.0, cosmiconfig@^5.2.0, cosmiconfig@^5.2.1: js-yaml "^3.13.1" parse-json "^4.0.0" +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + cp-file@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/cp-file/-/cp-file-6.2.0.tgz#40d5ea4a1def2a9acdd07ba5c0b0246ef73dc10d" @@ -7082,32 +7338,25 @@ create-ecdh@^4.0.0: bn.js "^4.1.0" elliptic "^6.0.0" -create-emotion-server@10.0.14: - version "10.0.14" - resolved "https://registry.yarnpkg.com/create-emotion-server/-/create-emotion-server-10.0.14.tgz#51378f2f5a38d55b6da403a7f975d51b7cf221b5" - integrity sha512-wYPojM+irHtmIZuRmYeKYaJSttC3/3Cj4DI8B1JmYq8P9IQ5FZCyfahdHhI3OSrNHIkWAX1Kjt4kbbqxVbUjPw== +create-emotion-server@10.0.27: + version "10.0.27" + resolved "https://registry.yarnpkg.com/create-emotion-server/-/create-emotion-server-10.0.27.tgz#24b135d9ef3bca32b6812c0b670feb675edd17e3" + integrity sha512-1EbZgdjiho9ue1BSTpAez8SIdfbTXomtz0bg+LPOEvf/5OV7xqCGJaoSCDCB+y7kZ73hwoEhLsoPmqKSGIQMXg== dependencies: - "@emotion/utils" "0.11.2" + "@emotion/utils" "0.11.3" html-tokenize "^2.0.0" multipipe "^1.0.2" through "^2.3.8" -create-emotion@^10.0.14: - version "10.0.14" - resolved "https://registry.yarnpkg.com/create-emotion/-/create-emotion-10.0.14.tgz#4c140aaef6a9588ed47c926f9c4679e4719be43e" - integrity sha512-5G4naKMxokOur+94eDz7iPKBfwzy4wa/+0isnPhxXyosIQHBq7yvBy4jjdZw/nnRm7G3PM7P9Ug8mUmtoqcaHg== - dependencies: - "@emotion/cache" "^10.0.14" - "@emotion/serialize" "^0.11.8" - "@emotion/sheet" "0.9.3" - "@emotion/utils" "0.11.2" - -create-error-class@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" - integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= +create-emotion@^10.0.27: + version "10.0.27" + resolved "https://registry.yarnpkg.com/create-emotion/-/create-emotion-10.0.27.tgz#cb4fa2db750f6ca6f9a001a33fbf1f6c46789503" + integrity sha512-fIK73w82HPPn/RsAij7+Zt8eCE8SptcJ3WoRMfxMtjteYxud8GDTKKld7MYwAX2TVhrw29uR1N/bVGxeStHILg== dependencies: - capture-stack-trace "^1.0.0" + "@emotion/cache" "^10.0.27" + "@emotion/serialize" "^0.11.15" + "@emotion/sheet" "0.9.4" + "@emotion/utils" "0.11.3" create-hash@^1.1.0, create-hash@^1.1.2: version "1.2.0" @@ -7132,7 +7381,15 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" -create-react-context@^0.2.1, create-react-context@^0.2.2: +create-react-context@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.3.0.tgz#546dede9dc422def0d3fc2fe03afe0bc0f4f7d8c" + integrity sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw== + dependencies: + gud "^1.0.0" + warning "^4.0.3" + +create-react-context@^0.2.2: version "0.2.3" resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.2.3.tgz#9ec140a6914a22ef04b8b09b7771de89567cb6f3" integrity sha512-CQBmD0+QGgTaxDL3OX1IDXYqjkp2It4RIbcb99jS6AEg27Ga+a9G3JtK6SIu0HBwPLZlmwt9F7UwWA4Bn92Rag== @@ -7172,7 +7429,7 @@ cross-spawn@^5.0.1: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^6.0.0, cross-spawn@^6.0.5: +cross-spawn@^6.0.0: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -7184,19 +7441,14 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: which "^1.2.9" cross-spawn@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" - integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== + version "7.0.2" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.2.tgz#d0d7dcfa74e89115c7619f4f721a94e1fdb716d6" + integrity sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" which "^2.0.1" -crypt@~0.0.1: - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= - crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -7214,10 +7466,10 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== cryptocompare@^0.6.0: version "0.6.0" @@ -7259,24 +7511,6 @@ css-loader@^2.1.1: postcss-value-parser "^3.3.0" schema-utils "^1.0.0" -css-loader@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.2.0.tgz#bb570d89c194f763627fcf1f80059c6832d009b2" - integrity sha512-QTF3Ud5H7DaZotgdcJjGMvyDj5F3Pn1j/sC6VBEOVp94cbwqyIBdcs/quzj4MC1BKQSrTpQznegH/5giYbhnCQ== - dependencies: - camelcase "^5.3.1" - cssesc "^3.0.0" - icss-utils "^4.1.1" - loader-utils "^1.2.3" - normalize-path "^3.0.0" - postcss "^7.0.17" - postcss-modules-extract-imports "^2.0.0" - postcss-modules-local-by-default "^3.0.2" - postcss-modules-scope "^2.1.0" - postcss-modules-values "^3.0.0" - postcss-value-parser "^4.0.0" - schema-utils "^2.0.0" - css-select-base-adapter@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" @@ -7293,12 +7527,12 @@ css-select@^1.1.0: nth-check "~1.0.1" css-select@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.0.2.tgz#ab4386cec9e1f668855564b17c3733b43b2a5ede" - integrity sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== dependencies: boolbase "^1.0.0" - css-what "^2.1.2" + css-what "^3.2.1" domutils "^1.7.0" nth-check "^1.0.2" @@ -7311,26 +7545,21 @@ css-to-react-native@^2.2.2: css-color-keywords "^1.0.0" postcss-value-parser "^3.3.0" -css-tree@1.0.0-alpha.29: - version "1.0.0-alpha.29" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.29.tgz#3fa9d4ef3142cbd1c301e7664c1f352bd82f5a39" - integrity sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg== - dependencies: - mdn-data "~1.1.0" - source-map "^0.5.3" - -css-tree@1.0.0-alpha.33: - version "1.0.0-alpha.33" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.33.tgz#970e20e5a91f7a378ddd0fc58d0b6c8d4f3be93e" - integrity sha512-SPt57bh5nQnpsTBsx/IXbO14sRc9xXu5MtMAVuo0BaQQmyf0NupNPPSoMaqiAF5tDFafYsTkfeH4Q/HCKXkg4w== +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== dependencies: mdn-data "2.0.4" - source-map "^0.5.3" + source-map "^0.6.1" -css-unit-converter@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.1.tgz#d9b9281adcfd8ced935bdbaba83786897f64e996" - integrity sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY= +css-tree@1.0.0-alpha.39: + version "1.0.0-alpha.39" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.39.tgz#2bff3ffe1bb3f776cf7eefd91ee5cba77a149eeb" + integrity sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA== + dependencies: + mdn-data "2.0.6" + source-map "^0.6.1" css-vendor@^0.3.8: version "0.3.8" @@ -7339,11 +7568,16 @@ css-vendor@^0.3.8: dependencies: is-in-browser "^1.0.2" -css-what@2.1, css-what@^2.1.2: +css-what@2.1: version "2.1.3" resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== +css-what@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.2.1.tgz#f4a8f12421064621b456755e34a03a2c22df5da1" + integrity sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw== + css.escape@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" @@ -7359,11 +7593,6 @@ css@2.X, css@^2.2.1: source-map-resolve "^0.5.2" urix "^0.1.0" -cssesc@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" - integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg== - cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" @@ -7437,12 +7666,12 @@ cssnano@^4.1.10: is-resolvable "^1.0.0" postcss "^7.0.0" -csso@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b" - integrity sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg== +csso@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.3.tgz#0d9985dc852c7cc2b2cacfbbe1079014d1a8e903" + integrity sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ== dependencies: - css-tree "1.0.0-alpha.29" + css-tree "1.0.0-alpha.39" cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": version "0.3.8" @@ -7457,16 +7686,14 @@ cssstyle@^1.0.0: cssom "0.3.x" csstype@^2.0.0, csstype@^2.2.0, csstype@^2.5.2, csstype@^2.5.7, csstype@^2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.7.tgz#20b0024c20b6718f4eda3853a1f5a1cce7f5e4a5" - integrity sha512-9Mcn9sFbGBAdmimWb2gLVDtFJzeKtDGIr76TUqmjZrw9LFXBMSU70lcs+C0/7fyCd6iBDqmksUcCOUIkisPHsQ== + version "2.6.10" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.10.tgz#e63af50e66d7c266edb6b32909cfd0aabe03928b" + integrity sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w== -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" +cuint@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b" + integrity sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs= cycle@1.0.x: version "1.0.3" @@ -7479,11 +7706,13 @@ cyclist@^1.0.1: integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= cypress-plugin-retries@^1.2.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/cypress-plugin-retries/-/cypress-plugin-retries-1.3.0.tgz#a2c1f49dce69b521cbb5ce3ab1a3a25acf41f08f" - integrity sha512-s2STd3vVeoIeKmdOvDhmWicARxK3cu7xF02MhH120wycUhdtR0SbAbo+zmcNnHquyshccE6cv17DfNvPOV7Rog== + version "1.5.2" + resolved "https://registry.yarnpkg.com/cypress-plugin-retries/-/cypress-plugin-retries-1.5.2.tgz#21d5247cd77013b95bbfdd914f2de66f91f76a2e" + integrity sha512-o1xVIGtv4WvNVxoVJ2X08eAuvditPHrePRzHqhwwHbMKu3C2rtxCdanRCZdO5fjh8ww+q4v4V0e9GmysbOvu3A== + dependencies: + chalk "^3.0.0" -cypress@^3.4.1: +cypress@3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/cypress/-/cypress-3.4.1.tgz#ca2e4e9864679da686c6a6189603efd409664c30" integrity sha512-1HBS7t9XXzkt6QHbwfirWYty8vzxNMawGj1yI+Fu6C3/VZJ8UtUngMW6layqwYZzLTZV8tiDpdCNBypn78V4Dg== @@ -7519,36 +7748,7 @@ cypress@^3.4.1: url "0.11.0" yauzl "2.10.0" -cz-conventional-changelog@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/cz-conventional-changelog/-/cz-conventional-changelog-3.0.1.tgz#b1f207ae050355e7ada65aad5c52e9de3d0c8e5b" - integrity sha512-7KASIwB8/ClEyCRvQrCPbN7WkQnUSjSSVNyPM+gDJ0jskLi8h8N2hrdpyeCk7fIqKMRzziqVSOBTB8yyLTMHGQ== - dependencies: - chalk "^2.4.1" - conventional-commit-types "^2.0.0" - lodash.map "^4.5.1" - longest "^2.0.1" - right-pad "^1.0.1" - word-wrap "^1.0.3" - optionalDependencies: - "@commitlint/load" ">6.1.1" - -cz-conventional-changelog@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/cz-conventional-changelog/-/cz-conventional-changelog-3.0.2.tgz#f6b9a406177ab07f9a3a087e06103a045b376260" - integrity sha512-MPxERbtQyVp0nnpCBiwzKGKmMBSswmCV3Jpef3Axqd5f3c/SOc6VFiSUlclOyZXBn3Xtf4snzt4O15hBTRb2gA== - dependencies: - chalk "^2.4.1" - commitizen "^4.0.3" - conventional-commit-types "^2.0.0" - lodash.map "^4.5.1" - longest "^2.0.1" - right-pad "^1.0.1" - word-wrap "^1.0.3" - optionalDependencies: - "@commitlint/load" ">6.1.1" - -d@1: +d@1, d@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== @@ -7556,13 +7756,6 @@ d@1: es5-ext "^0.10.50" type "^1.0.1" -dargs@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" - integrity sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc= - dependencies: - number-is-nan "^1.0.0" - dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -7589,31 +7782,44 @@ dataloader@^1.4.0: resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-1.4.0.tgz#bca11d867f5d3f1b9ed9f737bd15970c65dff5c8" integrity sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw== -date-fns@^1.27.2: +dataloader@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.0.0.tgz#41eaf123db115987e21ca93c005cd7753c55fe6f" + integrity sha512-YzhyDAwA4TaQIhM5go+vCLmU0UikghC/t9DTQYZR2M/UvZ1MdOhPezSDZcjj9uqQJOMqjLcpWtyW2iNINdlatQ== + +date-and-time@^0.13.0: + version "0.13.1" + resolved "https://registry.yarnpkg.com/date-and-time/-/date-and-time-0.13.1.tgz#d12ba07ac840d5b112dc4c83f8a03e8a51f78dd6" + integrity sha512-/Uge9DJAT+s+oAcDxtBhyR8+sKjUnZbYmyhbmWjTHNtX7B7oWD8YyYdeXcBRbwSj6hVvj+IQegJam7m7czhbFw== + +date-fns@^1.27.2, date-fns@^1.30.1: version "1.30.1" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== -date-fns@^2.0.0-beta.5, date-fns@^2.0.1: - version "2.6.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.6.0.tgz#a5bc82e6a4c3995ae124b0ba1a71aec7b8cbd666" - integrity sha512-F55YxqRdEfP/eYQmQjLN798v0AwLjmZ8nMBjdQvNwEE3N/zWVrlkkqT+9seBlPlsbkybG4JmWg3Ee3dIV9BcGQ== - -date-now@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" - integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= +date-fns@^2.0.0-beta.5: + version "2.12.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.12.0.tgz#01754c8a2f3368fc1119cf4625c3dad8c1845ee6" + integrity sha512-qJgn99xxKnFgB1qL4jpxU7Q2t0LOn1p8KMIveef3UZD7kqjT3tpFNNdXJelEHhE+rUgffriXriw/sOSU+cS1Hw== dateformat@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" integrity sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI= -dateformat@^3.0.0, dateformat@^3.0.3: +dateformat@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== +deasync@^0.1.15: + version "0.1.20" + resolved "https://registry.yarnpkg.com/deasync/-/deasync-0.1.20.tgz#546fd2660688a1eeed55edce2308c5cf7104f9da" + integrity sha512-E1GI7jMI57hL30OX6Ht/hfQU8DO4AuB9m72WFm4c38GNbUD4Q03//XZaOIHZiY+H1xUaomcot5yk2q/qIZQkGQ== + dependencies: + bindings "^1.5.0" + node-addon-api "^1.7.1" + debounce@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.0.tgz#44a540abc0ea9943018dc0eaa95cce87f65cd131" @@ -7635,13 +7841,6 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: dependencies: ms "2.0.0" -debug@3.1.0, debug@=3.1.0, debug@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - debug@3.2.6, debug@3.X, debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" @@ -7649,27 +7848,21 @@ debug@3.2.6, debug@3.X, debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, dependencies: ms "^2.1.1" -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@~4.1.0: +debug@4, debug@4.1.1, debug@^4.1.0, debug@^4.1.1, debug@~4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== dependencies: ms "^2.1.1" -debuglog@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= - -decamelize-keys@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= +debug@=3.1.0, debug@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" + ms "2.0.0" -decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: +decamelize@^1.1.1, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -7740,9 +7933,9 @@ decompress-unzip@^4.0.1: yauzl "^2.4.2" decompress@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.0.tgz#7aedd85427e5a92dacfe55674a7c505e96d01f9d" - integrity sha1-eu3YVCflqS2s/lVnSnxQXpbQH50= + version "4.2.1" + resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.1.tgz#007f55cc6a62c055afa37c07eb6a4ee1b773f118" + integrity sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ== dependencies: decompress-tar "^4.0.0" decompress-tarbz2 "^4.0.0" @@ -7753,15 +7946,15 @@ decompress@^4.2.0: pify "^2.3.0" strip-dirs "^2.0.0" -dedent@0.7.0, dedent@^0.7.0: +dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= deep-equal@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.0.tgz#3103cdf8ab6d32cf4a8df7865458f2b8d33f3745" - integrity sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw== + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== dependencies: is-arguments "^1.0.4" is-date-object "^1.0.1" @@ -7817,12 +8010,10 @@ default-resolution@^2.0.0: resolved "https://registry.yarnpkg.com/default-resolution/-/default-resolution-2.0.0.tgz#bcb82baa72ad79b426a76732f1a81ad6df26d684" integrity sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ= -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== deferred-leveldown@~5.0.0: version "5.0.1" @@ -7944,15 +8135,10 @@ deprecated-decorator@^0.1.6: resolved "https://registry.yarnpkg.com/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz#00966317b7a12fe92f3cc831f7583af329b86c37" integrity sha1-AJZjF7ehL+kvPMgx91g68ym4bDc= -deprecation@^2.0.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" - integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== - des.js@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" - integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw= + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== dependencies: inherits "^2.0.1" minimalistic-assert "^1.0.0" @@ -7967,16 +8153,6 @@ detect-file@^1.0.0: resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= -detect-indent@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" - integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA== - -detect-indent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= - detect-libc@^1.0.2, detect-libc@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" @@ -8001,18 +8177,10 @@ detective@^5.2.0: defined "^1.0.0" minimist "^1.1.1" -dezalgo@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" - integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= - dependencies: - asap "^2.0.0" - wrappy "1" - dgeni-packages@^0.28.1: - version "0.28.1" - resolved "https://registry.yarnpkg.com/dgeni-packages/-/dgeni-packages-0.28.1.tgz#281c68876ba39741bf15bd28ddb83d8bd8f1754a" - integrity sha512-w44ZYsHsyZiwutRNBpK03EOeQCCap+ulrhgjKk845JjcacnOW3rf9JHE7B1FFPOh+YsIQmcgx8ldLaIwcR9ZaA== + version "0.28.3" + resolved "https://registry.yarnpkg.com/dgeni-packages/-/dgeni-packages-0.28.3.tgz#2e1e55f341c389b67ebb28933ce1e7e9ad05c49b" + integrity sha512-WyVzY3Q4ylfnc2677le5G7a7WqkF88rBSjU9IrAofqro71yzZeWLoEdr/gJY+lJZ0PrDyuRW05pFvIbvX8N0PQ== dependencies: canonical-path "^1.0.0" catharsis "^0.8.1" @@ -8026,8 +8194,7 @@ dgeni-packages@^0.28.1: lodash "^4.17.13" marked "^0.7.0" minimatch "^3.0.2" - mkdirp "^0.5.1" - mkdirp-promise "^5.0.0" + mkdirp "^1.0.3" nunjucks "^3.1.6" rehype "^8.0.0" semver "^5.2.0" @@ -8057,25 +8224,25 @@ di@0.0.1: resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw= -didyoumean@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.1.tgz#e92edfdada6537d484d73c0172fd1eba0c4976ff" - integrity sha1-6S7f2tplN9SE1zwBcv0eugxJdv8= - diff-sequences@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== -diff@3.5.0, diff@^3.2.0: +diff-sequences@^25.2.6: + version "25.2.6" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" + integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== + +diff@^3.2.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== diff@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" - integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== diffie-hellman@^5.0.0: version "5.0.3" @@ -8093,13 +8260,6 @@ dimport@^1.0.0: dependencies: rewrite-imports "^2.0.3" -dir-glob@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" - integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== - dependencies: - path-type "^3.0.0" - dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -8120,11 +8280,6 @@ dns-packet@^1.3.1: ip "^1.1.0" safe-buffer "^5.0.1" -dns-prefetch-control@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dns-prefetch-control/-/dns-prefetch-control-0.2.0.tgz#73988161841f3dcc81f47686d539a2c702c88624" - integrity sha512-hvSnros73+qyZXhHFjx2CMLwoj3Fe7eR9EJsFsqmcI1bB2OBWL/+0YzaEaKssCHnj/6crawNnUyw74Gm2EKe+Q== - dns-txt@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" @@ -8154,25 +8309,25 @@ dom-helpers@^3.2.1, dom-helpers@^3.4.0: "@babel/runtime" "^7.1.2" dom-helpers@^5.0.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.1.2.tgz#217f2e0040697d3309d45d761a337f1d3fa5d1c6" - integrity sha512-VrfjMjIzNgn2oB49wKl85fgs12ELjK0npu5Oryaiazyc6WuekO1go0E//0RJ8JvsBlfaAwq+IgX9M0XhwlEENA== + version "5.1.4" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.1.4.tgz#4609680ab5c79a45f2531441f1949b79d6587f4b" + integrity sha512-TjMyeVUvNEnOnhzs6uAn9Ya47GmMo3qq7m+Lr/3ON0Rs5kHvb8I+SQYjLUSYn7qhEm0QjW0yrBkvz9yOrwwz1A== dependencies: - "@babel/runtime" "^7.6.3" + "@babel/runtime" "^7.8.7" csstype "^2.6.7" dom-serializer@0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.1.tgz#13650c850daffea35d8b626a4cfc4d3a17643fdb" - integrity sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q== + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== dependencies: domelementtype "^2.0.1" entities "^2.0.0" dom-walk@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" - integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg= + version "0.1.2" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== domain-browser@^1.1.1: version "1.2.0" @@ -8231,19 +8386,12 @@ dot-case@^2.1.0: dependencies: no-case "^2.2.0" -dot-prop@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" - integrity sha1-G3CK8JSknJoOfbyteQq6U52sEXc= - dependencies: - is-obj "^1.0.0" - -dot-prop@^4.1.0, dot-prop@^4.1.1, dot-prop@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== +dot-prop@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" + integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A== dependencies: - is-obj "^1.0.0" + is-obj "^2.0.0" double-ended-queue@2.1.0-0: version "2.1.0-0" @@ -8311,6 +8459,16 @@ duplexify@^3.4.2, duplexify@^3.5.0, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" +duplexify@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.1.tgz#7027dc374f157b122a8ae08c2d3ea4d2d953aa61" + integrity sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA== + dependencies: + end-of-stream "^1.4.1" + inherits "^2.0.3" + readable-stream "^3.1.1" + stream-shift "^1.0.0" + each-props@^1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/each-props/-/each-props-1.3.2.tgz#ea45a414d16dd5cfa419b1a81720d5ca06892333" @@ -8327,6 +8485,18 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" +ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + +edge-cs@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/edge-cs/-/edge-cs-1.2.1.tgz#bd1a9ecdb94ef0ed40c894582046749e57045e5a" + integrity sha1-vRqezblO8O1AyJRYIEZ0nlcEXlo= + editions@^1.3.3: version "1.3.4" resolved "https://registry.yarnpkg.com/editions/-/editions-1.3.4.tgz#3662cb592347c3168eb8e498a0ff73271d67f50b" @@ -8338,14 +8508,14 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= ejs@^2.6.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.1.tgz#5b5ab57f718b79d4aca9254457afecd36fa80228" - integrity sha512-kS/gEPzZs3Y1rRsbGX4UOSjtP/CeJP0CxSNZHYxGfVM/VgLcv0ZqM7C45YyTj2DI2g7+P9Dd24C+IMIg6D0nYQ== + version "2.7.4" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" + integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== -electron-to-chromium@^1.3.191, electron-to-chromium@^1.3.284: - version "1.3.292" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.292.tgz#7812fc5138619342f1dd5823df6e9cbb7d2820e9" - integrity sha512-hqkem5ANpt6mxVXmhAmlbdG8iicuyM/jEYgmP1tiHPeOLyZoTyGUzrDmJS/xyrrZy9frkW1uQcubicu7f6DS5g== +electron-to-chromium@^1.3.413: + version "1.3.427" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.427.tgz#ea43d02908a8c71f47ebb46e09de5a3cf8236f04" + integrity sha512-/rG5G7Opcw68/Yrb4qYkz07h3bESVRJjUl4X/FrKLXzoUJleKm6D7K7rTTz8V5LUWnd+BbTOyxJX2XprRqHD8A== elegant-spinner@^1.0.1: version "1.0.1" @@ -8353,9 +8523,9 @@ elegant-spinner@^1.0.1: integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= elliptic@^6.0.0, elliptic@^6.5.0: - version "6.5.1" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.1.tgz#c380f5f909bf1b9b4428d028cd18d3b0efd6b52b" - integrity sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg== + version "6.5.2" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" + integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -8365,12 +8535,18 @@ elliptic@^6.0.0, elliptic@^6.5.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.0" -emitter-listener@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/emitter-listener/-/emitter-listener-1.1.2.tgz#56b140e8f6992375b3d7cb2cab1cc7432d9632e8" - integrity sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ== +elliptic@^6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== dependencies: - shimmer "^1.2.0" + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" emoji-regex@^7.0.1: version "7.0.3" @@ -8387,41 +8563,46 @@ emojis-list@^2.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + emotion-server@^10.0.14: - version "10.0.17" - resolved "https://registry.yarnpkg.com/emotion-server/-/emotion-server-10.0.17.tgz#314343afd0533f6151542408924ef19b364e8d44" - integrity sha512-f2KIJChSyuj5o4SR45C8B0mj5D9Bxc8kBy7ya9p7w4wkCQpcLXrnpGjpDXN82sJfbj/KV51UyOwTstYjd/QCmA== + version "10.0.27" + resolved "https://registry.yarnpkg.com/emotion-server/-/emotion-server-10.0.27.tgz#ea654342fdf9f5d8cd1793f5a6594159485a3806" + integrity sha512-ypISBMkgZD7dgP6Y0QhZlqazxffpowcEWlZHKLADVazdxY5iXjZbd1UvovdpfDRjbj4EBxwKkltog3NzuSBavA== dependencies: - create-emotion-server "10.0.14" + create-emotion-server "10.0.27" emotion-theming@^10.0.14: - version "10.0.19" - resolved "https://registry.yarnpkg.com/emotion-theming/-/emotion-theming-10.0.19.tgz#66d13db74fccaefad71ba57c915b306cf2250295" - integrity sha512-dQRBPLAAQ6eA8JKhkLCIWC8fdjPbiNC1zNTdFF292h9amhZXofcNGUP7axHoHX4XesqQESYwZrXp53OPInMrKw== + version "10.0.27" + resolved "https://registry.yarnpkg.com/emotion-theming/-/emotion-theming-10.0.27.tgz#1887baaec15199862c89b1b984b79806f2b9ab10" + integrity sha512-MlF1yu/gYh8u+sLUqA0YuA9JX0P4Hb69WlKc/9OLo+WCXuX6sy/KoIa+qJimgmr2dWqnypYKYPX37esjDBbhdw== dependencies: "@babel/runtime" "^7.5.5" - "@emotion/weak-memoize" "0.2.4" + "@emotion/weak-memoize" "0.2.5" hoist-non-react-statics "^3.3.0" -emotion@^10.0.14: - version "10.0.17" - resolved "https://registry.yarnpkg.com/emotion/-/emotion-10.0.17.tgz#d71e99d2b01204dda109c13d069af4b191e70445" - integrity sha512-nShD/a7PKZ77hr517KfzKkHo1v26uPJBImRiYrl8IwIA4KRmI3vxVEA5pzw1TQTXD1iZl6YQtWhjOiiE+QPmTQ== +emotion@^10.0.17: + version "10.0.27" + resolved "https://registry.yarnpkg.com/emotion/-/emotion-10.0.27.tgz#f9ca5df98630980a23c819a56262560562e5d75e" + integrity sha512-2xdDzdWWzue8R8lu4G76uWX5WhyQuzATon9LmNeCy/2BHVC6dsEpfhN1a0qhELgtDVdjyEA6J8Y/VlI5ZnaH0g== dependencies: - babel-plugin-emotion "^10.0.17" - create-emotion "^10.0.14" + babel-plugin-emotion "^10.0.27" + create-emotion "^10.0.27" encodeurl@^1.0.2, encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -encoding-down@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.1.0.tgz#7c0dceb10cc12e7db30abf84db62ce48079672fc" - integrity sha512-pBW1mbuQDHQhQLBtqarX8x2oLynahiOzBY5L/BosNqcstJ8MjpSc3rx1yCUIqb6bUE2vsp3t0BaXS0ZDP1s5pg== +encoding-down@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b" + integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw== dependencies: - abstract-leveldown "^6.0.0" + abstract-leveldown "^6.2.1" inherits "^2.0.3" level-codec "^9.0.0" level-errors "^2.0.0" @@ -8448,9 +8629,9 @@ end-stream@~0.1.0: write-stream "~0.4.3" engine.io-client@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.4.0.tgz#82a642b42862a9b3f7a188f41776b2deab643700" - integrity sha512-a4J5QO2k99CM2a0b12IznnyQndoEvtA4UAldhGzKqnHf42I3Qs2W5SPnDvatZRcMaNZs4IevVicBPayxYt6FwA== + version "3.4.1" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.4.1.tgz#922ddb47eecdcb541136a93aeead24718fd05461" + integrity sha512-RJNmA+A9Js+8Aoq815xpGAsgWH1VoSYM//2VgIiu9lNOaHFfLpTjH4tOzktBpjIs5lvOfiNY1dwf+NuU6D38Mw== dependencies: component-emitter "1.2.1" component-inherit "0.0.3" @@ -8476,9 +8657,9 @@ engine.io-parser@~2.2.0: has-binary2 "~1.0.2" engine.io@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.4.0.tgz#3a962cc4535928c252759a00f98519cb46c53ff3" - integrity sha512-XCyYVWzcHnK5cMz7G4VTu2W7zJS7SM1QkcelghyIk/FmobWBtXE7fwhBusEKvCSqc3bMh8fNFMlUkCKTFRxH2w== + version "3.4.1" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.4.1.tgz#a61cbc13fa0cb27d9453fd079a29ee980564b069" + integrity sha512-8MfIfF1/IIfxuc2gv5K+XlFZczw/BpTvqBdl0E2fBLkYQp4miv4LuDTVtYt4yMyaIFLEr4vtaSgV4mjvll8Crw== dependencies: accepts "~1.3.4" base64id "2.0.0" @@ -8496,6 +8677,11 @@ enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0: memory-fs "^0.5.0" tapable "^1.0.0" +ent@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" + integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= + entities@^1.1.1, entities@~1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" @@ -8504,23 +8690,13 @@ entities@^1.1.1, entities@~1.1.1: entities@^2.0.0, entities@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" - integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== - -env-paths@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-1.0.0.tgz#4168133b42bb05c38a35b1ae4397c8298ab369e0" - integrity sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA= + integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== env-paths@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== -err-code@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" - integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= - errno@^0.1.3, errno@~0.1.1, errno@~0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" @@ -8540,47 +8716,40 @@ error-inject@^1.0.0: resolved "https://registry.yarnpkg.com/error-inject/-/error-inject-1.0.0.tgz#e2b3d91b54aed672f309d950d154850fa11d4f37" integrity sha1-4rPZG1Su1nLzCdlQ0VSFD6EdTzc= -error@7.0.2, error@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/error/-/error-7.0.2.tgz#a5f75fff4d9926126ddac0ea5dc38e689153cb02" - integrity sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI= - dependencies: - string-template "~0.2.1" - xtend "~4.0.0" - -es-abstract@^1.12.0, es-abstract@^1.5.1: - version "1.16.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.16.0.tgz#d3a26dc9c3283ac9750dca569586e976d9dcc06d" - integrity sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg== +es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.4, es-abstract@^1.17.5: + version "1.17.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" + integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg== dependencies: - es-to-primitive "^1.2.0" + es-to-primitive "^1.2.1" function-bind "^1.1.1" has "^1.0.3" - has-symbols "^1.0.0" - is-callable "^1.1.4" - is-regex "^1.0.4" - object-inspect "^1.6.0" + has-symbols "^1.0.1" + is-callable "^1.1.5" + is-regex "^1.0.5" + object-inspect "^1.7.0" object-keys "^1.1.1" - string.prototype.trimleft "^2.1.0" - string.prototype.trimright "^2.1.0" + object.assign "^4.1.0" + string.prototype.trimleft "^2.1.1" + string.prototype.trimright "^2.1.1" -es-to-primitive@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" - integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" is-date-object "^1.0.1" is-symbol "^1.0.2" es5-ext@^0.10.35, es5-ext@^0.10.45, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46: - version "0.10.50" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.50.tgz#6d0e23a0abdb27018e5ac4fd09b412bc5517a778" - integrity sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw== + version "0.10.53" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== dependencies: es6-iterator "~2.0.3" - es6-symbol "~3.1.1" - next-tick "^1.0.0" + es6-symbol "~3.1.3" + next-tick "~1.0.0" es6-denodeify@^0.1.1: version "0.1.5" @@ -8601,25 +8770,18 @@ es6-iterator@^2.0.1, es6-iterator@^2.0.3, es6-iterator@~2.0.3: es5-ext "^0.10.35" es6-symbol "^3.1.1" -es6-promise@^4.0.3: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= - dependencies: - es6-promise "^4.0.3" +es6-object-assign@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" + integrity sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw= -es6-symbol@^3.1.1, es6-symbol@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" - integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc= +es6-symbol@^3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== dependencies: - d "1" - es5-ext "~0.10.14" + d "^1.0.1" + ext "^1.1.2" es6-weak-map@^2.0.1, es6-weak-map@^2.0.2: version "2.0.3" @@ -8631,22 +8793,27 @@ es6-weak-map@^2.0.1, es6-weak-map@^2.0.2: es6-iterator "^2.0.3" es6-symbol "^3.1.1" +escape-goat@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.3, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.3, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= escodegen@^1.9.1: - version "1.12.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.0.tgz#f763daf840af172bb3a2b6dd7219c0e17f7ff541" - integrity sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg== + version "1.14.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457" + integrity sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ== dependencies: - esprima "^3.1.3" + esprima "^4.0.1" estraverse "^4.2.0" esutils "^2.0.2" optionator "^0.8.1" @@ -8661,99 +8828,27 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" - integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-utils@^1.4.2: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" - integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== - -eslint@^6.2.0: - version "6.5.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.5.1.tgz#828e4c469697d43bb586144be152198b91e96ed6" - integrity sha512-32h99BoLYStT1iq1v2P9uwpyznQ4M2jRiFB6acitKz52Gqn+vPaMDUTB1bYi1WN4Nquj2w+t+bimYUG83DC55A== - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.10.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" - doctrine "^3.0.0" - eslint-scope "^5.0.0" - eslint-utils "^1.4.2" - eslint-visitor-keys "^1.1.0" - espree "^6.1.1" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^11.7.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - inquirer "^6.4.1" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.14" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^6.1.2" - strip-ansi "^5.2.0" - strip-json-comments "^3.0.1" - table "^5.2.3" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" +esm@^3.2.25: + version "3.2.25" + resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" + integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== espree@^2.2.3: version "2.2.5" resolved "https://registry.yarnpkg.com/espree/-/espree-2.2.5.tgz#df691b9310889402aeb29cc066708c56690b854b" integrity sha1-32kbkxCIlAKuspzAZnCMVmkLhUs= -espree@^6.1.1: - version "6.1.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d" - integrity sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA== - dependencies: - acorn "^7.1.0" - acorn-jsx "^5.1.0" - eslint-visitor-keys "^1.1.0" - -esprima@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= - -esprima@^4.0.0: +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" - integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== dependencies: - estraverse "^4.0.0" + estraverse "^5.1.0" esrecurse@^4.1.0: version "4.2.1" @@ -8762,17 +8857,22 @@ esrecurse@^4.1.0: dependencies: estraverse "^4.1.0" -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== +estraverse@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" + integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== + estree-walker@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== -esutils@^2.0.0, esutils@^2.0.2: +esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== @@ -8790,10 +8890,10 @@ event-emitter@^0.3.5: d "1" es5-ext "~0.10.14" -eventemitter3@^3.1.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" - integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== eventemitter3@^4.0.0: version "4.0.0" @@ -8801,9 +8901,9 @@ eventemitter3@^4.0.0: integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== events@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" - integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" + integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== eventsource@^1.0.7: version "1.0.7" @@ -8821,25 +8921,9 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: safe-buffer "^5.1.1" exec-sh@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" - integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== - -execa@*, execa@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-3.2.0.tgz#18326b79c7ab7fbd6610fd900c1b9e95fa48f90a" - integrity sha512-kJJfVbI/lZE1PZYDI5VPxp8zXPO9rtxOkhpZ0jMKha56AI9y2gGVC6bkukStQf0ka5Rh15BA5m7cCCH4jmHqkw== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - p-finally "^2.0.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" + version "0.3.4" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" + integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== execa@0.10.0: version "0.10.0" @@ -8908,12 +8992,21 @@ execa@^2.0.3: signal-exit "^3.0.2" strip-final-newline "^2.0.0" -execall@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/execall/-/execall-2.0.0.tgz#16a06b5fe5099df7d00be5d9c06eecded1663b45" - integrity sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow== +execa@^3.2.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" + integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== dependencies: - clone-regexp "^2.1.0" + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + p-finally "^2.0.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" executable@4.1.1: version "4.1.1" @@ -8971,11 +9064,6 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -expect-ct@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/expect-ct/-/expect-ct-0.2.0.tgz#3a54741b6ed34cc7a93305c605f63cd268a54a62" - integrity sha512-6SK3MG/Bbhm8MsgyJAylg+ucIOU71/FzyFalcfu5nY19dH8y/z0tBJU0wrNBXD4B27EoQtqPF/9wqH0iYAd04g== - expect@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/expect/-/expect-24.9.0.tgz#b75165b4817074fa4a157794f46fe9f1ba15b6ca" @@ -9039,6 +9127,13 @@ ext-name@^5.0.0: ext-list "^2.0.0" sort-keys-length "^1.0.0" +ext@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" + integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + dependencies: + type "^2.0.0" + extend-shallow@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-1.1.4.tgz#19d6bf94dfc09d76ba711f39b872d21ff4dd9071" @@ -9096,15 +9191,15 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extract-css-chunks-webpack-plugin@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/extract-css-chunks-webpack-plugin/-/extract-css-chunks-webpack-plugin-4.6.0.tgz#961d02dc5cb7b265c8aa19fdbcc4031a4006ca95" - integrity sha512-HbTh4Yd0JYXbqOgtd/o/BNuLs/fL7h7bM9mCg/WZqKNE65B586Vzs+erzTGuU2xnp5B4gOQbHgC6MrmRVah1Nw== +extract-css-chunks-webpack-plugin@^4.6.0, extract-css-chunks-webpack-plugin@^4.7.1: + version "4.7.4" + resolved "https://registry.yarnpkg.com/extract-css-chunks-webpack-plugin/-/extract-css-chunks-webpack-plugin-4.7.4.tgz#db6465ca18d1fe8a89bad3dc72803127638fb477" + integrity sha512-Q0iLfJnS+MT8L/KbiPxFeTLi06dBzJaAphXJg00rIlcyjSqNx5yI0/V8ODGWCcwUO1V7W2z3dpjC+8eBKBoQrA== dependencies: loader-utils "^1.1.0" normalize-url "1.9.1" schema-utils "^1.0.0" - webpack-external-import "^0.0.1-beta.19" + webpack-external-import "^1.1.0-beta.3" webpack-sources "^1.1.0" extract-zip@1.6.7: @@ -9147,12 +9242,17 @@ fast-deep-equal@^2.0.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +fast-deep-equal@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" + integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== + fast-future@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/fast-future/-/fast-future-1.0.2.tgz#8435a9aaa02d79248d17d704e76259301d99280a" integrity sha1-hDWpqqAteSSNF9cE52JZMB2ZKAo= -fast-glob@^2.2.2, fast-glob@^2.2.6: +fast-glob@^2.2.2: version "2.2.7" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== @@ -9165,22 +9265,23 @@ fast-glob@^2.2.2, fast-glob@^2.2.6: micromatch "^3.1.10" fast-glob@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.1.0.tgz#77375a7e3e6f6fc9b18f061cddd28b8d1eec75ae" - integrity sha512-TrUz3THiq2Vy3bjfQUB2wNyPdGBeGmdjbzzBLhfHN4YFurYptCKwGq/TfiRavbGywFRzY6U2CdmQ1zmsY5yYaw== + version "3.2.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.2.tgz#ade1a9d91148965d4bf7c51f72e1ca662d32e63d" + integrity sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" glob-parent "^5.1.0" merge2 "^1.3.0" micromatch "^4.0.2" + picomatch "^2.2.1" fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.4: +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= @@ -9200,6 +9301,11 @@ fast-safe-stringify@^2.0.7: resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== +fast-text-encoding@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.2.tgz#ff1ad5677bde049e0f8656aa6083a7ef2c5836e2" + integrity sha512-5rQdinSsycpzvAoHga2EDn+LRX1d5xLFsuNG0Kg61JrAT/tASXcLL0nf/33v+sAxlQcfYmWbTURa1mmAf55jGw== + fast-url-parser@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" @@ -9208,11 +9314,11 @@ fast-url-parser@1.1.3: punycode "^1.3.2" fastq@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.6.0.tgz#4ec8a38f4ac25f21492673adb7eae9cfef47d1c2" - integrity sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA== + version "1.7.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.7.0.tgz#fcd79a08c5bd7ec5b55cd3f5c4720db551929801" + integrity sha512-YOadQRnHd5q6PogvAR/x62BGituF2ufiEA6s8aavQANw5YKHERI4AREboX6KotzP8oX2klxYF2wcV/7bn1clfQ== dependencies: - reusify "^1.0.0" + reusify "^1.0.4" faye-websocket@^0.10.0: version "0.10.0" @@ -9229,11 +9335,11 @@ faye-websocket@~0.11.1: websocket-driver ">=0.5.1" fb-watchman@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" - integrity sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg= + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== dependencies: - bser "^2.0.0" + bser "2.1.1" fbjs@0.8.17, fbjs@^0.8.0, fbjs@^0.8.1: version "0.8.17" @@ -9275,10 +9381,10 @@ fetch-cookie@0.7.0: es6-denodeify "^0.1.1" tough-cookie "^2.3.1" -figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" - integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== +figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== figures@^1.7.0: version "1.7.0" @@ -9296,19 +9402,12 @@ figures@^2.0.0: escape-string-regexp "^1.0.5" figures@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.0.0.tgz#756275c964646163cc6f9197c7a0295dbfd04de9" - integrity sha512-HKri+WoWoUgr83pehn/SIgLOMZ9nAWC6dcGj26RY2R4F50u4+RTUz0RCrUlOV3nKRAICW1UGzyb+kcX2qK1S/g== + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" - file-loader@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-3.0.1.tgz#f8e0ba0b599918b51adfe45d66d1e771ad560faa" @@ -9317,13 +9416,13 @@ file-loader@3.0.1: loader-utils "^1.0.2" schema-utils "^1.0.0" -file-loader@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.2.0.tgz#5fb124d2369d7075d70a9a5abecd12e60a95215e" - integrity sha512-+xZnaK5R8kBJrHK0/6HRlrKNamvVS5rjyuju+rnyxRGuwUJwpAMsVzUl5dz6rK8brkzjV6JpcFNjp6NqV0g1OQ== +file-loader@^5.0.2: + version "5.1.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-5.1.0.tgz#cb56c070efc0e40666424309bd0d9e45ac6f2bb8" + integrity sha512-u/VkLGskw3Ue59nyOwUwXI/6nuBCo7KBkniB/l7ICwr/7cPNGsL1WCXUp3GB0qgOOKU1TiP49bv4DZF/LJqprg== dependencies: - loader-utils "^1.2.3" - schema-utils "^2.0.0" + loader-utils "^1.4.0" + schema-utils "^2.5.0" file-type@^3.8.0: version "3.9.0" @@ -9425,6 +9524,14 @@ finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" +find-babel-config@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2" + integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA== + dependencies: + json5 "^0.5.1" + path-exists "^3.0.0" + find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" @@ -9434,35 +9541,20 @@ find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: make-dir "^2.0.0" pkg-dir "^3.0.0" -find-cache-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.0.0.tgz#cd4b7dd97b7185b7e17dbfe2d6e4115ee3eeb8fc" - integrity sha512-t7ulV1fmbxh5G9l/492O1p5+EBbr3uwpt6odhFTMc+nWyhmbloe+ja9BZ8pIBtqFWhOmCWVjx+pTW4zDkFoclw== +find-cache-dir@^3.0.0, find-cache-dir@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== dependencies: commondir "^1.0.1" - make-dir "^3.0.0" + make-dir "^3.0.2" pkg-dir "^4.1.0" -find-node-modules@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/find-node-modules/-/find-node-modules-2.0.0.tgz#5db1fb9e668a3d451db3d618cd167cdd59e41b69" - integrity sha512-8MWIBRgJi/WpjjfVXumjPKCtmQ10B+fjx6zmSA+770GMJirLhWIzg8l763rhjl9xaeaHbnxPNRQKq2mgMhr+aw== - dependencies: - findup-sync "^3.0.0" - merge "^1.2.1" - -find-root@1.1.0, find-root@^1.1.0: +find-root@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== -find-up@3.0.0, find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -9471,14 +9563,21 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" -find-up@^2.0.0: +find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= dependencies: locate-path "^2.0.0" -find-up@^4.0.0: +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -9522,32 +9621,11 @@ flagged-respawn@^1.0.0: resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41" integrity sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q== -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - -flat@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2" - integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw== - dependencies: - is-buffer "~2.0.3" - -flatstr@^1.0.12, flatstr@^1.0.9: +flatstr@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/flatstr/-/flatstr-1.0.12.tgz#c2ba6a08173edbb6c9640e3055b95e287ceb5931" integrity sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw== -flatted@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" - integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== - flush-write-stream@^1.0.0, flush-write-stream@^1.0.2: version "1.1.1" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" @@ -9569,9 +9647,9 @@ follow-redirects@1.5.10: debug "=3.1.0" follow-redirects@^1.0.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.9.0.tgz#8d5bcdc65b7108fe1508649c79c12d732dcedb4f" - integrity sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A== + version "1.11.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.11.0.tgz#afa14f08ba12a52963140fe43212658897bc0ecb" + integrity sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA== dependencies: debug "^3.0.0" @@ -9594,6 +9672,11 @@ for-own@^1.0.0: dependencies: for-in "^1.0.1" +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= + foreground-child@^1.5.6: version "1.5.6" resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-1.5.6.tgz#4fd71ad2dfde96789b980a5c0a295937cb2f5ce9" @@ -9607,6 +9690,20 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= +fork-stream@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/fork-stream/-/fork-stream-0.0.4.tgz#db849fce77f6708a5f8f386ae533a0907b54ae70" + integrity sha1-24Sfznf2cIpfjzhq5TOgkHtUrnA= + +form-data@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682" + integrity sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -9617,9 +9714,9 @@ form-data@~2.3.2: mime-types "^2.1.12" formidable@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.1.tgz#70fb7ca0290ee6ff961090415f4b3df3d2082659" - integrity sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg== + version "1.2.2" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.2.tgz#bf69aea2972982675f00865342b982986f6b8dd9" + integrity sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q== forwarded@~0.1.2: version "0.1.2" @@ -9633,11 +9730,6 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" -frameguard@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/frameguard/-/frameguard-3.1.0.tgz#bd1442cca1d67dc346a6751559b6d04502103a22" - integrity sha512-TxgSKM+7LTA6sidjOiSZK9wxY0ffMPY3Wta//MqwmX0nZuEHc8QrkV8Fh3ZhMJeiH+Uyh/tcaarImRy8u77O7g== - fresh@0.5.2, fresh@~0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -9665,7 +9757,7 @@ fs-extra@5.0.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@8.1.0, fs-extra@^8.0.1, fs-extra@^8.1.0: +fs-extra@8.1.0, fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== @@ -9700,9 +9792,9 @@ fs-minipass@^1.2.5: minipass "^2.6.0" fs-minipass@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.0.0.tgz#a6415edab02fae4b9e9230bc87ee2e4472003cd1" - integrity sha512-40Qz+LFXmd9tzYVnnBmZvFfvAADfUA14TXPK1s7IfElJTIZ97rA8w4Kin7Wt5JBrC3ShnnFJO/5vPjPEeJIq9A== + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: minipass "^3.0.0" @@ -9735,24 +9827,24 @@ fs.realpath@^1.0.0: integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@^1.2.7: - version "1.2.9" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" - integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== + version "1.2.12" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.12.tgz#db7e0d8ec3b0b45724fd4d83d43554a8f1f0de5c" + integrity sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q== dependencies: + bindings "^1.5.0" nan "^2.12.1" - node-pre-gyp "^0.12.0" -fsevents@~2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.1.tgz#74c64e21df71721845d0c44fe54b7f56b82995a9" - integrity sha512-4FRPXWETxtigtJW/gxzEDsX1LVbPAM93VleB83kZB+ellqbHMkyt2aJfuzNLRvFPnGi6bcE5SvfxgbXPeKteJw== +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -functional-red-black-tree@^1.0.1, functional-red-black-tree@~1.0.1: +functional-red-black-tree@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= @@ -9771,10 +9863,52 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -genfun@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" - integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== +gaxios@^2.0.0, gaxios@^2.1.0: + version "2.3.4" + resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-2.3.4.tgz#eea99353f341c270c5f3c29fc46b8ead56f0a173" + integrity sha512-US8UMj8C5pRnao3Zykc4AAVr+cffoNKRTg9Rsf2GiuZCW69vgJj38VK2PzlPuQU73FZ/nTk9/Av6/JGcE1N9vA== + dependencies: + abort-controller "^3.0.0" + extend "^3.0.2" + https-proxy-agent "^5.0.0" + is-stream "^2.0.0" + node-fetch "^2.3.0" + +gaxios@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-3.0.3.tgz#497730758f5b0d43a32ebdbebe5f1bd9f7db7aed" + integrity sha512-PkzQludeIFhd535/yucALT/Wxyj/y2zLyrMwPcJmnLHDugmV49NvAi/vb+VUq/eWztATZCNcb8ue+ywPG+oLuw== + dependencies: + abort-controller "^3.0.0" + extend "^3.0.2" + https-proxy-agent "^5.0.0" + is-stream "^2.0.0" + node-fetch "^2.3.0" + +gcp-metadata@^3.4.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-3.5.0.tgz#6d28343f65a6bbf8449886a0c0e4a71c77577055" + integrity sha512-ZQf+DLZ5aKcRpLzYUyBS3yo3N0JSa82lNDO8rj3nMSlovLcz2riKFBsYgDzeXcv75oo5eqB2lx+B14UvPoCRnA== + dependencies: + gaxios "^2.1.0" + json-bigint "^0.3.0" + +gcs-resumable-upload@^2.2.4: + version "2.3.3" + resolved "https://registry.yarnpkg.com/gcs-resumable-upload/-/gcs-resumable-upload-2.3.3.tgz#02c616ed17eff6676e789910aeab3907d412c5f8" + integrity sha512-sf896I5CC/1AxeaGfSFg3vKMjUq/r+A3bscmVzZm10CElyRanN0XwPu/MxeIO4LSP+9uF6yKzXvNsaTsMXUG6Q== + dependencies: + abort-controller "^3.0.0" + configstore "^5.0.0" + gaxios "^2.0.0" + google-auth-library "^5.0.0" + pumpify "^2.0.0" + stream-events "^1.0.4" + +gensync@^1.0.0-beta.1: + version "1.0.0-beta.1" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" + integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== get-caller-file@^1.0.1: version "1.0.3" @@ -9787,25 +9921,9 @@ get-caller-file@^2.0.0, get-caller-file@^2.0.1: integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-own-enumerable-property-symbols@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.1.tgz#6f7764f88ea11e0b514bd9bd860a132259992ca4" - integrity sha512-09/VS4iek66Dh2bctjRkowueRJbY1JDGR1L/zRxO1Qk8Uxs6PnqaNSqalpizPT+CDjre3hnEsuzvhgomz9qYrA== - -get-pkg-repo@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d" - integrity sha1-xztInAbYDMVTbCyFP54FIyBWly0= - dependencies: - hosted-git-info "^2.1.4" - meow "^3.3.0" - normalize-package-data "^2.3.0" - parse-github-repo-url "^1.3.0" - through2 "^2.0.0" - -get-port@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" - integrity sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw== + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== get-proxy@^2.0.0: version "2.1.0" @@ -9814,11 +9932,6 @@ get-proxy@^2.0.0: dependencies: npm-conf "^1.1.0" -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= - get-stdin@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" @@ -9844,7 +9957,7 @@ get-stream@^4.0.0, get-stream@^4.1.0: dependencies: pump "^3.0.0" -get-stream@^5.0.0: +get-stream@^5.0.0, get-stream@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== @@ -9856,6 +9969,11 @@ get-value@^2.0.3, get-value@^2.0.6: resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= +getopts@2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/getopts/-/getopts-2.2.5.tgz#67a0fe471cacb9c687d817cab6450b96dde8313b" + integrity sha512-9jb7AW5p3in+IiJWhQiZmmwkpLaR/ccTWdWQCtZM66HJcHHLegowh4q4tSD7gouUyeNvFWRavfK9GXosQHDpFA== + getos@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/getos/-/getos-3.1.1.tgz#967a813cceafee0156b0483f7cffa5b3eff029c5" @@ -9883,55 +10001,6 @@ git-promise@^0.3.1: q "~1.4.1" shelljs "~0.5.3" -git-raw-commits@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5" - integrity sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg== - dependencies: - dargs "^4.0.1" - lodash.template "^4.0.2" - meow "^4.0.0" - split2 "^2.0.0" - through2 "^2.0.0" - -git-remote-origin-url@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" - integrity sha1-UoJlna4hBxRaERJhEq0yFuxfpl8= - dependencies: - gitconfiglocal "^1.0.0" - pify "^2.3.0" - -git-semver-tags@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-2.0.3.tgz#48988a718acf593800f99622a952a77c405bfa34" - integrity sha512-tj4FD4ww2RX2ae//jSrXZzrocla9db5h0V7ikPl1P/WwoZar9epdUhwR7XHXSgc+ZkNq72BEEerqQuicoEQfzA== - dependencies: - meow "^4.0.0" - semver "^6.0.0" - -git-up@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.1.tgz#cb2ef086653640e721d2042fe3104857d89007c0" - integrity sha512-LFTZZrBlrCrGCG07/dm1aCjjpL1z9L3+5aEeI9SBhAqSc+kiA9Or1bgZhQFNppJX6h/f5McrvJt1mQXTFm6Qrw== - dependencies: - is-ssh "^1.3.0" - parse-url "^5.0.0" - -git-url-parse@^11.1.2: - version "11.1.2" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.1.2.tgz#aff1a897c36cc93699270587bea3dbcbbb95de67" - integrity sha512-gZeLVGY8QVKMIkckncX+iCq2/L8PlwncvDFKiWkBn9EtCfYDbliRTTp6qzyQ1VMdITUfq7293zDzfpjdiGASSQ== - dependencies: - git-up "^4.0.0" - -gitconfiglocal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" - integrity sha1-QdBF84UaXqiPA/JMocYXgRRGS5s= - dependencies: - ini "^1.3.2" - github-from-package@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" @@ -9960,10 +10029,10 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" - integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== +glob-parent@^5.1.0, glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== dependencies: is-glob "^4.0.1" @@ -10000,34 +10069,10 @@ glob-watcher@^5.0.3: just-debounce "^1.0.0" object.defaults "^1.1.0" -glob@7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@7.1.4, glob@^7.0.5: - version "7.1.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: - version "7.1.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.5.tgz#6714c69bee20f3c3e64c4dd905553e532b40cdc0" - integrity sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ== +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -10036,13 +10081,20 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -global-dirs@^0.1.0, global-dirs@^0.1.1: +global-dirs@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= dependencies: ini "^1.3.4" +global-dirs@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.0.1.tgz#acdf3bb6685bcd55cb35e8a052266569e9469201" + integrity sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A== + dependencies: + ini "^1.3.5" + global-modules@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" @@ -10052,13 +10104,6 @@ global-modules@^1.0.0: is-windows "^1.0.1" resolve-dir "^1.0.0" -global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - global-prefix@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" @@ -10066,18 +10111,9 @@ global-prefix@^1.0.1: dependencies: expand-tilde "^2.0.2" homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" global@^4.3.0: version "4.4.0" @@ -10087,7 +10123,7 @@ global@^4.3.0: min-document "^2.19.0" process "^0.11.10" -globals@^11.1.0, globals@^11.7.0: +globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== @@ -10098,9 +10134,9 @@ globals@^9.18.0: integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== globby@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.1.tgz#4782c34cb75dd683351335c5829cc3420e606b22" - integrity sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A== + version "10.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" + integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== dependencies: "@types/glob" "^7.1.1" array-union "^2.1.0" @@ -10122,25 +10158,6 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -globby@^9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" - integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== - dependencies: - "@types/glob" "^7.1.1" - array-union "^1.0.2" - dir-glob "^2.2.2" - fast-glob "^2.2.6" - glob "^7.1.3" - ignore "^4.0.3" - pify "^4.0.1" - slash "^2.0.0" - -globjoin@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" - integrity sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM= - glogg@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.2.tgz#2d7dd702beda22eb3bffadf880696da6d846313f" @@ -10148,13 +10165,6 @@ glogg@^1.0.0: dependencies: sparkles "^1.0.0" -gonzales-pe@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.2.4.tgz#356ae36a312c46fe0f1026dd6cb539039f8500d2" - integrity sha512-v0Ts/8IsSbh9n1OJRnSfa7Nlxi4AkXIsWB6vPept8FDbL4bXn3FNuxjYtO/nmBGu7GDkL9MFeGebeSu6l55EPQ== - dependencies: - minimist "1.1.x" - good-listener@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" @@ -10162,22 +10172,27 @@ good-listener@^1.2.2: dependencies: delegate "^3.1.2" -got@^6.7.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" - integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= +google-auth-library@^5.0.0, google-auth-library@^5.5.0: + version "5.10.1" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-5.10.1.tgz#504ec75487ad140e68dd577c21affa363c87ddff" + integrity sha512-rOlaok5vlpV9rSiUu5EpR0vVpc+PhN62oF4RyX/6++DG1VsaulAFEMlDYBLjJDDPI6OcNOCGAKy9UVB/3NIDXg== + dependencies: + arrify "^2.0.0" + base64-js "^1.3.0" + ecdsa-sig-formatter "^1.0.11" + fast-text-encoding "^1.0.0" + gaxios "^2.1.0" + gcp-metadata "^3.4.0" + gtoken "^4.1.0" + jws "^4.0.0" + lru-cache "^5.0.0" + +google-p12-pem@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-2.0.4.tgz#036462394e266472632a78b685f0cc3df4ef337b" + integrity sha512-S4blHBQWZRnEW44OcR7TL9WR+QCqByRvhNDZ/uuQfpxywfupikf/miba8js1jZi6ZOGv5slgSuoshCWh6EMDzg== dependencies: - create-error-class "^3.0.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-redirect "^1.0.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - lowercase-keys "^1.0.0" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - unzip-response "^2.0.1" - url-parse-lax "^1.0.0" + node-forge "^0.9.0" got@^8.3.1: version "8.3.2" @@ -10202,10 +10217,27 @@ got@^8.3.1: url-parse-lax "^3.0.0" url-to-options "^1.0.1" +got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + graceful-fs@4.X, graceful-fs@^4.0.0, graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" - integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== "graceful-readlink@>= 1.0.0": version "1.0.1" @@ -10213,11 +10245,11 @@ graceful-fs@4.X, graceful-fs@^4.0.0, graceful-fs@^4.1.10, graceful-fs@^4.1.11, g integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= graphlib@^2.1.7: - version "2.1.7" - resolved "https://registry.yarnpkg.com/graphlib/-/graphlib-2.1.7.tgz#b6a69f9f44bd9de3963ce6804a2fc9e73d86aecc" - integrity sha512-TyI9jIy2J4j0qgPmOOrHTCtpPqJGN/aurBwc6ZT+bRii+di1I+Wv3obRhVrmBEXet+qkMaEX67dXrwsd3QQM6w== + version "2.1.8" + resolved "https://registry.yarnpkg.com/graphlib/-/graphlib-2.1.8.tgz#5761d414737870084c92ec7b5dbcb0592c9d35da" + integrity sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A== dependencies: - lodash "^4.17.5" + lodash "^4.17.15" graphql-compiler@1.6.2: version "1.6.2" @@ -10229,16 +10261,16 @@ graphql-compiler@1.6.2: immutable "~3.7.6" graphql-tag@^2.10.0: - version "2.10.1" - resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.10.1.tgz#10aa41f1cd8fae5373eaf11f1f67260a3cad5e02" - integrity sha512-jApXqWBzNXQ8jYa/HLkZJaVw9jgwNqZkywa2zfFn16Iv1Zb7ELNHkJaXHR7Quvd5SIGsy6Ny7SUKATgnu05uEg== + version "2.10.3" + resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.10.3.tgz#ea1baba5eb8fc6339e4c4cf049dabe522b0edf03" + integrity sha512-4FOv3ZKfA4WdOKJeHdz6B3F/vxBLSgmBcGeAFPf4n1F64ltJUvOOerNj0rsJxONQGdhUMynQIvd6LzB+1J5oKA== graphql-tools@^4.0.3: - version "4.0.6" - resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-4.0.6.tgz#0e729e73db05ade3df10a2f92511be544972a844" - integrity sha512-jHLQw8x3xmSNRBCsaZqelXXsFfUSUSktSCUP8KYHiX1Z9qEuwcMpAf+FkdBzk8aTAFqOlPdNZ3OI4DKKqGKUqg== + version "4.0.8" + resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-4.0.8.tgz#e7fb9f0d43408fb0878ba66b522ce871bafe9d30" + integrity sha512-MW+ioleBrwhRjalKjYaLQbr+920pHBgy9vM/n47sswtns8+96sRn5M/G+J1eu7IMeKWiN/9p6tmwCHU7552VJg== dependencies: - apollo-link "^1.2.3" + apollo-link "^1.2.14" apollo-utilities "^1.0.1" deprecated-decorator "^0.1.6" iterall "^1.1.3" @@ -10261,31 +10293,26 @@ gray-matter@^4.0.2: section-matter "^1.0.0" strip-bom-string "^1.0.0" -growl@1.10.5: - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= +gtoken@^4.1.0: + version "4.1.4" + resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-4.1.4.tgz#925ff1e7df3aaada06611d30ea2d2abf60fcd6a7" + integrity sha512-VxirzD0SWoFUo5p8RDP8Jt2AGyOmyYcT/pOUgDKJCK+iSw0TMqwrVfY37RXTNmoKwrzmDHSk0GMT9FsgVmnVSA== + dependencies: + gaxios "^2.1.0" + google-p12-pem "^2.0.0" + jws "^4.0.0" + mime "^2.2.0" + gud@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== -gulp-babel@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/gulp-babel/-/gulp-babel-8.0.0.tgz#e0da96f4f2ec4a88dd3a3030f476e38ab2126d87" - integrity sha512-oomaIqDXxFkg7lbpBou/gnUkX51/Y/M2ZfSjL2hdqXTAlSWZcgZtd2o0cOH0r/eE8LWD0+Q/PsLsr2DKOoqToQ== - dependencies: - plugin-error "^1.0.1" - replace-ext "^1.0.0" - through2 "^2.0.0" - vinyl-sourcemaps-apply "^0.2.0" - gulp-banner@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/gulp-banner/-/gulp-banner-0.1.3.tgz#0208a314983fdc851c95e9944b0a7cf305479fa3" @@ -10328,6 +10355,23 @@ gulp-filter@^6.0.0: plugin-error "^1.0.1" streamfilter "^3.0.0" +gulp-flatten@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/gulp-flatten/-/gulp-flatten-0.4.0.tgz#d9ac819416c30fd5dfb3dea9da79c83a1bcd61d1" + integrity sha512-eg4spVTAiv1xXmugyaCxWne1oPtNG0UHEtABx5W8ScLiqAYceyYm6GYA36x0Qh8KOIXmAZV97L2aYGnKREG3Sg== + dependencies: + plugin-error "^0.1.2" + through2 "^2.0.0" + +gulp-if@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/gulp-if/-/gulp-if-3.0.0.tgz#6c3e7edc8bafadc34f2ebecb314bf43324ba1e40" + integrity sha512-fCUEngzNiEZEK2YuPm+sdMpO6ukb8+/qzbGfJBXyNOXz85bCG7yBI+pPSl+N90d7gnLvMsarthsAImx0qy7BAw== + dependencies: + gulp-match "^1.1.0" + ternary-stream "^3.0.0" + through2 "^3.0.1" + gulp-json-transform@^0.4.7: version "0.4.7" resolved "https://registry.yarnpkg.com/gulp-json-transform/-/gulp-json-transform-0.4.7.tgz#41c37524c976e41f3d46c06f985b01530a472e34" @@ -10340,14 +10384,12 @@ gulp-json-transform@^0.4.7: through2 "^2.0.3" vinyl "^2.1.0" -gulp-newer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/gulp-newer/-/gulp-newer-1.4.0.tgz#25243ed6eac8f5462b95894e0d41937b112e65f3" - integrity sha512-h79fGO55S/P9eAADbLAP9aTtVYpLSR1ONj08VPaSdVVNVYhTS8p1CO1TW7kEMu+hC+sytmCqcUr5LesvZEtDoQ== +gulp-match@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/gulp-match/-/gulp-match-1.1.0.tgz#552b7080fc006ee752c90563f9fec9d61aafdf4f" + integrity sha512-DlyVxa1Gj24DitY2OjEsS+X6tDpretuxD6wTfhXE/Rw2hweqc1f6D/XtsJmoiCwLWfXgR87W9ozEityPCVzGtQ== dependencies: - glob "^7.0.3" - kew "^0.7.0" - plugin-error "^0.1.2" + minimatch "^3.0.3" gulp-plumber@^1.2.1: version "1.2.1" @@ -10359,10 +10401,10 @@ gulp-plumber@^1.2.1: plugin-error "^0.1.2" through2 "^2.0.3" -gulp-rename@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/gulp-rename/-/gulp-rename-1.4.0.tgz#de1c718e7c4095ae861f7296ef4f3248648240bd" - integrity sha512-swzbIGb/arEoFK89tPY58vg3Ok1bw+d35PfUNwWqdo7KM4jkmuGA78JiDNqR+JeZFaeeHnRg9N7aihX3YPmsyg== +gulp-rename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/gulp-rename/-/gulp-rename-2.0.0.tgz#9bbc3962b0c0f52fc67cd5eaff6c223ec5b9cf6c" + integrity sha512-97Vba4KBzbYmR5VBs9mWmK+HwIf5mj+/zioxfZhOKeXtx5ZjBk57KFlePf5nxq9QsTtFl0ejnHE3zTC9MHXqyQ== gulp-replace@^1.0.0: version "1.0.0" @@ -10426,7 +10468,7 @@ gulp-util@~3.0.7: through2 "^2.0.0" vinyl "^0.5.0" -gulp@^4.0.2: +gulp@~4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/gulp/-/gulp-4.0.2.tgz#543651070fd0f6ab0a0650c6a3e6ff5a7cb09caa" integrity sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA== @@ -10444,9 +10486,9 @@ gulplog@^1.0.0: glogg "^1.0.0" gunzip-maybe@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/gunzip-maybe/-/gunzip-maybe-1.4.1.tgz#39c72ed89d1b49ba708e18776500488902a52027" - integrity sha512-qtutIKMthNJJgeHQS7kZ9FqDq59/Wn0G2HYCRNjpup7yKfVI6/eqwpmroyZGFoCYaG+sW6psNVb4zoLADHpp2g== + version "1.4.2" + resolved "https://registry.yarnpkg.com/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz#b913564ae3be0eda6f3de36464837a9cd94b98ac" + integrity sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw== dependencies: browserify-zlib "^0.1.4" is-deflate "^1.0.0" @@ -10464,27 +10506,16 @@ gzip-size@^5.0.0: pify "^4.0.1" handle-thing@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754" - integrity sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ== - -handlebars@^4.1.2, handlebars@^4.4.0: - version "4.4.5" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.4.5.tgz#1b1f94f9bfe7379adda86a8b73fb570265a0dddd" - integrity sha512-0Ce31oWVB7YidkaTq33ZxEbN+UDxMMgThvCe8ptgQViymL5DPis9uLdTA13MiRPhgvqyxIegugrP97iK3JeBHg== - dependencies: - neo-async "^2.6.0" - optimist "^0.6.1" - source-map "^0.6.1" - optionalDependencies: - uglify-js "^3.1.4" + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= -har-validator@~5.1.0: +har-validator@~5.1.0, har-validator@~5.1.3: version "5.1.3" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== @@ -10521,6 +10552,11 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + has-gulplog@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" @@ -10533,10 +10569,10 @@ has-symbol-support-x@^1.4.1: resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= +has-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== has-to-string-tag-x@^1.2.0: version "1.4.1" @@ -10545,7 +10581,7 @@ has-to-string-tag-x@^1.2.0: dependencies: has-symbol-support-x "^1.4.1" -has-unicode@^2.0.0, has-unicode@^2.0.1: +has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= @@ -10581,7 +10617,12 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.0, has@^1.0.1, has@^1.0.3: +has-yarn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" + integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== + +has@^1.0.0, has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== @@ -10589,12 +10630,20 @@ has@^1.0.0, has@^1.0.1, has@^1.0.3: function-bind "^1.1.1" hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash-stream-validation@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/hash-stream-validation/-/hash-stream-validation-0.2.2.tgz#6b34c4fce5e9fce265f1d3380900049d92a10090" + integrity sha512-cMlva5CxWZOrlS/cY0C+9qAzesn5srhFA8IT1VPiHc9bWWBLkJfEUIZr7MWoi89oOOGmpg8ymchaOjiArsGu5A== + dependencies: + through2 "^2.0.0" hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: version "1.1.7" @@ -10612,9 +10661,9 @@ hasha@^3.0.0: is-stream "^1.0.1" hast-util-from-parse5@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-5.0.1.tgz#7da8841d707dcf7be73715f7f3b14e021c4e469a" - integrity sha512-UfPzdl6fbxGAxqGYNThRUhRlDYY7sXu6XU9nQeX4fFZtV+IHbyEJtd+DUuwOqNV4z3K05E/1rIkoVr/JHmeWWA== + version "5.0.3" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz#3089dc0ee2ccf6ec8bc416919b51a54a589e097c" + integrity sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA== dependencies: ccount "^1.0.3" hastscript "^5.0.0" @@ -10623,19 +10672,19 @@ hast-util-from-parse5@^5.0.0: xtend "^4.0.1" hast-util-is-element@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-1.0.3.tgz#423b4b26fe8bf1f25950fe052e9ce8f83fd5f6a4" - integrity sha512-C62CVn7jbjp89yOhhy7vrkSaB7Vk906Gtcw/Ihd+Iufnq+2pwOZjdPmpzpKLWJXPJBMDX3wXg4FqmdOayPcewA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-1.0.4.tgz#059090a05cc02e275df1ad02caf8cb422fcd2e02" + integrity sha512-NFR6ljJRvDcyPP5SbV7MyPBgF47X3BsskLnmw1U34yL+X6YC0MoBx9EyMg8Jtx4FzGH95jw8+c1VPLHaRA0wDQ== -hast-util-parse-selector@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.2.tgz#66aabccb252c47d94975f50a281446955160380b" - integrity sha512-jIMtnzrLTjzqgVEQqPEmwEZV+ea4zHRFTP8Z2Utw0I5HuBOXHzUPPQWr6ouJdJqDKLbFU/OEiYwZ79LalZkmmw== +hast-util-parse-selector@^2.0.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.4.tgz#60c99d0b519e12ab4ed32e58f150ec3f61ed1974" + integrity sha512-gW3sxfynIvZApL4L07wryYF4+C9VvH3AUi7LAnVXV4MneGEgwOByXvFo18BgmTWnm7oHAe874jKbIB1YhHSIzA== hast-util-to-html@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-6.0.2.tgz#aec7ee7a57008c82b01044ac58794a3d6349767d" - integrity sha512-oiQzGHtjT6ZLhszCY89kCxGCo9O+YuPUHluv36fzp7Hv/E1W4428PgzcQAKlPUzbHAt3ELoPCSrYLWl8fQw7Ag== + version "6.1.0" + resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-6.1.0.tgz#86bcd19c3bd46af456984f8f34db16298c2b10b0" + integrity sha512-IlC+LG2HGv0Y8js3wqdhg9O2sO4iVpRDbHOPwXd7qgeagpGsnY49i8yyazwqS35RA35WCzrBQE/n0M6GG/ewxA== dependencies: ccount "^1.0.0" comma-separated-tokens "^1.0.1" @@ -10649,21 +10698,21 @@ hast-util-to-html@^6.0.0: xtend "^4.0.1" hast-util-whitespace@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-1.0.3.tgz#6d161b307bd0693b5ec000c7c7e8b5445109ee34" - integrity sha512-AlkYiLTTwPOyxZ8axq2/bCwRUPjIPBfrHkXuCR92B38b3lSdU22R5F/Z4DL6a2kxWpekWq1w6Nj48tWat6GeRA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz#e4fe77c4a9ae1cb2e6c25e02df0043d0164f6e41" + integrity sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A== hastscript@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.1.0.tgz#a19b3cca6a26a2bcd0f1b1eac574af9427c1c7df" - integrity sha512-7mOQX5VfVs/gmrOGlN8/EDfp1GqV6P3gTNVt+KnX4gbYhpASTM8bklFdFQCbFRAadURXAmw0R1QQdBdqp7jswQ== + version "5.1.2" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.1.2.tgz#bde2c2e56d04c62dd24e8c5df288d050a355fb8a" + integrity sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ== dependencies: comma-separated-tokens "^1.0.0" - hast-util-parse-selector "^2.2.0" - property-information "^5.0.1" + hast-util-parse-selector "^2.0.0" + property-information "^5.0.0" space-separated-tokens "^1.0.0" -he@1.2.0, he@1.2.x: +he@1.2.x: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== @@ -10686,33 +10735,29 @@ helmet-crossdomain@0.4.0: resolved "https://registry.yarnpkg.com/helmet-crossdomain/-/helmet-crossdomain-0.4.0.tgz#5f1fe5a836d0325f1da0a78eaa5fd8429078894e" integrity sha512-AB4DTykRw3HCOxovD1nPR16hllrVImeFp5VBV9/twj66lJ2nU75DP8FPL0/Jp4jj79JhTfG+pFI2MD02kWJ+fA== -helmet-csp@2.9.4: - version "2.9.4" - resolved "https://registry.yarnpkg.com/helmet-csp/-/helmet-csp-2.9.4.tgz#801382bac98f2f88706dc5c89d95c7e31af3a4a9" - integrity sha512-qUgGx8+yk7Xl8XFEGI4MFu1oNmulxhQVTlV8HP8tV3tpfslCs30OZz/9uQqsWPvDISiu/NwrrCowsZBhFADYqg== +helmet-csp@2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/helmet-csp/-/helmet-csp-2.10.0.tgz#685dde1747bc16c5e28ad9d91e229a69f0a85e84" + integrity sha512-Rz953ZNEFk8sT2XvewXkYN0Ho4GEZdjAZy4stjiEQV3eN7GDxg1QKmYggH7otDyIA7uGA6XnUMVSgeJwbR5X+w== dependencies: - bowser "^2.7.0" + bowser "2.9.0" camelize "1.0.0" content-security-policy-builder "2.1.0" dasherize "2.0.0" -helmet@^3.15.1: - version "3.21.2" - resolved "https://registry.yarnpkg.com/helmet/-/helmet-3.21.2.tgz#7e2a19d5f6d898a77b5d2858e8e4bb2cda59f19f" - integrity sha512-okUo+MeWgg00cKB8Csblu8EXgcIoDyb5ZS/3u0W4spCimeVuCUvVZ6Vj3O2VJ1Sxpyb8jCDvzu0L1KKT11pkIg== +helmet@^3.21.1: + version "3.23.3" + resolved "https://registry.yarnpkg.com/helmet/-/helmet-3.23.3.tgz#5ba30209c5f73ded4ab65746a3a11bedd4579ab7" + integrity sha512-U3MeYdzPJQhtvqAVBPntVgAvNSOJyagwZwyKsFdyRa8TV3pOKVFljalPOCxbw5Wwf2kncGhmP0qHjyazIdNdSA== dependencies: depd "2.0.0" - dns-prefetch-control "0.2.0" dont-sniff-mimetype "1.1.0" - expect-ct "0.2.0" feature-policy "0.3.0" - frameguard "3.1.0" helmet-crossdomain "0.4.0" - helmet-csp "2.9.4" + helmet-csp "2.10.0" hide-powered-by "1.1.0" hpkp "2.0.0" hsts "2.2.0" - ienoopen "1.1.0" nocache "2.1.0" referrer-policy "1.2.0" x-xss-protection "1.3.0" @@ -10722,16 +10767,6 @@ hex-color-regex@^1.1.0: resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== -hexer@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/hexer/-/hexer-1.5.0.tgz#b86ce808598e8a9d1892c571f3cedd86fc9f0653" - integrity sha1-uGzoCFmOip0YksVx887dhvyfBlM= - dependencies: - ansi-color "^0.2.1" - minimist "^1.1.0" - process "^0.10.0" - xtend "^4.0.0" - hide-powered-by@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/hide-powered-by/-/hide-powered-by-1.1.0.tgz#be3ea9cab4bdb16f8744be873755ca663383fa7a" @@ -10763,15 +10798,15 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoist-non-react-statics@^2.2.1, hoist-non-react-statics@^2.3.1, hoist-non-react-statics@^2.5.0: +hoist-non-react-statics@^2.3.1, hoist-non-react-statics@^2.5.0: version "2.5.5" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== hoist-non-react-statics@^3.2.1, hoist-non-react-statics@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b" - integrity sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA== + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== dependencies: react-is "^16.7.0" @@ -10787,10 +10822,17 @@ hoopy@^0.1.4: resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== -hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: - version "2.8.5" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c" - integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg== +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +hosted-git-info@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.4.tgz#be4973eb1fd2737b11c9c7c19380739bb249f60d" + integrity sha512-4oT62d2jwSDBbLLFLZE+1vPuQ1h8p9wjrJ8Mqx5TjsyWmBMV5B13eJqn8pvluqubLf3cJPTfiYCIwNwDNmzScQ== + dependencies: + lru-cache "^5.1.1" hpack.js@^2.1.6: version "2.1.6" @@ -10837,9 +10879,14 @@ html-encoding-sniffer@^1.0.2: whatwg-encoding "^1.0.1" html-entities@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" - integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8= + version "1.3.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" + integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== html-minifier@^3.2.3: version "3.5.21" @@ -10854,26 +10901,21 @@ html-minifier@^3.2.3: relateurl "0.2.x" uglify-js "3.4.x" -html-tags@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" - integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== - html-tokenize@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/html-tokenize/-/html-tokenize-2.0.0.tgz#8b3a9a5deb475cae6a6f9671600d2c20ab298251" - integrity sha1-izqaXetHXK5qb5ZxYA0sIKspglE= + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-tokenize/-/html-tokenize-2.0.1.tgz#c3b2ea6e2837d4f8c06693393e9d2a12c960be5f" + integrity sha512-QY6S+hZ0f5m1WT8WffYN+Hg+xm/w5I8XeUcAq/ZYP5wVC8xbKi4Whhru3FtrAebD5EhBW8rmFzkDI6eCAuFe2w== dependencies: buffer-from "~0.1.1" inherits "~2.0.1" - minimist "~0.0.8" + minimist "~1.2.5" readable-stream "~1.0.27-1" through2 "~0.4.1" html-void-elements@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.4.tgz#95e8bb5ecd6b88766569c2645f2b5f1591db9ba5" - integrity sha512-yMk3naGPLrfvUV9TdDbuYXngh/TpHbA6TrOw3HL9kS8yhwx7i309BReNg7CbAJXGE+UMJ6je5OqJ7lC63o6YuQ== + version "1.0.5" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483" + integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== html-webpack-plugin@^3.2.0: version "3.2.0" @@ -10893,7 +10935,7 @@ htmlencode@^0.0.4: resolved "https://registry.yarnpkg.com/htmlencode/-/htmlencode-0.0.4.tgz#f7e2d6afbe18a87a78e63ba3308e753766740e3f" integrity sha1-9+LWr74YqHp45jujMI51N2Z0Dj8= -htmlparser2@^3.10.0, htmlparser2@^3.3.0, htmlparser2@^3.7.3: +htmlparser2@^3.3.0, htmlparser2@^3.7.3: version "3.10.1" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== @@ -10913,11 +10955,16 @@ http-assert@^1.3.0: deep-equal "~1.0.1" http-errors "~1.7.2" -http-cache-semantics@3.8.1, http-cache-semantics@^3.8.1: +http-cache-semantics@3.8.1: version "3.8.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" @@ -10960,13 +11007,14 @@ http-errors@~1.6.2: resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q= -http-proxy-agent@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" - integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== +http-proxy-agent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== dependencies: - agent-base "4" - debug "3.1.0" + "@tootallnate/once" "1" + agent-base "6" + debug "4" http-proxy-middleware@0.19.1: version "0.19.1" @@ -11001,30 +11049,31 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -https-proxy-agent@^2.2.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.3.tgz#fb6cd98ed5b9c35056b5a73cd01a8a721d7193d1" - integrity sha512-Ytgnz23gm2DVftnzqRRz2dOXZbGd2uiajSw/95bPp6v53zPRspQjLm/AfBgqbJ2qfeRXWIOMVLpp86+/5yX39Q== +https-proxy-agent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz#702b71fb5520a132a66de1f67541d9e62154d82b" + integrity sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg== dependencies: - agent-base "^4.3.0" - debug "^3.1.0" + agent-base "5" + debug "4" + +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= - dependencies: - ms "^2.0.0" - -husky@^3.0.4: - version "3.0.9" - resolved "https://registry.yarnpkg.com/husky/-/husky-3.0.9.tgz#a2c3e9829bfd6b4957509a9500d2eef5dbfc8044" - integrity sha512-Yolhupm7le2/MqC1VYLk/cNmYxsSsqKkTyBhzQHhPK1jFnC89mmmNVuGtLNabjDI6Aj8UNIr0KpRNuBkiC4+sg== +husky@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/husky/-/husky-3.1.0.tgz#5faad520ab860582ed94f0c1a77f0f04c90b57c0" + integrity sha512-FJkPoHHB+6s4a+jwPqBudBDvYZsoQW5/HBuMSehC8qDiCe50kpcxeqFoDSlow+9I6wg47YxBoT3WxaURlrDIIQ== dependencies: chalk "^2.4.2" ci-info "^2.0.0" @@ -11055,7 +11104,7 @@ icss-replace-symbols@^1.1.0: resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= -icss-utils@^4.0.0, icss-utils@^4.1.0, icss-utils@^4.1.1: +icss-utils@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== @@ -11067,11 +11116,6 @@ ieee754@^1.1.4: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== -ienoopen@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ienoopen/-/ienoopen-1.1.0.tgz#411e5d530c982287dbdc3bb31e7a9c9e32630974" - integrity sha512-MFs36e/ca6ohEKtinTJ5VvAJ6oDRAYFdYXweUnGY9L9vcoqFOU4n2ZhmJ0C4z/cwGZ3YIQRSB3XZ1+ghZkY5NQ== - iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" @@ -11082,19 +11126,14 @@ ignore-by-default@^1.0.1: resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= -ignore-walk@^3.0.1: +ignore-walk@3.0.3, ignore-walk@^3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== dependencies: minimatch "^3.0.4" -ignore@^4.0.3, ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.0.6, ignore@^5.1.1: +ignore@^5.1.1: version "5.1.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== @@ -11104,15 +11143,15 @@ immediate@3.0.6, immediate@~3.0.5: resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= -immediate@~3.2.3: +immediate@^3.2.3, immediate@~3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" integrity sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw= -immer@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/immer/-/immer-4.0.2.tgz#9ff0fcdf88e06f92618a5978ceecb5884e633559" - integrity sha512-Q/tm+yKqnKy4RIBmmtISBlhXuSDrB69e9EKTYiIenIKQkXBQir43w+kN/eGiax3wt1J0O1b2fYcNqLSbEcXA7w== +immer@^5.0.0: + version "5.3.6" + resolved "https://registry.yarnpkg.com/immer/-/immer-5.3.6.tgz#51eab8cbbeb13075fe2244250f221598818cac04" + integrity sha512-pqWQ6ozVfNOUDjrLfm4Pt7q4Q12cGw2HUZgry4Q5+Myxu9nmHRkWBpI0J4+MK0AxbdFtdMTwEGVl7Vd+vEiK+A== immutable@^3.8.2: version "3.8.2" @@ -11139,10 +11178,10 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" -import-fresh@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118" - integrity sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ== +import-fresh@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" + integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" @@ -11159,11 +11198,6 @@ import-lazy@^2.1.0: resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= -import-lazy@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" - integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== - import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" @@ -11237,7 +11271,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -11252,55 +11286,22 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.2, ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: +ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== -init-package-json@^1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" - integrity sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw== - dependencies: - glob "^7.1.1" - npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" - promzard "^0.3.0" - read "~1.0.1" - read-package-json "1 || 2" - semver "2.x || 3.x || 4 || 5" - validate-npm-package-license "^3.0.1" - validate-npm-package-name "^3.0.0" - inquirer-autocomplete-prompt@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-1.0.1.tgz#e4be98a9e727ea5160937e33f8724e70464e3c4d" - integrity sha512-Y4V6ifAu9LNrNjcEtYq8YUKhrgmmufUn5fsDQqeWgHY8rEO6ZAQkNUiZtBm2kw2uUQlC9HdgrRCHDhTPPguH5A== + version "1.0.2" + resolved "https://registry.yarnpkg.com/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-1.0.2.tgz#3f2548f73dd12f0a541be055ea9c8c7aedeb42bf" + integrity sha512-vNmAhhrOQwPnUm4B9kz1UB7P98rVF1z8txnjp53r40N0PBCuqoRWqjg3Tl0yz0UkDg7rEUtZ2OZpNc7jnOU9Zw== dependencies: ansi-escapes "^3.0.0" chalk "^2.0.0" figures "^2.0.0" run-async "^2.3.0" -inquirer@6.5.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42" - integrity sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA== - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" - -inquirer@^6.2.0, inquirer@^6.2.1, inquirer@^6.4.1, inquirer@^6.5.1: +inquirer@^6.5.1: version "6.5.2" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== @@ -11327,11 +11328,16 @@ internal-ip@^4.3.0: default-gateway "^4.2.0" ipaddr.js "^1.9.0" -interpret@^1.0.0, interpret@^1.1.0: +interpret@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== +interpret@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" + integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== + intersection-observer@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/intersection-observer/-/intersection-observer-0.7.0.tgz#ee16bee978db53516ead2f0a8154b09b400bbdc9" @@ -11368,12 +11374,16 @@ invert-kv@^2.0.0: integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== ip-address@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-6.1.0.tgz#3c3335bc90f22b3545a6eca5bffefabeb2ea6fd2" - integrity sha512-u9YYtb1p2fWSbzpKmZ/b3QXWA+diRYPxc2c4y5lFB/MMk5WZ7wNZv8S3CFcIGVJ5XtlaCAl/FQy/D3eQ2XtdOA== + version "6.3.0" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-6.3.0.tgz#8c031adff59b67fa1b2f0485cc5aed30bc709b69" + integrity sha512-tYN6DnF82jBRA6ZT3C+k4LBtVUKu0Taq7GZN4yldhz6nFKVh3EDg/zRIABsu4fAT2N0iFW9D482Aqkiah1NxTg== dependencies: jsbn "1.1.0" - lodash "^4.17.15" + lodash.find "4.6.0" + lodash.max "4.0.1" + lodash.merge "4.6.2" + lodash.padstart "4.6.1" + lodash.repeat "4.1.0" sprintf-js "1.1.2" ip-regex@^2.1.0: @@ -11386,12 +11396,7 @@ ip@^1.1.0, ip@^1.1.5: resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= -ipaddr.js@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" - integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA== - -ipaddr.js@^1.9.0: +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== @@ -11429,19 +11434,14 @@ is-accessor-descriptor@^1.0.0: kind-of "^6.0.0" is-alphabetical@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.3.tgz#eb04cc47219a8895d8450ace4715abff2258a1f8" - integrity sha512-eEMa6MKpHFzw38eKm56iNNi6GJ7lf6aLLio7Kr23sJPAECscgRtZvOBYybejWDQ2bM949Y++61PY+udzj5QMLA== - -is-alphanumeric@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4" - integrity sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ= + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" + integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== is-alphanumerical@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.3.tgz#57ae21c374277b3defe0274c640a5704b8f6657c" - integrity sha512-A1IGAPO5AW9vSh7omxIlOGwIqEvpW/TA+DksVOPM5ODuxKlZS09+TEM1E3275lJqO2oJ38vDpeAL3DCIiHE6eA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" + integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== dependencies: is-alphabetical "^1.0.0" is-decimal "^1.0.0" @@ -11475,27 +11475,22 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-buffer@^1.1.5, is-buffer@~1.1.1: +is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== is-buffer@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725" - integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw== - -is-buffer@^2.0.2, is-buffer@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== -is-callable@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== +is-callable@^1.1.4, is-callable@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" + integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== -is-ci@1.2.1, is-ci@^1.0.10: +is-ci@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== @@ -11536,14 +11531,14 @@ is-data-descriptor@^1.0.0: kind-of "^6.0.0" is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== is-decimal@^1.0.0, is-decimal@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.3.tgz#381068759b9dc807d8c0dc0bfbae2b68e1da48b7" - integrity sha512-bvLSwoDg2q6Gf+E2LEPiklHZxxiSi3XAh4Mav65mKqTfCO1HM3uBs24TjEH8iJX3bbDdLXKJXBTmGzuTUuAEjQ== + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" + integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== is-deflate@^1.0.0: version "1.0.0" @@ -11608,11 +11603,9 @@ is-extglob@^2.1.0, is-extglob@^2.1.1: integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= - dependencies: - number-is-nan "^1.0.0" + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== is-fullwidth-code-point@^1.0.0: version "1.0.0" @@ -11632,9 +11625,9 @@ is-fullwidth-code-point@^3.0.0: integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-function@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" - integrity sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU= + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" + integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== is-generator-fn@^2.0.0: version "2.1.0" @@ -11673,16 +11666,16 @@ is-gzip@^1.0.0: integrity sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM= is-hexadecimal@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz#e8a426a69b6d31470d3a33a47bb825cda02506ee" - integrity sha512-zxQ9//Q3D/34poZf8fiy3m3XVpbQc7ren15iKqrTtLPwkPD/t3Scy9Imp63FujULGxuK0ZlCwoo5xNpktFgbOA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== is-in-browser@^1.0.2, is-in-browser@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU= -is-installed-globally@0.1.0, is-installed-globally@^0.1.0: +is-installed-globally@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= @@ -11690,12 +11683,13 @@ is-installed-globally@0.1.0, is-installed-globally@^0.1.0: global-dirs "^0.1.0" is-path-inside "^1.0.0" -is-invalid-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-invalid-path/-/is-invalid-path-0.1.0.tgz#307a855b3cf1a938b44ea70d2c61106053714f34" - integrity sha1-MHqFWzzxqTi0TqcNLGEQYFNxTzQ= +is-installed-globally@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" + integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== dependencies: - is-glob "^2.0.0" + global-dirs "^2.0.1" + is-path-inside "^3.0.1" is-lower-case@^1.1.0: version "1.1.3" @@ -11704,6 +11698,13 @@ is-lower-case@^1.1.0: dependencies: lower-case "^1.1.0" +is-nan@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.0.tgz#85d1f5482f7051c2019f5673ccebdb06f3b0db03" + integrity sha512-z7bbREymOqt2CCaZVly8aC4ML3Xhfi0ekuOnjO2L8vKdl+CttdVoGZQhd4adMFAsxQ5VeRVwORs4tU8RH+HFtQ== + dependencies: + define-properties "^1.1.3" + is-natural-number@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" @@ -11714,10 +11715,10 @@ is-negated-glob@^1.0.0: resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" integrity sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI= -is-npm@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" - integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= +is-npm@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" + integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== is-number@^2.1.0: version "2.1.0" @@ -11743,11 +11744,16 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^1.0.0, is-obj@^1.0.1: +is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + is-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" @@ -11803,13 +11809,6 @@ is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-plain-object@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.0.tgz#47bfc5da1b5d50d64110806c199359482e75a928" - integrity sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg== - dependencies: - isobject "^4.0.0" - is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" @@ -11821,32 +11820,22 @@ is-primitive@^2.0.0: integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= is-promise@^2.1, is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= - -is-redirect@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" - integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= + version "2.2.2" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" + integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= +is-regex@^1.0.4, is-regex@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" + integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== dependencies: - has "^1.0.1" + has "^1.0.3" is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= -is-regexp@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-2.1.0.tgz#cd734a56864e23b956bf4e7c66c396a4c0b22c2d" - integrity sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA== - is-relative@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" @@ -11859,7 +11848,7 @@ is-resolvable@^1.0.0: resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== -is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0: +is-retry-allowed@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== @@ -11869,14 +11858,7 @@ is-running@^2.1.0: resolved "https://registry.yarnpkg.com/is-running/-/is-running-2.1.0.tgz#30a73ff5cc3854e4fc25490809e9f5abf8de09e0" integrity sha1-MKc/9cw4VOT8JUkICen1q/jeCeA= -is-ssh@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.1.tgz#f349a8cadd24e65298037a522cf7520f2e81a0f3" - integrity sha512-0eRIASHZt1E68/ixClI8bp2YK2wmBPVWEismTs6M+M099jKgrzl/3E976zIbImSIob48N2/XGe9y7ZiYdImSlg== - dependencies: - protocols "^1.1.0" - -is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: +is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= @@ -11894,18 +11876,21 @@ is-svg@^3.0.0: html-comment-regex "^1.1.0" is-symbol@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" - integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== dependencies: - has-symbols "^1.0.0" + has-symbols "^1.0.1" -is-text-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-2.0.0.tgz#b2484e2b720a633feb2e85b67dc193ff72c75636" - integrity sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw== +is-typed-array@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.3.tgz#a4ff5a5e672e1a55f99c7f54e59597af5c1df04d" + integrity sha512-BSYUBOK/HJibQ30wWkWold5txYwMUXQct9YHAQJr8fSwvZoiglcqB0pd7vEN23+Tsi9IUEjztdOSzl4qLVYGTQ== dependencies: - text-extensions "^2.0.0" + available-typed-arrays "^1.0.0" + es-abstract "^1.17.4" + foreach "^2.0.5" + has-symbols "^1.0.1" is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" @@ -11936,38 +11921,26 @@ is-valid-glob@^1.0.0: resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= -is-valid-path@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-valid-path/-/is-valid-path-0.1.1.tgz#110f9ff74c37f663e1ec7915eb451f2db93ac9df" - integrity sha1-EQ+f90w39mPh7HkV60UfLbk6yd8= - dependencies: - is-invalid-path "^0.1.0" - is-what@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.3.1.tgz#79502181f40226e2d8c09226999db90ef7c1bcbe" - integrity sha512-seFn10yAXy+yJlTRO+8VfiafC+0QJanGLMPTBWLrJm/QPauuchy0UXh8B6H5o9VA8BAzk0iYievt6mNp6gfaqA== - -is-whitespace-character@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.3.tgz#b3ad9546d916d7d3ffa78204bca0c26b56257fac" - integrity sha512-SNPgMLz9JzPccD3nPctcj8sZlX9DAMJSKH8bP7Z6bohCwuNgX8xbWr1eTAYXX9Vpi/aSn8Y1akL9WgM3t43YNQ== + version "3.8.0" + resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.8.0.tgz#610bc46a524355f2424eb85eedc6ebbbf7e1ff8c" + integrity sha512-UKeBoQfV8bjlM4pmx1FLDHdxslW/1mTksEs8ReVsilPmUv5cORd4+2/wFcviI3cUjrLybxCjzc8DnodAzJ/Wrg== -is-windows@^1.0.0, is-windows@^1.0.1, is-windows@^1.0.2: +is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== -is-word-character@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.3.tgz#264d15541cbad0ba833d3992c34e6b40873b08aa" - integrity sha512-0wfcrFgOOOBdgRNT9H33xe6Zi6yhX/uoc4U8NBZGeQQB0ctU1dnlNTyL9JM2646bHDTpsDm1Brb3VPoCIMrd/A== - is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= +is-yarn-global@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" + integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== + isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" @@ -12000,11 +11973,6 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -isobject@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" - integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== - isomorphic-fetch@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" @@ -12064,11 +12032,11 @@ istanbul-lib-source-maps@^3.0.1, istanbul-lib-source-maps@^3.0.6: source-map "^0.6.1" istanbul-reports@^2.2.4, istanbul-reports@^2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.6.tgz#7b4f2660d82b29303a8fe6091f8ca4bf058da1af" - integrity sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA== + version "2.2.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.7.tgz#5d939f6237d7b48393cc0959eab40cd4fd056931" + integrity sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg== dependencies: - handlebars "^4.1.2" + html-escaper "^2.0.0" istextorbinary@2.2.1: version "2.2.1" @@ -12088,29 +12056,18 @@ isurl@^1.0.0-alpha5: is-object "^1.0.1" iterall@^1.1.3, iterall@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7" - integrity sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA== + version "1.3.0" + resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea" + integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg== ix@^2.5.3: - version "2.5.3" - resolved "https://registry.yarnpkg.com/ix/-/ix-2.5.3.tgz#b62899723297b2805343d1c77756b8568ed8dbec" - integrity sha512-Syz3oYUx5+P0T9F3BZOE2DzvWYF31Mbha1VqDbJsr4e4A+twhxTAf2c1BO8TMlwon12oAvvxAtQ+NJm9P8ISYQ== + version "2.5.5" + resolved "https://registry.yarnpkg.com/ix/-/ix-2.5.5.tgz#2aef77fbdee79dd0e7f62280c1810d5a39ff1cd4" + integrity sha512-WCeaFy6lddyLxqRlY1RpgpSfNxLucn/kht9AaZfOl3yTVKNRP1iiJo7Ib1uedIGNHy9U225dvVXQrU6h2jNE2w== dependencies: "@types/node" "^11.11.6" tslib "^1.9.3" -jaeger-client@~3.15.0: - version "3.15.0" - resolved "https://registry.yarnpkg.com/jaeger-client/-/jaeger-client-3.15.0.tgz#01e38937aa161d3118bdd685dd1b1eabab6bcf5e" - integrity sha512-0SfuEE7E6XVLhu8th5JG/ACtnIWq4Tad0iSst3+De9HOMSz1RI0Tl1MLXzetudI670rqfCs4m37XCTMRgu8oxg== - dependencies: - node-int64 "^0.4.0" - opentracing "^0.13.0" - thriftrw "^3.5.0" - uuid "^3.2.1" - xorshift "^0.2.0" - jest-changed-files@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039" @@ -12120,7 +12077,7 @@ jest-changed-files@^24.9.0: execa "^1.0.0" throat "^4.0.0" -jest-circus@^24.8.0: +jest-circus@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-24.9.0.tgz#8a557683636807d537507eac02ba64c95b686485" integrity sha512-dwkvwFtRc9Anmk1XTc+bonVL8rVMZ3CeGMoFWmv1oaQThdAgvfI9bwaFlZp+gLVphNVz6ZLfCWo3ERhS5CeVvA== @@ -12194,7 +12151,7 @@ jest-diff@^20.0.3: jest-matcher-utils "^20.0.3" pretty-format "^20.0.3" -jest-diff@^24.9.0: +jest-diff@^24.3.0, jest-diff@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ== @@ -12204,6 +12161,16 @@ jest-diff@^24.9.0: jest-get-type "^24.9.0" pretty-format "^24.9.0" +jest-diff@^25.2.1: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" + integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== + dependencies: + chalk "^3.0.0" + diff-sequences "^25.2.6" + jest-get-type "^25.2.6" + pretty-format "^25.5.0" + jest-docblock@^24.3.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.9.0.tgz#7970201802ba560e1c4092cc25cbedf5af5a8ce2" @@ -12250,6 +12217,11 @@ jest-get-type@^24.9.0: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== +jest-get-type@^25.2.6: + version "25.2.6" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" + integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== + jest-haste-map@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" @@ -12291,10 +12263,10 @@ jest-jasmine2@^24.9.0: pretty-format "^24.9.0" throat "^4.0.0" -jest-junit@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-9.0.0.tgz#9eb247dda7a8d2e1647a92f58a03a1490c74aea5" - integrity sha512-jnABGjL5pd2lhE1w3RIslZSufFbWQZGx8O3eluDES7qKxQuonXMtsPIi+4AKl4rtjb4DvMAjwLi4eHukc2FP/Q== +jest-junit@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-10.0.0.tgz#c94b91c24920a327c9d2a075e897b2dba4af494b" + integrity sha512-dbOVRyxHprdSpwSAR9/YshLwmnwf+RSl5hf0kCGlhAcEeZY9aRqo4oNmaT0tLC16Zy9D0zekDjWkjHGjXlglaQ== dependencies: jest-validate "^24.9.0" mkdirp "^0.5.1" @@ -12532,6 +12504,14 @@ jest-worker@^24.6.0, jest-worker@^24.9.0: merge-stream "^2.0.0" supports-color "^6.1.0" +jest-worker@^25.4.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1" + integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw== + dependencies: + merge-stream "^2.0.0" + supports-color "^7.0.0" + jest@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest/-/jest-24.9.0.tgz#987d290c05a08b52c56188c1002e368edb007171" @@ -12545,10 +12525,10 @@ jmespath@^0.15.0: resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" integrity sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc= -js-levenshtein@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" - integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== +joycon@^2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/joycon/-/joycon-2.2.5.tgz#8d4cf4cbb2544d7b7583c216fcdfec19f6be1615" + integrity sha512-YqvUxoOcVPnCp0VU1/56f+iKSdvIRJYPznH22BdXV3xMk75SFXhWeJkZ8C9XxUWt1b5x2X1SxuFygW1U0FmkEQ== js-priority-queue@^0.1.5: version "0.1.5" @@ -12630,21 +12610,19 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= +json-bigint@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-0.3.0.tgz#0ccd912c4b8270d05f056fbd13814b53d3825b1e" + integrity sha1-DM2RLEuCcNBfBW+9E4FLU9OCWx4= + dependencies: + bignumber.js "^7.0.0" + json-buffer@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= -json-fixer@^1.3.1-0: - version "1.3.3" - resolved "https://registry.yarnpkg.com/json-fixer/-/json-fixer-1.3.3.tgz#8a11c0536330e44f2aaba8b836d16657ad590dba" - integrity sha512-+UpmAba1KuudCrsbw/oZyibEyAbhFkaDoG9RJcSQVMLdSd6LI1dlaKbYbFzx4O6u4WA7TiBYAXHdQs2bMFCbEw== - dependencies: - "@babel/runtime" "^7.5.5" - chalk "^2.4.2" - pegjs "^0.10.0" - -json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== @@ -12671,7 +12649,7 @@ json-stable-stringify@^1.0.1: dependencies: jsonify "~0.0.0" -json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: +json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= @@ -12681,14 +12659,14 @@ json3@^3.3.2: resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== -json5@2.x, json5@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" - integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ== +json5@2.x, json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== dependencies: - minimist "^1.2.0" + minimist "^1.2.5" -json5@^0.5.0: +json5@^0.5.0, json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= @@ -12705,11 +12683,6 @@ json@^9.0.6: resolved "https://registry.yarnpkg.com/json/-/json-9.0.6.tgz#7972c2a5a48a42678db2730c7c2c4ee6e4e24585" integrity sha1-eXLCpaSKQmeNsnMMfCxO5uTiRYU= -jsonc-parser@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-1.0.3.tgz#1d53d7160e401a783dbceabaad82473f80e6ad7e" - integrity sha512-hk/69oAeaIzchq/v3lS50PXuzn5O2ynldopMC+SWBql7J2WtdptfB9dy8Y7+Og5rPkTCpn83zTiO8FMcqlXJ/g== - jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -12722,11 +12695,6 @@ jsonify@~0.0.0: resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= - jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -12824,6 +12792,16 @@ jss@^9.7.0, jss@^9.8.7: symbol-observable "^1.1.0" warning "^3.0.0" +jszip@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.5.0.tgz#b4fd1f368245346658e781fec9675802489e15f6" + integrity sha512-WRtu7TPCmYePR1nazfrtuF216cIVon/3GWOvHS9QR5bIwSbnxtdpma6un3jyGGNhHsKCSzn5Ypk+EkDRvTGiFA== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + set-immediate-shim "~1.0.1" + just-curry-it@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/just-curry-it/-/just-curry-it-3.1.0.tgz#ab59daed308a58b847ada166edd0a2d40766fbc5" @@ -12834,10 +12812,22 @@ just-debounce@^1.0.0: resolved "https://registry.yarnpkg.com/just-debounce/-/just-debounce-1.0.0.tgz#87fccfaeffc0b68cd19d55f6722943f929ea35ea" integrity sha1-h/zPrv/AtozRnVX2cilD+SnqNeo= -kew@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b" - integrity sha1-edk9LTM2PW/dKXCzNdkUGtWR15s= +jwa@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.0.tgz#a7e9c3f29dae94027ebcaf49975c9345593410fc" + integrity sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.0.tgz#2d4e8cf6a318ffaa12615e9dec7e86e6c97310f4" + integrity sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg== + dependencies: + jwa "^2.0.0" + safe-buffer "^5.0.1" keygrip@~1.1.0: version "1.1.0" @@ -12853,6 +12843,13 @@ keyv@3.0.0: dependencies: json-buffer "3.0.0" +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + killable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" @@ -12883,61 +12880,56 @@ kind-of@^5.0.0, kind-of@^5.0.2: integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== kleur@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -knex@^0.15.2: - version "0.15.2" - resolved "https://registry.yarnpkg.com/knex/-/knex-0.15.2.tgz#6059b87489605f4cc87599a6d2a9d265709e9340" - integrity sha1-YFm4dIlgX0zIdZmm0qnSZXCek0A= - dependencies: - babel-runtime "^6.26.0" - bluebird "^3.5.1" - chalk "2.3.2" - commander "^2.16.0" - debug "3.1.0" - inherits "~2.0.3" - interpret "^1.1.0" - liftoff "2.5.0" - lodash "^4.17.10" - minimist "1.2.0" +knex@0.20.8: + version "0.20.8" + resolved "https://registry.yarnpkg.com/knex/-/knex-0.20.8.tgz#b41c72773185e1032f4a77074198413521827860" + integrity sha512-fLiSg5PIBisORs0M+UGjg2s1P/E1BrYvb/NkSVk6Y90HJujkqLufSC6ag+hDgXqW73mFAF283M6+q3/NW0TrHw== + dependencies: + bluebird "^3.7.2" + colorette "1.1.0" + commander "^4.1.0" + debug "4.1.1" + esm "^3.2.25" + getopts "2.2.5" + inherits "~2.0.4" + interpret "^2.0.0" + liftoff "3.1.0" + lodash "^4.17.15" mkdirp "^0.5.1" - pg-connection-string "2.0.0" - tarn "^1.1.4" - tildify "1.2.0" - uuid "^3.3.2" - v8flags "^3.1.1" - -known-css-properties@^0.16.0: - version "0.16.0" - resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.16.0.tgz#3f0597214db11a460df77cd44bcb39e263b9da6c" - integrity sha512-0g5vDDPvNnQk7WM/aE92dTDxXJoOE0biiIcUb3qkn/F6h/ZQZPlZIbE2XSXH2vFPfphkgCxuR2vH6HHnobEOaQ== + pg-connection-string "2.1.0" + tarn "^2.0.0" + tildify "2.0.0" + uuid "^3.3.3" + v8flags "^3.1.3" koa-better-body@^3.1.13: - version "3.1.13" - resolved "https://registry.yarnpkg.com/koa-better-body/-/koa-better-body-3.1.13.tgz#eab742745401eff70b8069b29c284df87be2c1a6" - integrity sha512-744Ay3hXDobRSPJa4DjWBfpxCdZ20Se+uZHvy2mnxZBs0EkEXMMAKyfm1xQh5HdM4T2Icm0PyxC4sWJbErFndg== + version "3.3.9" + resolved "https://registry.yarnpkg.com/koa-better-body/-/koa-better-body-3.3.9.tgz#cd2c0affab07306ba297b50c99a9aa93c21fbfe2" + integrity sha512-9KdhO4GgkhOhiv8m9Qr4FjjcDzzJVIBrVqioU+WiW5jCFfRTS/PPEa+ZV8TUKtIJPPiMhBx+dRTN4agGc1tdEw== dependencies: extend-shallow "^3.0.2" formidable "^1.2.1" - koa-body-parsers tunnckoCore/body-parsers#patch-1 + koa-body-parsers tunnckocore/body-parsers#patch-1 -koa-body-parsers@tunnckoCore/body-parsers#patch-1: +koa-body-parsers@tunnckocore/body-parsers#patch-1: version "3.1.0" - resolved "https://codeload.github.com/tunnckoCore/body-parsers/tar.gz/7788b9cf82d84f90bbd543f8753affb82baf3a96" + resolved "https://codeload.github.com/tunnckocore/body-parsers/tar.gz/7788b9cf82d84f90bbd543f8753affb82baf3a96" dependencies: raw-body "^2.1.0" koa-bodyparser@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/koa-bodyparser/-/koa-bodyparser-4.2.1.tgz#4d7dacb5e6db1106649b595d9e5ccb158b6f3b29" - integrity sha512-UIjPAlMZfNYDDe+4zBaOAUKYqkwAGcIU6r2ARf1UOXPAlfennQys5IiShaVeNf7KkVBlf88f2LeLvBFvKylttw== + version "4.3.0" + resolved "https://registry.yarnpkg.com/koa-bodyparser/-/koa-bodyparser-4.3.0.tgz#274c778555ff48fa221ee7f36a9fbdbace22759a" + integrity sha512-uyV8G29KAGwZc4q/0WUAjH+Tsmuv9ImfBUF2oZVyZtaeo0husInagyn/JH85xMSxM0hEk/mbCII5ubLDuqW/Rw== dependencies: co-body "^6.0.0" copy-to "^2.0.1" @@ -12955,20 +12947,15 @@ koa-compose@^4.1.0: integrity sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw== koa-compress@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/koa-compress/-/koa-compress-3.0.0.tgz#3194059c215cbc24e59bbc84c2c7453a4c88564f" - integrity sha512-xol+LkNB1mozKJkB5Kj6nYXbJXhkLkZlXl9BsGBPjujVfZ8MsIXwU4GHRTT7TlSfUcl2DU3JtC+j6wOWcovfuQ== + version "3.1.0" + resolved "https://registry.yarnpkg.com/koa-compress/-/koa-compress-3.1.0.tgz#00fb0af695dc4661c6de261a18da669626ea3ca1" + integrity sha512-0m24/yS/GbhWI+g9FqtvStY+yJwTObwoxOvPok6itVjRen7PBWkjsJ8pre76m+99YybXLKhOJ62mJ268qyBFMQ== dependencies: bytes "^3.0.0" compressible "^2.0.0" koa-is-json "^1.0.0" statuses "^1.0.0" -koa-connect@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/koa-connect/-/koa-connect-2.0.1.tgz#2acad159c33862de1d73aa4562a48de13f137c0f" - integrity sha512-MNaiK5og8aj4I+tx8l+jSW24QX7aaQyZemV821VPY+AOJ8XUbrrAj9AzrpZKDQp5jTmylAZW2sXhTz2+SRqZog== - koa-convert@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/koa-convert/-/koa-convert-1.2.0.tgz#da40875df49de0539098d1700b50820cebcd21d0" @@ -12982,12 +12969,12 @@ koa-cors@^0.0.16: resolved "https://registry.yarnpkg.com/koa-cors/-/koa-cors-0.0.16.tgz#98107993a7909e34c042986c5ec6156d77f3432e" integrity sha1-mBB5k6eQnjTAQphsXsYVbXfzQy4= -koa-helmet@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/koa-helmet/-/koa-helmet-4.2.1.tgz#6f6598aa1dbde501c5f7e92b80a5358690cc13d8" - integrity sha512-CzN14/hH/su37Pj4rarXZfR/NQZbbnmCU6cS3WLnEQyvZO3Mp6oMayNVAnR08dKZShhCYpIN8cuJwD5g34oQ/w== +koa-helmet@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/koa-helmet/-/koa-helmet-5.2.0.tgz#6529f64dd4539261a9bb0a56e201e4976f0200f0" + integrity sha512-Q4h4CnpcEo3NuIvD1bBOakkfusPiOvJc/NlOI9M+pG3zeNm2OqFLMbIzCPsvGBz++37KMregUBXZvQiNPDD37w== dependencies: - helmet "^3.15.1" + helmet "^3.21.1" koa-is-json@^1.0.0: version "1.0.0" @@ -12995,13 +12982,13 @@ koa-is-json@^1.0.0: integrity sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ= koa-ratelimit-lru@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/koa-ratelimit-lru/-/koa-ratelimit-lru-1.0.2.tgz#1bb1a10aeb57f193050a4132ee2732f8250eb262" - integrity sha1-G7GhCutX8ZMFCkEy7icy+CUOsmI= + version "1.1.0" + resolved "https://registry.yarnpkg.com/koa-ratelimit-lru/-/koa-ratelimit-lru-1.1.0.tgz#36dfea4e36c39f6fa23182a5cdb87a60cf994fa5" + integrity sha512-F39Wkr3E56TY9rqSELYf9fBbpzlGHXS5JpLr3slms6Nkjweh6vNp3gio3eEg4MX7+fi4odw+ehkpBUswwGs49g== dependencies: - debug "^2.2.0" - lru-cache "^4.0.1" - ms "^0.7.2" + debug "^4.1.1" + lru-cache "^5.1.1" + ms "^2.1.2" koa-router@^7.4.0: version "7.4.0" @@ -13033,7 +13020,7 @@ koa-static@^5.0.0: debug "^3.1.0" koa-send "^5.0.0" -koa@^2.11.0: +koa@^2.11.0, koa@^2.7.0: version "2.11.0" resolved "https://registry.yarnpkg.com/koa/-/koa-2.11.0.tgz#fe5a51c46f566d27632dd5dc8fd5d7dd44f935a4" integrity sha512-EpR9dElBTDlaDgyhDMiLkXrPwp6ZqgAIBvhhmxQ9XN4TFgW+gEz6tkcsNI6BnUbUftrKDjVFj4lW2/J2aNBMMA== @@ -13063,37 +13050,6 @@ koa@^2.11.0: type-is "^1.6.16" vary "^1.1.2" -koa@^2.7.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/koa/-/koa-2.10.0.tgz#86a583ff280896dce3a36b0b6dae80f9559240d3" - integrity sha512-vcZopGEWHDokchYtjU6jF1BCy+2MA2hnvGP7xPi26qWoIS0OiAUb4+lCqkqf05qG5ULnGYUFTvFnSK9RyOoiKw== - dependencies: - accepts "^1.3.5" - cache-content-type "^1.0.0" - content-disposition "~0.5.2" - content-type "^1.0.4" - cookies "~0.8.0" - debug "~3.1.0" - delegates "^1.0.0" - depd "^1.1.2" - destroy "^1.0.4" - encodeurl "^1.0.2" - error-inject "^1.0.0" - escape-html "^1.0.3" - fresh "~0.5.2" - http-assert "^1.3.0" - http-errors "^1.6.3" - is-generator-function "^1.0.7" - koa-compose "^4.1.0" - koa-convert "^1.2.0" - koa-is-json "^1.0.0" - on-finished "^2.3.0" - only "~0.0.2" - parseurl "^1.3.2" - statuses "^1.5.0" - type-is "^1.6.16" - vary "^1.1.2" - last-call-webpack-plugin@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" @@ -13110,12 +13066,12 @@ last-run@^1.1.0: default-resolution "^2.0.0" es6-weak-map "^2.0.1" -latest-version@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" - integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= +latest-version@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" + integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== dependencies: - package-json "^4.0.0" + package-json "^6.3.0" lazy-ass@1.6.0: version "1.6.0" @@ -13155,29 +13111,6 @@ left-pad@^1.3.0: resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== -lerna@^3.16.4: - version "3.18.3" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.18.3.tgz#c94556e76f98df9c7ae4ed3bc0166117cc42cd13" - integrity sha512-Bnr/RjyDSVA2Vu+NArK7do4UIpyy+EShOON7tignfAekPbi7cNDnMMGgSmbCQdKITkqPACMfCMdyq0hJlg6n3g== - dependencies: - "@lerna/add" "3.18.0" - "@lerna/bootstrap" "3.18.0" - "@lerna/changed" "3.18.3" - "@lerna/clean" "3.18.0" - "@lerna/cli" "3.18.0" - "@lerna/create" "3.18.0" - "@lerna/diff" "3.18.0" - "@lerna/exec" "3.18.0" - "@lerna/import" "3.18.0" - "@lerna/init" "3.18.0" - "@lerna/link" "3.18.0" - "@lerna/list" "3.18.0" - "@lerna/publish" "3.18.3" - "@lerna/run" "3.18.0" - "@lerna/version" "3.18.3" - import-local "^2.0.0" - npmlog "^4.1.2" - level-codec@9.0.1, level-codec@^9.0.0: version "9.0.1" resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.1.tgz#042f4aa85e56d4328ace368c950811ba802b7247" @@ -13204,34 +13137,34 @@ level-iterator-stream@~4.0.0: readable-stream "^3.4.0" xtend "^4.0.2" -level-js@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/level-js/-/level-js-4.0.1.tgz#3bad57d8bb46ebba7b13bc7442b56f4b45c8a2e0" - integrity sha512-m5JRIyHZn5VnCCFeRegJkn5bQd3MJK5qZX12zg3Oivc8+BUIS2yFS6ANMMeHX2ieGxucNvEn6/ZnyjmZQLLUWw== +level-js@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/level-js/-/level-js-5.0.0.tgz#ad79d40248634a7517f53f3a1bb94a6127f1d46d" + integrity sha512-BIevs/NlfX1DCbuzt8+p2LCumiuDf6IHq5ehktqmcJVRxzfVdc6lXV2FB5cGkTYg4KAr7WfVkeUBAiTgevy19g== dependencies: - abstract-leveldown "~6.0.1" + abstract-leveldown "~6.2.1" immediate "~3.2.3" inherits "^2.0.3" ltgt "^2.1.2" - typedarray-to-buffer "~3.1.5" -level-js@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/level-js/-/level-js-5.0.0.tgz#ad79d40248634a7517f53f3a1bb94a6127f1d46d" - integrity sha512-BIevs/NlfX1DCbuzt8+p2LCumiuDf6IHq5ehktqmcJVRxzfVdc6lXV2FB5cGkTYg4KAr7WfVkeUBAiTgevy19g== +level-js@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/level-js/-/level-js-4.0.2.tgz#fa51527fa38b87c4d111b0d0334de47fcda38f21" + integrity sha512-PeGjZsyMG4O89KHiez1zoMJxStnkM+oBIqgACjoo5PJqFiSUUm3GNod/KcbqN5ktyZa8jkG7I1T0P2u6HN9lIg== dependencies: - abstract-leveldown "~6.2.1" + abstract-leveldown "~6.0.1" immediate "~3.2.3" inherits "^2.0.3" ltgt "^2.1.2" + typedarray-to-buffer "~3.1.5" level-packager@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.0.2.tgz#7cc7cf384c6c1c722b9712f53d257f2fb4180dc9" - integrity sha512-sJWdeW5tObvTvgP4Xf2psL5CEUsZjDjiTtlcimHp3Ifd4qbmkEGquN82C5ZtC7VpWEiISeUIBtIcCskVzEpvFw== + version "5.1.1" + resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939" + integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== dependencies: - encoding-down "^6.0.0" - levelup "^4.0.0" + encoding-down "^6.3.0" + levelup "^4.3.2" level-supports@~1.0.0: version "1.0.1" @@ -13267,19 +13200,10 @@ leveldown@5.0.2: napi-macros "~1.8.1" node-gyp-build "~3.8.0" -leveldown@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-5.1.1.tgz#5d3a043f0ec76e91e189117ec3627bef0436c0dc" - integrity sha512-4n2R/vEA/sssh5TKtFwM9gshW2tirNoURLqekLRUUzuF+eUBLFAufO8UW7bz8lBbG2jw8tQDF3LC+LcUCc12kg== - dependencies: - abstract-leveldown "~6.0.3" - napi-macros "~1.8.1" - node-gyp-build "~4.1.0" - -leveldown@^5.1.1: - version "5.4.0" - resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-5.4.0.tgz#fd6731af2c7fd717c878eb05c87c12036e986e93" - integrity sha512-uKwfJT+jgXL3mdb3UR/bOaO13VX85R7yGaunK+WJNuGWSoxskp3JgYwFCKfPruulx/bVn2xI7XmyNHVQkVC/Ig== +leveldown@^5.0.0, leveldown@^5.1.1: + version "5.6.0" + resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-5.6.0.tgz#16ba937bb2991c6094e13ac5a6898ee66d3eee98" + integrity sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ== dependencies: abstract-leveldown "~6.2.1" napi-macros "~2.0.0" @@ -13295,7 +13219,7 @@ levelup@4.0.2: level-iterator-stream "~4.0.0" xtend "~4.0.0" -levelup@^4.0.0: +levelup@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.1.0.tgz#49ab5d3a341731cd102f91c6bc17a1acb1969a17" integrity sha512-+Qhe2/jb5affN7BeFgWUUWVdYoGXO2nFS3QLEZKZynnQyP9xqA+7wgOz3fD8SST2UKpHQuZgjyJjTcB2nMl2dQ== @@ -13305,10 +13229,10 @@ levelup@^4.0.0: level-iterator-stream "~4.0.0" xtend "~4.0.0" -levelup@^4.1.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.3.2.tgz#31c5b1b29f146d1d35d692e01a6da4d28fa55ebd" - integrity sha512-cRTjU4ktWo59wf13PHEiOayHC3n0dOh4i5+FHr4tv4MX9+l7mqETicNq3Aj07HKlLdk0z5muVoDL2RD+ovgiyA== +levelup@^4.3.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" + integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== dependencies: deferred-leveldown "~5.3.0" level-errors "~2.0.0" @@ -13326,7 +13250,14 @@ leven@^3.1.0: resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== -levn@^0.3.0, levn@~0.3.0: +levenary@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" + integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== + dependencies: + leven "^3.1.0" + +levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= @@ -13341,21 +13272,14 @@ lie@3.1.1: dependencies: immediate "~3.0.5" -liftoff@2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.5.0.tgz#2009291bb31cea861bbf10a7c15a28caf75c31ec" - integrity sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew= +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== dependencies: - extend "^3.0.0" - findup-sync "^2.0.0" - fined "^1.0.1" - flagged-respawn "^1.0.0" - is-plain-object "^2.0.4" - object.map "^1.0.0" - rechoir "^0.6.2" - resolve "^1.1.7" + immediate "~3.0.5" -liftoff@^3.1.0: +liftoff@3.1.0, liftoff@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3" integrity sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog== @@ -13381,10 +13305,10 @@ linkify-it@^2.0.0: dependencies: uc.micro "^1.0.1" -lint-staged@^9.2.5: - version "9.4.2" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-9.4.2.tgz#14cb577a9512f520691f8b5aefce6a8f7ead6c04" - integrity sha512-OFyGokJSWTn2M6vngnlLXjaHhi8n83VIZZ5/1Z26SULRUWgR3ITWpAEQC9Pnm3MC/EpCxlwts/mQWDHNji2+zA== +lint-staged@^9.4.1: + version "9.5.0" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-9.5.0.tgz#290ec605252af646d9b74d73a0fa118362b05a33" + integrity sha512-nawMob9cb/G1J98nb8v3VC/E8rcX1rryUYXVZ69aT9kde6YWX+uvNOEHY5yf2gcWcTJGiD0kqXmCnS3oD75GIA== dependencies: chalk "^2.4.2" commander "^2.20.0" @@ -13522,17 +13446,6 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" -load-json-file@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3" - integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw== - dependencies: - graceful-fs "^4.1.15" - parse-json "^4.0.0" - pify "^4.0.1" - strip-bom "^3.0.0" - type-fest "^0.3.0" - loader-runner@^2.3.1, loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" @@ -13548,19 +13461,28 @@ loader-utils@^0.2.16: json5 "^0.5.0" object-assign "^4.0.1" -loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" - integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== +loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== dependencies: big.js "^5.2.2" - emojis-list "^2.0.0" + emojis-list "^3.0.0" json5 "^1.0.1" -loadjs@^3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/loadjs/-/loadjs-3.6.1.tgz#1e756ccd4f4c5ed4988085b330e1b4ad9b6a8340" - integrity sha512-AZEBw2GWdJk2IzBgQ+Wohoao5j+t0rajqK8dJu8jQqgYxDTxhmCt0ayMo/vCa0ZAMvZxnJcam6uLICfnVd8KAw== +loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +loadjs@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/loadjs/-/loadjs-4.2.0.tgz#2a0336376397a6a43edf98c9ec3229ddd5abb6f6" + integrity sha512-AgQGZisAlTPbTEzrHPb6q+NYBMD+DP9uvGSIjSUM5uG+0jG15cb8axWpxuOIqrmQjn6scaaH8JwloiP27b2KXA== locale2@^2.3.1: version "2.3.1" @@ -13649,11 +13571,6 @@ lodash._root@^3.0.0: resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" integrity sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI= -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - lodash.escape@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" @@ -13661,16 +13578,16 @@ lodash.escape@^3.0.0: dependencies: lodash._root "^3.0.0" +lodash.find@4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.find/-/lodash.find-4.6.0.tgz#cb0704d47ab71789ffa0de8b97dd926fb88b13b1" + integrity sha1-ywcE1Hq3F4n/oN6Ll92Sb7iLE7E= + lodash.flattendeep@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= -lodash.get@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= - lodash.isarguments@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" @@ -13681,11 +13598,6 @@ lodash.isarray@^3.0.0: resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" integrity sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U= -lodash.ismatch@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" - integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= - lodash.keys@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" @@ -13695,31 +13607,41 @@ lodash.keys@^3.0.0: lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" -lodash.map@^4.5.1: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" - integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= +lodash.max@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.max/-/lodash.max-4.0.1.tgz#8735566c618b35a9f760520b487ae79658af136a" + integrity sha1-hzVWbGGLNan3YFILSHrnllivE2o= lodash.memoize@4.x, lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= +lodash.merge@4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + lodash.once@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= +lodash.padstart@4.6.1: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b" + integrity sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs= + +lodash.repeat@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/lodash.repeat/-/lodash.repeat-4.1.0.tgz#fc7de8131d8c8ac07e4b49f74ffe829d1f2bec44" + integrity sha1-/H3oEx2MisB+S0n3T/6CnR8r7EQ= + lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU= -lodash.set@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" - integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= - lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -13740,7 +13662,7 @@ lodash.template@^3.0.0: lodash.restparam "^3.0.0" lodash.templatesettings "^3.0.0" -lodash.template@^4.0.2, lodash.template@^4.4.0, lodash.template@^4.5.0: +lodash.template@^4.4.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== @@ -13768,22 +13690,12 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@4.17.14: - version "4.17.14" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" - integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== - -lodash@4.17.15, lodash@^4.11.2, lodash@^4.16.4, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1: +lodash@4.17.15, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== -log-driver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" - integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== - -log-symbols@2.2.0, log-symbols@^2.2.0: +log-symbols@2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== @@ -13821,25 +13733,10 @@ log-update@^2.3.0: cli-cursor "^2.0.0" wrap-ansi "^3.0.1" -loglevel@^1.6.4: - version "1.6.4" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.4.tgz#f408f4f006db8354d0577dcf6d33485b3cb90d56" - integrity sha512-p0b6mOGKcGa+7nnmKbpzR6qloPbrgLcnio++E+14Vo/XffOGwZtRpUhr8dTH/x2oCMmEoIU0Zwm3ZauhvYD17g== - -long@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/long/-/long-2.4.0.tgz#9fa180bb1d9500cdc29c4156766a1995e1f4524f" - integrity sha1-n6GAux2VAM3CnEFWdmoZleH0Uk8= - -longest-streak@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.3.tgz#3de7a3f47ee18e9074ded8575b5c091f5d0a4105" - integrity sha512-9lz5IVdpwsKLMzQi0MQ+oD9EA0mIGcWYP7jXMTZVXP8D42PwuAk+M/HBFYQoxt1G5OR8m7aSIgb1UymfWGBWEw== - -longest@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-2.0.1.tgz#781e183296aa94f6d4d916dc335d0d17aefa23f8" - integrity sha1-eB4YMpaqlPbU2RbcM10NF676I/g= +loglevel@^1.6.6: + version "1.6.8" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171" + integrity sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA== loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" @@ -13848,14 +13745,6 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3 dependencies: js-tokens "^3.0.0 || ^4.0.0" -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - lower-case-first@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/lower-case-first/-/lower-case-first-1.0.2.tgz#e5da7c26f29a7073be02d52bac9980e5922adfa1" @@ -13873,11 +13762,16 @@ lowercase-keys@1.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" integrity sha1-TjNms55/VFfjXxMkvfb4jQv8cwY= -lowercase-keys@^1.0.0: +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + lru-cache@^4.0.1, lru-cache@^4.1.1: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -13905,10 +13799,15 @@ ltgt@2.2.1, ltgt@^2.1.2, ltgt@~2.2.0: resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" integrity sha1-81ypHEk/e3PaDgdJUwTxezH4fuU= -macos-release@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.3.0.tgz#eb1930b036c0800adebccd5f17bc4c12de8bb71f" - integrity sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA== +lz4@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/lz4/-/lz4-0.6.3.tgz#78df6bb69a36d7db6c2e849494876ba6e38e66d6" + integrity sha512-NEs7p58fnU69P6mGl1slL5I+FVhYIUXXfZRXNBIFvmTkEsHh+TMpO1BPcQREwFpThHNC5wa61d7vQdZ0zz9aUg== + dependencies: + buffer "^5.2.1" + cuint "^0.2.2" + nan "^2.13.2" + xxhashjs "^0.2.2" make-dir@^1.0.0, make-dir@^1.2.0: version "1.3.0" @@ -13925,34 +13824,17 @@ make-dir@^2.0.0, make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" -make-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.0.tgz#1b5f39f6b9270ed33f9f054c5c0f84304989f801" - integrity sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw== +make-dir@^3.0.0, make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" make-error@1.x, make-error@^1.1.1: - version "1.3.5" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" - integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== - -make-fetch-happen@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.0.tgz#a8e3fe41d3415dd656fe7b8e8172e1fb4458b38d" - integrity sha512-nFr/vpL1Jc60etMVKeaLOqfGjMMb3tAHFVJWxHOFCFS04Zmd7kGlMxo0l1tzfhoQje0/UPnd0X8OeGUiXXnfPA== - dependencies: - agentkeepalive "^3.4.1" - cacache "^12.0.0" - http-cache-semantics "^3.8.1" - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.1" - lru-cache "^5.1.1" - mississippi "^3.0.0" - node-fetch-npm "^2.0.2" - promise-retry "^1.1.1" - socks-proxy-agent "^4.0.0" - ssri "^6.0.0" + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== make-iterator@^1.0.0: version "1.0.1" @@ -13968,11 +13850,6 @@ makeerror@1.0.x: dependencies: tmpl "1.0.x" -mamacro@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" - integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA== - map-age-cleaner@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" @@ -13985,16 +13862,6 @@ map-cache@^0.2.0, map-cache@^0.2.2: resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - -map-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" - integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= - map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -14002,15 +13869,10 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -markdown-escapes@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.3.tgz#6155e10416efaafab665d466ce598216375195f5" - integrity sha512-XUi5HJhhV5R74k8/0H2oCbCiYf/u4cO/rX8tnGkRvrqhsr5BRNU6Mg0yt/8UIx1iIS8220BNJsDb7XnILhLepw== - markdown-it-anchor@^5.2.4: - version "5.2.5" - resolved "https://registry.yarnpkg.com/markdown-it-anchor/-/markdown-it-anchor-5.2.5.tgz#dbf13cfcdbffd16a510984f1263e1d479a47d27a" - integrity sha512-xLIjLQmtym3QpoY9llBgApknl7pxAcN3WDRc2d3rwpl+/YvDZHPmKscGs+L6E05xf2KrCXPBvosWt7MZukwSpQ== + version "5.2.7" + resolved "https://registry.yarnpkg.com/markdown-it-anchor/-/markdown-it-anchor-5.2.7.tgz#ec740f6bd03258a582cd0c65b9644b9f9852e5a3" + integrity sha512-REFmIaSS6szaD1bye80DMbp7ePwsPNvLTR5HunsUcZ0SG0rWJQ+Pz24R4UlTKtjKBPhxo0v0tOBDYjZQQknW8Q== markdown-it-container@^2.0.0: version "2.0.0" @@ -14039,11 +13901,6 @@ markdown-it@^8.4.2: mdurl "^1.0.1" uc.micro "^1.0.5" -markdown-table@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" - integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== - marked@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/marked/-/marked-0.7.0.tgz#b64201f051d271b1edc10a04d1ae9b74bb8e5c0e" @@ -14071,11 +13928,6 @@ math-random@^1.0.1: resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== -mathml-tag-names@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.1.tgz#6dff66c99d55ecf739ca53c492e626f1d12a33cc" - integrity sha512-pWB896KPGSGkp1XtyzRBftpTzwSOL0Gfk0wLvxt4f2mgzjY19o0LxJ3U25vNWTzsh7da+KTbuXQoQ3lOJZ8WHw== - md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -14085,31 +13937,15 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" -md5@^2.1.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9" - integrity sha1-U6s41f48iJG6RlMp6iP6wFQBJvk= - dependencies: - charenc "~0.0.1" - crypt "~0.0.1" - is-buffer "~1.1.1" - -mdast-util-compact@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.3.tgz#98a25cc8a7865761a41477b3a87d1dcef0b1e79d" - integrity sha512-nRiU5GpNy62rZppDKbLwhhtw5DXoFMqw9UNZFmlPsNaQCZ//WLjGKUwWMdJrUH+Se7UvtO2gXtAMe0g/N+eI5w== - dependencies: - unist-util-visit "^1.1.0" - mdn-data@2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== -mdn-data@~1.1.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01" - integrity sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA== +mdn-data@2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.6.tgz#852dc60fcaa5daa2e8cf6c9189c440ed3e042978" + integrity sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA== mdurl@^1.0.1: version "1.0.1" @@ -14189,56 +14025,10 @@ memory-fs@^0.5.0: errno "^0.1.3" readable-stream "^2.0.1" -meow@^3.3.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - -meow@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975" - integrity sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A== - dependencies: - camelcase-keys "^4.0.0" - decamelize-keys "^1.0.0" - loud-rejection "^1.0.0" - minimist "^1.1.3" - minimist-options "^3.0.1" - normalize-package-data "^2.3.4" - read-pkg-up "^3.0.0" - redent "^2.0.0" - trim-newlines "^2.0.0" - -meow@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" - integrity sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig== - dependencies: - camelcase-keys "^4.0.0" - decamelize-keys "^1.0.0" - loud-rejection "^1.0.0" - minimist-options "^3.0.1" - normalize-package-data "^2.3.4" - read-pkg-up "^3.0.0" - redent "^2.0.0" - trim-newlines "^2.0.0" - yargs-parser "^10.0.0" - merge-anything@^2.2.4: - version "2.4.1" - resolved "https://registry.yarnpkg.com/merge-anything/-/merge-anything-2.4.1.tgz#e9bccaec1e49ec6cb5f77ca78c5770d1a35315e6" - integrity sha512-dYOIAl9GFCJNctSIHWOj9OJtarCjsD16P8ObCl6oxrujAG+kOvlwJuOD9/O9iYZ9aTi1RGpGTG9q9etIvuUikQ== + version "2.4.4" + resolved "https://registry.yarnpkg.com/merge-anything/-/merge-anything-2.4.4.tgz#6226b2ac3d3d3fc5fb9e8d23aa400df25f98fdf0" + integrity sha512-l5XlriUDJKQT12bH+rVhAHjwIuXWdAIecGwsYjv2LJo+dA1AeRTmeQS+3QBpO6lEthBMDi2IUMpLC1yyRvGlwQ== dependencies: is-what "^3.3.1" @@ -14264,11 +14054,6 @@ merge2@^1.2.3, merge2@^1.3.0: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw== -merge@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" - integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== - methods@^1.0.1, methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -14328,15 +14113,10 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.40.0: - version "1.40.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" - integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== - -"mime-db@>= 1.40.0 < 2", mime-db@^1.28.0: - version "1.42.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.42.0.tgz#3e252907b4c7adb906597b4b65636272cf9e7bac" - integrity sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ== +mime-db@1.44.0, "mime-db@>= 1.43.0 < 2", mime-db@^1.28.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== mime-db@~1.33.0: version "1.33.0" @@ -14350,22 +14130,22 @@ mime-types@2.1.18: dependencies: mime-db "~1.33.0" -mime-types@^2.1.12, mime-types@^2.1.18, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.24" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" - integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== +mime-types@^2.0.8, mime-types@^2.1.12, mime-types@^2.1.18, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== dependencies: - mime-db "1.40.0" + mime-db "1.44.0" mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.4.4: - version "2.4.4" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" - integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== +mime@^2.2.0, mime@^2.4.4: + version "2.4.5" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.5.tgz#d8de2ecb92982dedbb6541c9b6841d7f218ea009" + integrity sha512-3hQhEUF027BuxZjQA3s7rIv/7VCQPa27hN9u9g87sEkWaKwQPuXOkVKtOeiyUrnWqTDiOs8Ed2rwg733mB0R5w== mimic-fn@^1.0.0: version "1.2.0" @@ -14377,15 +14157,15 @@ mimic-fn@^2.0.0, mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-response@^1.0.0: +mimic-response@^1.0.0, mimic-response@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== mimic-response@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.0.0.tgz#996a51c60adf12cb8a87d7fb8ef24c2f3d5ebb46" - integrity sha512-8ilDoEapqA4uQ3TwS0jakGONKXVJqpy+RpM+3b7pLdOjghCrEiGp9SRkFbUHAmZW9vdnrENWHjaweIoTIJExSQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" + integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== min-document@^2.19.0: version "2.19.0" @@ -14395,9 +14175,9 @@ min-document@^2.19.0: dom-walk "^0.1.0" mini-html-webpack-plugin@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mini-html-webpack-plugin/-/mini-html-webpack-plugin-2.0.0.tgz#7105052a1d37a8d7c29530a06084dac9f7f77f4d" - integrity sha512-jHnbGBM3fwbAJVM1zr4xBghHFEyDKr3GLE/ThD+orjOqfkrW4Hx5KepraZe+iK4prgxAr+/0iSJAZS4Nz+fOgw== + version "2.2.1" + resolved "https://registry.yarnpkg.com/mini-html-webpack-plugin/-/mini-html-webpack-plugin-2.2.1.tgz#49bedc63fedde1cdedd9b604bd9f729fb267ae7f" + integrity sha512-0OS1FieM/c2w7INXjWA1kHCJP4NzJBFN0hOWK3Bz2/j4UOKBQYj4jQiFzfOxf+DnpUNi5I3xGEz86ho3YANdZg== dependencies: webpack-sources "^1.3.0" @@ -14411,37 +14191,29 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.4: +minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" -minimist-options@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" - integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= -minimist@1.1.x: - version "1.1.3" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8" - integrity sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag= - -minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: +minimist@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= -minimist@~0.0.1, minimist@~0.0.8: +minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5, minimist@~1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= @@ -14467,7 +14239,7 @@ minipass-pipeline@^1.2.2: dependencies: minipass "^3.0.0" -minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: +minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== @@ -14475,10 +14247,10 @@ minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: safe-buffer "^5.1.2" yallist "^3.0.0" -minipass@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.0.1.tgz#b4fec73bd61e8a40f0b374ddd04260ade2c8ec20" - integrity sha512-2y5okJ4uBsjoD2vAbLKL9EUQPPkC0YMIp+2mZOXG3nBba++pdfJWRxx2Ewirc0pwAJYu4XtWg2EkVo1nRXuO/w== +minipass@^3.0.0, minipass@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.1.tgz#7607ce778472a185ad6d89082aa2070f79cedcd5" + integrity sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w== dependencies: yallist "^4.0.0" @@ -14521,90 +14293,42 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp-promise@^5.0.0, mkdirp-promise@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" - integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE= - dependencies: - mkdirp "*" +mkdirp-classic@^0.5.2: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -mkdirp@*, mkdirp@0.5.1, mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: +mkdirp@0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= dependencies: minimist "0.0.8" -mocha-junit-reporter@^1.23.1: - version "1.23.1" - resolved "https://registry.yarnpkg.com/mocha-junit-reporter/-/mocha-junit-reporter-1.23.1.tgz#ba11519c0b967f404e4123dd69bc4ba022ab0f12" - integrity sha512-qeDvKlZyAH2YJE1vhryvjUQ06t2hcnwwu4k5Ddwn0GQINhgEYFhlGM0DwYCVUHq5cuo32qAW6HDsTHt7zz99Ng== - dependencies: - debug "^2.2.0" - md5 "^2.1.0" - mkdirp "~0.5.1" - strip-ansi "^4.0.0" - xml "^1.0.0" - -mocha-multi-reporters@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/mocha-multi-reporters/-/mocha-multi-reporters-1.1.7.tgz#cc7f3f4d32f478520941d852abb64d9988587d82" - integrity sha1-zH8/TTL0eFIJQdhSq7ZNmYhYfYI= +mkdirp@0.5.5, mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@~0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: - debug "^3.1.0" - lodash "^4.16.4" + minimist "^1.2.5" -mocha@^6.2.0: - version "6.2.2" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-6.2.2.tgz#5d8987e28940caf8957a7d7664b910dc5b2fea20" - integrity sha512-FgDS9Re79yU1xz5d+C4rv1G7QagNGHZ+iXF81hO8zY35YZZcLEsJVfFolfsqKFWunATEvNzMK0r/CwWd/szO9A== - dependencies: - ansi-colors "3.2.3" - browser-stdout "1.3.1" - debug "3.2.6" - diff "3.5.0" - escape-string-regexp "1.0.5" - find-up "3.0.0" - glob "7.1.3" - growl "1.10.5" - he "1.2.0" - js-yaml "3.13.1" - log-symbols "2.2.0" - minimatch "3.0.4" - mkdirp "0.5.1" - ms "2.1.1" - node-environment-flags "1.0.5" - object.assign "4.1.0" - strip-json-comments "2.0.1" - supports-color "6.0.0" - which "1.3.1" - wide-align "1.1.3" - yargs "13.3.0" - yargs-parser "13.1.1" - yargs-unparser "1.6.0" +mkdirp@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== modernizr@^3.7.1: - version "3.7.1" - resolved "https://registry.yarnpkg.com/modernizr/-/modernizr-3.7.1.tgz#c35048554879e5d60213b7771a9f593e178f8a3b" - integrity sha512-pewTfEGiY5pHRnJNKFALn/nkYpWmEOtZ+iRMzQUjexkOum3X4v+xAZ9AqgXdjnDBh37HNCDP6ieq68NGPYvkTA== + version "3.11.0" + resolved "https://registry.yarnpkg.com/modernizr/-/modernizr-3.11.0.tgz#2cc645b7f86e6f77419f599a8ad1755d6f70af1e" + integrity sha512-OyuUo36z5zwpKJ3TdO0pAWIvgLF4AJEA1WCHimZEoG8ljTJCfi/55omaTd9QJxftaBnjcKGi2bDahg8gBhMRFg== dependencies: doctrine "^3.0.0" file "^0.2.2" - lodash "^4.17.11" - markdown-it "^8.4.2" - mkdirp "^0.5.1" + lodash "^4.17.15" + markdown-it "^10.0.0" + mkdirp "0.5.5" requirejs "^2.3.6" - yargs "^13.2.1" - -modify-values@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" - integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== - -module-details-from-path@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/module-details-from-path/-/module-details-from-path-1.0.3.tgz#114c949673e2a8a35e9d35788527aa37b679da2b" - integrity sha1-EUyUlnPiqKNenTV4hSeqN7Z52is= + yargs "^15.3.1" moment@2.24.0: version "2.24.0" @@ -14650,12 +14374,7 @@ ms@2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== -ms@^0.7.2: - version "0.7.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.3.tgz#708155a5e44e33f5fd0fc53e81d0d40a91be1fff" - integrity sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8= - -ms@^2.0.0, ms@^2.1.1: +ms@^2.1.1, ms@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== @@ -14673,16 +14392,6 @@ multicast-dns@^6.0.1: dns-packet "^1.3.1" thunky "^1.0.2" -multimatch@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-3.0.0.tgz#0e2534cc6bc238d9ab67e1b9cd5fcd85a6dbf70b" - integrity sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA== - dependencies: - array-differ "^2.0.3" - array-union "^1.0.2" - arrify "^1.0.1" - minimatch "^3.0.4" - multimatch@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3" @@ -14724,12 +14433,7 @@ mute-stream@0.0.7: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= -mute-stream@~0.0.4: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -mz@^2.5.0, mz@^2.7.0: +mz@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== @@ -14743,15 +14447,15 @@ nan@2.13.2: resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7" integrity sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw== -nan@^2.12.1, nan@^2.13.2: - version "2.14.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" - integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== +nan@^2.12.1, nan@^2.13.2, nan@^2.14.0: + version "2.14.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" + integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== nanoid@^2.0.3: - version "2.1.4" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.4.tgz#c38b2c1f7f4c60cde2291f40854420328d0d621e" - integrity sha512-PijW88Ry+swMFfArOrm7uRAdVmJilLbej7WwVY6L5QwLDckqxSOinGGMV596yp5C8+MH3VvCXCSZ6AodGtKrYQ== + version "2.1.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280" + integrity sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA== nanomatch@^1.2.9: version "1.2.13" @@ -14771,9 +14475,9 @@ nanomatch@^1.2.9: to-regex "^3.0.1" napi-build-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.1.tgz#1381a0f92c39d66bf19852e7873432fc2123e508" - integrity sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA== + version "1.0.2" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== napi-macros@~1.8.1: version "1.8.2" @@ -14791,9 +14495,9 @@ natural-compare@^1.4.0: integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= needle@^2.2.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" - integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== + version "2.4.1" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.1.tgz#14af48732463d7475696f937626b1b993247a56a" + integrity sha512-x/gi6ijr4B7fwl6WYL9FwlCvRQKGlUNvnceho8wxkwXqN8jvVmmmATTmZPRRG7b/yC1eode26C2HO9jl78Du9g== dependencies: debug "^3.2.6" iconv-lite "^0.4.4" @@ -14814,7 +14518,12 @@ nested-error-stacks@^2.0.0: resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz#0fbdcf3e13fe4994781280524f8b96b0cdff9c61" integrity sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug== -next-tick@1, next-tick@^1.0.0: +next-tick@1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== + +next-tick@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= @@ -14837,35 +14546,23 @@ nocache@2.1.0: integrity sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q== node-abi@^2.7.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.12.0.tgz#40e9cfabdda1837863fa825e7dfa0b15686adf6f" - integrity sha512-VhPBXCIcvmo/5K8HPmnWJyyhvgKxnHTUMXR/XwGHV68+wrgkzST4UmQrY/XszSWA5dtnXpNp528zkcyJ/pzVcw== + version "2.16.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.16.0.tgz#7df94e9c0a7a189f4197ab84bac8089ef5894992" + integrity sha512-+sa0XNlWDA6T+bDLmkCUYn6W5k5W6BPRL6mqzSCs6H/xUgtl4D5x2fORKDzopKiU6wsyn/+wXlRXwXeSp+mtoA== dependencies: semver "^5.4.1" -node-environment-flags@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.5.tgz#fa930275f5bf5dae188d6192b24b4c8bbac3d76a" - integrity sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ== - dependencies: - object.getownpropertydescriptors "^2.0.3" - semver "^5.7.0" - -node-fetch-npm@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7" - integrity sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw== - dependencies: - encoding "^0.1.11" - json-parse-better-errors "^1.0.0" - safe-buffer "^5.1.1" +node-addon-api@^1.7.1: + version "1.7.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-1.7.2.tgz#3df30b95720b53c24e59948b49532b662444f54d" + integrity sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg== node-fetch@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.4.1.tgz#b2e38f1117b8acbedbe0524f041fb3177188255d" integrity sha512-P9UbpFK87NyqBZzUuDBDz4f6Yiys8xm8j7ACDbi6usvFm6KItklQUKjeoqTrYS/S1k6I8oaOC2YLLDr/gg26Mw== -node-fetch@2.6.0, node-fetch@^2.2.0, node-fetch@^2.3.0, node-fetch@^2.5.0: +node-fetch@2.6.0, node-fetch@^2.2.0, node-fetch@^2.3.0: version "2.6.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== @@ -14883,6 +14580,11 @@ node-forge@0.9.0: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== +node-forge@^0.9.0: + version "0.9.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.1.tgz#775368e6846558ab6676858a4d8c6e8d16c677b5" + integrity sha512-G6RlQt5Sb4GMBzXvhfkeFmbqR6MzhtnT7VTHuLadjkii3rdYHNdw0m8zA4BTxVIh68FicCQ2NSUANpsqkr9jvQ== + node-gyp-build@~3.8.0: version "3.8.0" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-3.8.0.tgz#0f57efeb1971f404dfcbfab975c284de7c70f14a" @@ -14893,23 +14595,6 @@ node-gyp-build@~4.1.0: resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.1.1.tgz#d7270b5d86717068d114cc57fff352f96d745feb" integrity sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ== -node-gyp@^5.0.2: - version "5.0.5" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.0.5.tgz#f6cf1da246eb8c42b097d7cd4d6c3ce23a4163af" - integrity sha512-WABl9s4/mqQdZneZHVWVG4TVr6QQJZUC6PAx47ITSk9lreZ1n+7Z9mMAIbA3vnO4J9W20P7LhCxtzfWsAD/KDw== - dependencies: - env-paths "^1.0.0" - glob "^7.0.3" - graceful-fs "^4.1.2" - mkdirp "^0.5.0" - nopt "2 || 3" - npmlog "0 || 1 || 2 || 3 || 4" - request "^2.87.0" - rimraf "2" - semver "~5.3.0" - tar "^4.4.12" - which "1" - node-hid@^0.7.9: version "0.7.9" resolved "https://registry.yarnpkg.com/node-hid/-/node-hid-0.7.9.tgz#cc0cdf1418a286a7667f0b63642b5eeb544ccd05" @@ -14985,35 +14670,17 @@ node-pre-gyp@^0.11.0: semver "^5.3.0" tar "^4" -node-pre-gyp@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" - integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - -node-releases@^1.1.25, node-releases@^1.1.36: - version "1.1.38" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.38.tgz#d81b365df2936654ba37f509ba2fbe91eff2578b" - integrity sha512-/5NZAaOyTj134Oy5Cp/J8mso8OD/D9CSuL+6TOXXsTKO8yjc5e4up75SRPCganCjwFKMj2jbp5tR0dViVdox7g== - dependencies: - semver "^6.3.0" +node-releases@^1.1.53: + version "1.1.53" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.53.tgz#2d821bfa499ed7c5dffc5e2f28c88e78a08ee3f4" + integrity sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ== -nodemon@^1.19.1: - version "1.19.4" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.19.4.tgz#56db5c607408e0fdf8920d2b444819af1aae0971" - integrity sha512-VGPaqQBNk193lrJFotBU8nvWZPqEZY2eIzymy2jjY0fJ9qIsxA0sxQ8ATPl0gZC645gijYEc1jtZvpS8QWzJGQ== +nodemon@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.3.tgz#e9c64df8740ceaef1cb00e1f3da57c0a93ef3714" + integrity sha512-lLQLPS90Lqwc99IHe0U94rDgvjo+G9I4uEIxRG3evSLROcqQ9hwc0AxlSHKS4T1JW/IMj/7N5mthiN58NL/5kw== dependencies: - chokidar "^2.1.8" + chokidar "^3.2.2" debug "^3.2.6" ignore-by-default "^1.0.1" minimatch "^3.0.4" @@ -15022,24 +14689,17 @@ nodemon@^1.19.1: supports-color "^5.5.0" touch "^3.1.0" undefsafe "^2.0.2" - update-notifier "^2.5.0" + update-notifier "^4.0.0" noop-logger@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI= -"nopt@2 || 3": - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= - dependencies: - abbrev "1" - nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= + version "4.0.3" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" + integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== dependencies: abbrev "1" osenv "^0.1.4" @@ -15051,7 +14711,7 @@ nopt@~1.0.10: dependencies: abbrev "1" -normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: +normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -15083,11 +14743,6 @@ normalize-scroll-left@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-scroll-left/-/normalize-scroll-left-0.1.2.tgz#6b79691ba79eb5fb107fa5edfbdc06b55caee2aa" integrity sha512-F9YMRls0zCF6BFIE2YnXDRpHPpfd91nOIaNdDgrx5YMoPLo8Wqj+6jNXHQsYBavJeXP4ww8HCt0xQAKc5qk2Fg== -normalize-selector@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03" - integrity sha1-0LFF62kRicY6eNIB3E/bEpPvDAM= - normalize-url@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" @@ -15107,11 +14762,16 @@ normalize-url@2.0.1: query-string "^5.0.1" sort-keys "^2.0.0" -normalize-url@^3.0.0, normalize-url@^3.3.0: +normalize-url@^3.0.0: version "3.3.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== +normalize-url@^4.1.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" + integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== + now-and-later@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.1.tgz#8e579c8685764a7cc02cb680380e94f43ccb1f7c" @@ -15120,9 +14780,11 @@ now-and-later@^2.0.0: once "^1.3.2" npm-bundled@^1.0.1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" - integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== + version "1.1.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== + dependencies: + npm-normalize-package-bin "^1.0.1" npm-conf@^1.1.0: version "1.1.3" @@ -15132,46 +14794,29 @@ npm-conf@^1.1.0: config-chain "^1.1.11" pify "^3.0.0" -npm-lifecycle@^3.1.2: - version "3.1.4" - resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.4.tgz#de6975c7d8df65f5150db110b57cce498b0b604c" - integrity sha512-tgs1PaucZwkxECGKhC/stbEgFyc3TGh2TJcg2CDr6jbvQRdteHNhmMeljRzpe4wgFAXQADoy1cSqqi7mtiAa5A== - dependencies: - byline "^5.0.0" - graceful-fs "^4.1.15" - node-gyp "^5.0.2" - resolve-from "^4.0.0" - slide "^1.1.6" - uid-number "0.0.6" - umask "^1.1.0" - which "^1.3.1" +npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== -"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" - integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg== +npm-package-arg@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-7.0.0.tgz#52cdf08b491c0c59df687c4c925a89102ef794a5" + integrity sha512-xXxr8y5U0kl8dVkz2oK7yZjPBvqM2fwaO5l3Yg13p03v8+E3qQcD0JNhHzjL1vyGgxcKkD0cco+NLR72iuPk3g== dependencies: - hosted-git-info "^2.7.1" + hosted-git-info "^3.0.2" osenv "^0.1.5" semver "^5.6.0" validate-npm-package-name "^3.0.0" -npm-packlist@^1.1.6, npm-packlist@^1.4.4: - version "1.4.6" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.6.tgz#53ba3ed11f8523079f1457376dd379ee4ea42ff4" - integrity sha512-u65uQdb+qwtGvEJh/DgQgW1Xg7sqeNbmxYyrvlNznaVTjV3E5P6F/EFjM+BVHXl7JJlsdG8A64M0XI8FI/IOlg== +npm-packlist@^1.1.6: + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== dependencies: ignore-walk "^3.0.1" npm-bundled "^1.0.1" - -npm-pick-manifest@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" - integrity sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw== - dependencies: - figgy-pudding "^3.5.1" - npm-package-arg "^6.0.0" - semver "^5.4.1" + npm-normalize-package-bin "^1.0.1" npm-run-path@^2.0.0: version "2.0.2" @@ -15188,13 +14833,13 @@ npm-run-path@^3.0.0: path-key "^3.0.0" npm-run-path@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.0.tgz#d644ec1bd0569187d2a52909971023a0a58e8438" - integrity sha512-8eyAOAH+bYXFPSnNnKr3J+yoybe8O87Is5rtAQ8qRczJz1ajcsjg8l2oZqP+Ppx15Ii3S1vUTjQN2h4YO2tWWQ== + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.1, npmlog@^4.0.2, npmlog@^4.1.2: +npmlog@^4.0.1, npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -15222,20 +14867,20 @@ number-is-nan@^1.0.0: integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= nunjucks@^3.1.6: - version "3.2.0" - resolved "https://registry.yarnpkg.com/nunjucks/-/nunjucks-3.2.0.tgz#53e95f43c9555e822e8950008a201b1002d49933" - integrity sha512-YS/qEQ6N7qCnUdm6EoYRBfJUdWNT0PpKbbRnogV2XyXbBm2STIP1O6yrdZHgwMVK7fIYUx7i8+yatEixnXSB1w== + version "3.2.1" + resolved "https://registry.yarnpkg.com/nunjucks/-/nunjucks-3.2.1.tgz#f229539281e92c6ad25d8c578c9bdb41655caf83" + integrity sha512-LYlVuC1ZNSalQQkLNNPvcgPt2M9FTY9bs39mTCuFXtqh7jWbYzhDlmz2M6onPiXEhdZo+b9anRhc+uBGuJZ2bQ== dependencies: a-sync-waterfall "^1.0.0" asap "^2.0.3" - yargs "^3.32.0" + commander "^3.0.2" optionalDependencies: - chokidar "^2.0.0" + chokidar "^3.3.0" nwsapi@^2.0.7: - version "2.1.4" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.4.tgz#e006a878db23636f8e8a67d33ca0e4edf61a842f" - integrity sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw== + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== nyc@^14.1.1: version "14.1.1" @@ -15297,15 +14942,18 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" - integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== +object-inspect@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== object-is@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" - integrity sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY= + version "1.1.2" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6" + integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" @@ -15324,7 +14972,7 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@4.1.0, object.assign@^4.0.4, object.assign@^4.1.0: +object.assign@^4.0.4, object.assign@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== @@ -15344,13 +14992,13 @@ object.defaults@^1.0.0, object.defaults@^1.1.0: for-own "^1.0.0" isobject "^3.0.0" -object.getownpropertydescriptors@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" - integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= +object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.1" + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" object.map@^1.0.0: version "1.0.1" @@ -15384,12 +15032,12 @@ object.reduce@^1.0.0: make-iterator "^1.0.0" object.values@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" - integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg== + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" + integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== dependencies: define-properties "^1.1.3" - es-abstract "^1.12.0" + es-abstract "^1.17.0-next.1" function-bind "^1.1.1" has "^1.0.3" @@ -15412,11 +15060,6 @@ obuf@^1.0.0, obuf@^1.1.2: resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== -octokit-pagination-methods@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" - integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ== - on-finished@^2.3.0, on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -15456,11 +15099,12 @@ onetime@^5.1.0: mimic-fn "^2.1.0" onigasm@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/onigasm/-/onigasm-2.2.2.tgz#0f853152278bf0da5b3d5be728d5218e472d03ca" - integrity sha512-TQTMk+RmPYx4sGzNAgV0q7At7PABDNHVqZBlC4aRXHg8hpCdemLOF0qq0gUCjwUbc7mhJMBOo3XpTRYwyr45Gw== + version "2.2.4" + resolved "https://registry.yarnpkg.com/onigasm/-/onigasm-2.2.4.tgz#b0ad97e3d7c3080476a1e5daae4b4579a976cbba" + integrity sha512-BJKxCTsK0mrLh+A6AuNzknxaULZRKM5uywA2goluMLLCjfMm/PTUa0M7oSH1Ltb6CT1oKXn2atHR75Y3JQ0SSg== dependencies: - lru-cache "^4.1.1" + lru-cache "^5.1.1" + tslint "^5.20.1" only@~0.0.2: version "0.0.2" @@ -15477,11 +15121,6 @@ opener@^1.5.1: resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed" integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA== -opentracing@^0.13.0: - version "0.13.0" - resolved "https://registry.yarnpkg.com/opentracing/-/opentracing-0.13.0.tgz#6a341442f09d7d866bc11ed03de1e3828e3d6aab" - integrity sha1-ajQUQvCdfYZrwR7QPeHjgo49aqs= - opn@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" @@ -15496,7 +15135,7 @@ optimism@^0.10.0: dependencies: "@wry/context" "^0.4.0" -optimist@^0.6.1, optimist@~0.6.1: +optimist@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= @@ -15512,17 +15151,17 @@ optimize-css-assets-webpack-plugin@^5.0.3: cssnano "^4.1.10" last-call-webpack-plugin "^3.0.0" -optionator@^0.8.1, optionator@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== dependencies: deep-is "~0.1.3" - fast-levenshtein "~2.0.4" + fast-levenshtein "~2.0.6" levn "~0.3.0" prelude-ls "~1.1.2" type-check "~0.3.2" - wordwrap "~1.0.0" + word-wrap "~1.2.3" ora@^0.2.3: version "0.2.3" @@ -15583,14 +15222,6 @@ os-locale@^3.0.0: lcid "^2.0.0" mem "^4.0.0" -os-name@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" - integrity sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg== - dependencies: - macos-release "^2.2.0" - windows-release "^3.1.0" - os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -15604,20 +15235,16 @@ osenv@^0.1.4, osenv@^0.1.5: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -output-file-sync@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-2.0.1.tgz#f53118282f5f553c2799541792b723a4c71430c0" - integrity sha512-mDho4qm7WgIXIGf4eYU1RHN2UU5tPfVYVSRwDJw0uTmj35DQUt/eNp19N7v6T3SrR0ESTEf2up2CGO73qI35zQ== - dependencies: - graceful-fs "^4.1.11" - is-plain-obj "^1.1.0" - mkdirp "^0.5.1" - p-cancelable@^0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -15664,10 +15291,10 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" - integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== +p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" @@ -15692,19 +15319,12 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" -p-map-series@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca" - integrity sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco= - dependencies: - p-reduce "^1.0.0" - p-map@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== -p-map@^2.0.0, p-map@^2.1.0: +p-map@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== @@ -15716,18 +15336,6 @@ p-map@^3.0.0: dependencies: aggregate-error "^3.0.0" -p-pipe@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9" - integrity sha1-SxoROZoRUgpneQ7loMHViB1r7+k= - -p-queue@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-4.0.0.tgz#ed0eee8798927ed6f2c2f5f5b77fdb2061a5d346" - integrity sha512-3cRXXn3/O0o3+eVmUroJPSj/esxoEFIm0ZOno/T+NzG/VZgPOqQ8WKmlNqubSEpZmCIngEy34unkHGg83ZIBmg== - dependencies: - eventemitter3 "^3.1.0" - p-reduce@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" @@ -15757,13 +15365,6 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -p-waterfall@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-1.0.0.tgz#7ed94b3ceb3332782353af6aae11aa9fc235bb00" - integrity sha1-ftlLPOszMngjU69qrhGqn8I1uwA= - dependencies: - p-reduce "^1.0.0" - package-hash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-3.0.0.tgz#50183f2d36c9e3e528ea0a8605dff57ce976f88e" @@ -15774,15 +15375,15 @@ package-hash@^3.0.0: lodash.flattendeep "^4.4.0" release-zalgo "^1.0.0" -package-json@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" - integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= +package-json@^6.3.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== dependencies: - got "^6.7.1" - registry-auth-token "^3.0.1" - registry-url "^3.0.3" - semver "^5.1.0" + got "^9.6.0" + registry-auth-token "^4.0.0" + registry-url "^5.0.0" + semver "^6.2.0" packet-reader@1.0.0: version "1.0.0" @@ -15794,10 +15395,10 @@ pako@~0.2.0: resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" integrity sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU= -pako@~1.0.5: - version "1.0.10" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" - integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== +pako@~1.0.2, pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== parallel-transform@^1.1.0: version "1.2.0" @@ -15834,18 +15435,6 @@ parse-asn1@^5.0.0: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" -parse-entities@^1.0.2, parse-entities@^1.1.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" - integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg== - dependencies: - character-entities "^1.0.0" - character-entities-legacy "^1.0.0" - character-reference-invalid "^1.0.0" - is-alphanumerical "^1.0.0" - is-decimal "^1.0.0" - is-hexadecimal "^1.0.0" - parse-filepath@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" @@ -15855,11 +15444,6 @@ parse-filepath@^1.0.1: map-cache "^0.2.0" path-root "^0.1.1" -parse-github-repo-url@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50" - integrity sha1-nn2LslKmy2ukJZUGC3v23z28H1A= - parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" @@ -15905,33 +15489,15 @@ parse-passwd@^1.0.0: resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= -parse-path@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.1.tgz#0ec769704949778cb3b8eda5e994c32073a1adff" - integrity sha512-d7yhga0Oc+PwNXDvQ0Jv1BuWkLVPXcAoQ/WREgd6vNNoKYaW52KI+RdOFjI63wjkmps9yUE8VS4veP+AgpQ/hA== - dependencies: - is-ssh "^1.3.0" - protocols "^1.4.0" - -parse-url@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.1.tgz#99c4084fc11be14141efa41b3d117a96fcb9527f" - integrity sha512-flNUPP27r3vJpROi0/R3/2efgKkyXqnXwyP1KQ2U0SfFRgdizOdWfvrrvJg1LuOoxs7GQhmxJlq23IpQ/BkByg== - dependencies: - is-ssh "^1.3.0" - normalize-url "^3.3.0" - parse-path "^4.0.0" - protocols "^1.4.0" - parse5@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== parse5@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" - integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== parseqs@0.0.5: version "0.0.5" @@ -16015,9 +15581,9 @@ path-key@^2.0.0, path-key@^2.0.1: integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= path-key@^3.0.0, path-key@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.0.tgz#99a10d870a803bdd5ee6f0470e58dfcd2f9a54d3" - integrity sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg== + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.6: version "1.0.6" @@ -16046,14 +15612,7 @@ path-to-regexp@2.2.1: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.2.1.tgz#90b617025a16381a879bc82a38d4e8bdeb2bcf45" integrity sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ== -path-to-regexp@^1.1.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" - integrity sha1-Wf3g9DW62suhA6hOnTvGTpa5k30= - dependencies: - isarray "0.0.1" - -path-to-regexp@^1.7.0: +path-to-regexp@^1.1.1, path-to-regexp@^1.7.0: version "1.8.0" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== @@ -16108,11 +15667,6 @@ peek-stream@^1.1.0: duplexify "^3.5.0" through2 "^2.0.3" -pegjs@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/pegjs/-/pegjs-0.10.0.tgz#cf8bafae6eddff4b5a7efb185269eaaf4610ddbd" - integrity sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0= - pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" @@ -16128,20 +15682,25 @@ pg-connection-string@0.1.3: resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-0.1.3.tgz#da1847b20940e42ee1492beaf65d49d91b245df7" integrity sha1-2hhHsglA5C7hSSvq9l1J2RskXfc= -pg-connection-string@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.0.0.tgz#3eefe5997e06d94821e4d502e42b6a1c73f8df82" - integrity sha1-Pu/lmX4G2Ugh5NUC5CtqHHP434I= +pg-connection-string@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.1.0.tgz#e07258f280476540b24818ebb5dca29e101ca502" + integrity sha512-bhlV7Eq09JrRIvo1eKngpwuqKtJnNhZdpdOlvrPrA4dxqXPjxSrbNrfnIDmTpwMyRszrcV4kU5ZA4mMsQUrjdg== pg-int8@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== -pg-pool@^2.0.4: - version "2.0.7" - resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-2.0.7.tgz#f14ecab83507941062c313df23f6adcd9fd0ce54" - integrity sha512-UiJyO5B9zZpu32GSlP0tXy8J2NsJ9EFGFfz5v6PSbdz/1hBLX1rNiiy5+mAm5iJJYwfCv4A0EBcQLGWwjbpzZw== +pg-packet-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pg-packet-stream/-/pg-packet-stream-1.1.0.tgz#e45c3ae678b901a2873af1e17b92d787962ef914" + integrity sha512-kRBH0tDIW/8lfnnOyTwKD23ygJ/kexQVXZs7gEyBljw4FYqimZFxnMMx50ndZ8In77QgfGuItS5LLclC2TtjYg== + +pg-pool@^2.0.10: + version "2.0.10" + resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-2.0.10.tgz#842ee23b04e86824ce9d786430f8365082d81c4a" + integrity sha512-qdwzY92bHf3nwzIUcj+zJ0Qo5lpG/YxchahxIN8+ZVmXqkahKXsnl2aiJPHLYN9o5mB/leG+Xh6XKxtP7e0sjg== pg-types@^2.1.0: version "2.2.0" @@ -16155,14 +15714,15 @@ pg-types@^2.1.0: postgres-interval "^1.1.0" pg@^7.7.1: - version "7.12.1" - resolved "https://registry.yarnpkg.com/pg/-/pg-7.12.1.tgz#880636d46d2efbe0968e64e9fe0eeece8ef72a7e" - integrity sha512-l1UuyfEvoswYfcUe6k+JaxiN+5vkOgYcVSbSuw3FvdLqDbaoa2RJo1zfJKfPsSYPFVERd4GHvX3s2PjG1asSDA== + version "7.18.2" + resolved "https://registry.yarnpkg.com/pg/-/pg-7.18.2.tgz#4e219f05a00aff4db6aab1ba02f28ffa4513b0bb" + integrity sha512-Mvt0dGYMwvEADNKy5PMQGlzPudKcKKzJds/VbOeZJpb6f/pI3mmoXX0JksPgI3l3JPP/2Apq7F36O63J7mgveA== dependencies: buffer-writer "2.0.0" packet-reader "1.0.0" pg-connection-string "0.1.3" - pg-pool "^2.0.4" + pg-packet-stream "^1.1.0" + pg-pool "^2.0.10" pg-types "^2.1.0" pgpass "1.x" semver "4.3.2" @@ -16174,10 +15734,10 @@ pgpass@1.x: dependencies: split "^1.0.0" -picomatch@^2.0.4, picomatch@^2.0.5: - version "2.0.7" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6" - integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA== +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: version "2.3.0" @@ -16207,9 +15767,9 @@ pinkie@^2.0.0: integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= pino-pretty@^3.2.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-3.2.2.tgz#e252f964f99a0a3bd34f4a484bb4e202632eaaad" - integrity sha512-2SP++Wbo4EsH5RpLhcsYHOR/8CMTIJWZpU0aPiVK0Wq8SrRMQ9oHQNffVK5ZyDFZMtSuTdFCVfLVNFmtFMDEeA== + version "3.6.1" + resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-3.6.1.tgz#61aabf9bf851d0ed831f7e9b813dea20f61116a3" + integrity sha512-S3bal+Yd313OEaPijbf7V+jPxVaTaRO5RQX8S/Mwdtb/8+JOgo1KolDeJTfMDTU2/k6+MHvEbxv+T1ZRfGlnjA== dependencies: "@hapi/bourne" "^1.3.2" args "^5.0.1" @@ -16217,31 +15777,21 @@ pino-pretty@^3.2.1: dateformat "^3.0.3" fast-safe-stringify "^2.0.7" jmespath "^0.15.0" + joycon "^2.2.5" pump "^3.0.0" readable-stream "^3.4.0" split2 "^3.1.1" + strip-json-comments "^3.0.1" -pino-std-serializers@^2.3.0, pino-std-serializers@^2.4.2: +pino-std-serializers@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-2.4.2.tgz#cb5e3e58c358b26f88969d7e619ae54bdfcc1ae1" integrity sha512-WaL504dO8eGs+vrK+j4BuQQq6GLKeCCcHaMB2ItygzVURcL1CycwNEUHTD/lHFHs/NL5qAz2UKrjYWXKSf4aMQ== -pino@^5.12.6: - version "5.13.5" - resolved "https://registry.yarnpkg.com/pino/-/pino-5.13.5.tgz#3bfd03c9e7d247adf806960a25c139572ce3cd4f" - integrity sha512-NSArDZnjIXgzTLsYA5EhYwLiMe2OmGJ73760Wt5Vj44kUcuPJk4ub29BKtWXGAMwVmW1cQ7Q8jQaLjY/5Gxqcw== - dependencies: - fast-redact "^2.0.0" - fast-safe-stringify "^2.0.7" - flatstr "^1.0.9" - pino-std-serializers "^2.3.0" - quick-format-unescaped "^3.0.3" - sonic-boom "^0.7.5" - -pino@^5.13.2: - version "5.13.6" - resolved "https://registry.yarnpkg.com/pino/-/pino-5.13.6.tgz#c7669cb02add833b3afa75e2dd8c6e4cb411295e" - integrity sha512-cYhvK4lopLnW/OtU3uRqBNsPiBt0Cdv97LGJg4yPGbGajlOjWWaODwD66q3Ynqnj6bSNw8HSofYcEOKZqh4Gcg== +pino@^5.12.6, pino@^5.13.2: + version "5.17.0" + resolved "https://registry.yarnpkg.com/pino/-/pino-5.17.0.tgz#b9def314e82402154f89a25d76a31f20ca84b4c8" + integrity sha512-LqrqmRcJz8etUjyV0ddqB6OTUutCgQULPFg2b4dtijRHUsucaAdBgSUW58vY6RFSX+NT8963F+q0tM6lNwGShA== dependencies: fast-redact "^2.0.0" fast-safe-stringify "^2.0.7" @@ -16271,6 +15821,20 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" +pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" + integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= + dependencies: + find-up "^2.1.0" + +pkg-up@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" + please-upgrade-node@^3.1.1, please-upgrade-node@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" @@ -16305,14 +15869,14 @@ pn@^1.1.0: integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== popper.js@^1.11.1, popper.js@^1.14.1, popper.js@^1.15.0: - version "1.16.0" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.0.tgz#2e1816bcbbaa518ea6c2e15a466f4cb9c6e2fbb3" - integrity sha512-+G+EkOPoE5S/zChTpmBSSDYmhXJ5PsW8eMhH8cP/CQHMFPBG/kC9Y5IIw6qNYgdJ+/COf0ddY2li28iHaZRSjw== + version "1.16.1" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" + integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== portfinder@^1.0.21, portfinder@^1.0.25: - version "1.0.25" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca" - integrity sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg== + version "1.0.26" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.26.tgz#475658d56ca30bed72ac7f1378ed350bd1b64e70" + integrity sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ== dependencies: async "^2.6.2" debug "^3.1.1" @@ -16324,14 +15888,13 @@ posix-character-classes@^0.1.0: integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= postcss-calc@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.1.tgz#36d77bab023b0ecbb9789d84dcb23c4941145436" - integrity sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ== + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.2.tgz#504efcd008ca0273120568b0792b16cdcde8aac1" + integrity sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ== dependencies: - css-unit-converter "^1.1.1" - postcss "^7.0.5" - postcss-selector-parser "^5.0.0-rc.4" - postcss-value-parser "^3.3.1" + postcss "^7.0.27" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.2" postcss-colormin@^4.0.3: version "4.0.3" @@ -16381,32 +15944,11 @@ postcss-discard-overridden@^4.0.1: postcss "^7.0.0" postcss-flexbugs-fixes@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.1.0.tgz#e094a9df1783e2200b7b19f875dcad3b3aff8b20" - integrity sha512-jr1LHxQvStNNAHlgco6PzY308zvLklh7SJVYuWUwyUQncofaAlD2l+P/gxKHOdqWKe7xJSkVLFF/2Tp+JqMSZA== - dependencies: - postcss "^7.0.0" - -postcss-html@^0.36.0: - version "0.36.0" - resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.36.0.tgz#b40913f94eaacc2453fd30a1327ad6ee1f88b204" - integrity sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw== - dependencies: - htmlparser2 "^3.10.0" - -postcss-jsx@^0.36.3: - version "0.36.3" - resolved "https://registry.yarnpkg.com/postcss-jsx/-/postcss-jsx-0.36.3.tgz#c91113eae2935a1c94f00353b788ece9acae3f46" - integrity sha512-yV8Ndo6KzU8eho5mCn7LoLUGPkXrRXRjhMpX4AaYJ9wLJPv099xbtpbRQ8FrPnzVxb/cuMebbPR7LweSt+hTfA== - dependencies: - "@babel/core" ">=7.2.2" - -postcss-less@^3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-3.1.4.tgz#369f58642b5928ef898ffbc1a6e93c958304c5ad" - integrity sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA== + version "4.2.1" + resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz#9218a65249f30897deab1033aced8578562a6690" + integrity sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ== dependencies: - postcss "^7.0.14" + postcss "^7.0.26" postcss-load-config@^2.0.0: version "2.1.0" @@ -16426,19 +15968,6 @@ postcss-loader@^3.0.0: postcss-load-config "^2.0.0" schema-utils "^1.0.0" -postcss-markdown@^0.36.0: - version "0.36.0" - resolved "https://registry.yarnpkg.com/postcss-markdown/-/postcss-markdown-0.36.0.tgz#7f22849ae0e3db18820b7b0d5e7833f13a447560" - integrity sha512-rl7fs1r/LNSB2bWRhyZ+lM/0bwKv9fhl38/06gF6mKMo/NPnp55+K1dSTosSVjFZc0e1ppBlu+WT91ba0PMBfQ== - dependencies: - remark "^10.0.1" - unist-util-find-all-after "^1.0.2" - -postcss-media-query-parser@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" - integrity sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ= - postcss-merge-longhand@^4.0.11: version "4.0.11" resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" @@ -16517,20 +16046,10 @@ postcss-modules-local-by-default@^2.0.6: postcss-selector-parser "^6.0.0" postcss-value-parser "^3.3.1" -postcss-modules-local-by-default@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz#e8a6561be914aaf3c052876377524ca90dbb7915" - integrity sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ== - dependencies: - icss-utils "^4.1.1" - postcss "^7.0.16" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.0.0" - postcss-modules-scope@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.1.0.tgz#ad3f5bf7856114f6fcab901b0502e2a2bc39d4eb" - integrity sha512-91Rjps0JnmtUB0cujlc8KIKCsJXWjzuxGeT/+Q2i2HXKZ7nBUeF9YQTZZTNvHVoNYj1AthsjnGLtqDUE0Op79A== + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" + integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== dependencies: postcss "^7.0.6" postcss-selector-parser "^6.0.0" @@ -16543,14 +16062,6 @@ postcss-modules-values@^2.0.0: icss-replace-symbols "^1.1.0" postcss "^7.0.6" -postcss-modules-values@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" - integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== - dependencies: - icss-utils "^4.0.0" - postcss "^7.0.6" - postcss-normalize-charset@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" @@ -16591,6 +16102,10 @@ postcss-normalize-string@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" postcss-normalize-timing-functions@^4.0.2: version "4.0.2" @@ -16638,77 +16153,31 @@ postcss-ordered-values@^4.1.2: postcss-value-parser "^3.0.0" postcss-reduce-initial@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" - integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - -postcss-reduce-transforms@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" - integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== - dependencies: - cssnano-util-get-match "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-reporter@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-6.0.1.tgz#7c055120060a97c8837b4e48215661aafb74245f" - integrity sha512-LpmQjfRWyabc+fRygxZjpRxfhRf9u/fdlKf4VHG4TSPbV2XNsuISzYW1KL+1aQzx53CAppa1bKG4APIB/DOXXw== - dependencies: - chalk "^2.4.1" - lodash "^4.17.11" - log-symbols "^2.2.0" - postcss "^7.0.7" - -postcss-resolve-nested-selector@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" - integrity sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4= - -postcss-safe-parser@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz#8756d9e4c36fdce2c72b091bbc8ca176ab1fcdea" - integrity sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ== - dependencies: - postcss "^7.0.0" - -postcss-sass@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/postcss-sass/-/postcss-sass-0.4.1.tgz#6177205d2c287973551bd2938fc4b375961e3173" - integrity sha512-YDdykeDHylqiD2CdXuP7K1aDz7hCflGVB6H6lqabWVab5mVOWhguUuWZYpFU22/E12AEGiMlOfZnLqr343zhVA== - dependencies: - gonzales-pe "^4.2.4" - postcss "^7.0.14" - -postcss-scss@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-2.0.0.tgz#248b0a28af77ea7b32b1011aba0f738bda27dea1" - integrity sha512-um9zdGKaDZirMm+kZFKKVsnKPF7zF7qBAtIfTSnZXD1jZ0JNZIxdB6TxQOjCnlSzLRInVl2v3YdBh/M881C4ug== + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" + integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" postcss "^7.0.0" -postcss-selector-parser@^3.0.0, postcss-selector-parser@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" - integrity sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU= +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" + integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== dependencies: - dot-prop "^4.1.1" - indexes-of "^1.0.1" - uniq "^1.0.1" + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" -postcss-selector-parser@^5.0.0-rc.4: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" - integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== +postcss-selector-parser@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" + integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== dependencies: - cssesc "^2.0.0" + dot-prop "^5.2.0" indexes-of "^1.0.1" uniq "^1.0.1" @@ -16731,11 +16200,6 @@ postcss-svgo@^4.0.2: postcss-value-parser "^3.0.0" svgo "^1.0.0" -postcss-syntax@^0.36.2: - version "0.36.2" - resolved "https://registry.yarnpkg.com/postcss-syntax/-/postcss-syntax-0.36.2.tgz#f08578c7d95834574e5593a82dfbfa8afae3b51c" - integrity sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w== - postcss-unique-selectors@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" @@ -16750,24 +16214,15 @@ postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.0, postcss-value-parser@^ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz#482282c09a42706d1fc9a069b73f44ec08391dc9" - integrity sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ== - -"postcss@5 - 7", postcss@7.x.x, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.16, postcss@^7.0.2, postcss@^7.0.7: - version "7.0.17" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.17.tgz#4da1bdff5322d4a0acaab4d87f3e782436bad31f" - integrity sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ== - dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" +postcss-value-parser@^4.0.2, postcss-value-parser@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== -postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.18, postcss@^7.0.5, postcss@^7.0.6: - version "7.0.18" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.18.tgz#4b9cda95ae6c069c67a4d933029eddd4838ac233" - integrity sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g== +"postcss@5 - 7", postcss@7.x.x, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.29" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.29.tgz#d3a903872bd52280b83bce38cdc83ce55c06129e" + integrity sha512-ba0ApvR3LxGvRMMiUa9n0WR4HjzcYm7tS+ht4/2Nd0NLtHpPIH77fuB9Xh1/yJVz9O/E/95Y/dn8ygWsyffXtw== dependencies: chalk "^2.4.2" source-map "^0.6.1" @@ -16784,9 +16239,9 @@ postgres-bytea@~1.0.0: integrity sha1-AntTPAqokOJtFy1Hz5zOzFIazTU= postgres-date@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.4.tgz#1c2728d62ef1bff49abdd35c1f86d4bdf118a728" - integrity sha512-bESRvKVuTrjoBluEcpv2346+6kgB7UlnqWZsnbnCccTNq/pqfj1j6oBaN5+b/NrDXepYUT/HKadqv3iS9lJuVA== + version "1.0.5" + resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.5.tgz#710b27de5f27d550f6e80b5d34f7ba189213c2ee" + integrity sha512-pdau6GRPERdAYUQwkBnGKxEfPyhVZXG/JiS44iZWiNdSOWE09N2lUgN6yshuq6fVSon4Pm0VMXd1srUUkLe9iA== postgres-interval@^1.1.0: version "1.2.0" @@ -16795,48 +16250,48 @@ postgres-interval@^1.1.0: dependencies: xtend "^4.0.0" -pouchdb-binary-utils@7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/pouchdb-binary-utils/-/pouchdb-binary-utils-7.1.1.tgz#04f6c4d8385dbcead3e1023139a4d7586d2005df" - integrity sha512-DSN6AW59ycCR97JBMSGmVEfWxAEO4KzdDR6wZzCpQmT3H2Bvtv18dmKaoWnm8nAZQiXQQjgHBipRH4MlxY21zQ== +pouchdb-binary-utils@7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/pouchdb-binary-utils/-/pouchdb-binary-utils-7.2.1.tgz#ad23ed63d09699e7e6244f846b5cf07c6d9d4b8b" + integrity sha512-kbzOOYti/3d8s2bQY5EfJVd7c9E84q4oEpr1M8fOOHKnINZFteKkZQywD4roblUnew0Obyhvozif4LAr3CMZFg== dependencies: buffer-from "1.1.0" -pouchdb-collections@7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/pouchdb-collections/-/pouchdb-collections-7.1.1.tgz#4f7704896e4055ba354241c0fd75bbb7446a809f" - integrity sha512-Iwdv74+H8tSc9cM7co0X4eJQglaPp+uIX7qjzK5MIeZThUHNcJQxOC92qGK1qE3Z2feAD5LxhXEIYDia/lB8pw== +pouchdb-collections@7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/pouchdb-collections/-/pouchdb-collections-7.2.1.tgz#768c2c578b22eda9ac0c92a4b1106d18f3c113fb" + integrity sha512-cqe3GY3wDq2j59tnh+5ZV0bZj1O+YWiBz4qM7HEcgrEXnc29ADvXXPp71tmcpZUCR39bzLKyYtadAQu7FpOeOA== -pouchdb-errors@7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/pouchdb-errors/-/pouchdb-errors-7.1.1.tgz#799603a46e3dfc9ec9403fe11610236a46354cf6" - integrity sha512-A5VC4pzvNNfdldj4QqiygHfokTbjM0O5FiNzyun0LUQIJ+o5xFHMINfP3hmJ8HFTHI3mRNUul7Qjdu3Spzm4vg== +pouchdb-errors@7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/pouchdb-errors/-/pouchdb-errors-7.2.1.tgz#798f5279a0d363d6b93c97a1b65ee903f61af143" + integrity sha512-/tBP+eWY6a62UoZnJ6JJlNmbNpNS5FgVimkqwLMrFQkXpbJlhshYDeJ5PHR0W3Rlfc54GMZC7m4KhJt9kG/CkA== dependencies: - inherits "2.0.3" + inherits "2.0.4" -pouchdb-md5@7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/pouchdb-md5/-/pouchdb-md5-7.1.1.tgz#560e868ba1c16df6be5b2e1924af9df5a91ac669" - integrity sha512-XzuDBoOEcviP8yv5R0ruuPpZDBtpohtbVg1dLU52WbPMLvU5YK/yy8mJxggbvolG+iNMDde1IfubY3NNflFuPQ== +pouchdb-md5@7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/pouchdb-md5/-/pouchdb-md5-7.2.1.tgz#2b057b148b3f31491d77c4dd6b6139af31b07f66" + integrity sha512-TJqGtNguctPiSai5b4+oTPi9oOcxSbNolkUtxRBxklf8kw+PNsDUi1H0DIFmA57n0qHCU19PXdbEVYlUhv/PAA== dependencies: - pouchdb-binary-utils "7.1.1" + pouchdb-binary-utils "7.2.1" spark-md5 "3.0.0" pouchdb-utils@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/pouchdb-utils/-/pouchdb-utils-7.1.1.tgz#a6999f73c89f31afc43a71819cc0a82d95eb29fb" - integrity sha512-a2c7JFOEy6kfdD3JuTOyH6oBLlPznpg32IBrRGf4sjmIfBRFdzTo/fvuxNyLf/d+q0/7Ec1M8xUfUVT+RkViAw== + version "7.2.1" + resolved "https://registry.yarnpkg.com/pouchdb-utils/-/pouchdb-utils-7.2.1.tgz#5dec1c53c8ecba717e5762311e9a1def2d4ebf9c" + integrity sha512-ZInfRpKtJ2HwLz2Dv3NEona9khvGud0rWzvQGwUs1zoaOoSB5XxK3ui5s5fLpBrONgz0WcTB49msOUq4oAUzFg== dependencies: argsarray "0.0.1" clone-buffer "1.0.0" immediate "3.0.6" - inherits "2.0.3" - pouchdb-collections "7.1.1" - pouchdb-errors "7.1.1" - pouchdb-md5 "7.1.1" - uuid "3.2.1" + inherits "2.0.4" + pouchdb-collections "7.2.1" + pouchdb-errors "7.2.1" + pouchdb-md5 "7.2.1" + uuid "3.3.3" -pouchdb@^7.1.1: +pouchdb@7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/pouchdb/-/pouchdb-7.1.1.tgz#f5f8dcd1fc440fb76651cb26f6fc5d97a39cd6ce" integrity sha512-8bXWclixNJZqokvxGHRsG19zehSJiaZaz4dVYlhXhhUctz7gMcNTElHjPBzBdZlKKvt9aFDndmXN1VVE53Co8g== @@ -16861,10 +16316,10 @@ pouchdb@^7.1.1: uuid "3.2.1" vuvuzela "1.0.3" -prebuild-install@^5.2.4, prebuild-install@^5.3.0: - version "5.3.2" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.2.tgz#6392e9541ac0b879ef0f22b3d65037417eb2035e" - integrity sha512-INDfXzTPnhT+WYQemqnAXlP7SvfiFMopMozSgXCZ+RDLb279gKfIuLk4o7PgEawLp3WrMgIYGBpkxpraROHsSA== +prebuild-install@^5.3.0, prebuild-install@^5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.3.tgz#ef4052baac60d465f5ba6bf003c9c1de79b9da8e" + integrity sha512-GV+nsUXuPW2p8Zy7SarF/2W/oiK8bFQgJcncoJ0d7kRpekEA0ftChjfEaF9/Y+QJEc/wFR7RAEa8lYByuUIe2g== dependencies: detect-libc "^1.0.3" expand-template "^2.0.3" @@ -16887,7 +16342,7 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prepend-http@^1.0.0, prepend-http@^1.0.1: +prepend-http@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= @@ -16902,10 +16357,10 @@ preserve@^0.2.0: resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= -prettier@^1.18.2: - version "1.18.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" - integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== +prettier@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4" + integrity sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg== pretty-bytes@^5.1.0: version "5.3.0" @@ -16938,6 +16393,16 @@ pretty-format@^24.9.0: ansi-styles "^3.2.0" react-is "^16.8.4" +pretty-format@^25.2.1, pretty-format@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" + integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== + dependencies: + "@jest/types" "^25.5.0" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^16.12.0" + pretty-hrtime@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" @@ -16949,13 +16414,13 @@ pretty-time@^1.1.0: integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== prismjs@^1.17.1: - version "1.17.1" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.17.1.tgz#e669fcbd4cdd873c35102881c33b14d0d68519be" - integrity sha512-PrEDJAFdUGbOP6xK/UsfkC5ghJsPJviKgnQOoxaDbBjwc8op68Quupwt1DeAFoG8GImPhiKXAvvsH7wDSLsu1Q== + version "1.20.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.20.0.tgz#9b685fc480a3514ee7198eac6a3bf5024319ff03" + integrity sha512-AEDjSrVNkynnw6A+B1DsFkd6AVdTnp+/WoUixFRULlCLZVRZlVQMVWio/16jv7G1FscUxQxOQhWwApgbnxr6kQ== optionalDependencies: clipboard "^2.0.0" -private@^0.1.6: +private@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== @@ -16965,41 +16430,21 @@ process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -process@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/process/-/process-0.10.1.tgz#842457cc51cfed72dc775afeeafb8c6034372725" - integrity sha1-hCRXzFHP7XLcd1r+6vuMYDQ3JyU= - process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= -progress@^2.0.0, progress@^2.0.3: +progress@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -prom-client@^11.1.1: - version "11.5.3" - resolved "https://registry.yarnpkg.com/prom-client/-/prom-client-11.5.3.tgz#5fedfce1083bac6c2b223738e966d0e1643756f8" - integrity sha512-iz22FmTbtkyL2vt0MdDFY+kWof+S9UB/NACxSn2aJcewtw+EERsen0urSkZ2WrHseNdydsvcxCTAnPcSMZZv4Q== - dependencies: - tdigest "^0.1.1" - promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= -promise-retry@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" - integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= - dependencies: - err-code "^1.0.0" - retry "^0.10.0" - promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -17008,28 +16453,21 @@ promise@^7.1.1: asap "~2.0.3" promise@^8.0.1: - version "8.0.3" - resolved "https://registry.yarnpkg.com/promise/-/promise-8.0.3.tgz#f592e099c6cddc000d538ee7283bb190452b0bf6" - integrity sha512-HeRDUL1RJiLhyA0/grn+PTShlBAcLuh/1BJGtrvjwbvRDCTLLMEz9rOGCV+R3vHY4MixIuoMEd9Yq/XvsTPcjw== + version "8.1.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e" + integrity sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q== dependencies: asap "~2.0.6" prompts@^2.0.1, prompts@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.2.1.tgz#f901dd2a2dfee080359c0e20059b24188d75ad35" - integrity sha512-VObPvJiWPhpZI6C5m60XOzTfnYg/xc/an+r9VYymj9WJW3B/DIH+REzjpAACPf8brwPeP+7vz3bIim3S+AaMjw== + version "2.3.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" + integrity sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA== dependencies: kleur "^3.0.3" - sisteransi "^1.0.3" - -promzard@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" - integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= - dependencies: - read "1" + sisteransi "^1.0.4" -prop-types@^15.5.0, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@^15.5.0, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -17038,37 +16476,25 @@ prop-types@^15.5.0, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, object-assign "^4.1.1" react-is "^16.8.1" -property-information@^5.0.0, property-information@^5.0.1, property-information@^5.2.0: - version "5.2.2" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.2.2.tgz#20555eafd2296278a682e5a51d5123e7878ecc30" - integrity sha512-N2moasZmjn2mjVGIWpaqz5qnz6QyeQSGgGvMtl81gA9cPTWa6wpesRSe/quNnOjUHpvSH1oZx0pdz0EEckLFnA== +property-information@^5.0.0, property-information@^5.2.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.5.0.tgz#4dc075d493061a82e2b7d096f406e076ed859943" + integrity sha512-RgEbCx2HLa1chNgvChcx+rrCWD0ctBmGSE0M7lVm1yyv4UbvbrWoXp/BkVLZefzjrRBGW8/Js6uh/BnlHXFyjA== dependencies: - xtend "^4.0.1" + xtend "^4.0.0" proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= -protocols@^1.1.0, protocols@^1.4.0: - version "1.4.7" - resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.7.tgz#95f788a4f0e979b291ffefcf5636ad113d037d32" - integrity sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg== - -protoduck@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" - integrity sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg== - dependencies: - genfun "^5.0.0" - proxy-addr@~2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" - integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ== + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== dependencies: forwarded "~0.1.2" - ipaddr.js "1.9.0" + ipaddr.js "1.9.1" prr@~1.0.1: version "1.0.1" @@ -17080,15 +16506,10 @@ pseudomap@^1.0.2: resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= -psl@^1.1.24: - version "1.4.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.4.0.tgz#5dd26156cdb69fa1fdb8ab1991667d3f80ced7c2" - integrity sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw== - -psl@^1.1.28: - version "1.3.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.3.0.tgz#e1ebf6a3b5564fa8376f3da2275da76d875ca1bd" - integrity sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag== +psl@^1.1.24, psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== pstree.remy@^1.1.7: version "1.1.7" @@ -17132,6 +16553,15 @@ pumpify@^1.3.3, pumpify@^1.3.5: inherits "^2.0.3" pump "^2.0.0" +pumpify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-2.0.1.tgz#abfc7b5a621307c728b551decbbefb51f0e4aa1e" + integrity sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw== + dependencies: + duplexify "^4.1.1" + inherits "^2.0.3" + pump "^3.0.0" + punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" @@ -17147,6 +16577,13 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +pupa@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.0.1.tgz#dbdc9ff48ffbea4a26a069b6f9f7abb051008726" + integrity sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA== + dependencies: + escape-goat "^2.0.0" + q@^1.1.2, q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -17168,9 +16605,9 @@ qs@6.7.0: integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== qs@^6.5.2: - version "6.8.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.8.0.tgz#87b763f0d37ca54200334cd57bb2ef8f68a1d081" - integrity sha512-tPSkj8y92PfZVbinY1n84i1Qdx75lZjMQYx9WZhnkofyxzw2r7Ho39G3/aEvSUdebxpnnM4LZJCtvE/Aq3+s9w== + version "6.9.4" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.4.tgz#9090b290d1f91728d3c22e54843ca44aea5ab687" + integrity sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ== qs@~6.5.2: version "6.5.2" @@ -17214,11 +16651,6 @@ quick-format-unescaped@^3.0.3: resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-3.0.3.tgz#fb3e468ac64c01d22305806c39f121ddac0d1fb9" integrity sha512-dy1yjycmn9blucmJLXOfZDx1ikZJUi6E8bBZLnhPG5gBrVhHXx2xVyqqgKBubVNEXmx51dBACMHpoMQK/N/AXQ== -quick-lru@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" - integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= - raf@^3.3.0, raf@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" @@ -17285,7 +16717,7 @@ raw-body@^2.1.0, raw-body@^2.3.3: iconv-lite "0.4.24" unpipe "1.0.0" -raw-loader@^3.0.0, raw-loader@^3.1.0: +raw-loader@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-3.1.0.tgz#5e9d399a5a222cc0de18f42c3bc5e49677532b3f" integrity sha512-lzUVMuJ06HF4rYveaz9Tv0WRlUMxJ0Y1hgSkkgg+50iEdaI0TthyEDe08KIHb0XsF6rn8WYTqPCaGTZg3sX+qA== @@ -17293,6 +16725,14 @@ raw-loader@^3.0.0, raw-loader@^3.1.0: loader-utils "^1.1.0" schema-utils "^2.0.1" +raw-loader@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.1.tgz#14e1f726a359b68437e183d5a5b7d33a3eba6933" + integrity sha512-baolhQBSi3iNh1cglJjA0mYzga+wePk7vdEX//1dTFd+v4TsQlQE0jitJSNF1OIP82rdYulH7otaVmdlDaJ64A== + dependencies: + loader-utils "^2.0.0" + schema-utils "^2.6.5" + rc@^1.0.1, rc@^1.1.6, rc@^1.2.7, rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -17303,40 +16743,20 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.2.7, rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-dom@16.7.0: - version "16.7.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.7.0.tgz#a17b2a7ca89ee7390bc1ed5eb81783c7461748b8" - integrity sha512-D0Ufv1ExCAmF38P2Uh1lwpminZFRXEINJe53zRAbm4KPwSyd6DY/uDoS0Blj9jvPpn1+wivKpZYc8aAAN/nAkg== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.12.0" - -react-dom@^16.11.0: - version "16.11.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.11.0.tgz#7e7c4a5a85a569d565c2462f5d345da2dd849af5" - integrity sha512-nrRyIUE1e7j8PaXSPtyRKtz+2y9ubW/ghNgqKFHHAHaeP0fpF5uXR+sq8IMRHC+ZUxw7W9NyCDTBtwWxvkb0iA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.17.0" - -react-dom@^16.9.0: - version "16.10.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.10.2.tgz#4840bce5409176bc3a1f2bd8cb10b92db452fda6" - integrity sha512-kWGDcH3ItJK4+6Pl9DZB16BXYAZyrYQItU4OMy0jAkv5aNqc+mAKb4TpFtAteI6TJZu+9ZlNhaeNQSVQDHJzkw== +react-dom@^16.12.0, react-dom@^16.7.0, react-dom@^16.9.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.13.1.tgz#c1bd37331a0486c078ee54c4740720993b2e0e7f" + integrity sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.16.2" + scheduler "^0.19.1" react-draggable@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.0.3.tgz#6b9f76f66431c47b9070e9b805bbc520df8ca481" - integrity sha512-4vD6zms+9QGeZ2RQXzlUBw8PBYUXy+dzYX5r22idjp9YwQKIIvD/EojL0rbjS1GK4C3P0rAJnmKa8gDQYWUDyA== + version "4.3.1" + resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.3.1.tgz#f9c0cdcf2279ec5b79c65b70cdfd9361d82fa9ee" + integrity sha512-m8QeV+eIi7LhD5mXoLqDzLbokc6Ncwa0T34fF6uJzWSs4vc4fdZI/XGqHYoEn91T8S6qO+BSXslONh7Jz9VPQQ== dependencies: classnames "^2.2.5" prop-types "^15.6.0" @@ -17375,9 +16795,9 @@ react-helmet@^5.2.0, react-helmet@^5.2.1: react-side-effect "^1.1.0" react-hot-loader@^4.12.11, react-hot-loader@^4.12.12, react-hot-loader@^4.3.6: - version "4.12.15" - resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.12.15.tgz#6bf3984e52edbdf02ea8952777f53da1b3c68c95" - integrity sha512-sgkN6g+tgPE6xZzD0Ysqll7KUFYJbMX0DrczT5OxD6S7hZlSnmqSC3ceudwCkiDd65ZTtm+Ayk4Y9k5xxCvpOw== + version "4.12.21" + resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.12.21.tgz#332e830801fb33024b5a147d6b13417f491eb975" + integrity sha512-Ynxa6ROfWUeKWsTHxsrL2KMzujxJVPjs385lmB2t5cHUxdoRPGind9F00tOkdc1l5WBleOF4XEAMILY1KPIIDA== dependencies: fast-levenshtein "^2.0.6" global "^4.3.0" @@ -17389,9 +16809,9 @@ react-hot-loader@^4.12.11, react-hot-loader@^4.12.12, react-hot-loader@^4.3.6: source-map "^0.7.3" react-icons@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-3.7.0.tgz#64fe46231fabfeea27895edeae6c3b78114b8c8f" - integrity sha512-7MyPwjIhuyW0D2N3s4DEd0hGPGFf0sK+IIRKhc1FvSpZNVmnUoGvHbmAwzGJU+3my+fvihVWgwU5SDtlAri56Q== + version "3.10.0" + resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-3.10.0.tgz#6c217a2dde2e8fa8d293210023914b123f317297" + integrity sha512-WsQ5n1JToG9VixWilSo1bHv842Cj5aZqTGiS3Ud47myF6aK7S/IUY2+dHcBdmkQcCFRuHsJ9OMUI0kTDfjyZXQ== dependencies: camelcase "^5.0.0" @@ -17402,20 +16822,10 @@ react-input-autosize@^2.2.2: dependencies: prop-types "^15.5.8" -react-is@^16.6.0, react-is@^16.6.3: - version "16.11.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.11.0.tgz#b85dfecd48ad1ce469ff558a882ca8e8313928fa" - integrity sha512-gbBVYR2p8mnriqAwWx9LbuUrShnAuSCNnuPGyc7GJrMVQtPDAh8iLpv7FRuMPFb56KkaVZIYSz1PrjI9q0QPCw== - -react-is@^16.7.0, react-is@^16.8.1: - version "16.10.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.10.2.tgz#984120fd4d16800e9a738208ab1fba422d23b5ab" - integrity sha512-INBT1QEgtcCCgvccr5/86CfD71fw9EPmDxgiJX4I2Ddr6ZsV6iFXsuby+qWJPtmNuMY0zByTsG4468P7nHuNWA== - -react-is@^16.8.4, react-is@^16.9.0: - version "16.9.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.9.0.tgz#21ca9561399aad0ff1a7701c01683e8ca981edcb" - integrity sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw== +react-is@^16.12.0, react-is@^16.6.0, react-is@^16.6.3, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.9.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== react-jss@^8.6.1: version "8.6.1" @@ -17459,13 +16869,12 @@ react-redux@^5.1.1: react-lifecycles-compat "^3.0.0" react-redux@^7.0.3: - version "7.1.1" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.1.1.tgz#ce6eee1b734a7a76e0788b3309bf78ff6b34fa0a" - integrity sha512-QsW0vcmVVdNQzEkrgzh2W3Ksvr8cqpAv5FhEk7tNEft+5pp7rXxAudTz3VOPawRkLIepItpkEIyLcN/VVXzjTg== + version "7.2.0" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.0.tgz#f970f62192b3981642fec46fd0db18a074fe879d" + integrity sha512-EvCAZYGfOLqwV7gh849xy9/pt55rJXPwmYvI4lilPM5rUT/1NxuuN59ipdBksRVSvz0KInbPnp4IfoXJXCqiDA== dependencies: "@babel/runtime" "^7.5.5" hoist-non-react-statics "^3.3.0" - invariant "^2.2.4" loose-envify "^1.4.0" prop-types "^15.7.2" react-is "^16.9.0" @@ -17514,9 +16923,9 @@ react-router@4.4.0-beta.1: warning "^4.0.1" react-select@^3.0.4: - version "3.0.8" - resolved "https://registry.yarnpkg.com/react-select/-/react-select-3.0.8.tgz#06ff764e29db843bcec439ef13e196865242e0c1" - integrity sha512-v9LpOhckLlRmXN5A6/mGGEft4FMrfaBFTGAnuPHcUgVId7Je42kTq9y0Z+Ye5z8/j0XDT3zUqza8gaRaI1PZIg== + version "3.1.0" + resolved "https://registry.yarnpkg.com/react-select/-/react-select-3.1.0.tgz#ab098720b2e9fe275047c993f0d0caf5ded17c27" + integrity sha512-wBFVblBH1iuCBprtpyGtd1dGMadsG36W5/t2Aj8OE6WbByDg5jIFyT7X5gT+l0qmT5TqWhxX+VsKJvCEl2uL9g== dependencies: "@babel/runtime" "^7.4.4" "@emotion/cache" "^10.0.9" @@ -17525,7 +16934,7 @@ react-select@^3.0.4: memoize-one "^5.0.0" prop-types "^15.6.0" react-input-autosize "^2.2.2" - react-transition-group "^2.2.1" + react-transition-group "^4.3.0" react-side-effect@^1.1.0: version "1.2.0" @@ -17534,30 +16943,30 @@ react-side-effect@^1.1.0: dependencies: shallowequal "^1.0.1" -react-static-plugin-emotion@^7.0.10: +react-static-plugin-emotion@^7.2.2: version "7.2.2" resolved "https://registry.yarnpkg.com/react-static-plugin-emotion/-/react-static-plugin-emotion-7.2.2.tgz#104d7cf1c03abb3cfcafbb55039293c8a6c44ba4" integrity sha512-BshmDfSQPW4LoO6TmZOANw0GZT4aqZra0DNiE0GHxq8b2/9JnH97129+4vWB+3rH2K2PYi9ECMuSbkTVsL4e0w== dependencies: emotion-server "^10.0.14" -react-static-plugin-reach-router@^7.0.10: - version "7.2.2" - resolved "https://registry.yarnpkg.com/react-static-plugin-reach-router/-/react-static-plugin-reach-router-7.2.2.tgz#b474329956fcd795a73945e57674d1eff25259ee" - integrity sha512-+4D+kRY20drQePO3PBLOm1HHPX6ASr2Wtvf4HhaG0Nl4jc7plakR25hnzFeSKm4+bGmQ1CgidTqp1NR3iPpJnQ== +react-static-plugin-reach-router@^7.2.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/react-static-plugin-reach-router/-/react-static-plugin-reach-router-7.2.3.tgz#0b991e347a64ee462cfa7b2b08d34bec56620a5b" + integrity sha512-OgOm7/3PjPCZD6/U++adNlzi8dJMn6Weig14l12w4TOWlWSI453Cv54bZH0N7ejUnFKwvrPS5mamP+FGCP6VUw== -react-static-plugin-source-filesystem@^7.1.0: - version "7.2.2" - resolved "https://registry.yarnpkg.com/react-static-plugin-source-filesystem/-/react-static-plugin-source-filesystem-7.2.2.tgz#9405bd857a4ad7e75e8991840d16b4ebbd31d08c" - integrity sha512-z2gcxuCC9FVUZ+Sew9nizsFXJRRB52H+WTsOFGO5vEqGO8+FE0f0TlFHDNJ+7UzR5beAKWAOf9OVkS0xrrssww== +react-static-plugin-source-filesystem@^7.2.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/react-static-plugin-source-filesystem/-/react-static-plugin-source-filesystem-7.2.3.tgz#8ce4b9e122d075f217899f44ec08db0747acc02c" + integrity sha512-pUf3J4LPFkVsVHlk7nj1xZkuSZPLqf5QhSgNtDtotfqY6Jslrv/NoZJFlvHCNZdOsVVFEfnAPN6VGlJzHtELkw== dependencies: chokidar "^3.0.2" glob "^7.1.4" react-static@^7.1.0: - version "7.2.2" - resolved "https://registry.yarnpkg.com/react-static/-/react-static-7.2.2.tgz#09c43fd73d0c4201a3d21d8d1609d6afd578447a" - integrity sha512-+ebhBhRnAT/pPqwJBF1gqqxJOZWpV57fklxm5yM7zRU6xa+CNG3wnYj8VgYI4asjI+WSLnWx92Z+Yk2bWSKd9w== + version "7.2.3" + resolved "https://registry.yarnpkg.com/react-static/-/react-static-7.2.3.tgz#bdc94206e7cc812d767d027a4315202f1eafdf2e" + integrity sha512-YLbkhEqEhOQtfCZFu+gB9Xbfnruyx3LZbSncbpf2FyMhxj7ofVgWh16SpWpR9wTRMD4x5V3WA7v2finPJOKKPg== dependencies: "@babel/cli" "^7.5.5" "@babel/core" "^7.5.5" @@ -17635,9 +17044,9 @@ react-static@^7.1.0: webpack-node-externals "^1.7.2" react-tippy@^1.2.3: - version "1.3.1" - resolved "https://registry.yarnpkg.com/react-tippy/-/react-tippy-1.3.1.tgz#251a31d96e9c74274d55dd62fd88de7a627bb817" - integrity sha512-WdpdqmZpu7U9vd3MKFQL2GynQBY2HW7AKrzSY9yVDcd2CA/R29e32y9BklMJjg8EcyD+i0SBzW6XSmeC5Mz6Jw== + version "1.3.4" + resolved "https://registry.yarnpkg.com/react-tippy/-/react-tippy-1.3.4.tgz#9db14375ef696017d33aaf24b444b3dbb0168b2a" + integrity sha512-56eLAtcNoRBOmMessnm3U6PF//OqbqKp1oxwjoOwi/JKqo/y132zNcIl8QQCMnS6ITa3c6ZVaRAq4K1FGhloJQ== dependencies: popper.js "^1.11.1" @@ -17651,7 +17060,7 @@ react-transition-group@^2.2.1, react-transition-group@^2.5.0: prop-types "^15.6.2" react-lifecycles-compat "^3.0.4" -react-transition-group@^4.2.1: +react-transition-group@^4.2.1, react-transition-group@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.3.0.tgz#fea832e386cf8796c58b61874a3319704f5ce683" integrity sha512-1qRV1ZuVSdxPlPf4O8t7inxUGpdyO5zG9IoNfJxSO0ImU2A1YWkEQvFPuIPZmMLkg5hYs7vv5mMOyfgSkvAwvw== @@ -17662,70 +17071,23 @@ react-transition-group@^4.2.1: prop-types "^15.6.2" react-universal-component@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/react-universal-component/-/react-universal-component-4.0.0.tgz#51e74198b98092dff6faf25315091070547ed129" - integrity sha512-FOL+1ZDS7Fp6AvUbkTDjttTOGxSRJZaU5M9MX+mm/Uj4/Azq7r2TpFACaUvMxFUYHjDRg2NpKwZDsHvywXMvMg== + version "4.0.1" + resolved "https://registry.yarnpkg.com/react-universal-component/-/react-universal-component-4.0.1.tgz#01eec19dafda55ee7cf71f3aeb996c924718cc19" + integrity sha512-dm3HT1ITlony+8Mb7m8i6jTD2cpStRGErMdHxYTdIFw1aBiGbuFOwZ1U13bgGT4gssANLRz0KrmjgarBuy+QJQ== dependencies: - hoist-non-react-statics "^2.2.1" - prop-types "^15.5.10" + hoist-non-react-statics "^3.3.0" + prop-types "^15.7.2" react-hot-loader "^4.3.6" -react@16.7.0: - version "16.7.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.7.0.tgz#b674ec396b0a5715873b350446f7ea0802ab6381" - integrity sha512-StCz3QY8lxTb5cl2HJxjwLFOXPIFQp+p+hxQfc8WE0QiLfCtIlKj8/+5tjjKm8uSTlAW+fCPaavGFS06V9Ar3A== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.12.0" - -react@^16.11.0: - version "16.11.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.11.0.tgz#d294545fe62299ccee83363599bf904e4a07fdbb" - integrity sha512-M5Y8yITaLmU0ynd0r1Yvfq98Rmll6q8AxaEe88c8e7LxO8fZ2cNgmFt0aGAS9wzf1Ao32NKXtCl+/tVVtkxq6g== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - -react@^16.9.0: - version "16.10.2" - resolved "https://registry.yarnpkg.com/react/-/react-16.10.2.tgz#a5ede5cdd5c536f745173c8da47bda64797a4cf0" - integrity sha512-MFVIq0DpIhrHFyqLU0S3+4dIcBhhOvBE8bJ/5kHPVOVaGdo0KuiQzpcjCPsf585WvhypqtrMILyoE2th6dT+Lw== +react@^16.0.0, react@^16.12.0, react@^16.7.0, react@^16.9.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e" + integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" -read-cmd-shim@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.4.tgz#b4a53d43376211b45243f0072b6e603a8e37640d" - integrity sha512-Pqpl3qJ/QdOIjRYA0q5DND/gLvGOfpIz/fYVDGYpOXfW/lFrIttmLsBnd6IkyK10+JHU9zhsaudfvrQTBB9YFQ== - dependencies: - graceful-fs "^4.1.2" - -"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13: - version "2.1.0" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.0.tgz#e3d42e6c35ea5ae820d9a03ab0c7291217fc51d5" - integrity sha512-KLhu8M1ZZNkMcrq1+0UJbR8Dii8KZUqB0Sha4mOx/bknfKI/fyrQVrG/YIt2UOtG667sD8+ee4EXMM91W9dC+A== - dependencies: - glob "^7.1.1" - json-parse-better-errors "^1.0.1" - normalize-package-data "^2.0.0" - slash "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.2" - -read-package-tree@^5.1.6: - version "5.3.1" - resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" - integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw== - dependencies: - read-package-json "^2.0.0" - readdir-scoped-modules "^1.0.0" - util-promisify "^2.1.0" - read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -17742,14 +17104,6 @@ read-pkg-up@^2.0.0: find-up "^2.0.0" read-pkg "^2.0.0" -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - read-pkg-up@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" @@ -17804,17 +17158,10 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -read@1, read@~1.0.1: - version "1.0.7" - resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= - dependencies: - mute-stream "~0.0.4" - "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -17834,10 +17181,10 @@ readable-stream@1.0.33: isarray "0.0.1" string_decoder "~0.10.x" -"readable-stream@2 || 3", readable-stream@^3.0.0, readable-stream@^3.0.1, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" - integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== +"readable-stream@2 || 3", readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -17868,16 +17215,6 @@ readable-stream@~1.1.9: isarray "0.0.1" string_decoder "~0.10.x" -readdir-scoped-modules@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" - integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== - dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - graceful-fs "^4.1.2" - once "^1.3.0" - readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" @@ -17887,12 +17224,12 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" -readdirp@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" - integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== +readdirp@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" + integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== dependencies: - picomatch "^2.0.4" + picomatch "^2.2.1" realpath-native@^1.1.0: version "1.1.0" @@ -17920,22 +17257,6 @@ rechoir@^0.6.2: react-lifecycles-compat "^3.0.2" symbol-observable "^1.0.4" -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - -redent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" - integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= - dependencies: - indent-string "^3.0.0" - strip-indent "^2.0.0" - reduce-reducers@^0.4.3: version "0.4.3" resolved "https://registry.yarnpkg.com/reduce-reducers/-/reduce-reducers-0.4.3.tgz#8e052618801cd8fc2714b4915adaa8937eb6d66c" @@ -17958,9 +17279,9 @@ redux-persist@^6.0.0: integrity sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ== redux@^4.0.0, redux@^4.0.1, redux@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.4.tgz#4ee1aeb164b63d6a1bcc57ae4aa0b6e6fa7a3796" - integrity sha512-vKv4WdiJxOWKxK0yRoaK3Y4pxxB0ilzVx6dszU2W8wLxlb2yikRph4iV/ymtdJ6ZxpBLFbyrxklnT5yBbQSl3Q== + version "4.0.5" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f" + integrity sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w== dependencies: loose-envify "^1.4.0" symbol-observable "^1.2.0" @@ -17975,10 +17296,10 @@ reflect-metadata@^0.1.12: resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== -regenerate-unicode-properties@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" - integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== dependencies: regenerate "^1.4.0" @@ -17997,17 +17318,18 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.3: - version "0.13.3" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" - integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== +regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4: + version "0.13.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" + integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== -regenerator-transform@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" - integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ== +regenerator-transform@^0.14.2: + version "0.14.4" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.4.tgz#5266857896518d1616a78a0479337a30ea974cc7" + integrity sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw== dependencies: - private "^0.1.6" + "@babel/runtime" "^7.8.4" + private "^0.1.8" regex-cache@^0.4.2: version "0.4.4" @@ -18025,28 +17347,24 @@ regex-not@^1.0.0, regex-not@^1.0.2: safe-regex "^1.1.0" regexp.prototype.flags@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz#6b30724e306a27833eeb171b66ac8890ba37e41c" - integrity sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA== + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== dependencies: - define-properties "^1.1.2" - -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" -regexpu-core@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" - integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== +regexpu-core@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" + integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== dependencies: regenerate "^1.4.0" - regenerate-unicode-properties "^8.1.0" - regjsgen "^0.5.0" - regjsparser "^0.6.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.1.0" + unicode-match-property-value-ecmascript "^1.2.0" registry-auth-token@3.3.2: version "3.3.2" @@ -18056,49 +17374,55 @@ registry-auth-token@3.3.2: rc "^1.1.6" safe-buffer "^5.0.1" -registry-auth-token@^3.0.1: - version "3.4.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" - integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== +registry-auth-token@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.1.1.tgz#40a33be1e82539460f94328b0f7f0f84c16d9479" + integrity sha512-9bKS7nTl9+/A1s7tnPeGrUpRcVY+LUh7bfFgzpndALdPfXQBfQV77rQVtqgUV3ti4vc/Ik81Ex8UJDWDQ12zQA== dependencies: - rc "^1.1.6" - safe-buffer "^5.0.1" + rc "^1.2.8" -registry-url@3.1.0, registry-url@^3.0.3: +registry-url@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= dependencies: rc "^1.0.1" -regjsgen@^0.5.0: +registry-url@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" + integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== + dependencies: + rc "^1.2.8" + +regjsgen@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== -regjsparser@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" - integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== dependencies: jsesc "~0.5.0" rehype-parse@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/rehype-parse/-/rehype-parse-6.0.1.tgz#a5401d7f4144d5e17cbb69be11f05a2a7ba87e27" - integrity sha512-FrGSbOzcGxIvWty1qHjKTvHT4WBTt7C6JLs65EkvFPa7ZKraSmsoDDj6al1eBxaXS1t/kiGdPYazUe58Mgflgw== + version "6.0.2" + resolved "https://registry.yarnpkg.com/rehype-parse/-/rehype-parse-6.0.2.tgz#aeb3fdd68085f9f796f1d3137ae2b85a98406964" + integrity sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug== dependencies: hast-util-from-parse5 "^5.0.0" parse5 "^5.0.0" - xtend "^4.0.1" + xtend "^4.0.0" rehype-stringify@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/rehype-stringify/-/rehype-stringify-6.0.0.tgz#a8a573b6f9bf98916955978acd746c37cfd88ac0" - integrity sha512-grV/hhA7z9GbUJZk0ILzprSE0YY9lvTmYuvgRjXdFXrrag5gNeqXBQIuG1m4zFW6PFm0YYnJ/qgf5y6yui4VsA== + version "6.0.1" + resolved "https://registry.yarnpkg.com/rehype-stringify/-/rehype-stringify-6.0.1.tgz#b6aa9f84d5276c5d247c62fc1ea15983a35a4575" + integrity sha512-JfEPRDD4DiG7jet4md7sY07v6ACeb2x+9HWQtRPm2iA6/ic31hCv1SNBUtpolJASxQ/D8gicXiviW4TJKEMPKQ== dependencies: hast-util-to-html "^6.0.0" - xtend "^4.0.1" + xtend "^4.0.0" rehype@^8.0.0: version "8.0.0" @@ -18151,56 +17475,6 @@ release-zalgo@^1.0.0: dependencies: es6-error "^4.0.1" -remark-parse@^6.0.0: - version "6.0.3" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-6.0.3.tgz#c99131052809da482108413f87b0ee7f52180a3a" - integrity sha512-QbDXWN4HfKTUC0hHa4teU463KclLAnwpn/FBn87j9cKYJWWawbiLgMfP2Q4XwhxxuuuOxHlw+pSN0OKuJwyVvg== - dependencies: - collapse-white-space "^1.0.2" - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - is-word-character "^1.0.0" - markdown-escapes "^1.0.0" - parse-entities "^1.1.0" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - trim "0.0.1" - trim-trailing-lines "^1.0.0" - unherit "^1.0.4" - unist-util-remove-position "^1.0.0" - vfile-location "^2.0.0" - xtend "^4.0.1" - -remark-stringify@^6.0.0: - version "6.0.4" - resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-6.0.4.tgz#16ac229d4d1593249018663c7bddf28aafc4e088" - integrity sha512-eRWGdEPMVudijE/psbIDNcnJLRVx3xhfuEsTDGgH4GsFF91dVhw5nhmnBppafJ7+NWINW6C7ZwWbi30ImJzqWg== - dependencies: - ccount "^1.0.0" - is-alphanumeric "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - longest-streak "^2.0.1" - markdown-escapes "^1.0.0" - markdown-table "^1.1.0" - mdast-util-compact "^1.0.0" - parse-entities "^1.0.2" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - stringify-entities "^1.0.1" - unherit "^1.0.4" - xtend "^4.0.1" - -remark@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/remark/-/remark-10.0.1.tgz#3058076dc41781bf505d8978c291485fe47667df" - integrity sha512-E6lMuoLIy2TyiokHprMjcWNJ5UxfGQjaMSMhV+f4idM625UjjK4j798+gPs5mfjzDE6vL0oFKVeZM6gZVSVrzQ== - dependencies: - remark-parse "^6.0.0" - remark-stringify "^6.0.0" - unified "^7.0.0" - remove-accents@0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.4.2.tgz#0a43d3aaae1e80db919e07ae254b285d9e1c7bb5" @@ -18244,7 +17518,7 @@ repeat-element@^1.1.2: resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== -repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: +repeat-string@^1.5.2, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= @@ -18261,11 +17535,16 @@ replace-ext@0.0.1: resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" integrity sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ= -replace-ext@1.0.0, replace-ext@^1.0.0: +replace-ext@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= +replace-ext@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a" + integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw== + replace-homedir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/replace-homedir/-/replace-homedir-1.0.0.tgz#e87f6d513b928dde808260c12be7fec6ff6e798c" @@ -18291,23 +17570,23 @@ request-progress@3.0.0: dependencies: throttleit "^1.0.0" -request-promise-core@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346" - integrity sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag== +request-promise-core@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" + integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ== dependencies: - lodash "^4.17.11" + lodash "^4.17.15" request-promise-native@^1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.7.tgz#a49868a624bdea5069f1251d0a836e0d89aa2c59" - integrity sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w== + version "1.0.8" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36" + integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ== dependencies: - request-promise-core "1.1.2" + request-promise-core "1.1.3" stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@2.88.0, request@^2.72.0, request@^2.87.0: +request@2.88.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== @@ -18333,20 +17612,37 @@ request@2.88.0, request@^2.72.0, request@^2.87.0: tunnel-agent "^0.6.0" uuid "^3.3.2" +request@^2.87.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -require-in-the-middle@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/require-in-the-middle/-/require-in-the-middle-4.0.1.tgz#9f2828eb280722c911f62c2cb56e749c038619e2" - integrity sha512-EfkM2zANyGkrfIExsECMeNn/uzjvHrE9h36yLXSavmrDiH4tgDNvltAmEKnt4PNLbqKPHZz+uszW2wTKrLUX0w== - dependencies: - debug "^4.1.1" - module-details-from-path "^1.0.3" - resolve "^1.12.0" - require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" @@ -18372,6 +17668,11 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= +reselect@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147" + integrity sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc= + reselect@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.0.0.tgz#f2529830e5d3d0e021408b246a206ef4ea4437f7" @@ -18419,13 +17720,6 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve-global@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-global/-/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255" - integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw== - dependencies: - global-dirs "^0.1.1" - resolve-options@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" @@ -18456,14 +17750,21 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@1.12.0, resolve@1.x, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.8.1: +resolve@1.12.0: version "1.12.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== dependencies: path-parse "^1.0.6" -responselike@1.0.2: +resolve@1.x, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.8.1: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +responselike@1.0.2, responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= @@ -18491,17 +17792,20 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -retry@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" - integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= +retry-request@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/retry-request/-/retry-request-4.1.1.tgz#f676d0db0de7a6f122c048626ce7ce12101d2bd8" + integrity sha512-BINDzVtLI2BDukjWmjAIRZ0oglnCAkpP2vQjM3jdLhmT62h0xnQgciPwBRDAvHqpkPT2Wo1XuUyLyn6nbGrZQQ== + dependencies: + debug "^4.1.1" + through2 "^3.0.1" retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= -reusify@^1.0.0: +reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== @@ -18521,29 +17825,17 @@ rgba-regex@^1.0.0: resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= -right-pad@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/right-pad/-/right-pad-1.0.1.tgz#8ca08c2cbb5b55e74dafa96bf7fd1a27d568c8d0" - integrity sha1-jKCMLLtbVedNr6lr9/0aJ9VoyNA= - -rimraf@2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: +rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - rimraf@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.0.tgz#614176d4b3010b75e5c390eb0ee96f6dc0cebb9b" - integrity sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg== + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" @@ -18555,6 +17847,15 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +rocksdb@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/rocksdb/-/rocksdb-4.1.0.tgz#79c2cb716ffb9b317bdb48f80d1985410179ecac" + integrity sha512-NtjezNMuxk9NsC1kGybZ8Y9eWKqAohug88xbtxCwb5n7MhDDgtKJuL7VYUk8s8Q9U4Mzolt026k3hD8eHtoUvQ== + dependencies: + abstract-leveldown "~6.1.1" + napi-macros "~2.0.0" + node-gyp-build "~4.1.0" + rollup-plugin-string@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/rollup-plugin-string/-/rollup-plugin-string-3.0.0.tgz#fed2d6301fae1e59eb610957df757ef13fada3f0" @@ -18563,9 +17864,9 @@ rollup-plugin-string@^3.0.0: rollup-pluginutils "^2.4.1" rollup-plugin-typescript2@^0.25.0: - version "0.25.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.25.2.tgz#1a165df08560902da45b355413464caca1765d3a" - integrity sha512-+tpZj/ZIf2lwjyjX6xEW1S5Y38/21TB3p6poLodISIia8owMMfIKuFFnWcESE4FPBHkR8XPKqjY0PH9IUJJK+Q== + version "0.25.3" + resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.25.3.tgz#a5fb2f0f85488789334ce540abe6c7011cbdf40f" + integrity sha512-ADkSaidKBovJmf5VBnZBZe+WzaZwofuvYdzGAKTN/J4hN7QJCFYAq7IrH9caxlru6T5qhX41PNFS1S4HqhsGQg== dependencies: find-cache-dir "^3.0.0" fs-extra "8.1.0" @@ -18573,17 +17874,24 @@ rollup-plugin-typescript2@^0.25.0: rollup-pluginutils "2.8.1" tslib "1.10.0" -rollup-pluginutils@2.8.1, rollup-pluginutils@^2.4.1: +rollup-pluginutils@2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz#8fa6dd0697344938ef26c2c09d2488ce9e33ce97" integrity sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg== dependencies: estree-walker "^0.6.1" -rollup@^1.19.4: - version "1.25.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.25.1.tgz#905707d686dc8d7218af63dcfb9e37d1f3dc3c34" - integrity sha512-K8ytdEzMa6anHSnfTIs2BLB+NXlQ4qmWwdNHBpYQNWCbZAzj+DRVk7+ssbLSgddwpFW1nThr2GElR+jASF2NPA== +rollup-pluginutils@^2.4.1: + version "2.8.2" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" + integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== + dependencies: + estree-walker "^0.6.1" + +rollup@^1.21.4: + version "1.32.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.32.1.tgz#4480e52d9d9e2ae4b46ba0d9ddeaf3163940f9c4" + integrity sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A== dependencies: "@types/estree" "*" "@types/node" "*" @@ -18595,11 +17903,9 @@ rsvp@^4.8.4: integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== run-async@^2.2.0, run-async@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= - dependencies: - is-promise "^2.1.0" + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== run-node@^1.0.0: version "1.0.0" @@ -18619,17 +17925,17 @@ run-queue@^1.0.0, run-queue@^1.0.3: aproba "^1.1.1" rxjs-tslint-rules@^4.24.3: - version "4.25.0" - resolved "https://registry.yarnpkg.com/rxjs-tslint-rules/-/rxjs-tslint-rules-4.25.0.tgz#8f942936edfc5817f0da101ef4259d68b5e6f6ba" - integrity sha512-7CRLBwLF0Y7M3l/Jh4FyalIuO6tmnDVliw9TvUfTj5eY7aF6Ew4Rb7DCfFP8z4WCrPpNOs6QLFrq7/JPKJMfRw== + version "4.31.0" + resolved "https://registry.yarnpkg.com/rxjs-tslint-rules/-/rxjs-tslint-rules-4.31.0.tgz#caa065e21bb100c934d2e4e9b7573aee1d0644b6" + integrity sha512-So+po51d8zub+WicsXMbUwr3ynt8rpSsgATE/7609024uJddIp/gS61igIXGaUbFYP/J4xnKIcwvZ53YEYRZUQ== dependencies: - "@phenomnomnominal/tsquery" "^3.0.0" + "@phenomnomnominal/tsquery" "^4.0.0" decamelize "^3.0.0" resolve "^1.4.0" - semver "^6.0.0" + semver "^7.0.0" tslib "^1.8.0" tsutils "^3.0.0" - tsutils-etc "^1.1.0" + tsutils-etc "^1.2.2" rxjs@^5.0.0-beta.11: version "5.5.12" @@ -18638,17 +17944,10 @@ rxjs@^5.0.0-beta.11: dependencies: symbol-observable "1.0.1" -rxjs@^6.3.3, rxjs@^6.4.0, rxjs@^6.5.2, rxjs@^6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" - integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA== - dependencies: - tslib "^1.9.0" - -rxjs@^6.5.1: - version "6.5.2" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7" - integrity sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg== +rxjs@^6.0.0, rxjs@^6.3.3, rxjs@^6.4.0, rxjs@^6.5.1, rxjs@^6.5.2, rxjs@^6.5.3: + version "6.5.5" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" + integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ== dependencies: tslib "^1.9.0" @@ -18670,9 +17969,9 @@ safe-regex@^1.1.0: ret "~0.1.10" safe-stable-stringify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-1.1.0.tgz#f712b600f8f775444ccc66e8f31d250e43fdfe01" - integrity sha512-8h+96qSufNQrydRPzbHms38VftQQSRGbqUkaIMWUBWN4/N8sLNALIALa8KmFcQ8P/a9uzMkA+KY04Rj5WQiXPA== + version "1.1.1" + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz#c8a220ab525cd94e60ebf47ddc404d610dc5d84a" + integrity sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw== "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" @@ -18699,26 +17998,10 @@ sax@^1.2.4, sax@~1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -scheduler@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.12.0.tgz#8ab17699939c0aedc5a196a657743c496538647b" - integrity sha512-t7MBR28Akcp4Jm+QoR63XgAi9YgCUmgvDHqf5otgAj4QvdoBE4ImCX0ffehefePPG+aitiYHp0g/mW6s4Tp+dw== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -scheduler@^0.16.2: - version "0.16.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.16.2.tgz#f74cd9d33eff6fc554edfb79864868e4819132c1" - integrity sha512-BqYVWqwz6s1wZMhjFvLfVR5WXP7ZY32M/wYPo04CcuPM7XZEbV2TBNW7Z0UkguPTl0dWMA59VbNXxK6q+pHItg== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -scheduler@^0.17.0: - version "0.17.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.17.0.tgz#7c9c673e4ec781fac853927916d1c426b6f3ddfe" - integrity sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA== +scheduler@^0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" + integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -18732,28 +18015,15 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.0.0, schema-utils@^2.1.0, schema-utils@^2.4.1, schema-utils@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.5.0.tgz#8f254f618d402cc80257486213c8970edfd7c22f" - integrity sha512-32ISrwW2scPXHUSusP8qMg5dLUawKkyV+/qIEV9JdXKx+rsM6mi8vZY8khg2M69Qom16rtroWXD3Ybtiws38gQ== +schema-utils@^2.0.0, schema-utils@^2.0.1, schema-utils@^2.1.0, schema-utils@^2.5.0, schema-utils@^2.6.1, schema-utils@^2.6.5, schema-utils@^2.6.6: + version "2.6.6" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.6.6.tgz#299fe6bd4a3365dc23d99fd446caff8f1d6c330c" + integrity sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA== dependencies: - ajv "^6.10.2" + ajv "^6.12.0" ajv-keywords "^3.4.1" -schema-utils@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.1.0.tgz#940363b6b1ec407800a22951bdcc23363c039393" - integrity sha512-g6SViEZAfGNrToD82ZPUjq52KUPDYc+fN5+g6Euo5mLokl/9Yx14z0Cu4RR1m55HtBXejO0sBt+qw79axN+Fiw== - dependencies: - ajv "^6.1.0" - ajv-keywords "^3.1.0" - -scriptjs@^2.5.9: - version "2.5.9" - resolved "https://registry.yarnpkg.com/scriptjs/-/scriptjs-2.5.9.tgz#343915cd2ec2ed9bfdde2b9875cd28f59394b35f" - integrity sha512-qGVDoreyYiP1pkQnbnFAUIS5AjenNwwQBdl7zeos9etl+hYKWahjRTfzAZZYBv5xNHx7vNKCmaLDQZ6Fr2AEXg== - -scrypt-js@^2.0.4: +scrypt-js@^2.0.3, scrypt-js@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== @@ -18795,12 +18065,12 @@ semver-compare@^1.0.0: resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= -semver-diff@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" - integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= +semver-diff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== dependencies: - semver "^5.0.3" + semver "^6.3.0" semver-greatest-satisfied-range@^1.1.0: version "1.1.0" @@ -18809,7 +18079,7 @@ semver-greatest-satisfied-range@^1.1.0: dependencies: sver-compat "^1.5.0" -"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.2.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: +"semver@2 || 3 || 4 || 5", semver@^5.2.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -18819,15 +18089,20 @@ semver@4.3.2: resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.2.tgz#c7a07158a80bedd052355b770d82d6640f803be7" integrity sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c= -semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= +semver@^7.0.0: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== send@0.17.1: version "0.17.1" @@ -18856,20 +18131,15 @@ sentence-case@^2.1.0: no-case "^2.2.0" upper-case-first "^1.1.2" -serialize-javascript@^1.4.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.8.0.tgz#9515fc687232e2321aea1ca7a529476eb34bb480" - integrity sha512-3tHgtF4OzDmeKYj6V9nSyceRS0UJ3C7VqyD2Yj28vC/z2j6jG5FmFGahOKMD9CrglxTm3tETr87jEypaYV8DUg== - -serialize-javascript@^1.5.0, serialize-javascript@^1.7.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" - integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== +serialize-javascript@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" + integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== -serialize-javascript@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.0.tgz#9310276819efd0eb128258bb341957f6eb2fc570" - integrity sha512-a/mxFfU00QT88umAJQsNWOnUKckhNCqOl028N48e7wFmo2/EHpTo9Wso+iJJCMrQnmFvcjto5RJdAHEvVhcyUQ== +serialize-javascript@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.0.0.tgz#492e489a2d77b7b804ad391a5f5d97870952548e" + integrity sha512-skZcHYw2vEX4bw90nAr2iTTsz6x2SrHEnfxgKYmZlvJYBEZrvbKtobJWlQ20zczKb3bsHHXXTYt48zBA7ni9cw== serve-handler@6.1.2: version "6.1.2" @@ -18908,10 +18178,10 @@ serve-static@1.14.1: parseurl "~1.3.3" send "0.17.1" -serve@^11.1.0: - version "11.2.0" - resolved "https://registry.yarnpkg.com/serve/-/serve-11.2.0.tgz#0405ce95c4e4a6abd9cd3d3a04ebaa7d94638627" - integrity sha512-THZcLzDGk3vJqjhAbLkLag43tiE3V0B7wVe98Xtl+1KyAsr+4iShg+9hke4pLZmrCJu0pUg0TrbhJmdqn/MKoA== +serve@^11.1.0, serve@^11.2.0: + version "11.3.0" + resolved "https://registry.yarnpkg.com/serve/-/serve-11.3.0.tgz#1d342e13e310501ecf17b6602f1f35da640d6448" + integrity sha512-AU0g50Q1y5EVFX56bl0YX5OtVjUX1N737/Htj93dQGKuHiuLvVB45PD8Muar70W6Kpdlz8aNJfoUqTyAq9EE/A== dependencies: "@zeit/schemas" "2.6.0" ajv "6.5.3" @@ -18928,6 +18198,11 @@ set-blocking@^2.0.0, set-blocking@~2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= +set-immediate-shim@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= + set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" @@ -18990,15 +18265,6 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shelljs@0.7.6: - version "0.7.6" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.6.tgz#379cccfb56b91c8601e4793356eb5382924de9ad" - integrity sha1-N5zM+1a5HIYB5HkzVutTgpJN6a0= - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - shelljs@~0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.5.3.tgz#c54982b996c76ef0c1e6b59fbdc5825f5b713113" @@ -19009,20 +18275,15 @@ shellwords@^0.1.1: resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== -shimmer@^1.1.0, shimmer@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" - integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw== - shorthash@^0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/shorthash/-/shorthash-0.0.2.tgz#59b268eecbde59038b30da202bcfbddeb2c4a4eb" integrity sha1-WbJo7sveWQOLMNogK8+93rLEpOs= signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== signedsource@^1.0.0: version "1.0.0" @@ -19050,10 +18311,10 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" -sisteransi@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.3.tgz#98168d62b79e3a5e758e27ae63c4a053d748f4eb" - integrity sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg== +sisteransi@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== sitemap@^5.0.1: version "5.1.0" @@ -19086,29 +18347,10 @@ slice-ansi@0.0.4: resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -slide@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" - integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= - slugify@^1.3.3: - version "1.3.5" - resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.3.5.tgz#90210678818b6d533cb060083aed0e8238133508" - integrity sha512-5VCnH7aS13b0UqWOs7Ef3E5rkhFe8Od+cp7wybFv5mv/sYSRkucZlJX0bamAJky7b2TTtGvrJBWVdpdEicsSrA== - -smart-buffer@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.0.2.tgz#5207858c3815cc69110703c6b94e46c15634395d" - integrity sha512-JDhEpTKzXusOqXZ0BUIdH+CjFdO/CR3tLlf5CN34IypI+xMmXW1uB16OOY8z3cICbJlDAVJzNbwBhNO0wt9OAw== + version "1.4.0" + resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.4.0.tgz#c9557c653c54b0c7f7a8e786ef3431add676d2cb" + integrity sha512-FtLNsMGBSRB/0JOE2A0fxlqjI6fJsgHGS13iTuVT28kViI4JjUiNqp/vyis0ZXYcMnpR3fzGNkv+6vRlI2GwdQ== snake-case@^2.1.0: version "2.1.0" @@ -19117,6 +18359,11 @@ snake-case@^2.1.0: dependencies: no-case "^2.2.0" +snakeize@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/snakeize/-/snakeize-0.1.0.tgz#10c088d8b58eb076b3229bb5a04e232ce126422d" + integrity sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0= + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -19148,9 +18395,9 @@ snapdragon@^0.8.1: use "^3.1.0" socket.io-adapter@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" - integrity sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs= + version "1.1.2" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz#ab3f0d6f66b8fc7fca3959ab5991f82221789be9" + integrity sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g== socket.io-client@2.3.0, socket.io-client@^2.2.0: version "2.3.0" @@ -19222,27 +18469,12 @@ sockjs@0.3.19: faye-websocket "^0.10.0" uuid "^3.0.1" -socks-proxy-agent@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" - integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== - dependencies: - agent-base "~4.2.1" - socks "~2.3.2" - -socks@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.2.tgz#ade388e9e6d87fdb11649c15746c578922a5883e" - integrity sha512-pCpjxQgOByDHLlNqlnh/mNSAxIUkyBBuwwhTcV+enZGbDaClPvHdvm6uvOwZfFJkam7cGhBNbb4JxiP8UZkRvQ== - dependencies: - ip "^1.1.5" - smart-buffer "4.0.2" - sonic-boom@^0.7.5: - version "0.7.6" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-0.7.6.tgz#c42df6df884a6a3d54fa7a45b11e4e2196818d45" - integrity sha512-k9E2QQ4zxuVRLDW+ZW6ISzJs3wlEorVdmM7ApDgor7wsGKSDG5YGHsGmgLY4XYh4DMlr/2ap2BWAE7yTFJtWnQ== + version "0.7.7" + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-0.7.7.tgz#d921de887428208bfa07b0ae32c278de043f350a" + integrity sha512-Ei5YOo5J64GKClHIL/5evJPgASXFVpfVYbJV9PILZQytTK6/LCwHvsZJW2Ig4p9FMC2OrBrMnXKgRN/OEoAWfg== dependencies: + atomic-sleep "^1.0.0" flatstr "^1.0.12" sort-keys-length@^1.0.0: @@ -19272,11 +18504,11 @@ source-list-map@^2.0.0: integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== dependencies: - atob "^2.1.1" + atob "^2.1.2" decode-uri-component "^0.2.0" resolve-url "^0.2.1" source-map-url "^0.4.0" @@ -19289,18 +18521,10 @@ source-map-support@^0.4.15: dependencies: source-map "^0.5.6" -source-map-support@^0.5.16: - version "0.5.16" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" - integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-support@^0.5.6, source-map-support@^0.5.9, source-map-support@~0.5.12: - version "0.5.13" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== +source-map-support@^0.5.13, source-map-support@^0.5.16, source-map-support@^0.5.17, source-map-support@^0.5.6, source-map-support@~0.5.12: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -19310,7 +18534,7 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7: +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -19326,9 +18550,9 @@ source-map@^0.7.3: integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== space-separated-tokens@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.4.tgz#27910835ae00d0adfcdbd0ad7e611fb9544351fa" - integrity sha512-UyhMSmeIqZrQn2UdjYpxEkwY9JUrn8pP+7L4f91zRzOQuI8MF1FGLfYU9DKCYeLdo7LXMxwrX5zKFy7eeeVHuA== + version "1.1.5" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" + integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== spark-md5@3.0.0: version "3.0.0" @@ -19366,9 +18590,9 @@ spdx-correct@^3.0.0: spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: version "3.0.0" @@ -19401,9 +18625,9 @@ spdy-transport@^3.0.0: wbuf "^1.7.3" spdy@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.1.tgz#6f12ed1c5db7ea4f24ebb8b89ba58c87c08257f2" - integrity sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA== + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== dependencies: debug "^4.1.0" handle-thing "^2.0.0" @@ -19411,11 +18635,6 @@ spdy@^4.0.1: select-hose "^2.0.0" spdy-transport "^3.0.0" -specificity@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019" - integrity sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg== - split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -19423,13 +18642,6 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" -split2@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" - integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw== - dependencies: - through2 "^2.0.2" - split2@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/split2/-/split2-3.1.1.tgz#c51f18f3e06a8c4469aaab487687d8d956160bb6" @@ -19459,10 +18671,10 @@ sql-summary@^1.0.1: resolved "https://registry.yarnpkg.com/sql-summary/-/sql-summary-1.0.1.tgz#a2dddb5435bae294eb11424a7330dc5bafe09c2b" integrity sha512-IpCr2tpnNkP3Jera4ncexsZUp0enJBLr+pHCyTweMUBrbJsTgQeLWx1FXLhoBj/MvcnUQpkgOn2EY8FKOkUzww== -sqlite3@^4.0.4: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-4.1.0.tgz#e051fb9c133be15726322a69e2e37ec560368380" - integrity sha512-RvqoKxq+8pDHsJo7aXxsFR18i+dU2Wp5o12qAJOV5LNcDt+fgJsc2QKKg3sIRfXrN9ZjzY1T7SNe/DFVqAXjaw== +sqlite3@4.0.9: + version "4.0.9" + resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-4.0.9.tgz#cff74550fa5a1159956815400bdef69245557640" + integrity sha512-IkvzjmsWQl9BuBiM4xKpl5X8WCR4w0AeJHRdobCdXZ8dT/lNc1XS6WqvY35N6+YzIIgzSBeY5prdFObID9F9tA== dependencies: nan "^2.12.1" node-pre-gyp "^0.11.0" @@ -19483,7 +18695,7 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@^6.0.0, ssri@^6.0.1: +ssri@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== @@ -19491,12 +18703,12 @@ ssri@^6.0.0, ssri@^6.0.1: figgy-pudding "^3.5.1" ssri@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-7.0.1.tgz#b0cab7bbb11ac9ea07f003453e2011f8cbed9f34" - integrity sha512-FfndBvkXL9AHyGLNzU3r9AvYIBBZ7gm+m+kd0p8cT3/v4OliMAyipZAhLVEv1Zi/k4QFq9CstRGVd9pW/zcHFQ== + version "7.1.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-7.1.0.tgz#92c241bf6de82365b5c7fb4bd76e975522e1294d" + integrity sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g== dependencies: figgy-pudding "^3.5.1" - minipass "^3.0.0" + minipass "^3.1.1" stable@^0.1.8: version "0.1.8" @@ -19513,11 +18725,6 @@ stack-utils@^1.0.1: resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== -state-toggle@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.2.tgz#75e93a61944116b4959d665c8db2d243631d6ddc" - integrity sha512-8LpelPGR0qQM4PnfLiplOQNJcIN1/r2Gy0xKB2zKnIW2YzPMt2sR4I/+gtPjhN7Svh9kw+zqEg2SFwpBO9iNiw== - static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -19566,6 +18773,13 @@ stream-each@^1.1.0: end-of-stream "^1.1.0" stream-shift "^1.0.0" +stream-events@^1.0.1, stream-events@^1.0.4, stream-events@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/stream-events/-/stream-events-1.0.5.tgz#bbc898ec4df33a4902d892333d47da9bf1c406d5" + integrity sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg== + dependencies: + stubs "^3.0.0" + stream-exhaust@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/stream-exhaust/-/stream-exhaust-1.0.2.tgz#acdac8da59ef2bc1e17a2c0ccf6c320d120e555d" @@ -19583,9 +18797,9 @@ stream-http@^2.7.2: xtend "^4.0.0" stream-shift@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" - integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== stream-to-observable@^0.1.0: version "0.1.0" @@ -19617,11 +18831,6 @@ string-length@^2.0.0: astral-regex "^1.0.0" strip-ansi "^4.0.0" -string-template@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" - integrity sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0= - string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -19648,30 +18857,48 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string-width@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.1.0.tgz#ba846d1daa97c3c596155308063e075ed1c99aff" - integrity sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ== +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" - strip-ansi "^5.2.0" + strip-ansi "^6.0.0" -string.prototype.trimleft@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" - integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== +string.prototype.trimend@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== dependencies: define-properties "^1.1.3" - function-bind "^1.1.1" + es-abstract "^1.17.5" -string.prototype.trimright@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" - integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== +string.prototype.trimleft@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc" + integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw== dependencies: define-properties "^1.1.3" - function-bind "^1.1.1" + es-abstract "^1.17.5" + string.prototype.trimstart "^1.0.0" + +string.prototype.trimright@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3" + integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string.prototype.trimend "^1.0.0" + +string.prototype.trimstart@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" @@ -19692,16 +18919,6 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -stringify-entities@^1.0.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.2.tgz#a98417e5471fd227b3e45d3db1861c11caf668f7" - integrity sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A== - dependencies: - character-entities-html4 "^1.0.0" - character-entities-legacy "^1.0.0" - is-alphanumerical "^1.0.0" - is-hexadecimal "^1.0.0" - stringify-entities@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-2.0.0.tgz#fa7ca6614b355fb6c28448140a20c4ede7462827" @@ -19748,16 +18965,18 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + strip-bom-string@1.X, strip-bom-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" integrity sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI= -strip-bom@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" @@ -19795,28 +19014,16 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= - dependencies: - get-stdin "^4.0.1" - -strip-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= +strip-json-comments@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180" + integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w== -strip-json-comments@2.0.1, strip-json-comments@~2.0.1: +strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -strip-json-comments@3.0.1, strip-json-comments@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" - integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== - strip-outer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" @@ -19824,14 +19031,10 @@ strip-outer@^1.0.0: dependencies: escape-string-regexp "^1.0.2" -strong-log-transformer@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" - integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== - dependencies: - duplexer "^0.1.1" - minimist "^1.2.0" - through "^2.3.4" +stubs@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/stubs/-/stubs-3.0.0.tgz#e8d2ba1fa9c90570303c030b6900f7d5f89abe5b" + integrity sha1-6NK6H6nJBXAwPAMLaQD31fiavls= style-loader@0.23.1: version "0.23.1" @@ -19841,19 +19044,6 @@ style-loader@0.23.1: loader-utils "^1.1.0" schema-utils "^1.0.0" -style-loader@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.0.0.tgz#1d5296f9165e8e2c85d24eee0b7caf9ec8ca1f82" - integrity sha512-B0dOCFwv7/eY31a5PCieNwMgMhVGFe9w+rh7s/Bx8kfFkrth9zfTZquoYvdw8URgiqxObQKcpW51Ugz1HjfdZw== - dependencies: - loader-utils "^1.2.3" - schema-utils "^2.0.1" - -style-search@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" - integrity sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI= - styled-components@^4.1.3: version "4.4.1" resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-4.4.1.tgz#e0631e889f01db67df4de576fedaca463f05c2f2" @@ -19887,87 +19077,6 @@ stylehacks@^4.0.0: postcss "^7.0.0" postcss-selector-parser "^3.0.0" -stylelint-config-recommended@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-3.0.0.tgz#e0e547434016c5539fe2650afd58049a2fd1d657" - integrity sha512-F6yTRuc06xr1h5Qw/ykb2LuFynJ2IxkKfCMf+1xqPffkxh0S09Zc902XCffcsw/XMFq/OzQ1w54fLIDtmRNHnQ== - -stylelint-config-standard@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-19.0.0.tgz#66f0cf13f33b8a9e34965881493b38fc1313693a" - integrity sha512-VvcODsL1PryzpYteWZo2YaA5vU/pWfjqBpOvmeA8iB2MteZ/ZhI1O4hnrWMidsS4vmEJpKtjdhLdfGJmmZm6Cg== - dependencies: - stylelint-config-recommended "^3.0.0" - -stylelint-config-styled-components@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/stylelint-config-styled-components/-/stylelint-config-styled-components-0.1.1.tgz#b408388d7c687833ab4be4c4e6522d97d2827ede" - integrity sha512-z5Xz/9GmvxO6e/DLzBMwkB85zHxEEjN6K7Cj80Bi+o/9vR9eS3GX3E9VuMnX9WLFYulqbqLtTapGGY28JBiy9Q== - -stylelint-processor-styled-components@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/stylelint-processor-styled-components/-/stylelint-processor-styled-components-1.8.0.tgz#7dc48c6c95f9c3c9daa49efa5f3d1be49e7296e2" - integrity sha512-sADydhLPwtR9YJBydlO6X209sjT3rG9nr7sn/cEFZtoeZF3tI60HtxIOFC12vVVMvpKFS+E0smMiKA6FcVZO9A== - dependencies: - "@babel/parser" "^7.0.0" - "@babel/traverse" "^7.0.0" - micromatch "^4.0.2" - postcss "^7.0.0" - -stylelint@^11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-11.1.1.tgz#6dbbb348036576ac6b033ddfedba72a877c1d6bb" - integrity sha512-Vx6TAJsxG6qksiFvxQTKriQhp1CqUWdpTDITEkAjTR+l+8Af7qNlvrUDXfpuFJgXh/ayF8xdMSKE+SstcsPmMA== - dependencies: - autoprefixer "^9.5.1" - balanced-match "^1.0.0" - chalk "^2.4.2" - cosmiconfig "^5.2.0" - debug "^4.1.1" - execall "^2.0.0" - file-entry-cache "^5.0.1" - get-stdin "^7.0.0" - global-modules "^2.0.0" - globby "^9.2.0" - globjoin "^0.1.4" - html-tags "^3.0.0" - ignore "^5.0.6" - import-lazy "^4.0.0" - imurmurhash "^0.1.4" - known-css-properties "^0.16.0" - leven "^3.1.0" - lodash "^4.17.14" - log-symbols "^3.0.0" - mathml-tag-names "^2.1.0" - meow "^5.0.0" - micromatch "^4.0.0" - normalize-selector "^0.2.0" - postcss "^7.0.14" - postcss-html "^0.36.0" - postcss-jsx "^0.36.3" - postcss-less "^3.1.4" - postcss-markdown "^0.36.0" - postcss-media-query-parser "^0.2.3" - postcss-reporter "^6.0.1" - postcss-resolve-nested-selector "^0.1.1" - postcss-safe-parser "^4.0.1" - postcss-sass "^0.4.1" - postcss-scss "^2.0.0" - postcss-selector-parser "^3.1.0" - postcss-syntax "^0.36.2" - postcss-value-parser "^4.0.2" - resolve-from "^5.0.0" - signal-exit "^3.0.2" - slash "^3.0.0" - specificity "^0.4.1" - string-width "^4.1.0" - strip-ansi "^5.2.0" - style-search "^0.1.0" - sugarss "^2.0.0" - svg-tags "^1.0.0" - table "^5.2.3" - v8-compile-cache "^2.1.0" - stylis-rule-sheet@^0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz#44e64a2b076643f4b52e5ff71efc04d8c3c4a430" @@ -19978,13 +19087,6 @@ stylis@^3.5.0: resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.4.tgz#f665f25f5e299cf3d64654ab949a57c768b73fbe" integrity sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q== -sugarss@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-2.0.0.tgz#ddd76e0124b297d40bf3cca31c8b22ecb43bc61d" - integrity sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ== - dependencies: - postcss "^7.0.2" - supports-color@5.5.0, supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -19992,13 +19094,6 @@ supports-color@5.5.0, supports-color@^5.3.0, supports-color@^5.5.0: dependencies: has-flag "^3.0.0" -supports-color@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" - integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== - dependencies: - has-flag "^3.0.0" - supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -20018,6 +19113,13 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + sver-compat@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/sver-compat/-/sver-compat-1.5.0.tgz#3cf87dfeb4d07b4a3f14827bc186b3fd0c645cd8" @@ -20026,22 +19128,17 @@ sver-compat@^1.5.0: es6-iterator "^2.0.1" es6-symbol "^3.1.1" -svg-tags@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" - integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= - svgo@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.0.tgz#bae51ba95ded9a33a36b7c46ce9c359ae9154313" - integrity sha512-MLfUA6O+qauLDbym+mMZgtXCGRfIxyQoeH6IKVcFslyODEe/ElJNwr0FohQ3xG4C6HK6bk3KYPPXwHVJk3V5NQ== + version "1.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== dependencies: chalk "^2.4.1" coa "^2.0.2" css-select "^2.0.0" css-select-base-adapter "^0.1.1" - css-tree "1.0.0-alpha.33" - csso "^3.5.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" js-yaml "^3.13.1" mkdirp "~0.5.1" object.values "^1.1.0" @@ -20080,15 +19177,12 @@ symbol-tree@^3.2.2: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== +synchronized-promise@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/synchronized-promise/-/synchronized-promise-0.3.1.tgz#2cb9c1b1a203da7301c3ef068285a4e6d198ea0e" + integrity sha512-Iy+JzrERSUrwpOHUDku8HHIddk8V6iLG9bPIzboP2i5RYkn2eSmRB8waSaX7Rc/+DUUsnFsoOHrmniwOp9BOgw== dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" + deasync "^0.1.15" tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" @@ -20096,12 +19190,12 @@ tapable@^1.0.0, tapable@^1.1.3: integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== tar-fs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.0.0.tgz#677700fc0c8b337a78bee3623fdc235f21d7afad" - integrity sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA== + version "2.0.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.0.1.tgz#e44086c1c60d31a4f0cf893b1c4e155dabfae9e2" + integrity sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA== dependencies: chownr "^1.1.1" - mkdirp "^0.5.1" + mkdirp-classic "^0.5.2" pump "^3.0.0" tar-stream "^2.0.0" @@ -20119,17 +19213,17 @@ tar-stream@^1.5.2: xtend "^4.0.0" tar-stream@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.0.tgz#d1aaa3661f05b38b5acc9b7020efdca5179a2cc3" - integrity sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw== + version "2.1.2" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.2.tgz#6d5ef1a7e5783a95ff70b69b97455a5968dc1325" + integrity sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q== dependencies: - bl "^3.0.0" + bl "^4.0.1" end-of-stream "^1.4.1" fs-constants "^1.0.0" inherits "^2.0.3" readable-stream "^3.1.1" -tar@^4, tar@^4.4.10, tar@^4.4.12, tar@^4.4.8: +tar@^4: version "4.4.13" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== @@ -20154,43 +19248,32 @@ tar@^5.0.0: mkdirp "^0.5.0" yallist "^4.0.0" -tarn@^1.1.4: - version "1.1.5" - resolved "https://registry.yarnpkg.com/tarn/-/tarn-1.1.5.tgz#7be88622e951738b9fa3fb77477309242cdddc2d" - integrity sha512-PMtJ3HCLAZeedWjJPgGnCvcphbCOMbtZpjKgLq3qM5Qq9aQud+XHrL0WlrlgnTyS8U+jrjGbEXprFcQrxPy52g== - -tdigest@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/tdigest/-/tdigest-0.1.1.tgz#2e3cb2c39ea449e55d1e6cd91117accca4588021" - integrity sha1-Ljyyw56kSeVdHmzZEReszKRYgCE= - dependencies: - bintrees "1.0.1" +tarn@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/tarn/-/tarn-2.0.0.tgz#c68499f69881f99ae955b4317ca7d212d942fdee" + integrity sha512-7rNMCZd3s9bhQh47ksAQd92ADFcJUjjbyOvyFjNLwTPpGieFHMC84S+LOzw0fx1uh6hnDz/19r8CPMnIjJlMMA== -teeny-request@^3.11.3: - version "3.11.3" - resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-3.11.3.tgz#335c629f7645e5d6599362df2f3230c4cbc23a55" - integrity sha512-CKncqSF7sH6p4rzCgkb/z/Pcos5efl0DmolzvlqRQUNcpRIruOhY9+T1FsIlyEbfWd7MsFpodROOwHYh2BaXzw== +teeny-request@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-6.0.1.tgz#9b1f512cef152945827ba7e34f62523a4ce2c5b0" + integrity sha512-TAK0c9a00ELOqLrZ49cFxvPVogMUFaWY8dUsQc/0CuQPGF+BOxOQzXfE413BAk2kLomwNplvdtMpeaeGWmoc2g== dependencies: - https-proxy-agent "^2.2.1" + http-proxy-agent "^4.0.0" + https-proxy-agent "^4.0.0" node-fetch "^2.2.0" + stream-events "^1.0.5" uuid "^3.3.2" -temp-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" - integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= - -temp-write@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-3.4.0.tgz#8cff630fb7e9da05f047c74ce4ce4d685457d492" - integrity sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI= +teeny-request@^6.0.0: + version "6.0.3" + resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-6.0.3.tgz#b617f9d5b7ba95c76a3f257f6ba2342b70228b1f" + integrity sha512-TZG/dfd2r6yeji19es1cUIwAlVD8y+/svB1kAC2Y0bjEyysrfbO8EZvJBRwIE6WkwmUoB7uvWLwTIhJbMXZ1Dw== dependencies: - graceful-fs "^4.1.2" - is-stream "^1.1.0" - make-dir "^1.0.0" - pify "^3.0.0" - temp-dir "^1.0.0" - uuid "^3.0.1" + http-proxy-agent "^4.0.0" + https-proxy-agent "^5.0.0" + node-fetch "^2.2.0" + stream-events "^1.0.5" + uuid "^7.0.0" term-size@^1.2.0: version "1.2.0" @@ -20199,39 +19282,55 @@ term-size@^1.2.0: dependencies: execa "^0.7.0" -terser-webpack-plugin@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4" - integrity sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg== +term-size@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753" + integrity sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw== + +ternary-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ternary-stream/-/ternary-stream-3.0.0.tgz#7951930ea9e823924d956f03d516151a2d516253" + integrity sha512-oIzdi+UL/JdktkT+7KU5tSIQjj8pbShj3OASuvDEhm0NT5lppsm7aXWAmAq4/QMaBIyfuEcNLbAQA+HpaISobQ== + dependencies: + duplexify "^4.1.1" + fork-stream "^0.0.4" + merge-stream "^2.0.0" + through2 "^3.0.1" + +terser-webpack-plugin@^1.4.1, terser-webpack-plugin@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" + integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA== dependencies: cacache "^12.0.2" find-cache-dir "^2.1.0" is-wsl "^1.1.0" schema-utils "^1.0.0" - serialize-javascript "^1.7.0" + serialize-javascript "^2.1.2" source-map "^0.6.1" terser "^4.1.2" webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser-webpack-plugin@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.2.1.tgz#5569e6c7d8be79e5e43d6da23acc3b6ba77d22bd" - integrity sha512-jwdauV5Al7zopR6OAYvIIRcxXCSvLjZjr7uZE8l2tIWb/ryrGN48sJftqGf5k9z09tWhajx53ldp0XPI080YnA== +terser-webpack-plugin@^2.2.1: + version "2.3.6" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.6.tgz#a4014b311a61f87c6a1b217ef4f5a75bd0665a69" + integrity sha512-I8IDsQwZrqjdmOicNeE8L/MhwatAap3mUrtcAKJuilsemUNcX+Hier/eAzwStVqhlCxq0aG3ni9bK/0BESXkTg== dependencies: cacache "^13.0.1" - find-cache-dir "^3.0.0" - jest-worker "^24.9.0" - schema-utils "^2.5.0" - serialize-javascript "^2.1.0" + find-cache-dir "^3.3.1" + jest-worker "^25.4.0" + p-limit "^2.3.0" + schema-utils "^2.6.6" + serialize-javascript "^3.0.0" source-map "^0.6.1" - terser "^4.3.9" + terser "^4.6.12" webpack-sources "^1.4.3" -terser@^4.1.2, terser@^4.3.9: - version "4.3.9" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.3.9.tgz#e4be37f80553d02645668727777687dad26bbca8" - integrity sha512-NFGMpHjlzmyOtPL+fDw3G7+6Ueh/sz4mkaUYa4lJCxOPTNzd0Uj0aZJOmsDYoSQyfuVoWDMSWTPU3huyOm2zdA== +terser@^4.1.2, terser@^4.6.12: + version "4.6.13" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.13.tgz#e879a7364a5e0db52ba4891ecde007422c56a916" + integrity sha512-wMvqukYgVpQlymbnNbabVZbtM6PN63AzqexpwJL8tbh/mRT9LE5o+ruVduAGL7D6Fpjl+Q+06U5I9Ul82odAhw== dependencies: commander "^2.20.0" source-map "~0.6.1" @@ -20247,20 +19346,15 @@ test-exclude@^5.2.3: read-pkg-up "^4.0.0" require-main-filename "^2.0.0" -text-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-2.0.0.tgz#43eabd1b495482fae4a2bf65e5f56c29f69220f6" - integrity sha512-F91ZqLgvi1E0PdvmxMgp+gcf6q8fMH7mhdwWfzXnl1k+GbpQDmi8l7DzLC5JTASKbwpY3TfxajAUzAXcv2NmsQ== - text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= textextensions@2: - version "2.5.0" - resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-2.5.0.tgz#e21d3831dafa37513dd80666dff541414e314293" - integrity sha512-1IkVr355eHcomgK7fgj1Xsokturx6L5S2JRT5WcRdA6v5shk9sxWuO/w/VbpQexwkXJMQIa/j1dBi3oo7+HhcA== + version "2.6.0" + resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-2.6.0.tgz#d7e4ab13fe54e32e08873be40d51b74229b00fc4" + integrity sha512-49WtAWS+tcsy93dRt6P0P3AMD2m5PvXRhuEA0kaXos5ZLlujtYmpmFsB+QvWUSxE1ZsstmYXfQ7L40+EcQgpAQ== theming@^1.3.0: version "1.3.0" @@ -20295,15 +19389,6 @@ thread-loader@^2.1.3: loader-utils "^1.1.0" neo-async "^2.6.0" -thriftrw@^3.5.0: - version "3.11.3" - resolved "https://registry.yarnpkg.com/thriftrw/-/thriftrw-3.11.3.tgz#2cef6b4d089b7ba6275198b86582881582907d45" - integrity sha512-mnte80Go5MCfYyOQ9nk6SljaEicCXlwLchupHR+/zlx0MKzXwAiyt38CHjLZVvKtoyEzirasXuNYtkEjgghqCw== - dependencies: - bufrw "^1.2.1" - error "7.0.2" - long "^2.4.0" - throat@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" @@ -20322,7 +19407,7 @@ through2-filter@^3.0.0: through2 "~2.0.0" xtend "~4.0.0" -through2@2.X, through2@^2.0.0, through2@^2.0.2, through2@^2.0.3, through2@~2.0.0: +through2@2.X, through2@^2.0.0, through2@^2.0.3, through2@~2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== @@ -20345,7 +19430,7 @@ through2@~0.4.1: readable-stream "~1.0.17" xtend "~2.1.1" -through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8: +through@2, through@^2.3.6, through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -20355,12 +19440,10 @@ thunky@^1.0.2: resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== -tildify@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/tildify/-/tildify-1.2.0.tgz#dcec03f55dca9b7aa3e5b04f21817eb56e63588a" - integrity sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo= - dependencies: - os-homedir "^1.0.0" +tildify@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/tildify/-/tildify-2.0.0.tgz#f205f3674d677ce698b7067a99e949ce03b4754a" + integrity sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw== time-stamp@^1.0.0: version "1.1.0" @@ -20368,11 +19451,11 @@ time-stamp@^1.0.0: integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM= timeago.js@^4.0.0-beta.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timeago.js/-/timeago.js-4.0.1.tgz#4be4aa19565ceaeb0da31fe14e01ce6ca4742da6" - integrity sha512-ePzZuMoJqUc44hJbUYtY1qtzU7IammxooDCcFKogLkS5Nj+iCabR0ZlmNOFX8Dm1r5EpvR5q/PotOJli/mEPew== + version "4.0.2" + resolved "https://registry.yarnpkg.com/timeago.js/-/timeago.js-4.0.2.tgz#724e8c8833e3490676c7bb0a75f5daf20e558028" + integrity sha512-a7wPxPdVlQL7lqvitHGGRsofhdwtkoSXPGATFuSOA2i1ZNQEPLrGnj68vOp2sOJTCFAQVXPeNMX/GctBaO9L2w== -timed-out@^4.0.0, timed-out@^4.0.1: +timed-out@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= @@ -20403,9 +19486,9 @@ tiny-emitter@^2.0.0: integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== tiny-invariant@^1.0.2: - version "1.0.6" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73" - integrity sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA== + version "1.1.0" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" + integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== tiny-warning@^1.0.0: version "1.0.3" @@ -20491,6 +19574,11 @@ to-object-path@^0.3.0: dependencies: kind-of "^3.0.2" +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" @@ -20557,7 +19645,7 @@ touch@^3.1.0: dependencies: nopt "~1.0.10" -tough-cookie@^2.3.1, tough-cookie@^2.3.3, tough-cookie@^2.3.4: +tough-cookie@^2.3.1, tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== @@ -20581,29 +19669,14 @@ tr46@^1.0.1: punycode "^2.1.0" trackjs@^3.7.0: - version "3.7.2" - resolved "https://registry.yarnpkg.com/trackjs/-/trackjs-3.7.2.tgz#a43e813df11038be76df2d35bcef512d4d8c059c" - integrity sha512-0V+6HS8wW0haeEHDqxYSwx2vHVQd1v1tb6Gudryx+FWVCjm4ApM4hLJV6c/qvk6mT7bW2kx1uuvCuR9vKBUG9g== + version "3.7.3" + resolved "https://registry.yarnpkg.com/trackjs/-/trackjs-3.7.3.tgz#c14a36f1f1ea1e6614656c233d71744927ea839a" + integrity sha512-N4RuNdgKAlURgOrl+AfENtIN+Dv2ZhFwGromFvmypOP2EvJlrlOMN8DOrNkBSHX4MKTfAwhqBOexRG3l1mOD5Q== tree-kill@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.1.tgz#5398f374e2f292b9dcc7b2e71e30a5c3bb6c743a" - integrity sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q== - -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= - -trim-newlines@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" - integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= - -trim-off-newlines@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" - integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== trim-repeated@^1.0.0: version "1.0.0" @@ -20617,20 +19690,10 @@ trim-right@^1.0.1: resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= -trim-trailing-lines@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.2.tgz#d2f1e153161152e9f02fabc670fb40bec2ea2e3a" - integrity sha512-MUjYItdrqqj2zpcHFTkMa9WAv4JHTI6gnRQGPFLrt5L9a6tRMiDnIqYl8JBvu2d2Tc3lWJKQwlGCp0K8AvCM+Q== - -trim@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" - integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= - trough@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.4.tgz#3b52b1f13924f460c3fbfd0df69b587dbcbc762e" - integrity sha512-tdzBRDGWcI1OpPVmChbdSKhvSVurznZ8X36AYURAcl+0o2ldlCY2XPzyXNNxwJwwyIU+rIglTCG4kxtNKBQH7Q== + version "1.0.5" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" + integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== tryer@^1.0.1: version "1.0.1" @@ -20644,10 +19707,10 @@ ts-invariant@^0.4.0: dependencies: tslib "^1.9.3" -ts-jest@^24.0.2: - version "24.1.0" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-24.1.0.tgz#2eaa813271a2987b7e6c3fefbda196301c131734" - integrity sha512-HEGfrIEAZKfu1pkaxB9au17b1d9b56YZSqz5eCVE8mX68+5reOvlM93xGOzzCREIov9mdH7JBG+s0UyNAqr0tQ== +ts-jest@^24.1.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-24.3.0.tgz#b97814e3eab359ea840a1ac112deae68aa440869" + integrity sha512-Hb94C/+QRIgjVZlJyiWwouYUF+siNJHJHknyspaOcZ+OQAIdFG/UrdQVXw/0B8Z3No34xkUXZJpOTy9alOWdVQ== dependencies: bs-logger "0.x" buffer-from "1.x" @@ -20660,10 +19723,10 @@ ts-jest@^24.0.2: semver "^5.5" yargs-parser "10.x" -ts-loader@^6.0.4: - version "6.2.0" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-6.2.0.tgz#52d3993ecbc5474c1513242388e1049da0fce880" - integrity sha512-Da8h3fD+HiZ9GvZJydqzk3mTC9nuOKYlJcpuk+Zv6Y1DPaMvBL+56GRzZFypx2cWrZFMsQr869+Ua2slGoLxvQ== +ts-loader@^6.1.0: + version "6.2.2" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-6.2.2.tgz#dffa3879b01a1a1e0a4b85e2b8421dc0dfff1c58" + integrity sha512-HDo5kXZCBml3EUPcc7RlZOV/JGlLHwppTLEHb3SHnr5V7NXD4klMEkrhJe5wgRbaWsSXi+Y1SIBN/K9B6zWGWQ== dependencies: chalk "^2.3.0" enhanced-resolve "^4.0.0" @@ -20671,22 +19734,27 @@ ts-loader@^6.0.4: micromatch "^4.0.0" semver "^6.0.0" -ts-node@^8.3.0: - version "8.4.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.4.1.tgz#270b0dba16e8723c9fa4f9b4775d3810fd994b4f" - integrity sha512-5LpRN+mTiCs7lI5EtbXmF/HfMeCjzt7DH9CZwtkr6SywStrNQC723wG+aOWFiLNn7zT3kD/RnFqi3ZUfr4l5Qw== +ts-node@^8.4.1: + version "8.10.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.10.1.tgz#77da0366ff8afbe733596361d2df9a60fc9c9bd3" + integrity sha512-bdNz1L4ekHiJul6SHtZWs1ujEKERJnHs4HxN7rjTyyVOFf3HaJ6sLqe6aPG62XTzAB/63pKRh5jTSWL0D7bsvw== dependencies: arg "^4.1.0" diff "^4.0.1" make-error "^1.1.1" - source-map-support "^0.5.6" - yn "^3.0.0" + source-map-support "^0.5.17" + yn "3.1.1" -tslib@1.10.0, tslib@^1.10.0, tslib@^1.7.1, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== +tslib@^1.10.0, tslib@^1.7.1, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: + version "1.11.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" + integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== + tslint-clean-code@^0.2.9: version "0.2.10" resolved "https://registry.yarnpkg.com/tslint-clean-code/-/tslint-clean-code-0.2.10.tgz#eaba79fb92d52bebf5ee1177054f056b2233fafa" @@ -20730,10 +19798,10 @@ tslint-sonarts@^1.9.0: dependencies: immutable "^3.8.2" -tslint@^5.18.0: - version "5.20.0" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.20.0.tgz#fac93bfa79568a5a24e7be9cdde5e02b02d00ec1" - integrity sha512-2vqIvkMHbnx8acMogAERQ/IuINOq6DFqgF8/VDvhEkBqQh/x6SP0Y+OHnKth9/ZcHQSroOZwUQSN18v8KKF0/g== +tslint@^5.20.0, tslint@^5.20.1: + version "5.20.1" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d" + integrity sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg== dependencies: "@babel/code-frame" "^7.0.0" builtin-modules "^1.1.1" @@ -20754,10 +19822,10 @@ tsscmp@1.0.6: resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA== -tsutils-etc@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/tsutils-etc/-/tsutils-etc-1.1.0.tgz#82ce1c92da29e07d3cde95692d5c5e8dbdc92fd0" - integrity sha512-pJlLtLmQPUyGHqY/Pq6EGnpGmQCnnTDZetQ7eWkeQ5xaw4GtfcR1Zt7HMKFHGDDp53HzQfbqQ+7ps6iJbfa9Hw== +tsutils-etc@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tsutils-etc/-/tsutils-etc-1.2.2.tgz#cdeeb777574a5c1b15b27658cb8424f7f7139831" + integrity sha512-5g2cXpD1OoVc/MLZxh5PuHXhlnYQmuRiW66e1n91j+2J/Pw5lfmVcZAghoDVBdltDXGaCjy8ZttXaX2u/MjHgg== tsutils@2.7.1: version "2.7.1" @@ -20811,21 +19879,21 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-fest@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" - integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== - -type-fest@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.5.2.tgz#d6ef42a0356c6cd45f49485c3b6281fc148e48a2" - integrity sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw== +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== type-fest@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + type-is@^1.6.16, type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -20835,11 +19903,16 @@ type-is@^1.6.16, type-is@~1.6.17, type-is@~1.6.18: mime-types "~2.1.24" type@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/type/-/type-1.0.3.tgz#16f5d39f27a2d28d86e48f8981859e9d3296c179" - integrity sha512-51IMtNfVcee8+9GJvj0spSuFcZHe9vSib6Xtgsny1Km9ugyz2mbS08I3rsUIRYgJohFRFU1160sgRodYz378Hg== + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3" + integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow== -typedarray-to-buffer@~3.1.5: +typedarray-to-buffer@^3.1.5, typedarray-to-buffer@~3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== @@ -20856,35 +19929,20 @@ typescript-fsa-reducers@^1.2.1: resolved "https://registry.yarnpkg.com/typescript-fsa-reducers/-/typescript-fsa-reducers-1.2.1.tgz#2af1a85f7b88fb0dfb9fa59d5da51a5d7ac6543f" integrity sha512-Qgn7zEnAU5n3YEWEL5ooEmIWZl9B4QyXD4Y/0DqpUzF0YuTrcsLa7Lht0gFXZ+xqLJXQwo3fEiTfQTDF1fBnMg== -typescript-fsa@^3.0.0: +typescript-fsa@^3.0.0-beta-2: version "3.0.0" resolved "https://registry.yarnpkg.com/typescript-fsa/-/typescript-fsa-3.0.0.tgz#3ad1cb915a67338e013fc21f67c9b3e0e110c912" integrity sha512-xiXAib35i0QHl/+wMobzPibjAH5TJLDj+qGq5jwVLG9qR4FUswZURBw2qihBm0m06tHoyb3FzpnJs1GRhRwVag== -typescript-styled-plugin@^0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/typescript-styled-plugin/-/typescript-styled-plugin-0.15.0.tgz#9e307f04f7cfab8c6319787bf854330326c9ba92" - integrity sha512-OyJBLsm/yPT6vH9S8SqUCjOQf+m24GZkn6Z5+QBdNyU1ViCAWJSDFoquogbKApUhRS9Fz3G5RHuRWOTwopZemw== - dependencies: - typescript-template-language-service-decorator "^2.2.0" - vscode-css-languageservice "^4.0.2" - vscode-emmet-helper "1.2.11" - vscode-languageserver-types "^3.13.0" - -typescript-template-language-service-decorator@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/typescript-template-language-service-decorator/-/typescript-template-language-service-decorator-2.2.0.tgz#4ee6d580f307fb9239978e69626f2775b8a59b2a" - integrity sha512-xiolqt1i7e22rpqMaprPgSFVgU64u3b9n6EJlAaUYE61jumipKAdI1+O5khPlWslpTUj80YzjUKjJ2jxT0D74w== +typescript@3.9.5: + version "3.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.5.tgz#586f0dba300cde8be52dd1ac4f7e1009c1b13f36" + integrity sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ== typescript@^3.2.2: - version "3.6.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.3.tgz#fea942fabb20f7e1ca7164ff626f1a9f3f70b4da" - integrity sha512-N7bceJL1CtRQ2RiG0AQME13ksR7DiuQh/QehubYcghzv20tnh+MQnQIuJddTmsbqYj+dztchykemz0zFzlvdQw== - -typescript@^3.6.3: - version "3.6.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.4.tgz#b18752bb3792bc1a0281335f7f6ebf1bbfc5b91d" - integrity sha512-unoCll1+l+YK4i4F8f22TaNVPRHcD9PA3yCuZ8g5e0qGqlVlJ/8FSateOLLSagn+Yg5+ZwuPkL8LFUc0Jcvksg== + version "3.8.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" + integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== u2f-api@0.2.7: version "0.2.7" @@ -20892,9 +19950,9 @@ u2f-api@0.2.7: integrity sha512-fqLNg8vpvLOD5J/z4B6wpPg4Lvowz1nJ9xdHcCzdUPKcFE/qNCceV2gNZxSJd5vhAZemHr/K/hbzVA0zxB5mkg== ua-parser-js@^0.7.18, ua-parser-js@^0.7.19: - version "0.7.20" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.20.tgz#7527178b82f6a62a0f243d1f94fd30e3e3c21098" - integrity sha512-8OaIKfzL5cpx8eCMAhhvTlft8GYF8b2eQr6JkCyVdrgjcytyOmPCXrqXFcUnhonRpLlh5yxEZVohm6mzaowUOw== + version "0.7.21" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.21.tgz#853cf9ce93f642f67174273cc34565ae6f308777" + integrity sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ== uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" @@ -20909,28 +19967,10 @@ uglify-js@3.4.x: commander "~2.19.0" source-map "~0.6.1" -uglify-js@^3.1.4: - version "3.6.3" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.3.tgz#1351533bbe22cc698f012589ed6bd4cbd971bff8" - integrity sha512-KfQUgOqTkLp2aZxrMbCuKCDGW9slFYu2A23A36Gs7sGzTLcRBDORdOi5E21KWHFIfkY8kzgi/Pr1cXCh0yIp5g== - dependencies: - commander "~2.20.3" - source-map "~0.6.1" - -uid-number@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" - integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= - -umask@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" - integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= - unbzip2-stream@^1.0.9: - version "1.3.3" - resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz#d156d205e670d8d8c393e1c02ebd506422873f6a" - integrity sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg== + version "1.4.2" + resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.2.tgz#84eb9e783b186d8fb397515fbb656f312f1a7dbf" + integrity sha512-pZMVAofMrrHX6Ik39hCk470kulCbmZ2SWfQLPmTWqfJV/oUm0gn1CblvHdUu4+54Je6Jq34x8kY6XjTy6dMkOg== dependencies: buffer "^5.2.1" through "^2.3.8" @@ -20941,9 +19981,9 @@ unc-path-regex@^0.1.2: integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= undefsafe@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.2.tgz#225f6b9e0337663e0d8e7cfd686fc2836ccace76" - integrity sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY= + version "2.0.3" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.3.tgz#6b166e7094ad46313b2202da7ecc2cd7cc6e7aae" + integrity sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A== dependencies: debug "^2.2.0" @@ -20972,14 +20012,6 @@ undertaker@^1.2.1: object.reduce "^1.0.0" undertaker-registry "^1.0.0" -unherit@^1.0.4: - version "1.1.2" - resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.2.tgz#14f1f397253ee4ec95cec167762e77df83678449" - integrity sha512-W3tMnpaMG7ZY6xe/moK04U9fBhi6wEiCYHUW5Mop/wQHf12+79EQGwxYejNdhEz2mkqkBlGwm7pxmgBKMVUj0w== - dependencies: - inherits "^2.0.1" - xtend "^4.0.1" - unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" @@ -20993,15 +20025,15 @@ unicode-match-property-ecmascript@^1.0.4: unicode-canonical-property-names-ecmascript "^1.0.4" unicode-property-aliases-ecmascript "^1.0.4" -unicode-match-property-value-ecmascript@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" - integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== unicode-property-aliases-ecmascript@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" - integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== unified@^7.0.0: version "7.1.0" @@ -21059,57 +20091,29 @@ unique-stream@^2.0.2: json-stable-stringify-without-jsonify "^1.0.1" through2-filter "^3.0.0" -unique-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= - dependencies: - crypto-random-string "^1.0.0" - -unist-util-find-all-after@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-1.0.4.tgz#2eeaba818fd98492d69c44f9bee52c6a25282eef" - integrity sha512-CaxvMjTd+yF93BKLJvZnEfqdM7fgEACsIpQqz8vIj9CJnUb9VpyymFS3tg6TCtgrF7vfCJBF5jbT2Ox9CBRYRQ== +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== dependencies: - unist-util-is "^3.0.0" + crypto-random-string "^2.0.0" unist-util-is@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd" integrity sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A== -unist-util-remove-position@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.3.tgz#d91aa8b89b30cb38bad2924da11072faa64fd972" - integrity sha512-CtszTlOjP2sBGYc2zcKA/CvNdTdEs3ozbiJ63IPBxh8iZg42SCCb8m04f8z2+V1aSk5a7BxbZKEdoDjadmBkWA== - dependencies: - unist-util-visit "^1.1.0" - unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6" integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ== -unist-util-visit-parents@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz#25e43e55312166f3348cae6743588781d112c1e9" - integrity sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g== - dependencies: - unist-util-is "^3.0.0" - -unist-util-visit@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3" - integrity sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw== - dependencies: - unist-util-visit-parents "^2.0.0" - -universal-user-agent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-4.0.0.tgz#27da2ec87e32769619f68a14996465ea1cb9df16" - integrity sha512-eM8knLpev67iBDizr/YtqkJsF3GK8gzDc6st/WKzrTuPtcsOKW/0IdL4cnMBsU69pOx0otavLWBDGTwg+dB0aA== +unist-util-stringify-position@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" + integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== dependencies: - os-name "^3.1.0" + "@types/unist" "^2.0.2" universalify@^0.1.0: version "0.1.2" @@ -21134,11 +20138,6 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -unzip-response@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" - integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= - upath@^1.1.1, upath@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" @@ -21152,21 +20151,24 @@ update-check@1.5.2: registry-auth-token "3.3.2" registry-url "3.1.0" -update-notifier@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" - integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== +update-notifier@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.0.tgz#4866b98c3bc5b5473c020b1250583628f9a328f3" + integrity sha512-w3doE1qtI0/ZmgeoDoARmI5fjDoT93IfKgEGqm26dGUOh8oNpaSTsGNdYRN/SjOuo10jcJGwkEL3mroKzktkew== dependencies: - boxen "^1.2.1" - chalk "^2.0.1" - configstore "^3.0.0" + boxen "^4.2.0" + chalk "^3.0.0" + configstore "^5.0.1" + has-yarn "^2.1.0" import-lazy "^2.1.0" - is-ci "^1.0.10" - is-installed-globally "^0.1.0" - is-npm "^1.0.0" - latest-version "^3.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.0" + is-ci "^2.0.0" + is-installed-globally "^0.3.1" + is-npm "^4.0.0" + is-yarn-global "^0.3.0" + latest-version "^5.0.0" + pupa "^2.0.1" + semver-diff "^3.1.1" + xdg-basedir "^4.0.0" upper-case-first@^1.1.0, upper-case-first@^1.1.2: version "1.1.2" @@ -21188,9 +20190,9 @@ uri-js@^4.2.2: punycode "^2.1.0" urijs@^1.19.0: - version "1.19.1" - resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.1.tgz#5b0ff530c0cbde8386f6342235ba5ca6e995d25a" - integrity sha512-xVrGVi94ueCJNrBSTjWqjvtgvl3cyOTThp2zaMaFNGp3F542TR6sM3f2o8RqZl+AwteClSVmoCyt0ka4RjQOQg== + version "1.19.2" + resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.2.tgz#f9be09f00c4c5134b7cb3cf475c1dd394526265a" + integrity sha512-s/UIq9ap4JPZ7H1EB5ULo/aOUbWqfDi7FKzMC2Nz+0Si8GiT1rIEaprt8hy3Vy2Ex2aJPpOQv4P4DuOZ+K1c6w== urix@^0.1.0: version "0.1.0" @@ -21198,20 +20200,22 @@ urix@^0.1.0: integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= url-loader@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-2.2.0.tgz#af321aece1fd0d683adc8aaeb27829f29c75b46e" - integrity sha512-G8nk3np8ZAnwhHXas1JxJEwJyQdqFXAKJehfgZ/XrC48volFBRtO+FIKtF2u0Ma3bw+4vnDVjHPAQYlF9p2vsw== + version "2.3.0" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-2.3.0.tgz#e0e2ef658f003efb8ca41b0f3ffbf76bab88658b" + integrity sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog== dependencies: loader-utils "^1.2.3" mime "^2.4.4" - schema-utils "^2.4.1" + schema-utils "^2.5.0" -url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= +url-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-3.0.0.tgz#9f1f11b371acf6e51ed15a50db635e02eec18368" + integrity sha512-a84JJbIA5xTFTWyjjcPdnsu+41o/SNE8SpXMdUvXs6Q+LuhCD9E2+0VCiuDWqgo3GGXVlFHzArDmBpj9PgWn4A== dependencies: - prepend-http "^1.0.1" + loader-utils "^1.2.3" + mime "^2.4.4" + schema-utils "^2.5.0" url-parse-lax@^3.0.0: version "3.0.0" @@ -21248,19 +20252,19 @@ urlencode@^1.1.0: dependencies: iconv-lite "~0.4.11" -urlgrey@^0.4.4: +urlgrey@0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/urlgrey/-/urlgrey-0.4.4.tgz#892fe95960805e85519f1cd4389f2cb4cbb7652f" integrity sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8= usb@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/usb/-/usb-1.6.0.tgz#bc5d4decf4ffca32d1136717edcf73366137a789" - integrity sha512-52DyWlCk9K+iw3LnvY95WXSnpHjxJoI++aGkV8HiMNPc4zmvDQlYvWAzrkbJ2JH3oUcx26XfU5sZcG4RAcVkMg== + version "1.6.3" + resolved "https://registry.yarnpkg.com/usb/-/usb-1.6.3.tgz#c0bc14994e8f9cb16f9602ec0dbadaa57cb919f5" + integrity sha512-23KYMjaWydACd8wgGKMQ4MNwFspAT6Xeim4/9Onqe5Rz/nMb4TM/WHL+qPT0KNFxzNKzAs63n1xQWGEtgaQ2uw== dependencies: bindings "^1.4.0" nan "2.13.2" - prebuild-install "^5.2.4" + prebuild-install "^5.3.3" use@^3.1.0: version "3.1.1" @@ -21272,14 +20276,7 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util-promisify@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" - integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= - dependencies: - object.getownpropertydescriptors "^2.0.3" - -util.promisify@1.0.0, util.promisify@^1.0.0, util.promisify@~1.0.0: +util.promisify@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== @@ -21287,6 +20284,16 @@ util.promisify@1.0.0, util.promisify@^1.0.0, util.promisify@~1.0.0: define-properties "^1.1.2" object.getownpropertydescriptors "^2.0.3" +util.promisify@^1.0.0, util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + util@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" @@ -21301,6 +20308,18 @@ util@^0.11.0: dependencies: inherits "2.0.3" +util@^0.12.0: + version "0.12.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.3.tgz#971bb0292d2cc0c892dab7c6a5d37c2bec707888" + integrity sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + safe-buffer "^5.1.2" + which-typed-array "^1.1.2" + utila@^0.4.0, utila@~0.4: version "0.4.0" resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" @@ -21316,24 +20335,36 @@ uuid@3.2.1: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" integrity sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA== -uuid@^3.0.1, uuid@^3.1.0, uuid@^3.2.1, uuid@^3.3.2, uuid@^3.3.3: +uuid@3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== -v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" - integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== +uuid@^3.0.1, uuid@^3.1.0, uuid@^3.2.1, uuid@^3.3.2, uuid@^3.3.3: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^7.0.0: + version "7.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" + integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg== -v8flags@^3.0.1, v8flags@^3.1.1: +v8flags@^3.0.1: version "3.1.3" resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.1.3.tgz#fc9dc23521ca20c5433f81cc4eb9b3033bb105d8" integrity sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w== dependencies: homedir-polyfill "^1.0.1" -validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.3: +v8flags@^3.1.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656" + integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg== + dependencies: + homedir-polyfill "^1.0.1" + +validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== @@ -21369,9 +20400,9 @@ vary@^1, vary@^1.1.2, vary@~1.1.2: integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= vendors@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.3.tgz#a6467781abd366217c050f8202e7e50cc9eef8c0" - integrity sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw== + version "1.0.4" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" + integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== verror@1.10.0: version "1.10.0" @@ -21382,10 +20413,13 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -vfile-location@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.5.tgz#c83eb02f8040228a8d2b3f10e485be3e3433e0a2" - integrity sha512-Pa1ey0OzYBkLPxPZI3d9E+S4BmvfVwNAAXrrqGbwTVXWaX2p9kM1zZ+n35UtVM06shmWKH4RPRN8KI80qE3wNQ== +vfile-message@*: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" + integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^2.0.0" vfile-message@^1.0.0: version "1.1.1" @@ -21440,13 +20474,6 @@ vinyl-sourcemap@^1.1.0: remove-bom-buffer "^3.0.0" vinyl "^2.0.0" -vinyl-sourcemaps-apply@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz#ab6549d61d172c2b1b87be5c508d239c8ef87705" - integrity sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU= - dependencies: - source-map "^0.5.1" - vinyl@^0.5.0: version "0.5.3" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" @@ -21469,41 +20496,9 @@ vinyl@^2.0.0, vinyl@^2.1.0: replace-ext "^1.0.0" vm-browserify@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" - integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw== - -vscode-css-languageservice@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-4.0.2.tgz#7496e538b0c151feac16d5888cc0b1b104f4c736" - integrity sha512-pTnfXbsME3pl+yDfhUp/mtvPyIJk0Le4zqJxDn56s9GY9LqY0RmkSEh0oHH6D0HXR3Ni6wKosIaqu8a2G0+jdw== - dependencies: - vscode-languageserver-types "^3.15.0-next.2" - vscode-nls "^4.1.1" - -vscode-emmet-helper@1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/vscode-emmet-helper/-/vscode-emmet-helper-1.2.11.tgz#4de78223666bf917eb6dc4b225b6c40f6901950c" - integrity sha512-ms6/Z9TfNbjXS8r/KgbGxrNrFlu4RcIfVJxTZ2yFi0K4gn+Ka9X1+8cXvb5+5IOBGUrOsPjR0BuefdDkG+CKbQ== - dependencies: - "@emmetio/extract-abbreviation" "0.1.6" - jsonc-parser "^1.0.0" - vscode-languageserver-types "^3.6.0-next.1" - -vscode-languageserver-types@^3.13.0, vscode-languageserver-types@^3.6.0-next.1: - version "3.14.0" - resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.14.0.tgz#d3b5952246d30e5241592b6dde8280e03942e743" - integrity sha512-lTmS6AlAlMHOvPQemVwo3CezxBp0sNB95KNPkqp3Nxd5VFEnuG1ByM0zlRWos0zjO3ZWtkvhal0COgiV1xIA4A== - -vscode-languageserver-types@^3.15.0-next.2: - version "3.15.0-next.5" - resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.15.0-next.5.tgz#863d711bf47b338ff5e63ae19fb20d4fcd4d713b" - integrity sha512-7hrELhTeWieUgex3+6692KjCkcmO/+V/bFItM5MHGcBotzwmjEuXjapLLYTYhIspuJ1ibRSik5MhX5YwLpsPiw== - -vscode-nls@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-4.1.1.tgz#f9916b64e4947b20322defb1e676a495861f133c" - integrity sha512-4R+2UoUUU/LdnMnFjePxfLqNhBS8lrAFyX7pjb2ud/lqDkrUavFUTcG7wR0HBZFakae0Q6KLBFjMS6W93F403A== + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== vuvuzela@1.0.3: version "1.0.3" @@ -21511,11 +20506,11 @@ vuvuzela@1.0.3: integrity sha1-O+FF5YJxxzylUnndhR8SpoIRSws= w3c-hr-time@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" - integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU= + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== dependencies: - browser-process-hrtime "^0.1.2" + browser-process-hrtime "^1.0.0" walker@^1.0.7, walker@~1.0.5: version "1.0.7" @@ -21531,19 +20526,19 @@ warning@^3.0.0: dependencies: loose-envify "^1.0.0" -warning@^4.0.1: +warning@^4.0.1, warning@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== dependencies: loose-envify "^1.0.0" -watchpack@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" - integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== +watchpack@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.1.tgz#280da0a8718592174010c078c7585a74cd8cd0e2" + integrity sha512-+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA== dependencies: - chokidar "^2.0.2" + chokidar "^2.1.8" graceful-fs "^4.1.2" neo-async "^2.5.0" @@ -21554,17 +20549,10 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" -wcwidth@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - dependencies: - defaults "^1.0.3" - web-namespaces@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.3.tgz#9bbf5c99ff0908d2da031f1d732492a96571a83f" - integrity sha512-r8sAtNmgR0WKOKOxzuSgk09JsHlpKlB+uHi937qypOu3PZ17UxPrierFKDye/uNHjNTTEshu5PId8rojIPj/tA== + version "1.1.4" + resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" + integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== webidl-conversions@^4.0.2: version "4.0.2" @@ -21572,12 +20560,12 @@ webidl-conversions@^4.0.2: integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== webpack-bundle-analyzer@^3.4.1: - version "3.6.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.6.0.tgz#39b3a8f829ca044682bc6f9e011c95deb554aefd" - integrity sha512-orUfvVYEfBMDXgEKAKVvab5iQ2wXneIEorGNsyuOyVYpjYrI7CUOhhXNDd3huMwQ3vNNWWlGP+hzflMFYNzi2g== + version "3.7.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.7.0.tgz#84da434e89442899b884d9ad38e466d0db02a56f" + integrity sha512-mETdjZ30a3Yf+NTB/wqTgACK7rAYQl5uxKK0WVTNmF0sM3Uv8s3R58YZMW7Rhu0Lk2Rmuhdj5dcH5Q76zCDVdA== dependencies: - acorn "^6.0.7" - acorn-walk "^6.1.1" + acorn "^7.1.1" + acorn-walk "^7.1.1" bfj "^6.1.1" chalk "^2.4.1" commander "^2.18.0" @@ -21602,9 +20590,9 @@ webpack-dev-middleware@^3.7.2: webpack-log "^2.0.0" webpack-dev-server@^3.8.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.9.0.tgz#27c3b5d0f6b6677c4304465ac817623c8b27b89c" - integrity sha512-E6uQ4kRrTX9URN9s/lIbqTAztwEPdvzVrcmHE8EQ9YnuT9J8Es5Wrd8n9BKg1a0oZ5EgEke/EQFgUsp18dSTBw== + version "3.10.3" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.10.3.tgz#f35945036813e57ef582c2420ef7b470e14d3af0" + integrity sha512-e4nWev8YzEVNdOMcNzNeCN947sWJNd43E5XvsJzbAL08kGc2frm1tQ32hTJslRS+H65LCb/AaUCYU7fjHCpDeQ== dependencies: ansi-html "0.0.7" bonjour "^3.5.0" @@ -21621,7 +20609,7 @@ webpack-dev-server@^3.8.0: ip "^1.1.5" is-absolute-url "^3.0.3" killable "^1.0.1" - loglevel "^1.6.4" + loglevel "^1.6.6" opn "^5.5.0" p-retry "^3.0.1" portfinder "^1.0.25" @@ -21640,17 +20628,16 @@ webpack-dev-server@^3.8.0: ws "^6.2.1" yargs "12.0.5" -webpack-external-import@^0.0.1-beta.19: - version "0.0.1-beta.32" - resolved "https://registry.yarnpkg.com/webpack-external-import/-/webpack-external-import-0.0.1-beta.32.tgz#bdfd6072b946505d5b20661b9eb188601f129afd" - integrity sha512-Ch/prxjZNhB1TE422kemmxqR/xPInU/Me43ETxCka+bCpiQoovMVV6UKe5sInX0nX+NuUiwNs3JfK0lLGzOMGA== +webpack-external-import@^1.1.0-beta.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/webpack-external-import/-/webpack-external-import-1.1.3.tgz#9782c1df397f5847c02be6507eadbf16be9991b6" + integrity sha512-vK2h9WZEukZzPT4T2GYTkaH4Ow7ZpJkH4279lHKyrMc1BhS98LHezahX8qansDOvkNwyaSVmLF+ltX1G1Y5t1Q== dependencies: - "@babel/helper-module-imports" "^7.0.0" - babel-traverse "^6.26.0" + assert "^2.0.0" dimport "^1.0.0" - fs-extra "^8.0.1" - loadjs "^3.6.1" - scriptjs "^2.5.9" + fs-extra "^8.1.0" + loadjs "^4.2.0" + pkg-up "^3.1.0" webpack-flush-chunks@^2.0.3: version "2.0.3" @@ -21678,16 +20665,16 @@ webpack-sources@^1.0.1, webpack-sources@^1.1.0, webpack-sources@^1.3.0, webpack- source-list-map "^2.0.0" source-map "~0.6.1" -webpack@^4.39.2, webpack@^4.39.3: - version "4.41.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.2.tgz#c34ec76daa3a8468c9b61a50336d8e3303dce74e" - integrity sha512-Zhw69edTGfbz9/8JJoyRQ/pq8FYUoY0diOXqW0T6yhgdhCv6wr0hra5DwwWexNRns2Z2+gsnrNcbe9hbGBgk/A== +webpack@^4.39.2, webpack@^4.40.2: + version "4.43.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.43.0.tgz#c48547b11d563224c561dad1172c8aa0b8a678e6" + integrity sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-module-context" "1.8.5" - "@webassemblyjs/wasm-edit" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" - acorn "^6.2.1" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" ajv "^6.10.2" ajv-keywords "^3.4.1" chrome-trace-event "^1.0.2" @@ -21698,13 +20685,13 @@ webpack@^4.39.2, webpack@^4.39.3: loader-utils "^1.2.3" memory-fs "^0.4.1" micromatch "^3.1.10" - mkdirp "^0.5.1" + mkdirp "^0.5.3" neo-async "^2.6.1" node-libs-browser "^2.2.1" schema-utils "^1.0.0" tapable "^1.1.3" - terser-webpack-plugin "^1.4.1" - watchpack "^1.6.0" + terser-webpack-plugin "^1.4.3" + watchpack "^1.6.1" webpack-sources "^1.4.1" webpackbar@^4.0.0: @@ -21785,7 +20772,19 @@ which-pm-runs@^1.0.0: resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= -which@1, which@1.3.1, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: +which-typed-array@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.2.tgz#e5f98e56bda93e3dac196b01d47c1156679c00b2" + integrity sha512-KT6okrd1tE6JdZAy3o2VhMoYPh3+J6EMZLyrxBQsZflI1QCZIxMrIYLkosd8Twf+YfknVIHmYQPgJt238p8dnQ== + dependencies: + available-typed-arrays "^1.0.2" + es-abstract "^1.17.5" + foreach "^2.0.5" + function-bind "^1.1.1" + has-symbols "^1.0.1" + is-typed-array "^1.1.3" + +which@^1.2.14, which@^1.2.9, which@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -21793,13 +20792,13 @@ which@1, which@1.3.1, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: isexe "^2.0.0" which@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.1.tgz#f1cf94d07a8e571b6ff006aeb91d0300c47ef0a4" - integrity sha512-N7GBZOTswtB9lkQBZA4+zAXrjEIWAUOB93AvzUiudRzRxhUdLURQ7D/gAIMY1gatT/LTbmbcv8SiYazy3eYB7w== + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" -wide-align@1.1.3, wide-align@^1.1.0: +wide-align@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== @@ -21813,6 +20812,13 @@ widest-line@^2.0.0: dependencies: string-width "^2.1.1" +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + wif@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/wif/-/wif-2.0.6.tgz#08d3f52056c66679299726fade0d432ae74b4704" @@ -21820,18 +20826,6 @@ wif@^2.0.6: dependencies: bs58check "<3.0.0" -window-size@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" - integrity sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY= - -windows-release@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.2.0.tgz#8122dad5afc303d833422380680a79cdfa91785f" - integrity sha512-QTlz2hKLrdqukrsapKsINzqMgOUpQW268eJ0OaOpJN32h272waxR9fkB9VoWRtK7uKHG5EHJcTXQBD8XZVJkFA== - dependencies: - execa "^1.0.0" - winston@^2.1.1: version "2.4.4" resolved "https://registry.yarnpkg.com/winston/-/winston-2.4.4.tgz#a01e4d1d0a103cf4eada6fc1f886b3110d71c34b" @@ -21844,7 +20838,7 @@ winston@^2.1.1: isstream "0.1.x" stack-trace "0.0.x" -word-wrap@^1.0.3: +word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== @@ -21854,11 +20848,6 @@ wordwrap@~0.0.2: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= -wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - workbox-background-sync@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-4.3.1.tgz#26821b9bf16e9e37fd1d640289edddc08afd1950" @@ -22026,14 +21015,14 @@ wrap-ansi@^5.1.0: string-width "^3.0.0" strip-ansi "^5.0.0" -wrap-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.0.0.tgz#47c7b7329e0b8000f5756b0693a861e357e4043e" - integrity sha512-8YwLklVkHe4QNpGFrK6Mxm+BaMY7da6C9GlDED3xs3XwThyJHSbVwg9qC4s1N8tBFcnM1S0s8I390RC6SgGe+g== +wrap-ansi@^6.0.0, wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" - strip-ansi "^5.0.0" + strip-ansi "^6.0.0" wrappy@1: version "1.0.2" @@ -22049,7 +21038,7 @@ write-file-atomic@2.4.1: imurmurhash "^0.1.4" signal-exit "^3.0.2" -write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.2: +write-file-atomic@^2.4.2: version "2.4.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== @@ -22058,37 +21047,15 @@ write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.2: imurmurhash "^0.1.4" signal-exit "^3.0.2" -write-json-file@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" - integrity sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8= - dependencies: - detect-indent "^5.0.0" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - pify "^3.0.0" - sort-keys "^2.0.0" - write-file-atomic "^2.0.0" - -write-json-file@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" - integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== - dependencies: - detect-indent "^5.0.0" - graceful-fs "^4.1.15" - make-dir "^2.1.0" - pify "^4.0.1" - sort-keys "^2.0.0" - write-file-atomic "^2.4.2" - -write-pkg@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-3.2.0.tgz#0e178fe97820d389a8928bc79535dbe68c2cff21" - integrity sha512-tX2ifZ0YqEFOF1wjRW2Pk93NLsj02+n1UP5RvO6rCs0K6R2g1padvf006cY74PQJKMGS2r42NK7FD0dG6Y6paw== +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== dependencies: - sort-keys "^2.0.0" - write-json-file "^2.2.0" + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" write-stream@~0.4.3: version "0.4.3" @@ -22097,13 +21064,6 @@ write-stream@~0.4.3: dependencies: readable-stream "~0.0.2" -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - ws@^5.2.0: version "5.2.2" resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" @@ -22119,11 +21079,9 @@ ws@^6.0.0, ws@^6.1.2, ws@^6.2.1: async-limiter "~1.0.0" ws@^7.1.2: - version "7.2.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.0.tgz#422eda8c02a4b5dba7744ba66eebbd84bcef0ec7" - integrity sha512-+SqNqFbwTm/0DC18KYzIsMTnEWpLwJsiasW/O17la4iDRRIO9uaHbvKiAS3AHgTiuuWerK/brj4O6MYZkei9xg== - dependencies: - async-limiter "^1.0.0" + version "7.2.5" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.5.tgz#abb1370d4626a5a9cd79d8de404aa18b3465d10d" + integrity sha512-C34cIU4+DB2vMyAbmEKossWq2ZQDr6QEyuuCzWrM9zfw1sGc0mYiJ0UnG9zzNykt49C2Fi34hvr2vssFQRS6EA== ws@~6.1.0: version "6.1.4" @@ -22132,11 +21090,6 @@ ws@~6.1.0: dependencies: async-limiter "~1.0.0" -wtfnode@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/wtfnode/-/wtfnode-0.8.0.tgz#26a1a6b8e07727d7ed29dacc6708bea4647ccd20" - integrity sha512-A5jm/0REykxUac1q4Q5kv+hDIiacvqVpwIoXzCQcRL7syeEKucVVOxyLLrt+jIiZoXfla3lnsxUw/cmWXIaGWA== - x-is-string@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" @@ -22147,17 +21100,17 @@ x-xss-protection@1.3.0: resolved "https://registry.yarnpkg.com/x-xss-protection/-/x-xss-protection-1.3.0.tgz#3e3a8dd638da80421b0e9fff11a2dbe168f6d52c" integrity sha512-kpyBI9TlVipZO4diReZMAHWtS0MMa/7Kgx8hwG/EuZLiA6sg4Ah/4TRdASHhRRN3boobzcYgFRUFSgHRge6Qhg== -xdg-basedir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" - integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= +xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== -xml@^1.0.0, xml@^1.0.1: +xml@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" integrity sha1-eLpyAgApxbyHuKgaPPzXS0ovweU= @@ -22172,17 +21125,12 @@ xmlhttprequest-ssl@~1.5.4: resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= -xorshift@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/xorshift/-/xorshift-0.2.1.tgz#fcd82267e9351c13f0fb9c73307f25331d29c63a" - integrity sha1-/NgiZ+k1HBPw+5xzMH8lMx0pxjo= - xregexp@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.2.4.tgz#02a4aea056d65a42632c02f0233eab8e4d7e57ed" - integrity sha512-sO0bYdYeJAJBcJA8g7MJJX7UrOZIfJPd8U2SC7B2Dd/J24U0aQNoGp33shCaBSWeb0rD5rh6VBUIXOkGal1TZA== + version "4.3.0" + resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.3.0.tgz#7e92e73d9174a99a59743f67a4ce879a04b5ae50" + integrity sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g== dependencies: - "@babel/runtime-corejs2" "^7.2.0" + "@babel/runtime-corejs3" "^7.8.3" xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: version "4.0.2" @@ -22196,7 +21144,14 @@ xtend@~2.1.1: dependencies: object-keys "~0.4.0" -y18n@^3.2.0, y18n@^3.2.1: +xxhashjs@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/xxhashjs/-/xxhashjs-0.2.2.tgz#8a6251567621a1c46a5ae204da0249c7f8caa9d8" + integrity sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw== + dependencies: + cuint "^0.2.2" + +y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= @@ -22221,21 +21176,20 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@10.x, yargs-parser@^10.0.0: +yaml@^1.7.2: + version "1.9.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.9.2.tgz#f0cfa865f003ab707663e4f04b3956957ea564ed" + integrity sha512-HPT7cGGI0DuRcsO51qC1j9O16Dh1mZ2bnXwsi0jrSpsLz0WxOLSLXfkABVl6bZO629py3CU+OMJtpNHDLB97kg== + dependencies: + "@babel/runtime" "^7.9.2" + +yargs-parser@10.x: version "10.1.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== dependencies: camelcase "^4.1.0" -yargs-parser@13.1.1, yargs-parser@^13.0.0, yargs-parser@^13.1.1: - version "13.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" - integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - yargs-parser@^11.1.1: version "11.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" @@ -22244,10 +21198,26 @@ yargs-parser@^11.1.1: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.0.tgz#cdd7a97490ec836195f59f3f4dbe5ea9e8f75f08" - integrity sha512-xLTUnCMc4JhxrPEPUYD5IBR1mWCK/aT6+RJ/K29JY2y1vD+FhtgKK0AXRWvI262q3QSffAQuTouFIKUuHX89wQ== +yargs-parser@^13.0.0, yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^15.0.1: + version "15.0.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3" + integrity sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^18.1.1: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" @@ -22266,15 +21236,6 @@ yargs-parser@^7.0.0: dependencies: camelcase "^4.1.0" -yargs-unparser@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" - integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== - dependencies: - flat "^4.1.0" - lodash "^4.17.15" - yargs "^13.3.0" - yargs@12.0.5, yargs@^12.0.5: version "12.0.5" resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" @@ -22293,10 +21254,10 @@ yargs@12.0.5, yargs@^12.0.5: y18n "^3.2.1 || ^4.0.0" yargs-parser "^11.1.1" -yargs@13.3.0, yargs@^13.2.1, yargs@^13.2.2, yargs@^13.3.0: - version "13.3.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" - integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== +yargs@^13.2.2, yargs@^13.3.0: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== dependencies: cliui "^5.0.0" find-up "^3.0.0" @@ -22307,12 +21268,12 @@ yargs@13.3.0, yargs@^13.2.1, yargs@^13.2.2, yargs@^13.3.0: string-width "^3.0.0" which-module "^2.0.0" y18n "^4.0.0" - yargs-parser "^13.1.1" + yargs-parser "^13.1.2" -yargs@^14.0.0, yargs@^14.2.0: - version "14.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.0.tgz#f116a9242c4ed8668790b40759b4906c276e76c3" - integrity sha512-/is78VKbKs70bVZH7w4YaZea6xcJWOAwkhbR0CFuZBmYtfTYF0xjGJF43AYd8g2Uii1yJwmS5GR2vBmrc32sbg== +yargs@^14.2.0: + version "14.2.3" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" + integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg== dependencies: cliui "^5.0.0" decamelize "^1.2.0" @@ -22324,20 +21285,24 @@ yargs@^14.0.0, yargs@^14.2.0: string-width "^3.0.0" which-module "^2.0.0" y18n "^4.0.0" - yargs-parser "^15.0.0" + yargs-parser "^15.0.1" -yargs@^3.32.0: - version "3.32.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995" - integrity sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU= +yargs@^15.3.1: + version "15.3.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b" + integrity sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA== dependencies: - camelcase "^2.0.1" - cliui "^3.0.3" - decamelize "^1.1.1" - os-locale "^1.4.0" - string-width "^1.0.1" - window-size "^0.1.4" - y18n "^3.2.0" + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.1" yargs@^7.1.0: version "7.1.0" @@ -22402,25 +21367,25 @@ ylru@^1.2.0: resolved "https://registry.yarnpkg.com/ylru/-/ylru-1.2.1.tgz#f576b63341547989c1de7ba288760923b27fe84f" integrity sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ== -yn@^3.0.0: +yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== -zen-observable-ts@^0.8.20: - version "0.8.20" - resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.20.tgz#44091e335d3fcbc97f6497e63e7f57d5b516b163" - integrity sha512-2rkjiPALhOtRaDX6pWyNqK1fnP5KkJJybYebopNSn6wDG1lxBoFs2+nwwXKoA6glHIrtwrfBBy6da0stkKtTAA== +zen-observable-ts@^0.8.21: + version "0.8.21" + resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.21.tgz#85d0031fbbde1eba3cd07d3ba90da241215f421d" + integrity sha512-Yj3yXweRc8LdRMrCC8nIc4kkjWecPAUVh0TI0OUrWXx6aX790vLcDlWca6I4vsyCGH3LpWxq0dJRcMOFoVqmeg== dependencies: tslib "^1.9.3" zen-observable "^0.8.0" zen-observable@^0.8.0: - version "0.8.14" - resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.14.tgz#d33058359d335bc0db1f0af66158b32872af3bf7" - integrity sha512-kQz39uonEjEESwh+qCi83kcC3rZJGh4mrZW7xjkSQYXkq//JZHTtKo+6yuVloTgMtzsIWOJrjIrKvk/dqm0L5g== + version "0.8.15" + resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" + integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ== zone.js@^0.10.2: - version "0.10.2" - resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.10.2.tgz#67ca084b3116fc33fc40435e0d5ea40a207e392e" - integrity sha512-UAYfiuvxLN4oyuqhJwd21Uxb4CNawrq6fPS/05Su5L4G+1TN+HVDJMUHNMobVQDFJRir2cLAODXwluaOKB7HFg== + version "0.10.3" + resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.10.3.tgz#3e5e4da03c607c9dcd92e37dd35687a14a140c16" + integrity sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg== diff --git a/common/scripts/install-run-rush.js b/common/scripts/install-run-rush.js new file mode 100644 index 0000000000..4cc67a75b1 --- /dev/null +++ b/common/scripts/install-run-rush.js @@ -0,0 +1,67 @@ +"use strict"; +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See the @microsoft/rush package's LICENSE file for license information. +Object.defineProperty(exports, "__esModule", { value: true }); +// THIS FILE WAS GENERATED BY A TOOL. ANY MANUAL MODIFICATIONS WILL GET OVERWRITTEN WHENEVER RUSH IS UPGRADED. +// +// This script is intended for usage in an automated build environment where the Rush command may not have +// been preinstalled, or may have an unpredictable version. This script will automatically install the version of Rush +// specified in the rush.json configuration file (if not already installed), and then pass a command-line to it. +// An example usage would be: +// +// node common/scripts/install-run-rush.js install +// +// For more information, see: https://rushjs.io/pages/maintainer/setup_new_repo/ +const path = require("path"); +const fs = require("fs"); +const install_run_1 = require("./install-run"); +const PACKAGE_NAME = '@microsoft/rush'; +const RUSH_PREVIEW_VERSION = 'RUSH_PREVIEW_VERSION'; +function _getRushVersion() { + const rushPreviewVersion = process.env[RUSH_PREVIEW_VERSION]; + if (rushPreviewVersion !== undefined) { + console.log(`Using Rush version from environment variable ${RUSH_PREVIEW_VERSION}=${rushPreviewVersion}`); + return rushPreviewVersion; + } + const rushJsonFolder = install_run_1.findRushJsonFolder(); + const rushJsonPath = path.join(rushJsonFolder, install_run_1.RUSH_JSON_FILENAME); + try { + const rushJsonContents = fs.readFileSync(rushJsonPath, 'utf-8'); + // Use a regular expression to parse out the rushVersion value because rush.json supports comments, + // but JSON.parse does not and we don't want to pull in more dependencies than we need to in this script. + const rushJsonMatches = rushJsonContents.match(/\"rushVersion\"\s*\:\s*\"([0-9a-zA-Z.+\-]+)\"/); + return rushJsonMatches[1]; + } + catch (e) { + throw new Error(`Unable to determine the required version of Rush from rush.json (${rushJsonFolder}). ` + + "The 'rushVersion' field is either not assigned in rush.json or was specified " + + 'using an unexpected syntax.'); + } +} +function _run() { + const [nodePath /* Ex: /bin/node */, scriptPath /* /repo/common/scripts/install-run-rush.js */, ...packageBinArgs /* [build, --to, myproject] */] = process.argv; + // Detect if this script was directly invoked, or if the install-run-rushx script was invokved to select the + // appropriate binary inside the rush package to run + const scriptName = path.basename(scriptPath); + const bin = scriptName.toLowerCase() === 'install-run-rushx.js' ? 'rushx' : 'rush'; + if (!nodePath || !scriptPath) { + throw new Error('Unexpected exception: could not detect node path or script path'); + } + if (process.argv.length < 3) { + console.log(`Usage: ${scriptName} [args...]`); + if (scriptName === 'install-run-rush.js') { + console.log(`Example: ${scriptName} build --to myproject`); + } + else { + console.log(`Example: ${scriptName} custom-command`); + } + process.exit(1); + } + install_run_1.runWithErrorAndStatusCode(() => { + const version = _getRushVersion(); + console.log(`The rush.json configuration requests Rush version ${version}`); + return install_run_1.installAndRun(PACKAGE_NAME, version, bin, packageBinArgs); + }); +} +_run(); +//# sourceMappingURL=install-run-rush.js.map \ No newline at end of file diff --git a/common/scripts/install-run-rushx.js b/common/scripts/install-run-rushx.js new file mode 100644 index 0000000000..ddb229717c --- /dev/null +++ b/common/scripts/install-run-rushx.js @@ -0,0 +1,18 @@ +"use strict"; +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See the @microsoft/rush package's LICENSE file for license information. +Object.defineProperty(exports, "__esModule", { value: true }); +// THIS FILE WAS GENERATED BY A TOOL. ANY MANUAL MODIFICATIONS WILL GET OVERWRITTEN WHENEVER RUSH IS UPGRADED. +// +// This script is intended for usage in an automated build environment where the Rush command may not have +// been preinstalled, or may have an unpredictable version. This script will automatically install the version of Rush +// specified in the rush.json configuration file (if not already installed), and then pass a command-line to the +// rushx command. +// +// An example usage would be: +// +// node common/scripts/install-run-rushx.js custom-command +// +// For more information, see: https://rushjs.io/pages/maintainer/setup_new_repo/ +require("./install-run-rush"); +//# sourceMappingURL=install-run-rushx.js.map \ No newline at end of file diff --git a/common/scripts/install-run.js b/common/scripts/install-run.js new file mode 100644 index 0000000000..84692d3ba4 --- /dev/null +++ b/common/scripts/install-run.js @@ -0,0 +1,441 @@ +"use strict"; +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See the @microsoft/rush package's LICENSE file for license information. +Object.defineProperty(exports, "__esModule", { value: true }); +// THIS FILE WAS GENERATED BY A TOOL. ANY MANUAL MODIFICATIONS WILL GET OVERWRITTEN WHENEVER RUSH IS UPGRADED. +// +// This script is intended for usage in an automated build environment where a Node tool may not have +// been preinstalled, or may have an unpredictable version. This script will automatically install the specified +// version of the specified tool (if not already installed), and then pass a command-line to it. +// An example usage would be: +// +// node common/scripts/install-run.js qrcode@1.2.2 qrcode https://rushjs.io +// +// For more information, see: https://rushjs.io/pages/maintainer/setup_new_repo/ +const childProcess = require("child_process"); +const fs = require("fs"); +const os = require("os"); +const path = require("path"); +exports.RUSH_JSON_FILENAME = 'rush.json'; +const RUSH_TEMP_FOLDER_ENV_VARIABLE_NAME = 'RUSH_TEMP_FOLDER'; +const INSTALLED_FLAG_FILENAME = 'installed.flag'; +const NODE_MODULES_FOLDER_NAME = 'node_modules'; +const PACKAGE_JSON_FILENAME = 'package.json'; +/** + * Parse a package specifier (in the form of name\@version) into name and version parts. + */ +function _parsePackageSpecifier(rawPackageSpecifier) { + rawPackageSpecifier = (rawPackageSpecifier || '').trim(); + const separatorIndex = rawPackageSpecifier.lastIndexOf('@'); + let name; + let version = undefined; + if (separatorIndex === 0) { + // The specifier starts with a scope and doesn't have a version specified + name = rawPackageSpecifier; + } + else if (separatorIndex === -1) { + // The specifier doesn't have a version + name = rawPackageSpecifier; + } + else { + name = rawPackageSpecifier.substring(0, separatorIndex); + version = rawPackageSpecifier.substring(separatorIndex + 1); + } + if (!name) { + throw new Error(`Invalid package specifier: ${rawPackageSpecifier}`); + } + return { name, version }; +} +/** + * As a workaround, copyAndTrimNpmrcFile() copies the .npmrc file to the target folder, and also trims + * unusable lines from the .npmrc file. + * + * Why are we trimming the .npmrc lines? NPM allows environment variables to be specified in + * the .npmrc file to provide different authentication tokens for different registry. + * However, if the environment variable is undefined, it expands to an empty string, which + * produces a valid-looking mapping with an invalid URL that causes an error. Instead, + * we'd prefer to skip that line and continue looking in other places such as the user's + * home directory. + * + * IMPORTANT: THIS CODE SHOULD BE KEPT UP TO DATE WITH Utilities.copyAndTrimNpmrcFile() + */ +function _copyAndTrimNpmrcFile(sourceNpmrcPath, targetNpmrcPath) { + console.log(`Copying ${sourceNpmrcPath} --> ${targetNpmrcPath}`); // Verbose + let npmrcFileLines = fs.readFileSync(sourceNpmrcPath).toString().split('\n'); + npmrcFileLines = npmrcFileLines.map((line) => (line || '').trim()); + const resultLines = []; + // This finds environment variable tokens that look like "${VAR_NAME}" + const expansionRegExp = /\$\{([^\}]+)\}/g; + // Comment lines start with "#" or ";" + const commentRegExp = /^\s*[#;]/; + // Trim out lines that reference environment variables that aren't defined + for (const line of npmrcFileLines) { + let lineShouldBeTrimmed = false; + // Ignore comment lines + if (!commentRegExp.test(line)) { + const environmentVariables = line.match(expansionRegExp); + if (environmentVariables) { + for (const token of environmentVariables) { + // Remove the leading "${" and the trailing "}" from the token + const environmentVariableName = token.substring(2, token.length - 1); + // Is the environment variable defined? + if (!process.env[environmentVariableName]) { + // No, so trim this line + lineShouldBeTrimmed = true; + break; + } + } + } + } + if (lineShouldBeTrimmed) { + // Example output: + // "; MISSING ENVIRONMENT VARIABLE: //my-registry.com/npm/:_authToken=${MY_AUTH_TOKEN}" + resultLines.push('; MISSING ENVIRONMENT VARIABLE: ' + line); + } + else { + resultLines.push(line); + } + } + fs.writeFileSync(targetNpmrcPath, resultLines.join(os.EOL)); +} +/** + * syncNpmrc() copies the .npmrc file to the target folder, and also trims unusable lines from the .npmrc file. + * If the source .npmrc file not exist, then syncNpmrc() will delete an .npmrc that is found in the target folder. + * + * IMPORTANT: THIS CODE SHOULD BE KEPT UP TO DATE WITH Utilities._syncNpmrc() + */ +function _syncNpmrc(sourceNpmrcFolder, targetNpmrcFolder, useNpmrcPublish) { + const sourceNpmrcPath = path.join(sourceNpmrcFolder, !useNpmrcPublish ? '.npmrc' : '.npmrc-publish'); + const targetNpmrcPath = path.join(targetNpmrcFolder, '.npmrc'); + try { + if (fs.existsSync(sourceNpmrcPath)) { + _copyAndTrimNpmrcFile(sourceNpmrcPath, targetNpmrcPath); + } + else if (fs.existsSync(targetNpmrcPath)) { + // If the source .npmrc doesn't exist and there is one in the target, delete the one in the target + console.log(`Deleting ${targetNpmrcPath}`); // Verbose + fs.unlinkSync(targetNpmrcPath); + } + } + catch (e) { + throw new Error(`Error syncing .npmrc file: ${e}`); + } +} +let _npmPath = undefined; +/** + * Get the absolute path to the npm executable + */ +function getNpmPath() { + if (!_npmPath) { + try { + if (os.platform() === 'win32') { + // We're on Windows + const whereOutput = childProcess.execSync('where npm', { stdio: [] }).toString(); + const lines = whereOutput.split(os.EOL).filter((line) => !!line); + // take the last result, we are looking for a .cmd command + // see https://github.com/microsoft/rushstack/issues/759 + _npmPath = lines[lines.length - 1]; + } + else { + // We aren't on Windows - assume we're on *NIX or Darwin + _npmPath = childProcess.execSync('command -v npm', { stdio: [] }).toString(); + } + } + catch (e) { + throw new Error(`Unable to determine the path to the NPM tool: ${e}`); + } + _npmPath = _npmPath.trim(); + if (!fs.existsSync(_npmPath)) { + throw new Error('The NPM executable does not exist'); + } + } + return _npmPath; +} +exports.getNpmPath = getNpmPath; +function _ensureFolder(folderPath) { + if (!fs.existsSync(folderPath)) { + const parentDir = path.dirname(folderPath); + _ensureFolder(parentDir); + fs.mkdirSync(folderPath); + } +} +/** + * Create missing directories under the specified base directory, and return the resolved directory. + * + * Does not support "." or ".." path segments. + * Assumes the baseFolder exists. + */ +function _ensureAndJoinPath(baseFolder, ...pathSegments) { + let joinedPath = baseFolder; + try { + for (let pathSegment of pathSegments) { + pathSegment = pathSegment.replace(/[\\\/]/g, '+'); + joinedPath = path.join(joinedPath, pathSegment); + if (!fs.existsSync(joinedPath)) { + fs.mkdirSync(joinedPath); + } + } + } + catch (e) { + throw new Error(`Error building local installation folder (${path.join(baseFolder, ...pathSegments)}): ${e}`); + } + return joinedPath; +} +function _getRushTempFolder(rushCommonFolder) { + const rushTempFolder = process.env[RUSH_TEMP_FOLDER_ENV_VARIABLE_NAME]; + if (rushTempFolder !== undefined) { + _ensureFolder(rushTempFolder); + return rushTempFolder; + } + else { + return _ensureAndJoinPath(rushCommonFolder, 'temp'); + } +} +/** + * Resolve a package specifier to a static version + */ +function _resolvePackageVersion(rushCommonFolder, { name, version }) { + if (!version) { + version = '*'; // If no version is specified, use the latest version + } + if (version.match(/^[a-zA-Z0-9\-\+\.]+$/)) { + // If the version contains only characters that we recognize to be used in static version specifiers, + // pass the version through + return version; + } + else { + // version resolves to + try { + const rushTempFolder = _getRushTempFolder(rushCommonFolder); + const sourceNpmrcFolder = path.join(rushCommonFolder, 'config', 'rush'); + _syncNpmrc(sourceNpmrcFolder, rushTempFolder); + const npmPath = getNpmPath(); + // This returns something that looks like: + // @microsoft/rush@3.0.0 '3.0.0' + // @microsoft/rush@3.0.1 '3.0.1' + // ... + // @microsoft/rush@3.0.20 '3.0.20' + // + const npmVersionSpawnResult = childProcess.spawnSync(npmPath, ['view', `${name}@${version}`, 'version', '--no-update-notifier'], { + cwd: rushTempFolder, + stdio: [] + }); + if (npmVersionSpawnResult.status !== 0) { + throw new Error(`"npm view" returned error code ${npmVersionSpawnResult.status}`); + } + const npmViewVersionOutput = npmVersionSpawnResult.stdout.toString(); + const versionLines = npmViewVersionOutput.split('\n').filter((line) => !!line); + const latestVersion = versionLines[versionLines.length - 1]; + if (!latestVersion) { + throw new Error('No versions found for the specified version range.'); + } + const versionMatches = latestVersion.match(/^.+\s\'(.+)\'$/); + if (!versionMatches) { + throw new Error(`Invalid npm output ${latestVersion}`); + } + return versionMatches[1]; + } + catch (e) { + throw new Error(`Unable to resolve version ${version} of package ${name}: ${e}`); + } + } +} +let _rushJsonFolder; +/** + * Find the absolute path to the folder containing rush.json + */ +function findRushJsonFolder() { + if (!_rushJsonFolder) { + let basePath = __dirname; + let tempPath = __dirname; + do { + const testRushJsonPath = path.join(basePath, exports.RUSH_JSON_FILENAME); + if (fs.existsSync(testRushJsonPath)) { + _rushJsonFolder = basePath; + break; + } + else { + basePath = tempPath; + } + } while (basePath !== (tempPath = path.dirname(basePath))); // Exit the loop when we hit the disk root + if (!_rushJsonFolder) { + throw new Error('Unable to find rush.json.'); + } + } + return _rushJsonFolder; +} +exports.findRushJsonFolder = findRushJsonFolder; +/** + * Detects if the package in the specified directory is installed + */ +function _isPackageAlreadyInstalled(packageInstallFolder) { + try { + const flagFilePath = path.join(packageInstallFolder, INSTALLED_FLAG_FILENAME); + if (!fs.existsSync(flagFilePath)) { + return false; + } + const fileContents = fs.readFileSync(flagFilePath).toString(); + return fileContents.trim() === process.version; + } + catch (e) { + return false; + } +} +/** + * Removes the following files and directories under the specified folder path: + * - installed.flag + * - + * - node_modules + */ +function _cleanInstallFolder(rushTempFolder, packageInstallFolder) { + try { + const flagFile = path.resolve(packageInstallFolder, INSTALLED_FLAG_FILENAME); + if (fs.existsSync(flagFile)) { + fs.unlinkSync(flagFile); + } + const packageLockFile = path.resolve(packageInstallFolder, 'package-lock.json'); + if (fs.existsSync(packageLockFile)) { + fs.unlinkSync(packageLockFile); + } + const nodeModulesFolder = path.resolve(packageInstallFolder, NODE_MODULES_FOLDER_NAME); + if (fs.existsSync(nodeModulesFolder)) { + const rushRecyclerFolder = _ensureAndJoinPath(rushTempFolder, 'rush-recycler'); + fs.renameSync(nodeModulesFolder, path.join(rushRecyclerFolder, `install-run-${Date.now().toString()}`)); + } + } + catch (e) { + throw new Error(`Error cleaning the package install folder (${packageInstallFolder}): ${e}`); + } +} +function _createPackageJson(packageInstallFolder, name, version) { + try { + const packageJsonContents = { + name: 'ci-rush', + version: '0.0.0', + dependencies: { + [name]: version + }, + description: "DON'T WARN", + repository: "DON'T WARN", + license: 'MIT' + }; + const packageJsonPath = path.join(packageInstallFolder, PACKAGE_JSON_FILENAME); + fs.writeFileSync(packageJsonPath, JSON.stringify(packageJsonContents, undefined, 2)); + } + catch (e) { + throw new Error(`Unable to create package.json: ${e}`); + } +} +/** + * Run "npm install" in the package install folder. + */ +function _installPackage(packageInstallFolder, name, version) { + try { + console.log(`Installing ${name}...`); + const npmPath = getNpmPath(); + const result = childProcess.spawnSync(npmPath, ['install'], { + stdio: 'inherit', + cwd: packageInstallFolder, + env: process.env + }); + if (result.status !== 0) { + throw new Error('"npm install" encountered an error'); + } + console.log(`Successfully installed ${name}@${version}`); + } + catch (e) { + throw new Error(`Unable to install package: ${e}`); + } +} +/** + * Get the ".bin" path for the package. + */ +function _getBinPath(packageInstallFolder, binName) { + const binFolderPath = path.resolve(packageInstallFolder, NODE_MODULES_FOLDER_NAME, '.bin'); + const resolvedBinName = os.platform() === 'win32' ? `${binName}.cmd` : binName; + return path.resolve(binFolderPath, resolvedBinName); +} +/** + * Write a flag file to the package's install directory, signifying that the install was successful. + */ +function _writeFlagFile(packageInstallFolder) { + try { + const flagFilePath = path.join(packageInstallFolder, INSTALLED_FLAG_FILENAME); + fs.writeFileSync(flagFilePath, process.version); + } + catch (e) { + throw new Error(`Unable to create installed.flag file in ${packageInstallFolder}`); + } +} +function installAndRun(packageName, packageVersion, packageBinName, packageBinArgs) { + const rushJsonFolder = findRushJsonFolder(); + const rushCommonFolder = path.join(rushJsonFolder, 'common'); + const rushTempFolder = _getRushTempFolder(rushCommonFolder); + const packageInstallFolder = _ensureAndJoinPath(rushTempFolder, 'install-run', `${packageName}@${packageVersion}`); + if (!_isPackageAlreadyInstalled(packageInstallFolder)) { + // The package isn't already installed + _cleanInstallFolder(rushTempFolder, packageInstallFolder); + const sourceNpmrcFolder = path.join(rushCommonFolder, 'config', 'rush'); + _syncNpmrc(sourceNpmrcFolder, packageInstallFolder); + _createPackageJson(packageInstallFolder, packageName, packageVersion); + _installPackage(packageInstallFolder, packageName, packageVersion); + _writeFlagFile(packageInstallFolder); + } + const statusMessage = `Invoking "${packageBinName} ${packageBinArgs.join(' ')}"`; + const statusMessageLine = new Array(statusMessage.length + 1).join('-'); + console.log(os.EOL + statusMessage + os.EOL + statusMessageLine + os.EOL); + const binPath = _getBinPath(packageInstallFolder, packageBinName); + const binFolderPath = path.resolve(packageInstallFolder, NODE_MODULES_FOLDER_NAME, '.bin'); + const result = childProcess.spawnSync(binPath, packageBinArgs, { + stdio: 'inherit', + cwd: process.cwd(), + env: Object.assign({}, process.env, { PATH: [binFolderPath, process.env.PATH].join(path.delimiter) }) + }); + if (result.status !== null) { + return result.status; + } + else { + throw result.error || new Error('An unknown error occurred.'); + } +} +exports.installAndRun = installAndRun; +function runWithErrorAndStatusCode(fn) { + process.exitCode = 1; + try { + const exitCode = fn(); + process.exitCode = exitCode; + } + catch (e) { + console.error(os.EOL + os.EOL + e.toString() + os.EOL + os.EOL); + } +} +exports.runWithErrorAndStatusCode = runWithErrorAndStatusCode; +function _run() { + const [nodePath /* Ex: /bin/node */, scriptPath /* /repo/common/scripts/install-run-rush.js */, rawPackageSpecifier /* qrcode@^1.2.0 */, packageBinName /* qrcode */, ...packageBinArgs /* [-f, myproject/lib] */] = process.argv; + if (!nodePath) { + throw new Error('Unexpected exception: could not detect node path'); + } + if (path.basename(scriptPath).toLowerCase() !== 'install-run.js') { + // If install-run.js wasn't directly invoked, don't execute the rest of this function. Return control + // to the script that (presumably) imported this file + return; + } + if (process.argv.length < 4) { + console.log('Usage: install-run.js @ [args...]'); + console.log('Example: install-run.js qrcode@1.2.2 qrcode https://rushjs.io'); + process.exit(1); + } + runWithErrorAndStatusCode(() => { + const rushJsonFolder = findRushJsonFolder(); + const rushCommonFolder = _ensureAndJoinPath(rushJsonFolder, 'common'); + const packageSpecifier = _parsePackageSpecifier(rawPackageSpecifier); + const name = packageSpecifier.name; + const version = _resolvePackageVersion(rushCommonFolder, packageSpecifier); + if (packageSpecifier.version !== version) { + console.log(`Resolved to ${name}@${version}`); + } + return installAndRun(name, version, packageBinName, packageBinArgs); + }); +} +_run(); +//# sourceMappingURL=install-run.js.map \ No newline at end of file diff --git a/common/scripts/neo-one-prune.js b/common/scripts/neo-one-prune.js new file mode 100644 index 0000000000..0467191c71 --- /dev/null +++ b/common/scripts/neo-one-prune.js @@ -0,0 +1,73 @@ +const path = require('path'); +const fs = require('fs'); + +const NEO_ONE_NM_PATH = path.resolve( + __dirname, + '..', + 'temp', + 'node_modules', + '@neo-one', +); + +const whitelist = new Set(['ec-key', 'edge']); + +const readDir = async (dir) => + new Promise((resolve, reject) => + fs.readdir(dir, (err, files) => (err ? reject(err) : resolve(files))), + ); + +const isDirectoryFn = async (pathToCheck) => + new Promise((resolve, reject) => + fs.stat(pathToCheck, (err, stats) => + err ? reject(err) : resolve(stats.isDirectory()), + ), + ); + +const rmDir = async (dir) => + new Promise((resolve, reject) => + fs.rmdir(dir, (err) => (err ? reject(err) : resolve())), + ); + +const rmFile = async (file) => + new Promise((resolve, reject) => + fs.unlink(file, (err) => (err ? reject(err) : resolve())), + ); + +const rmFilesRecursive = async (pathIn) => { + const isDirectory = await isDirectoryFn(pathIn); + if (isDirectory) { + const paths = await readDir(pathIn); + await Promise.all( + paths.map(async (filePath) => + rmFilesRecursive(path.resolve(pathIn, filePath)), + ), + ); + await rmDir(pathIn); + } else { + await rmFile(pathIn); + } +}; + +/** + * script for pruning NEOβ€’ONE dependencies that get pulled during install by neotracker/core + * this happens before linking so neotracker/core will use the local packages + */ +const _run = async () => { + const packages = await readDir(NEO_ONE_NM_PATH); + + await Promise.all( + packages + .filter((package) => !whitelist.has(package)) + .map((package) => + rmFilesRecursive(path.resolve(NEO_ONE_NM_PATH, package)), + ), + ); +}; + +_run() + .then(() => { + /* */ + }) + .catch((err) => { + throw err; + }); diff --git a/cypress/common/lessons.ts b/cypress/common/lessons.ts index 3b8aa28813..e842db9202 100644 --- a/cypress/common/lessons.ts +++ b/cypress/common/lessons.ts @@ -1,5 +1,5 @@ // tslint:disable no-object-literal-type-assertion -import { build, checkProblems, enterSolution, resetEditorTab, nextButton, Problem, runTests, Test } from './matchers'; +import { build, checkProblems, enterSolution, nextButton, Problem, resetEditorTab, runTests, Test } from './matchers'; export const ALL_SLUGS: readonly string[] = [ '/course/tokenomics/1/1', @@ -54,7 +54,7 @@ export const lesson1 = ({ } cy.reload(true); - build({ success: chapter === 1 ? false : true, contracts: ['Token'] }); + build({ success: chapter !== 1, contracts: ['Token'] }); runTests({ passing: 0, failing: 1, diff --git a/cypress/plugins/index.js b/cypress/plugins/index.js index 5c0a347695..7a8b653450 100644 --- a/cypress/plugins/index.js +++ b/cypress/plugins/index.js @@ -1,8 +1,12 @@ -const webpack = require('@cypress/webpack-preprocessor'); -const { addSeconds, format, parse } = require('date-fns'); -const nanoid = require('nanoid'); -const fs = require('fs-extra'); -const istanbul = require('istanbul-lib-coverage'); +const webpack = require('../../common/temp/node_modules/@cypress/webpack-preprocessor'); +const { + addSeconds, + format, + parse, +} = require('../../common/temp/node_modules/date-fns'); +const nanoid = require('../../common/temp/node_modules/nanoid'); +const fs = require('../../common/temp/node_modules/fs-extra'); +const istanbul = require('../../common/temp/node_modules/istanbul-lib-coverage'); const path = require('path'); module.exports = (on) => { @@ -10,6 +14,10 @@ module.exports = (on) => { webpackOptions: { resolve: { extensions: ['.ts', '.js'], + modules: ['./common/temp/node_modules'], + }, + resolveLoader: { + modules: ['./common/temp/node_modules'], }, module: { rules: [ diff --git a/cypress/tsconfig.json b/cypress/tsconfig.json index 8ecb8f43c8..407a03a209 100644 --- a/cypress/tsconfig.json +++ b/cypress/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "baseUrl": "../node_modules", + "baseUrl": ".", "target": "es5", "types": ["cypress"], @@ -15,7 +15,5 @@ "noFallthroughCasesInSwitch": true, "forceConsistentCasingInFileNames": true }, - "include": [ - "**/*.*" - ] + "include": ["**/*.*"] } diff --git a/deploy/Dockerfile b/deploy/Dockerfile index 3b471acb40..1006663352 100644 --- a/deploy/Dockerfile +++ b/deploy/Dockerfile @@ -1,4 +1,4 @@ -FROM quay.io/neoone/node:1.5 +FROM neoonesuite/node:latest RUN mkdir -p etc/static-html COPY static/ etc/static-html/ CMD ["--environment.rpc.splashScreen.path=/etc/static-html/", "--environment.rpc.http.host=0.0.0.0"] diff --git a/gulpfile.js b/gulpfile.js deleted file mode 100644 index becb514982..0000000000 --- a/gulpfile.js +++ /dev/null @@ -1,1110 +0,0 @@ -const _ = require('lodash'); -const appRootDir = require('app-root-dir'); -const execa = require('execa'); -const fs = require('fs-extra'); -const gulp = require('gulp'); -const gulpBabel = require('gulp-babel'); -const gulpFilter = require('gulp-filter'); -const gulpNewer = require('gulp-newer'); -const gulpPlumber = require('gulp-plumber'); -const gulpRename = require('gulp-rename'); -const gulpReplace = require('gulp-replace'); -const gulpBanner = require('gulp-banner'); -const jsonTransform = require('gulp-json-transform'); -const gulpSourcemaps = require('gulp-sourcemaps'); -const ts = require('gulp-typescript'); -const path = require('path'); -const through2 = require('through2'); -const typescript = require('typescript'); -const pkg = require('./package.json'); -const webpack = require('webpack'); - -const rollup = require('rollup'); -const rollupString = require('rollup-plugin-string'); -const rollupTypescript = require('rollup-plugin-typescript2'); - -const rxjsTypes = new Set(['Observer']); -const stdio = ['ignore', 'inherit', 'inherit']; -const APP_ROOT_DIR = __dirname; - -const CLIENT_PACKAGES = new Set([ - '@neo-one/client', - '@neo-one/client-common', - '@neo-one/client-core', - '@neo-one/developer-tools', - '@neo-one/utils', - '@neo-one/client-switch', - '@neo-one/node-vm', - '@neo-one/client-full-common', - '@neo-one/node-core', -]); -const CLIENT_FULL_PACKAGES = new Set( - [...CLIENT_PACKAGES].concat([ - '@neo-one/client-full', - '@neo-one/client-full-core', - ]), -); -const CLIENT_BROWSERIFY = { - 'neo-one-client': CLIENT_PACKAGES, - 'neo-one-client-full': CLIENT_FULL_PACKAGES, -}; - -const transformRxjsImportText = (importName) => - importName === 'EMPTY' - ? 'rxjs/internal/observable/empty' - : rxjsTypes.has(importName) - ? 'rxjs/internal/types' - : importName[0].toLowerCase() === importName[0] - ? `rxjs/internal/observable/${importName}` - : `rxjs/internal/${importName}`; - -const transformRxjsOperatorsImportText = (importName) => - `rxjs/internal/operators/${importName}`; - -const updateRxjsImportStatements = (callback, statement) => - statement.importClause.namedBindings.elements.map((elem) => - typescript.createImportDeclaration( - statement.decorators, - statement.modifiers, - typescript.createImportClause( - undefined, - typescript.createNamedImports([ - typescript.createImportSpecifier(elem.propertyName, elem.name), - ]), - ), - typescript.createStringLiteral( - callback( - elem.propertyName === undefined - ? elem.name.getText() - : elem.propertyName.getText(), - ), - ), - ), - ); - -const RXJS_IMPORT = 'rxjs'; -const RXJS_OPERATORS_IMPORT = 'rxjs/operators'; - -const transformImports = (statements) => - _.flattenDeep( - statements.map((statement) => { - if (typescript.isImportDeclaration(statement)) { - const moduleName = statement.moduleSpecifier.text; - - if (moduleName === RXJS_IMPORT) { - return updateRxjsImportStatements(transformRxjsImportText, statement); - } - if (moduleName === RXJS_OPERATORS_IMPORT) { - return updateRxjsImportStatements( - transformRxjsOperatorsImportText, - statement, - ); - } - } - - return statement; - }), - ); - -const createCustomTransform = (context) => { - return (node) => { - const visitor = (node) => { - if (typescript.isSourceFile(node)) { - const statements = transformImports(node.statements); - - return typescript.updateSourceFileNode( - node, - statements, - node.isDeclarationFile, - node.referencedFiles, - node.typeReferences, - node.hasNoDefaultLib, - node.libReferences, - ); - } - return node; - }; - - return typescript.visitNode(node, visitor); - }; -}; - -const createFormatDistName = ({ main, target, module, browser }) => { - if (main) { - return 'neo-one'; - } - if (browser) { - return 'neo-one-browserify'; - } - - return `neo-one-${target}-${module}`; -}; - -const createFormatName = ({ main, target, module, browser }) => { - if (main) { - return ''; - } - if (browser) { - return 'browserify'; - } - - return `${target}-${module}`; -}; - -const FORMATS = [ - { - main: true, - target: 'es2017', - module: 'cjs', - }, - { - target: 'esnext', - module: 'esm', - }, - { - target: 'es2017', - module: 'cjs', - browser: true, - }, -].map(({ target, module, main, browser }) => ({ - target, - module, - browser: browser === true, - dist: createFormatDistName({ main, target, module, browser }), - name: createFormatName({ main, target, module, browser }), - tsconfig: `tsconfig/tsconfig.${target}.${ - browser ? 'browserify.' : '' - }${module}.json`, - tsconfigESM: `tsconfig/tsconfig.${target}.esm.json`, - fastProject: ts.createProject( - `tsconfig/tsconfig.${target}.${browser ? 'browserify.' : ''}${module}.json`, - { - typescript, - isolatedModules: true, - }, - ), - project: ts.createProject( - `tsconfig/tsconfig.${target}.${browser ? 'browserify.' : ''}${module}.json`, - { - typescript, - }, - ), -})); -const MAIN_FORMAT = FORMATS[0]; -const MAIN_BIN_FORMAT = FORMATS[0]; -const BROWSER_FORMAT = FORMATS[2]; - -function getTaskHash(format, ...args) { - return (format.browser - ? [format.target, format.module, 'browserify'] - : [format.target, format.module] - ) - .concat(args.filter((x) => x !== void 0 && x !== '')) - .join(`:`); -} - -let noCache = false; -const memoizeTask = (cache, taskFn) => (format, ...args) => { - // Give the memoized fn a displayName so gulp's output is easier to follow. - const fn = (done) => { - if (noCache) { - return taskFn(format, done, ...args); - } - - return ( - cache[getTaskHash(format, ...args)] || - (cache[getTaskHash(format, ...args)] = taskFn(format, done, ...args)) - ); - }; - fn.displayName = `${taskFn.name || ``}:${getTaskHash(format, ...args)}:task`; - - return fn; -}; - -const DIST = 'dist'; -const getDistBase = (format) => path.join(DIST, format.dist); -const getDistBaseCWD = (format) => - path.resolve(appRootDir.get(), getDistBase(format)); -const getDest = (format) => path.join(getDistBase(format), 'packages'); - -const getPackageJSON = (pkg) => { - try { - return JSON.parse( - fs.readFileSync(path.resolve('packages', pkg, 'package.json'), 'utf-8'), - ); - } catch (error) { - console.log(`Invalid package.json: ${pkg}`); - console.error(error); - throw error; - } -}; - -const SKIP_PACKAGES = new Set([ - 'neo-one-developer-tools-frame', - 'neo-one-editor', - 'neo-one-editor-server', - 'neo-one-local-browser', - 'neo-one-local-browser-worker', - 'neo-one-local-singleton', - 'neo-one-node-browser', - 'neo-one-node-browser-worker', - 'neo-one-smart-contract-test-browser', - 'neo-one-website', - 'neo-one-worker', -]); -const SKIP_PACKAGES_LIST = [...SKIP_PACKAGES]; - -const getPackageJSONs = () => { - const pkgs = fs - .readdirSync('packages') - .filter((file) => !file.startsWith('.')) - .filter((file) => !SKIP_PACKAGES.has(file)) - .filter((pkg) => - fs.pathExistsSync(path.resolve('packages', pkg, 'package.json')), - ); - const pkgJSONs = pkgs.map((pkg) => [pkg, getPackageJSON(pkg)]); - - return { pkgs, pkgJSONs }; -}; - -const { pkgs, pkgJSONs } = getPackageJSONs(); -const smartContractPkgs = pkgJSONs - .filter(([_p, pkgJSON]) => pkgJSON.smartContract) - .map(([p]) => p); -const smartContractPkgNames = pkgJSONs - .filter(([_p, pkgJSON]) => pkgJSON.smartContract) - .map(([_p, pkgJSON]) => pkgJSON.name); -const browserPkgNames = pkgJSONs - .filter(([_p, pkgJSON]) => pkgJSON.browser !== undefined) - .map(([_p, pkgJSON]) => pkgJSON.name); -const pkgNames = pkgJSONs.map(([_p, pkgJSON]) => pkgJSON.name); -const pkgNamesSet = new Set(pkgNames); - -const skipGlobs = SKIP_PACKAGES_LIST.map((pkg) => `!packages/${pkg}/**/*`); - -const globs = { - watchFiles: [ - 'packages/*/src/**/*.{ts,tsx,js}', - 'packages/*/template/**/*', - 'packages/*/proto/**/*.proto', - '!packages/*/src/**/*.test.{ts,tsx}', - '!packages/*/src/__data__/**/*', - '!packages/*/src/__tests__/**/*', - '!packages/*/src/__ledger_tests__/**/*', - '!packages/*/src/__e2e__/**/*', - '!packages/*/src/bin/**/*', - ].concat(skipGlobs), - buildFiles: [ - 'packages/*/src/**/*.{ts,tsx}', - 'types/**/*', - '!packages/*/src/**/*.test.{ts,tsx}', - '!packages/*/src/__data__/**/*', - '!packages/*/src/__tests__/**/*', - '!packages/*/src/__ledger_tests__/**/*', - '!packages/*/src/__e2e__/**/*', - '!packages/*/src/bin/**/*', - '!packages/neo-one-developer-tools-frame/src/*.ts', - '!packages/neo-one-smart-contract-lib/src/**/*.ts', - ].concat(skipGlobs), - bin: ['packages/*/src/bin/*.ts'].concat(skipGlobs), - pkg: ['packages/*/package.json'].concat(skipGlobs), - typescript: ['packages/*/src/**/*.ts'].concat(skipGlobs), - pkgFiles: [ - 'packages/*/CHANGELOG.md', - 'packages/*/tsconfig.json', - 'packages/*/static/**/*', - 'packages/*/template/**/*', - 'packages/*/proto/**/*.proto', - ].concat(skipGlobs), - files: ['lerna.json', 'yarn.lock', 'tsconfig.json'], - metadata: ['LICENSE', 'README.md'], -}; - -const getName = (format, name) => - format.name === '' ? name : `${name}-${format.name}`; -const getBin = (format, file) => { - if (format.name !== '') { - return undefined; - } - - const pkgPath = path.join('packages', path.dirname(file.relative)); - const binDir = path.join(pkgPath, 'src', 'bin'); - const exists = fs.existsSync(binDir); - if (!exists) { - return undefined; - } - - const binFiles = fs.readdirSync(binDir); - return _.fromPairs( - _.flatMap( - binFiles.map((binFile) => { - const fileName = path.basename(binFile, '.ts'); - return [ - [fileName, `./bin/${fileName}`], - [`${fileName}.js`, `./bin/${fileName}.js`], - ]; - }), - ), - ); -}; -const DEP_MAPPING = { - esnext: { - esm: { - '@reactivex/ix-es2015-cjs': '@reactivex/ix-esnext-esm', - }, - cjs: { - '@reactivex/ix-es2015-cjs': '@reactivex/ix-esnext-cjs', - }, - }, - es2017: { - esm: { - '@reactivex/ix-es2015-cjs': '@reactivex/ix-es2015-esm', - }, - cjs: {}, - }, -}; -const mapDep = (format, depName) => { - if (pkgNamesSet.has(depName) && !format.browser) { - return getName(format, depName); - } - - if (DEP_MAPPING[format.target][format.module][depName] !== undefined) { - return DEP_MAPPING[format.target][format.module][depName]; - } - - if (format.browser && CLIENT_FULL_PACKAGES.has(depName)) { - return `${depName}-browserify`; - } - - return depName; -}; - -const transformBasePackageJSON = (format, orig, file) => { - const bin = getBin(format, file); - - return { - name: format.name === '' ? orig.name : `${orig.name}-${format.name}`, - version: orig.version, - author: pkg.author, - description: orig.description, - license: pkg.license, - homepage: pkg.homepage, - repository: pkg.repository, - bugs: pkg.bugs, - keywords: pkg.keywords, - bin, - dependencies: - orig.dependencies === undefined - ? undefined - : _.fromPairs( - Object.entries(orig.dependencies) - .filter( - ([depName]) => depName !== '@neo-one/developer-tools-frame', - ) - .map(([depName, version]) => [mapDep(format, depName), version]), - ), - publishConfig: { - access: 'public', - }, - engines: pkg.engines, - }; -}; - -const transformSrcPackageJSON = (format, orig, file) => ({ - ...transformBasePackageJSON(format, orig, file), - main: 'index.js', - module: format.module === 'esm' ? 'index.js' : undefined, - types: 'index.d.ts', - sideEffects: false, -}); - -const transformSmartContractPackageJSON = (format, orig, file) => ({ - ...transformBasePackageJSON(format, orig, file), - main: orig.main.startsWith('./src/') - ? orig.main.slice('./src/'.length) - : orig.main, - include: - orig.include === undefined - ? undefined - : orig.include.map((filepath) => filepath.slice(0, 'src/'.length)), -}); - -const transformBrowserPackageJSON = (format, orig, file) => ({ - ...transformSrcPackageJSON(format, orig, file), - browser: 'index.browser.js', -}); - -const transformPackageJSON = (format, orig, file) => - smartContractPkgNames.some((p) => orig.name === p) - ? transformSmartContractPackageJSON(format, orig, file) - : browserPkgNames.some((p) => orig.name === p) - ? transformBrowserPackageJSON(format, orig, file) - : transformSrcPackageJSON(format, orig, file); - -const copyPkg = ((cache) => - memoizeTask(cache, function copyPkg(format) { - return gulp - .src(globs.pkg) - .pipe( - jsonTransform( - (orig, file) => transformPackageJSON(format, orig, file), - 2, - ), - ) - .pipe(gulp.dest(getDest(format))); - }))({}); - -const copyPkgFiles = ((cache) => - memoizeTask(cache, function copyPkgFiles(format) { - return gulp.src(globs.pkgFiles).pipe(gulp.dest(getDest(format))); - }))({}); - -const copyTypescript = ((cache) => - memoizeTask(cache, function copyTypescript(format) { - return gulp - .src(globs.typescript) - .pipe( - gulpFilter([ - 'packages/neo-one-smart-contract/src/*.ts', - 'packages/neo-one-smart-contract-lib/src/**/*.ts', - '!packages/*/src/**/*.test.{ts,tsx}', - '!packages/*/src/__data__/**/*', - '!packages/*/src/__tests__/**/*', - '!packages/*/src/__ledger_tests__/**/*', - '!packages/*/src/__e2e__/**/*', - '!packages/*/src/bin/**/*', - ]), - ) - .pipe( - gulpRename((name) => { - name.dirname = name.dirname - .split(path.sep) - .filter((dir) => dir !== 'src') - .join(path.sep); - }), - ) - .pipe(gulp.dest(getDest(format))); - }))({}); - -const copyMetadata = ((cache) => - memoizeTask(cache, function copyMetadata(format) { - return pkgs.reduce( - (stream, p) => stream.pipe(gulp.dest(path.join(getDest(format), p))), - gulp.src(globs.metadata), - ); - }))({}); - -const copyFiles = ((cache) => - memoizeTask(cache, function copyFiles(format) { - return gulp.src(globs.files).pipe(gulp.dest(getDistBase(format))); - }))({}); - -const addFast = (format, stream, shouldAdd) => - shouldAdd - ? stream - .pipe(gulpPlumber()) - .pipe(gulpNewer({ dest: getDest(format), ext: '.js' })) - : stream; - -const quoted = (value, quote) => `${quote}${value}${quote}`; -const gulpReplaceModule = (format, stream, quote = "'") => - Object.entries(DEP_MAPPING[format.target][format.module]) - .concat( - format === MAIN_FORMAT - ? [] - : pkgNames.map((p) => [ - quoted(p, quote), - quoted(mapDep(format, p), quote), - ]), - ) - .reduce( - (streamIn, [moduleName, replaceName]) => - streamIn.pipe(gulpReplace(moduleName, replaceName)), - stream, - ); -const mapSources = (sourcePath) => path.basename(sourcePath); -const compileTypescript = ((cache) => - memoizeTask(cache, function compileTypescript(format, _done, type) { - return gulpReplaceModule( - format, - addFast(format, gulp.src(globs.buildFiles), type === 'fast') - .pipe( - gulpFilter( - ['**', '!**/*.proto'].concat( - smartContractPkgs.map((p) => `!packages/${p}/**/*`), - ), - ), - ) - .pipe(gulpSourcemaps.init()) - .pipe(type === 'fast' ? format.fastProject() : format.project()) - .pipe(gulpSourcemaps.mapSources(mapSources)) - .pipe(gulpSourcemaps.write()) - .pipe( - gulpReplace( - `${RXJS_IMPORT}/internal`, - `${RXJS_IMPORT}/${ - format.module === 'esm' ? '_esm2015/' : '' - }internal`, - ), - ) - .pipe( - gulpReplace( - /import\("(?:..\/)*neo-one-([^\)]*)\/src"\)/g, - 'import("@neo-one/$1")', - ), - ) - .pipe( - gulpReplace( - /import\("(?:..\/)*types\/bn.js"\).BN/g, - 'import("bn.js")', - ), - ) - .pipe( - gulpReplace("import { BN } from 'bn.js';", "import BN from 'bn.js';"), - ) - .pipe(gulpReplace('../static', './static')) - .pipe( - gulpRename((name) => { - name.dirname = name.dirname - .split(path.sep) - .filter((dir) => dir !== 'src') - .join(path.sep); - }), - ) - .pipe(gulpFilter(['**', '!packages/neo-one-developer-tools/*.js'])), - format.module === 'esm' ? "'" : '"', - ).pipe(gulp.dest(getDest(format))); - }))({}); - -gulp.task('compileDeveloperToolsFrame', async () => { - await execa('yarn', ['compile:developer-tools-frame'], { - stdio, - }); -}); - -const compileDeveloperToolsBundle = ((cache) => - memoizeTask(cache, async function compileDeveloperToolsBundle(format) { - const bundle = await rollup.rollup({ - input: path.resolve( - APP_ROOT_DIR, - 'packages', - 'neo-one-developer-tools', - 'src', - 'index.ts', - ), - external: ['resize-observer-polyfill'], - plugins: [ - rollupString.string({ - include: '**/*.raw.js', - }), - rollupTypescript({ - cacheRoot: path.join( - 'node_modules', - '.cache', - 'rts2', - format.target, - format.module, - ), - tsconfig: format.tsconfigESM, - tsconfigOverride: { - compilerOptions: { - inlineSources: false, - declaration: false, - }, - }, - check: false, - }), - ], - }); - - await bundle.write({ - format: format.module, - file: path.join(getDest(format), 'neo-one-developer-tools', 'index.js'), - }); - }))({}); - -const buildAllNoDeveloperToolsBundle = ((cache) => - memoizeTask(cache, function buildAllNoDeveloperToolsBundle( - format, - done, - type, - ) { - return gulp.parallel( - ...[ - copyPkgFiles(format), - copyPkg(format), - copyTypescript(format), - copyFiles(format), - copyMetadata(format), - copyRootPkg(format), - copyRootTSConfig(format), - format.browser ? undefined : compileTypescript(format, type), - format === MAIN_FORMAT ? 'buildBin' : undefined, - format === MAIN_FORMAT ? 'createBin' : undefined, - ].filter((task) => task !== undefined), - )(done); - }))({}); - -const buildAll = ((cache) => - memoizeTask(cache, function buildAll(format, done, type) { - return format.browser - ? buildAllNoDeveloperToolsBundle(format, type)(done) - : gulp.series( - buildAllNoDeveloperToolsBundle(format, type), - compileDeveloperToolsBundle(format), - )(done); - }))({}); - -const install = ((cache) => - memoizeTask(cache, async function install(format) { - await execa('yarn install --non-interactive --no-progress', { - cwd: getDistBaseCWD(format), - stdio, - shell: true, - }); - }))({}); - -const publish = ((cache) => - memoizeTask(cache, async function publish(format) { - await execa( - 'yarn', - [ - 'lerna', - 'exec', - path.resolve(appRootDir.get(), 'scripts', 'try-publish'), - ], - { - cwd: getDistBaseCWD(format), - stdio, - }, - ); - }))({}); - -const rootPkg = { ...pkg, devDependencies: { ...pkg.devDependencies } }; -delete rootPkg.devDependencies.husky; -delete rootPkg.husky; -const copyRootPkg = ((cache) => - memoizeTask(cache, async function copyRootPkg(format) { - const filePath = path.resolve(getDistBase(format), 'package.json'); - await fs.ensureDir(path.dirname(filePath)); - await fs.writeFile(filePath, JSON.stringify(rootPkg, null, 2)); - }))({}); - -const copyRootTSConfig = ((cache) => - memoizeTask(cache, async function copyRootTSConfig(format) { - const tsconfigContents = await fs.readFile( - path.resolve(appRootDir.get(), 'tsconfig.json'), - 'utf8', - ); - const tsconfig = JSON.parse(tsconfigContents); - const suffix = - format === MAIN_FORMAT ? '' : `-${format.target}-${format.module}`; - const { - compilerOptions: { paths, typeRoots, ...compilerRest }, - ...configRest - } = tsconfig; - const newTSConfig = { - compilerOptions: { - paths: { - [`@neo-one/*${suffix}`]: ['./neo-one-*'], - }, - ...compilerRest, - }, - ...configRest, - }; - const filePath = path.resolve(getDistBase(format), 'tsconfig.json'); - await fs.ensureDir(path.dirname(filePath)); - await fs.writeFile(filePath, JSON.stringify(newTSConfig, null, 2)); - }))({}); - -const webpackBrowserifyConfig = (externals, inputPath, outputPath) => ({ - entry: inputPath, - output: { - path: outputPath, - filename: 'index.js', - libraryTarget: 'commonjs', - }, - mode: 'production', - node: { - fs: 'empty', - }, - externals, - plugins: [ - new webpack.BannerPlugin({ - banner: `if(!Symbol.asyncIterator) {Symbol.asyncIterator = Symbol.asyncIterator || Symbol("Symbol.asyncIterator");}`, - raw: true, - }), - ], -}); - -const createPkgJSONMap = () => { - const { pkgJSONs } = getPackageJSONs(); - - return pkgJSONs.reduce( - (acc, pkgJSON) => ({ - ...acc, - [pkgJSON[1].name]: pkgJSON[1], - }), - {}, - ); -}; - -const EXTERNALS_BLACKLIST = new Set(['through', 'wif']); - -const getClientPkgDependencies = (pkgJSONMap, pkgs) => { - const externals = new Set(); - pkgs.forEach((pkg) => { - let dependencies = []; - if (pkgJSONMap[pkg].dependencies !== undefined) { - dependencies = pkgJSONMap[pkg].dependencies; - } - Object.keys(dependencies).forEach((name) => { - if ( - !( - name.includes('@neo-one') || - name.includes('@types') || - EXTERNALS_BLACKLIST.has(name) - ) - ) { - externals.add(name); - } - }); - }); - - return [...externals]; -}; - -const getPkgName = (pkgName) => - `@neo-one/${pkgName - .split('-') - .slice(2) - .join('-')}`; - -const copyBrowserifyTypesFiles = (inputPath, outputPath) => { - const dirList = fs.readdirSync(inputPath); - dirList.forEach((dirOrFile) => { - const newInputPath = path.resolve(inputPath, dirOrFile); - const newOutputPath = path.resolve(outputPath, dirOrFile); - - if (fs.lstatSync(newInputPath).isDirectory()) { - copyBrowserifyTypesFiles(newInputPath, newOutputPath); - } else if (dirOrFile.endsWith('.d.ts')) { - const typesFile = fs.readFileSync(newInputPath, 'utf-8'); - fs.outputFileSync( - newOutputPath, - typesFile.replace(/(?<='@neo-one\/)(.*)(?=')/gm, (match) => - match.includes('ec-key') ? match : `${match}-browserify`, - ), - ); - } - }); -}; - -const copyBrowserifyTypes = ((cache) => - memoizeTask(cache, async function copyBrowserifyTypes(format) { - if (format.browser) { - const inputPath = path.resolve(DIST, 'neo-one', 'packages'); - const outputPath = getDest(format); - - const allPackages = await fs.readdir(inputPath); - await Promise.all( - allPackages.map(async (pkgName) => { - const pkgNameMatcher = getPkgName(pkgName); - if ( - CLIENT_FULL_PACKAGES.has(pkgNameMatcher) || - pkgNameMatcher === '@neo-one/suite' - ) { - copyBrowserifyTypesFiles( - path.resolve(inputPath, pkgName), - path.resolve(outputPath, pkgName), - ); - } else { - await fs.remove(path.resolve(outputPath, pkgName)); - } - }), - ); - } - }))({}); - -const bundleBrowserify = ((cache) => - memoizeTask(cache, async function bundleBrowserify(format) { - if (format.browser) { - const pkgJSONMap = createPkgJSONMap(); - const inputPkgPath = path.resolve(DIST, 'neo-one', 'packages'); - const outputPkgPath = getDest(format); - - await Promise.all( - Object.entries(CLIENT_BROWSERIFY).map( - async ([pkgName, neoOneDependencies]) => { - const externals = getClientPkgDependencies( - pkgJSONMap, - neoOneDependencies, - ); - - await new Promise((resolve, reject) => - webpack( - webpackBrowserifyConfig( - externals, - path.resolve(inputPkgPath, pkgName), - path.resolve(outputPkgPath, pkgName), - ), - (err, stats) => { - if (err) { - reject(err); - } else if (stats.hasErrors()) { - console.log( - stats.toString({ - performance: false, - hash: false, - timings: true, - entrypoints: false, - chunkOrigins: false, - chunkModules: false, - colors: true, - }), - ); - reject(new Error('Webpack bundling failed.')); - } else { - resolve(stats); - } - }, - ), - ); - }, - ), - ); - } - }))({}); - -const cleanBrowserifyDirectory = ((cache) => - memoizeTask(cache, async function cleanBrowserifyDirectory(format) { - if (format.browser) { - const destPath = getDest(format); - const pkgs = await fs.readdir(destPath); - await Promise.all( - pkgs.map(async (pkgName) => { - const pkgNameMatcher = getPkgName(pkgName); - if ( - !CLIENT_FULL_PACKAGES.has(pkgNameMatcher) && - pkgNameMatcher !== '@neo-one/suite' - ) { - await fs.remove(path.resolve(destPath, pkgName)); - } - }), - ); - } - }))({}); - -gulp.task( - 'browserify', - gulp.parallel( - FORMATS.filter((format) => format.browser).map((format) => - copyBrowserifyTypes(format), - ), - FORMATS.filter((format) => format.browser).map((format) => - bundleBrowserify(format), - ), - ), -); - -const gulpBin = () => - gulpReplaceModule(MAIN_FORMAT, gulp.src(globs.bin)).pipe( - gulpRename((parsedPath) => { - parsedPath.dirname = - parsedPath.dirname.slice(0, -'/src/bin'.length) + '/bin'; - }), - ); - -const binProject = ts.createProject(MAIN_BIN_FORMAT.tsconfig, { - typescript, - declaration: false, -}); -const binBanner = `#!/usr/bin/env node -require('source-map-support').install({ handleUncaughtExceptions: false, environment: 'node' }); -`; -gulp.task('compileBin', () => - gulpBin() - .pipe(gulpSourcemaps.init()) - .pipe(binProject()) - .pipe(gulpBanner(binBanner)) - .pipe(gulpSourcemaps.mapSources(mapSources)) - .pipe(gulpSourcemaps.write()) - .pipe(gulp.dest(getDest(MAIN_FORMAT))), -); -const bin = (name) => `#!/usr/bin/env node -const importLocal = require('import-local'); - -if (!importLocal(__filename)) { - const execa = require('execa'); - const path = require('path'); - const semver = require('semver'); - - let args = []; - if (semver.satisfies(process.version, '8.x')) { - args = ['--harmony-async-iteration']; - } else if (semver.satisfies(process.version, '9.x')) { - args = ['--harmony']; - } - - const proc = execa('node', args.concat([path.resolve(__dirname, '${name}')]).concat(process.argv.slice(2)), { - stdio: 'inherit', - env: { - NODE_NO_WARNINGS: '1', - }, - }); - process.on('SIGTERM', () => proc.kill('SIGTERM')); - process.on('SIGINT', () => proc.kill('SIGINT')); - process.on('SIGBREAK', () => proc.kill('SIGBREAK')); - process.on('SIGHUP', () => proc.kill('SIGHUP')); - proc.on('exit', (code, signal) => { - let exitCode = code; - if (exitCode === null) { - exitCode = signal === 'SIGINT' ? 0 : 1; - } - process.exit(exitCode); - }); -} -`; -gulp.task('createBin', () => - gulp - .src(globs.bin) - .pipe( - through2.obj(function(file, enc, callback) { - file.dirname = file.dirname.slice(0, -'/src/bin'.length) + '/bin'; - file.extname = ''; - file.contents = Buffer.from( - bin(`${path.basename(file.basename, '.ts')}.js`), - 'utf8', - ); - - this.push(file); - - callback(); - }), - ) - .pipe(gulp.dest(getDest(MAIN_FORMAT))), -); -gulp.task('buildBin', gulp.parallel('compileBin', 'createBin')); - -gulp.task('clean', () => fs.remove(DIST)); -gulp.task('copyPkg', gulp.parallel(FORMATS.map((format) => copyPkg(format)))); -gulp.task( - 'copyPkgFiles', - gulp.parallel(FORMATS.map((format) => copyPkgFiles(format))), -); -gulp.task( - 'copyTypescript', - gulp.parallel(FORMATS.map((format) => copyTypescript(format))), -); -gulp.task( - 'copyMetadata', - gulp.parallel(FORMATS.map((format) => copyMetadata(format))), -); -gulp.task( - 'copyFiles', - gulp.parallel(FORMATS.map((format) => copyFiles(format))), -); -gulp.task( - 'copyRootPkg', - gulp.parallel(FORMATS.map((format) => copyRootPkg(format))), -); -gulp.task( - 'copyRootTSConfig', - gulp.parallel(FORMATS.map((format) => copyRootTSConfig(format))), -); -gulp.task( - 'compileDeveloperToolsBundle', - gulp.parallel(FORMATS.map((format) => compileDeveloperToolsBundle(format))), -); -gulp.task( - 'buildTypescript', - gulp.parallel(FORMATS.map((format) => compileTypescript(format))), -); -gulp.task( - 'buildAll', - gulp.series( - 'compileDeveloperToolsFrame', - gulp.parallel(FORMATS.map((format) => buildAll(format))), - ), -); -gulp.task('install', gulp.parallel(FORMATS.map((format) => install(format)))); -gulp.task('publish', gulp.parallel(FORMATS.map((format) => publish(format)))); - -gulp.task('build', gulp.series('clean', 'buildAll', 'install', 'browserify')); - -const buildE2ESeries = (type) => - gulp.series( - 'compileDeveloperToolsFrame', - buildAll(MAIN_FORMAT, type), - install(MAIN_FORMAT), - ); -gulp.task('buildE2E', gulp.series('clean', buildE2ESeries())); - -const buildNodeSeries = (type) => - gulp.series( - buildAllNoDeveloperToolsBundle(MAIN_FORMAT, type), - install(MAIN_FORMAT), - ); -gulp.task('buildNode', gulp.series('clean', buildNodeSeries())); - -gulp.task( - 'watch', - gulp.series(buildE2ESeries('fast'), function startWatch() { - noCache = true; - gulp.watch(globs.watchFiles, compileTypescript(MAIN_FORMAT, 'fast')); - }), -); - -gulp.task('prepareRelease', async () => { - await execa( - 'yarn', - [ - 'lerna', - 'version', - '--conventional-commits', - '--yes', - '--message', - 'chore(release): publish', - '--create-release=github', - ], - { - stdio, - }, - ); -}); - -gulp.task('test', async () => { - await execa('yarn', ['test-ci'], { stdio }); -}); - -gulp.task('e2e', async () => { - await execa('yarn', ['e2e-ci'], { stdio }); -}); - -gulp.task('cleanBrowserifyDirectory', cleanBrowserifyDirectory(BROWSER_FORMAT)); - -gulp.task( - 'release', - gulp.series( - 'test', - 'build', - 'e2e', - 'prepareRelease', - 'copyPkg', - 'cleanBrowserifyDirectory', - 'publish', - ), -); - -gulp.task( - 'fastRelease', - gulp.series( - 'build', - 'prepareRelease', - 'copyPkg', - 'copyMetadata', - 'copyPkgFiles', - 'cleanBrowserifyDirectory', - 'publish', - ), -); diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index 28be5c96fe..0000000000 --- a/jest.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - projects: ['jest/e2e.js', 'jest/unit.js'], -}; diff --git a/jest/base.js b/jest/base.js deleted file mode 100644 index 7da219b883..0000000000 --- a/jest/base.js +++ /dev/null @@ -1,34 +0,0 @@ -const nodePath = require('path'); - -let testPathIgnorePatterns = ['/node_modules/', '/courses/']; - -if (process.platform === 'win32') { - testPathIgnorePatterns = testPathIgnorePatterns.concat([ - '/packages/neo-one-editor/src/__tests__/.*', - '/packages/neo-one-editor-server/src/__tests__/.*', - '/packages/neo-one-smart-contract-compiler/src/__tests__/getSemanticDiagnostics.test.ts', - ]); -} - -module.exports = ({ path }) => ({ - rootDir: nodePath.resolve(__dirname, '..'), - globals: { - 'ts-jest': { - tsConfig: '/tsconfig/tsconfig.es2017.cjs.json', - isolatedModules: true, - }, - }, - moduleFileExtensions: ['js', 'jsx', 'json', 'node', 'ts', 'tsx'], - snapshotSerializers: [ - './scripts/serializers/blockchain.js', - './scripts/serializers/bn.js', - './scripts/serializers/buffer.js', - ], - testPathIgnorePatterns, - transform: { - '^.+\\.tsx?$': 'ts-jest', - '^.+\\.jsx?$': 'babel-jest', - }, - testEnvironment: `./scripts/${path}/NodeEnvironment.js`, - setupFilesAfterEnv: [`/scripts/${path}/jestSetup.js`], -}); diff --git a/jest/ci.js b/jest/ci.js deleted file mode 100644 index f1fbaad6c5..0000000000 --- a/jest/ci.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = (name) => ({ - reporters: ['default', ['jest-junit', { output: `reports/jest-${name}/results.xml` }]], -}); diff --git a/jest/e2e.js b/jest/e2e.js deleted file mode 100644 index 51c0f70ba5..0000000000 --- a/jest/e2e.js +++ /dev/null @@ -1,20 +0,0 @@ -const base = require('./base'); - -module.exports = { - ...base({ path: 'e2e' }), - displayName: 'e2e', - testRunner: 'jest-circus/runner', - testRegex: '^.*/__e2e__/.*\\.test\\.tsx?$', - moduleNameMapper: { - '^@neo-one/ec-key': '@neo-one/ec-key', - '^@neo-one/boa': '@neo-one/boa', - '^@neo-one/csharp': '@neo-one/csharp', - '^@neo-one/(.+)': '/dist/neo-one/packages/neo-one-$1', - }, - modulePathIgnorePatterns: [ - '/package.json', - '/packages/[a-z-]+/package.json', - '/dist/neo-one[a-z0-9-]+/package.json', - '/dist/neo-one[a-z0-9-]+/packages/package.json', - ], -}; diff --git a/jest/unit.js b/jest/unit.js deleted file mode 100644 index 8739f891b4..0000000000 --- a/jest/unit.js +++ /dev/null @@ -1,25 +0,0 @@ -const base = require('./base'); - -module.exports = { - ...base({ path: 'test' }), - displayName: 'unit', - testRegex: '^.*/__tests__/.*\\.test\\.tsx?$', - modulePathIgnorePatterns: ['/dist/.*'], - coverageReporters: ['json'], - collectCoverageFrom: [ - 'packages/*/src/**/*.ts', - '!packages/*/src/**/*.d.ts', - '!packages/*/src/__tests__/*.ts', - '!packages/*/src/__e2e__/*.ts', - '!packages/*/src/__data__/*.ts', - ], - coveragePathIgnorePatterns: [ - '/node_modules/', - '/packages/.*/src/__data__/contracts/.*', - '/packages/.*/src/__data__/snippets/.*', - '/packages/neo-one-smart-contract-compiler/src/scripts/generateTypes.ts', - '/packages/neo-one-smart-contract-lib/src/.*', - '/packages/neo-one-smart-contract/src/.*', - '/packages/.*/src/__ledger_tests__/.*', - ], -}; diff --git a/lerna.json b/lerna.json deleted file mode 100644 index 2c66ab030d..0000000000 --- a/lerna.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "lerna": "3.1.1", - "packages": [ - "packages/*" - ], - "version": "independent", - "npmClient": "yarn", - "useWorkspaces": true -} diff --git a/package.json b/package.json deleted file mode 100644 index 590a263715..0000000000 --- a/package.json +++ /dev/null @@ -1,277 +0,0 @@ -{ - "name": "neo-one", - "author": "Alex DiCarlo ", - "version": "0.0.0", - "description": "NEOβ€’ONE is a suite of tools and frameworks for developing dapps on the NEO blockchain.", - "homepage": "https://neo-one.io", - "repository": { - "type": "git", - "url": "git+https://github.com/neo-one-suite/neo-one.git" - }, - "bugs": { - "url": "https://github.com/neo-one-suite/neo-one/issues" - }, - "license": "MIT", - "keywords": [ - "neo", - "blockchain", - "neo-one", - "dapp" - ], - "private": true, - "workspaces": [ - "packages/*" - ], - "engines": { - "node": ">=10.16.0" - }, - "browserslist": [ - "last 2 chrome versions", - "last 2 safari versions", - "last 2 edge versions", - "last 2 firefox versions" - ], - "lint-staged": { - "packages/*/src/**/*.{ts,tsx}": [ - "yarn run prettier --write --config .prettierrc", - "git add", - "yarn run lint-files" - ], - "scripts/**/*.js": [ - "yarn run prettier --write --config .prettierrc --parser flow", - "git add" - ], - "scripts/**/*.ts": [ - "yarn run prettier --write --config .prettierrc", - "git add", - "yarn run lint-files" - ] - }, - "scripts": { - "audit-storage": "yarn run ts-node ./scripts/verify/audit.ts", - "cz": "git-cz", - "lint-staged": "node ./node_modules/.bin/lint-staged", - "gulp": "cross-env NODE_OPTIONS=\"--max-old-space-size=4096\" gulp", - "build": "yarn run gulp build", - "build:e2e": "yarn run gulp buildE2E", - "build:node": "yarn run gulp buildNode", - "watch:e2e": "yarn run gulp watch", - "release": "yarn run gulp release", - "neo-one": "node ./dist/neo-one/packages/neo-one-cli/bin/neo-one", - "jest": "cross-env NODE_OPTIONS=\"--max-old-space-size=3072\" jest", - "test": "yarn run jest --config jest/unit.js", - "test-ci": "yarn run jest --config jest/unit-ci.js --ci -w 2", - "test:ledger": "yarn run jest --config jest/ledger.js --w 1", - "test:other": "yarn run jest --config jest/other.js --w 1", - "e2e": "yarn run jest --config jest/e2e.js", - "e2e-ci": "yarn run jest --config jest/e2e-ci.js --ci -w 1", - "tsc": "cross-env NODE_OPTIONS=\"--max-old-space-size=3072\" tsc && tsc -p packages/neo-one-smart-contract && tsc -p packages/neo-one-smart-contract-lib && tsc -p packages/neo-one-smart-contract-lib/src/__data__/contracts && tsc -p packages/neo-one-smart-contract-compiler/src/__data__/contracts", - "tsc-fast": "cross-env NODE_OPTIONS=\"--max-old-space-size=3072\" tsc", - "ts-node": "cross-env NODE_OPTIONS=\"--max-old-space-size=3072\" TS_NODE_PROJECT=tsconfig/tsconfig.es2017.cjs.json node -r ts-node/register/transpile-only", - "nit:source": "prettier --config .prettierrc --list-different \"packages/*/src/**/*.{ts,tsx}\"", - "nit:scripts:ts": "prettier --config .prettierrc --list-different \"scripts/**/*.{ts,tsx}\"", - "nit:scripts:js": "prettier --config .prettierrc --list-different \"scripts/**/*.js\" --parser flow", - "nit:scripts": "yarn run nit:scripts:ts && yarn run nit:scripts:js", - "nit": "yarn run nit:source && yarn run nit:scripts", - "prettier:source": "prettier --config .prettierrc --write \"packages/*/src/**/*.{ts,tsx}\"", - "prettier:scripts:ts": "prettier --config .prettierrc --write \"scripts/**/*.{ts,tsx}\"", - "prettier:scripts:js": "prettier --config .prettierrc --write \"scripts/**/*.js\" --parser flow", - "prettier:scripts": "yarn run prettier:scripts:ts && yarn run prettier:scripts:js", - "prettier:all": "yarn run prettier:source && yarn run prettier:scripts", - "lint-files": "tslint --project . --format codeFrame", - "lint:ts": "yarn run lint-files 'packages/*/src/**/*.{ts,tsx}'", - "lint:scripts": "yarn run lint-files 'scripts/**/*.{ts,tsx}'", - "lint": "yarn run lint:ts && yarn run lint:scripts", - "verify-storage": "yarn run ts-node ./scripts/verify/storage.ts", - "create-guards": "yarn run ts-node ./scripts/ts/createGuards.ts", - "contributors:add": "all-contributors add", - "contributors:generate": "all-contributors generate", - "jest-9": "cross-env NODE_OPTIONS=\"--max-old-space-size=3072\" node --harmony ./node_modules/.bin/jest", - "jest-windows-9": "cross-env NODE_OPTIONS=\"--max-old-space-size=3072\" node --harmony ./node_modules/jest/bin/jest.js", - "test-9": "yarn run jest-9 --config jest/unit.js", - "test-ci-9": "yarn run jest-9 --config jest/unit-ci.js --ci -w 1", - "test-ci-windows-9": "yarn run jest-windows-9 --config jest/unit-ci.js --ci -w 1", - "e2e-ci-9": "yarn run jest-9 --config jest/e2e-ci.js --ci -w 1", - "e2e-ci-windows-9": "yarn run jest-windows-9 --config jest/e2e-ci.js --ci -w 1", - "website:start-workers": "yarn run ts-node ./scripts/website/compile --watch --bundle workers", - "website:start-overlay": "yarn run ts-node ./scripts/website/compile --watch --bundle overlay", - "website:start-tools": "yarn run ts-node ./scripts/website/compile --watch --bundle tools", - "website:start-preview": "yarn run ts-node ./scripts/website/compile --watch --bundle preview", - "website:start-testRunner": "yarn run ts-node ./scripts/website/compile --watch --bundle testRunner", - "website:start-server": "mkdir -p dist/server && touch dist/server/index.js && yarn run ts-node ./scripts/website/compile --watch --bundle server", - "website:start-static": "cross-env NODE_OPTIONS=\"--max-old-space-size=6144\" TS_NODE_PROJECT=tsconfig/tsconfig.es2017.cjs.json yarn run react-static start", - "website:start:dev-builds": "rm -rf node_modules/.cache && concurrently -n 'workers,overlay,tools' --kill-others-on-fail \"yarn website:start-workers\" \"yarn website:start-overlay\" \"yarn website:start-tools\"", - "website:start:dev": "concurrently -n 'preview, testRunner, server, static' --kill-others-on-fail \"yarn website:start-preview\" \"yarn website:start-testRunner\" \"yarn website:start-server\" \"yarn website:start-static\"", - "website:start-workers-prod": "cross-env NEO_ONE_CACHE=true NEO_ONE_PROD=true yarn run ts-node ./scripts/website/compile --bundle workers", - "website:start-overlay-prod": "cross-env NEO_ONE_CACHE=true NEO_ONE_PROD=true yarn run ts-node ./scripts/website/compile --bundle overlay", - "website:start-tools-prod": "cross-env NEO_ONE_CACHE=true NEO_ONE_PROD=true yarn run ts-node ./scripts/website/compile --bundle tools", - "website:start-preview-prod": "cross-env NEO_ONE_CACHE=true NEO_ONE_PROD=true yarn run ts-node ./scripts/website/compile --bundle preview && yarn run serve dist/preview -p 8080", - "website:start-testRunner-prod": "cross-env NEO_ONE_CACHE=true NEO_ONE_PROD=true yarn run ts-node ./scripts/website/compile --bundle testRunner && yarn run serve dist/testRunner -p 8081", - "website:start-static-prod": "rm -rf ./packages/neo-one-website/publicOut && cp -r ./dist/workers ./packages/neo-one-website/publicOut && cp -r ./packages/neo-one-website/public/* ./packages/neo-one-website/publicOut && cross-env NEO_ONE_STAGING=true NEO_ONE_CACHE=true NODE_OPTIONS=\"--max-old-space-size=6144\" TS_NODE_PROJECT=tsconfig/tsconfig.es2017.cjs.json yarn run react-static build --staging && cross-env NODE_OPTIONS=\"--max-old-space-size=6144\" TS_NODE_PROJECT=tsconfig/tsconfig.es2017.cjs.json yarn run serve packages/neo-one-website/dist -p 3000", - "website:start:prod-builds": "rm -rf node_modules/.cache && concurrently -n 'workers,overlay,tools' --kill-others-on-fail \"yarn website:start-workers-prod\" \"yarn website:start-overlay-prod\" \"yarn website:start-tools-prod\"", - "website:start:prod": "concurrently -n 'preview, testRunner, server, static' --kill-others-on-fail \"yarn website:start-preview-prod\" \"yarn website:start-testRunner-prod\" \"yarn website:start-server\" \"yarn website:start-static-prod\"", - "website:stage": "cross-env NODE_OPTIONS=\"--max-old-space-size=6144\" TS_NODE_PROJECT=tsconfig/tsconfig.es2017.cjs.json yarn run react-static build --staging", - "website:serve": "cross-env NODE_OPTIONS=\"--max-old-space-size=6144\" TS_NODE_PROJECT=tsconfig/tsconfig.es2017.cjs.json yarn run serve packages/neo-one-website/dist -p 3000", - "website:build-static": "cross-env NODE_OPTIONS=\"--max-old-space-size=6144\" TS_NODE_PROJECT=tsconfig/tsconfig.es2017.cjs.json yarn run react-static build", - "website:deploy-static:local": "cp ./scripts/website/now/static.now.json ./packages/neo-one-website/dist/now.json && cd packages/neo-one-website/dist && now dev -l 3000 --debug", - "website:deploy-testRunner:local": "cp ./scripts/website/now/testRunner.now.json ./dist/testRunner/now.json && cd dist/testRunner && now dev -l 8081 --debug", - "website:deploy-preview:local": "cp -r ./dist/overlay/* ./dist/preview && cp ./scripts/website/now/preview.now.json ./dist/preview/now.json && cd dist/preview && now dev -l 8080 --debug", - "website:deploy-server:local": "cp ./scripts/website/now/server.now.json ./dist/server/now.json && cd dist/server && now dev -l 3001 --debug", - "website:deploy-static:live": "cp ./scripts/website/now/static.now.json ./packages/neo-one-website/dist/now.json && cd packages/neo-one-website/dist && now --target production", - "website:deploy-testRunner:live": "cp ./scripts/website/now/testRunner.now.json ./dist/testRunner/now.json && cd dist/testRunner && now --target production", - "website:deploy-preview:live": "cp -r ./dist/overlay/* ./dist/preview && cp ./scripts/website/now/preview.now.json ./dist/preview/now.json && cd dist/preview && now --target production", - "website:deploy-server:live": "cp ./scripts/website/now/server.now.json ./dist/server/now.json && cd dist/server && now --target production", - "website:compile:all:local": "rm -rf ./dist && rm -rf ./packages/neo-one-website/dist && yarn run website:start:prod-builds && yarn run ts-node ./scripts/website/compile --bundle testRunner && yarn run ts-node ./scripts/website/compile --bundle server && yarn run ts-node ./scripts/website/compile --bundle preview && rm -rf ./packages/neo-one-website/publicOut && cp -r ./dist/workers ./packages/neo-one-website/publicOut && cp -r ./packages/neo-one-website/public/* ./packages/neo-one-website/publicOut && cross-env NEO_ONE_STAGING=true NODE_OPTIONS=\"--max-old-space-size=6144\" TS_NODE_PROJECT=tsconfig/tsconfig.es2017.cjs.json yarn run react-static build --staging && sh ./scripts/rm-cruft", - "website:compile:all:live": "rm -rf ./dist && rm -rf ./packages/neo-one-website/dist && yarn run website:start:prod-builds && yarn run ts-node ./scripts/website/compile --bundle testRunner && yarn run ts-node ./scripts/website/compile --bundle server && yarn run ts-node ./scripts/website/compile --bundle preview && rm -rf ./packages/neo-one-website/publicOut && cp -r ./dist/workers ./packages/neo-one-website/publicOut && cp -r ./packages/neo-one-website/public/* ./packages/neo-one-website/publicOut && cross-env NODE_OPTIONS=\"--max-old-space-size=6144\" TS_NODE_PROJECT=tsconfig/tsconfig.es2017.cjs.json yarn run react-static build && sh ./scripts/rm-cruft", - "website:deploy:all:live": "yarn run website:compile:all:live && yarn run website:deploy-static:live && yarn run website:deploy-testRunner:live && yarn run website:deploy-preview:live && yarn run website:deploy-server:live", - "test:cypress": "yarn run ts-node ./scripts/website/runCypress.ts --local", - "test:cypress-express": "yarn run ts-node ./scripts/website/runCypress.ts --express", - "concatenate": "yarn run ts-node ./packages/neo-one-typescript-concatenator/src/entry.ts", - "compile:developer-tools-frame": "cross-env NEO_ONE_DIST=true yarn run ts-node ./scripts/website/compile --bundle tools" - }, - "husky": { - "hooks": { - "pre-commit": "lint-staged && echo \"Executing tsc...\" && yarn run tsc-fast", - "post-merge": "yarn run ts-node ./scripts/hooks/post-merge.ts", - "post-rewrite": "yarn run ts-node ./scripts/hooks/post-rewrite.ts" - } - }, - "devDependencies": { - "@babel/core": "^7.5.5", - "@babel/plugin-proposal-async-generator-functions": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.5.5", - "@babel/plugin-syntax-dynamic-import": "^7.2.0", - "@babel/plugin-syntax-numeric-separator": "^7.2.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", - "@babel/plugin-syntax-typescript": "^7.3.3", - "@babel/preset-env": "^7.5.5", - "@babel/preset-react": "^7.0.0", - "@cypress/webpack-preprocessor": "^4.1.0", - "@emotion/core": "^10.0.16", - "@reach/router": "^1.2.1", - "@reactivex/ix-esnext-esm": "^2.5.3", - "@types/autoprefixer": "^9.6.1", - "@types/cssnano": "^4.0.0", - "@types/execa": "^2.0.0", - "@types/jest": "^24.0.18", - "@types/jest-matchers": "^20.0.2", - "@types/koa-bodyparser": "^4.3.0", - "@types/prettier": "^1.18.2", - "@types/react": "^16.9.2", - "@types/webpack": "^4.39.0", - "@types/webpack-bundle-analyzer": "^2.13.2", - "@types/webpack-dev-server": "^3.4.0", - "@types/yargs": "^13.0.2", - "all-contributors-cli": "^6.8.1", - "app-root-dir": "^1.0.2", - "autoprefixer": "^9.6.1", - "babel-core": "^7.0.0-bridge.0", - "babel-loader": "^8.0.6", - "babel-plugin-emotion": "^10.0.16", - "babel-plugin-lodash": "^3.3.4", - "babel-plugin-transform-imports": "^2.0.0", - "babel-plugin-universal-import": "^4.0.0", - "cache-loader": "^4.1.0", - "codecov": "^3.5.0", - "commitizen": "^4.0.3", - "compression-webpack-plugin": "^3.0.0", - "concurrently": "^5.0.0", - "connect-history-api-fallback": "^1.6.0", - "cross-env": "^6.0.0", - "css-loader": "^3.2.0", - "cssnano": "^4.1.10", - "cypress": "^3.4.1", - "cypress-plugin-retries": "^1.2.2", - "cz-conventional-changelog": "^3.0.2", - "date-fns": "^2.0.0-beta.5", - "emotion": "^10.0.14", - "eslint": "^6.2.0", - "execa": "^3.2.0", - "extract-css-chunks-webpack-plugin": "^4.6.0", - "file-loader": "^4.2.0", - "fs-extra": "^8.1.0", - "gulp": "^4.0.2", - "gulp-babel": "^8.0.0", - "gulp-banner": "^0.1.3", - "gulp-filter": "^6.0.0", - "gulp-json-transform": "^0.4.7", - "gulp-newer": "^1.4.0", - "gulp-plumber": "^1.2.1", - "gulp-rename": "^1.4.0", - "gulp-replace": "^1.0.0", - "gulp-sourcemaps": "^2.6.5", - "gulp-typescript": "^5.0.1", - "husky": "^3.0.4", - "is-running": "^2.1.0", - "istanbul-lib-coverage": "^2.0.5", - "jest": "^24.9.0", - "jest-environment-node": "^24.9.0", - "jest-junit": "^9.0.0", - "json": "^9.0.6", - "koa-connect": "^2.0.1", - "lerna": "^3.16.4", - "lint-staged": "^9.2.5", - "lodash": "^4.17.15", - "lodash-webpack-plugin": "^0.11.5", - "mini-html-webpack-plugin": "^2.0.0", - "mocha": "^6.2.0", - "mocha-junit-reporter": "^1.23.1", - "mocha-multi-reporters": "^1.1.7", - "nanoid": "^2.0.3", - "nodemon": "^1.19.1", - "nyc": "^14.1.1", - "optimize-css-assets-webpack-plugin": "^5.0.3", - "postcss-flexbugs-fixes": "^4.1.0", - "postcss-loader": "^3.0.0", - "prettier": "^1.18.2", - "react": "^16.11.0", - "react-dom": "^16.11.0", - "react-hot-loader": "^4.12.12", - "react-static": "^7.1.0", - "react-static-plugin-emotion": "^7.0.10", - "react-static-plugin-reach-router": "^7.0.10", - "react-static-plugin-source-filesystem": "^7.1.0", - "rollup": "^1.19.4", - "rollup-plugin-string": "^3.0.0", - "rollup-plugin-typescript2": "^0.25.0", - "rxjs": "^6.5.2", - "rxjs-tslint-rules": "^4.24.3", - "source-map": "^0.7.3", - "stats-webpack-plugin": "^0.7.0", - "style-loader": "^1.0.0", - "stylelint": "^11.1.1", - "stylelint-config-standard": "^19.0.0", - "stylelint-config-styled-components": "^0.1.1", - "stylelint-processor-styled-components": "^1.8.0", - "terser-webpack-plugin": "^2.0.0", - "thread-loader": "^2.1.3", - "through2": "^3.0.1", - "tmp": "^0.1.0", - "ts-jest": "^24.0.2", - "ts-loader": "^6.0.4", - "ts-node": "^8.3.0", - "tslint": "^5.18.0", - "tslint-clean-code": "^0.2.9", - "tslint-config-prettier": "^1.18.0", - "tslint-consistent-codestyle": "^1.15.1", - "tslint-immutable": "^6.0.1", - "tslint-microsoft-contrib": "^6.2.0", - "tslint-sonarts": "^1.9.0", - "typescript": "^3.6.3", - "typescript-styled-plugin": "^0.15.0", - "url-loader": "^2.1.0", - "webpack": "^4.39.3", - "webpack-bundle-analyzer": "^3.4.1", - "webpack-dev-server": "^3.8.0", - "webpack-node-externals": "^1.7.2", - "webpackbar": "^4.0.0", - "workbox-webpack-plugin": "^4.3.1", - "wtfnode": "^0.8.0", - "yargs": "^14.0.0" - }, - "config": { - "commitizen": { - "path": "cz-conventional-changelog" - } - } -} diff --git a/packages/neo-one-build-tests/babel.config.js b/packages/neo-one-build-tests/babel.config.js new file mode 100644 index 0000000000..89cc81e9f3 --- /dev/null +++ b/packages/neo-one-build-tests/babel.config.js @@ -0,0 +1,12 @@ +const r = require.resolve; + +module.exports = { + presets: [ + [ + r('@babel/preset-env'), + { + targets: { node: true }, + }, + ], + ], +}; diff --git a/scripts/e2e/NodeEnvironment.js b/packages/neo-one-build-tests/environments/e2e/NodeEnvironment.js similarity index 100% rename from scripts/e2e/NodeEnvironment.js rename to packages/neo-one-build-tests/environments/e2e/NodeEnvironment.js diff --git a/scripts/e2e/One.js b/packages/neo-one-build-tests/environments/e2e/One.js similarity index 75% rename from scripts/e2e/One.js rename to packages/neo-one-build-tests/environments/e2e/One.js index e9b340a0c6..68964031d4 100644 --- a/scripts/e2e/One.js +++ b/packages/neo-one-build-tests/environments/e2e/One.js @@ -48,11 +48,10 @@ class One { return async (commandIn, options = {}) => { const cmd = nodePath.resolve( process.cwd(), - 'dist', - 'neo-one', - 'node_modules', - '.bin', - 'neo-one', + 'packages', + 'neo-one-cli', + 'bin', + 'neo-one.js', ); const args = commandIn.split(' '); return this.execBase(commandIn, project, options) @@ -70,14 +69,13 @@ class One { execBase(commandIn, project, options = {}) { const cmd = nodePath.resolve( process.cwd(), - 'dist', - 'neo-one', - 'node_modules', - '.bin', - 'neo-one', + 'packages', + 'neo-one-cli', + 'bin', + 'neo-one.js', ); - const args = commandIn.split(' '); - const proc = execa(cmd, args, this._getEnv(project, options)); + const args = [cmd].concat(commandIn.split(' ')); + const proc = execa('node', args, this._getEnv(project, options)); // Uncomment these lines to debug e2e tests. // proc.stdout.pipe(process.stdout); // proc.stderr.pipe(process.stderr); @@ -87,14 +85,13 @@ class One { execBaseNode(commandIn, environment) { const cmd = nodePath.resolve( process.cwd(), - 'dist', - 'neo-one', - 'node_modules', - '.bin', - 'neo-one-node', + 'packages', + 'neo-one-node-bin', + 'bin', + 'neo-one-node.js', ); - const args = commandIn.split(' '); - const proc = execa(cmd, args, environment); + const args = [cmd].concat(commandIn.split(' ')); + const proc = execa('node', args, environment); // Uncomment these lines to debug e2e tests. // proc.stdout.pipe(process.stdout); // proc.stderr.pipe(process.stderr); @@ -102,7 +99,7 @@ class One { } createNodeProject(project) { - const environment = this._getEnvNode(project); + const environment = this._getEnvTmpProject(project); return { exec: (command, options = {}) => { const proc = this.execBaseNode(command, { ...options, environment }); @@ -112,11 +109,34 @@ class One { // do nothing }); }); + + return proc; }, env: environment.env, }; } + createCLIProject(project) { + const environment = this._getEnvTmpProject(project); + return { + exec: (command, options = {}) => + this.execBase(command, project, { + ...options, + tempDirIsProjectDir: true, + environment, + }) + .then(({ stdout }) => stdout) + .catch((error) => { + throw new Error( + `Command:\n${command}\n\nSTDOUT:\n${error.stdout}\n\nSTDERR:\n${ + error.stderr + }\n\nERROR:\n${error.toString()}`, + ); + }), + env: environment.env, + }; + } + createExecAsync(project) { return (command, options = {}) => { const proc = this.execBase(command, project, options); @@ -129,7 +149,7 @@ class One { }; } - getTmpDir() { + _getTmpDir() { const dir = tmp.dirSync().name; fs.ensureDirSync(dir); this.mutableCleanup.push(async () => { @@ -172,7 +192,7 @@ class One { throw finalError; } - _getEnvNode(project) { + _setupProject(project) { this.projectEnv[project] = this.projectEnv[project] || { ..._.fromPairs( _.range(this.minPort, this.maxPort).map((port, idx) => [ @@ -180,8 +200,12 @@ class One { port, ]), ), - NEO_ONE_TMP_DIR: this.getTmpDir(), + NEO_ONE_TMP_DIR: this._getTmpDir(), }; + } + + _getEnvTmpProject(project) { + this._setupProject(project); return { maxBuffer: 20000 * 1024, @@ -192,21 +216,15 @@ class One { } _getEnv(project, options = {}) { - this.projectEnv[project] = this.projectEnv[project] || { - ..._.fromPairs( - _.range(this.minPort, this.maxPort).map((port, idx) => [ - `NEO_ONE_PORT_${idx}`, - port, - ]), - ), - NEO_ONE_TMP_DIR: this.getTmpDir(), - }; + this._setupProject(project); return { ...options, maxBuffer: 20000 * 1024, windowsHide: true, - cwd: this.getProjectDir(project), + cwd: options.tempDirIsProjectDir + ? this.projectEnv[project].NEO_ONE_TMP_DIR + : this.getProjectDir(project), env: this.projectEnv[project], }; } diff --git a/scripts/e2e/checkPort.js b/packages/neo-one-build-tests/environments/e2e/checkPort.js similarity index 100% rename from scripts/e2e/checkPort.js rename to packages/neo-one-build-tests/environments/e2e/checkPort.js diff --git a/packages/neo-one-build-tests/environments/e2e/jestSetup.js b/packages/neo-one-build-tests/environments/e2e/jestSetup.js new file mode 100644 index 0000000000..b6d60de92f --- /dev/null +++ b/packages/neo-one-build-tests/environments/e2e/jestSetup.js @@ -0,0 +1,31 @@ +const { setGlobalLogLevel } = require('@neo-one/logger'); +const path = require('path'); +const appRootDir = require('app-root-dir'); + +const APP_ROOT_DIR = path.resolve(__dirname, '..', '..', '..', '..'); +appRootDir.set(APP_ROOT_DIR); + +setGlobalLogLevel('silent'); +jest.setTimeout(30 * 1000); +jest.retryTimes(2); + +const tempConsole = global.console; +global.console = { + // log: console.log, // Use this to debug source code + log: jest.fn(), + error: console.error, + warn: console.warn, + info: jest.fn(), + debug: jest.fn(), +}; + +beforeEach(async () => { + await one.setup(); +}); + +afterEach(async () => { + await one.cleanupTest(); +}); +afterAll(() => { + global.console = tempConsole; +}); diff --git a/scripts/test/NodeEnvironment.js b/packages/neo-one-build-tests/environments/test/NodeEnvironment.js similarity index 100% rename from scripts/test/NodeEnvironment.js rename to packages/neo-one-build-tests/environments/test/NodeEnvironment.js diff --git a/scripts/test/One.js b/packages/neo-one-build-tests/environments/test/One.js similarity index 100% rename from scripts/test/One.js rename to packages/neo-one-build-tests/environments/test/One.js diff --git a/packages/neo-one-build-tests/environments/test/jestSetup.js b/packages/neo-one-build-tests/environments/test/jestSetup.js new file mode 100644 index 0000000000..dff7a25fb1 --- /dev/null +++ b/packages/neo-one-build-tests/environments/test/jestSetup.js @@ -0,0 +1,26 @@ +const { setGlobalLogLevel } = require('@neo-one/logger'); +const appRootDir = require('app-root-dir'); +const path = require('path'); + +const APP_ROOT_DIR = path.resolve(__dirname, '..', '..', '..', '..'); +appRootDir.set(APP_ROOT_DIR); + +setGlobalLogLevel('silent'); +jest.setTimeout(120 * 1000); + +const tempConsole = global.console; +global.console = { + log: console.log, // Use this to debug source code + // log: jest.fn(), + error: console.error, + warn: console.warn, + info: jest.fn(), +}; + +afterEach(async () => { + await one.cleanupTest(); +}); + +afterAll(() => { + global.console = tempConsole; +}); diff --git a/packages/neo-one-build-tests/jest/base.js b/packages/neo-one-build-tests/jest/base.js new file mode 100644 index 0000000000..6a26d99aba --- /dev/null +++ b/packages/neo-one-build-tests/jest/base.js @@ -0,0 +1,73 @@ +const nodePath = require('path'); +const appRootDir = require('app-root-dir'); + +const APP_ROOT_DIR = process.cwd(); +appRootDir.set(APP_ROOT_DIR); + +let testPathIgnorePatterns = ['/node_modules/', '/courses/']; + +const jest_root = nodePath.resolve(__dirname, '..'); + +if (process.platform === 'win32') { + testPathIgnorePatterns = testPathIgnorePatterns.concat([ + '/packages/neo-one-editor/src/__tests__/.*', + '/packages/neo-one-editor-server/src/__tests__/.*', + '/packages/neo-one-smart-contract-compiler/src/__tests__/getSemanticDiagnostics.test.ts', + ]); +} + +module.exports = ({ path }) => ({ + rootDir: APP_ROOT_DIR, + modulePathIgnorePatterns: ['/common/'], + globals: { + 'ts-jest': { + tsConfig: `${jest_root}/tsconfig.jest.json`, + isolatedModules: true, + }, + }, + moduleFileExtensions: ['js', 'jsx', 'json', 'node', 'ts', 'tsx'], + snapshotSerializers: [ + `${jest_root}/serializers/blockchain.js`, + `${jest_root}/serializers/bn.js`, + `${jest_root}/serializers/buffer.js`, + ], + testPathIgnorePatterns, + transformIgnorePatterns: ['node_modules'], + transform: { + '^.+\\.tsx?$': `${jest_root}/node_modules/ts-jest`, + '^.+\\.jsx?$': [ + `${jest_root}/node_modules/babel-jest`, + { + configFile: require.resolve(jest_root + '/babel.config.js'), + babelrc: true, + babelrcRoots: './packages/*', + }, + ], + }, + collectCoverageFrom: [ + 'packages/*/src/**/*.ts', + '!packages/*/src/**/*.d.ts', + '!packages/*/src/__tests__/**/*', + '!packages/*/src/__other_tests__/**/*', + '!packages/*/src/__ledger_tests__/**/*', + '!packages/*/src/__e2e__/**/*', + '!packages/*/src/__data__/**/*', + ], + coveragePathIgnorePatterns: [ + '/packages/.*/node_modules', + '/packages/neo-one-cli/.*', + '/packages/neo-one-developer-tools-.*', + '/packages/neo-one-editor/.*', + '/packages/neo-one-editor-server/.*', + '/packages/neo-one-node-browser-.*', + '/packages/neo-one-smart-contract-compiler/src/scripts/generateTypes.ts', + '/packages/neo-one-smart-contract-lib/.*', + '/packages/neo-one-smart-contract/.*', + '/packages/neo-one-smart-contract-test-browser/.*', + '/packages/neo-one-website/.*', + '/packages/neo-one-build-.*', + '/packages/neo-one-local-.*', + ], + testEnvironment: `${jest_root}/environments/${path}/NodeEnvironment.js`, + setupFilesAfterEnv: [`${jest_root}/environments/${path}/jestSetup.js`], +}); diff --git a/packages/neo-one-build-tests/jest/ci.js b/packages/neo-one-build-tests/jest/ci.js new file mode 100644 index 0000000000..3255a3a3f9 --- /dev/null +++ b/packages/neo-one-build-tests/jest/ci.js @@ -0,0 +1,9 @@ +module.exports = (name) => ({ + reporters: [ + 'default', + [ + '/packages/neo-one-build-tests/node_modules/jest-junit', + { output: `/reports/jest-${name}/results.xml` }, + ], + ], +}); diff --git a/jest/e2e-ci.js b/packages/neo-one-build-tests/jest/e2e-ci.js similarity index 100% rename from jest/e2e-ci.js rename to packages/neo-one-build-tests/jest/e2e-ci.js diff --git a/packages/neo-one-build-tests/jest/e2e.js b/packages/neo-one-build-tests/jest/e2e.js new file mode 100644 index 0000000000..ff9d5137ac --- /dev/null +++ b/packages/neo-one-build-tests/jest/e2e.js @@ -0,0 +1,16 @@ +const base = require('./base'); + +module.exports = { + ...base({ path: 'e2e' }), + displayName: 'e2e', + testRunner: + '/packages/neo-one-build-tests/node_modules/jest-circus/runner', + testRegex: '^.*/__e2e__/.*\\.test\\.tsx?$', + moduleNameMapper: { + '^@neo-one/cli$': '/packages/neo-one-cli/src/index', + }, + modulePathIgnorePatterns: [ + '/packages/[a-z-]+/package.json', + '/common', + ], +}; diff --git a/jest/ledger.js b/packages/neo-one-build-tests/jest/ledger.js similarity index 100% rename from jest/ledger.js rename to packages/neo-one-build-tests/jest/ledger.js diff --git a/jest/other.js b/packages/neo-one-build-tests/jest/other.js similarity index 100% rename from jest/other.js rename to packages/neo-one-build-tests/jest/other.js diff --git a/jest/unit-ci.js b/packages/neo-one-build-tests/jest/unit-ci.js similarity index 76% rename from jest/unit-ci.js rename to packages/neo-one-build-tests/jest/unit-ci.js index de6385c0b7..d5f2fb98be 100644 --- a/jest/unit-ci.js +++ b/packages/neo-one-build-tests/jest/unit-ci.js @@ -1,7 +1,7 @@ const unit = require('./unit'); const ci = require('./ci'); -module.exports = { +module.exports = config = { ...unit, ...ci('unit'), }; diff --git a/packages/neo-one-build-tests/jest/unit.js b/packages/neo-one-build-tests/jest/unit.js new file mode 100644 index 0000000000..973ad39a48 --- /dev/null +++ b/packages/neo-one-build-tests/jest/unit.js @@ -0,0 +1,17 @@ +const base = require('./base'); + +module.exports = { + ...base({ path: 'test' }), + displayName: 'unit', + moduleNameMapper: { + '^@neo-one/ec-key$': '@neo-one/ec-key', + '^@neo-one/edge$': '@neo-one/edge', + '^@neo-one/boa$': '@neo-one/boa', + '^@neo-one/csharp$': '@neo-one/csharp', + '^@neo-one/smart-contract$': + '/packages/neo-one-smart-contract/src/index.d.ts', + '^@neo-one/(.*)$': '/packages/neo-one-$1/src/index', + }, + testRegex: '^.*/__tests__/.*\\.test\\.tsx?$', + coverageReporters: ['json'], +}; diff --git a/packages/neo-one-build-tests/package.json b/packages/neo-one-build-tests/package.json new file mode 100644 index 0000000000..90ed5c477d --- /dev/null +++ b/packages/neo-one-build-tests/package.json @@ -0,0 +1,28 @@ +{ + "name": "@neo-one/build-tests", + "version": "1.0.0", + "description": "Tool package for running unit/e2e tests", + "scripts": { + "build": "", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, + "devDependencies": { + "@babel/preset-env": "^7.6.3", + "@neo-one/build-tools": "^1.0.0", + "@neo-one/logger": "^2.6.1", + "app-root-dir": "^1.0.2", + "babel-jest": "^24.9.0", + "bn.js": "^5.0.0", + "codecov": "^3.6.1", + "execa": "^3.2.0", + "fs-extra": "^8.1.0", + "jest": "^24.9.0", + "jest-circus": "^24.9.0", + "jest-junit": "^10.0.0", + "lodash": "^4.17.15", + "nyc": "^14.1.1", + "tmp": "^0.1.0", + "ts-jest": "^24.1.0" + } +} diff --git a/scripts/serializers/blockchain.js b/packages/neo-one-build-tests/serializers/blockchain.js similarity index 100% rename from scripts/serializers/blockchain.js rename to packages/neo-one-build-tests/serializers/blockchain.js diff --git a/scripts/serializers/bn.js b/packages/neo-one-build-tests/serializers/bn.js similarity index 100% rename from scripts/serializers/bn.js rename to packages/neo-one-build-tests/serializers/bn.js diff --git a/scripts/serializers/buffer.js b/packages/neo-one-build-tests/serializers/buffer.js similarity index 100% rename from scripts/serializers/buffer.js rename to packages/neo-one-build-tests/serializers/buffer.js diff --git a/packages/neo-one-build-tests/tsconfig.jest.json b/packages/neo-one-build-tests/tsconfig.jest.json new file mode 100644 index 0000000000..4d0e316afc --- /dev/null +++ b/packages/neo-one-build-tests/tsconfig.jest.json @@ -0,0 +1,31 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "target": "es2017", + "module": "commonjs", + "moduleResolution": "node", + "lib": ["esnext", "dom"], + "pretty": true, + "esModuleInterop": true, + "noEmit": true, + "declaration": false, + "allowSyntheticDefaultImports": true, + "resolveJsonModule": false, + "experimentalDecorators": true, + "jsx": "react", + "alwaysStrict": true, + "strict": true, + "skipLibCheck": true, + "noUnusedLocals": false, + "noImplicitReturns": true, + "allowUnusedLabels": false, + "noUnusedParameters": false, + "allowUnreachableCode": false, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true, + "paths": { + "bn.js": ["node_modules/@neo-one/build-tools/types/bn.js.d.ts"] + } + }, + "exclude": ["./packages/*/src/__data__/contracts/**/*.ts", "./packages/*/template/**/*.ts?(x)"] +} diff --git a/packages/neo-one-build-tools-web/gulpfile.js b/packages/neo-one-build-tools-web/gulpfile.js new file mode 100644 index 0000000000..2512157326 --- /dev/null +++ b/packages/neo-one-build-tools-web/gulpfile.js @@ -0,0 +1,32 @@ +const fs = require('fs-extra'); +const gulp = require('gulp'); +const gulpRename = require('gulp-rename'); +const path = require('path'); +// const sourceMaps = require('gulp-sourcemaps'); +const ts = require('gulp-typescript'); + +const flattenSource = gulpRename((name) => { + if (name.dirname === undefined) { + return; + } + // tslint:disable-next-line: no-object-mutation + name.dirname = name.dirname + .split(path.sep) + .filter((dir) => dir !== 'src') + .join(path.sep); +}); + +const clean = async () => fs.remove('dist'); + +const buildTools = () => + gulp + .src(['src/**/*.js', 'src/**/*.ts', 'src/**/*.tsx']) + .pipe(ts.createProject('./tsconfig.json')()) + .pipe(flattenSource) + .pipe(gulp.dest('dist')); + +gulp.task('default', async (done) => { + await clean(); + buildTools(); + done(); +}); diff --git a/scripts/website/package.json.now b/packages/neo-one-build-tools-web/includes/now/package.json.now similarity index 100% rename from scripts/website/package.json.now rename to packages/neo-one-build-tools-web/includes/now/package.json.now diff --git a/scripts/website/now/preview.now.json b/packages/neo-one-build-tools-web/includes/now/preview.now.json similarity index 100% rename from scripts/website/now/preview.now.json rename to packages/neo-one-build-tools-web/includes/now/preview.now.json diff --git a/scripts/website/now/server.now.json b/packages/neo-one-build-tools-web/includes/now/server.now.json similarity index 100% rename from scripts/website/now/server.now.json rename to packages/neo-one-build-tools-web/includes/now/server.now.json diff --git a/scripts/website/now/static.now.json b/packages/neo-one-build-tools-web/includes/now/static.now.json similarity index 100% rename from scripts/website/now/static.now.json rename to packages/neo-one-build-tools-web/includes/now/static.now.json diff --git a/scripts/website/now/testRunner.now.json b/packages/neo-one-build-tools-web/includes/now/testRunner.now.json similarity index 100% rename from scripts/website/now/testRunner.now.json rename to packages/neo-one-build-tools-web/includes/now/testRunner.now.json diff --git a/packages/neo-one-build-tools-web/package.json b/packages/neo-one-build-tools-web/package.json new file mode 100644 index 0000000000..3baf788f69 --- /dev/null +++ b/packages/neo-one-build-tools-web/package.json @@ -0,0 +1,113 @@ +{ + "name": "@neo-one/build-tools-web", + "version": "1.0.0", + "description": "NEOβ€’ONE web build tools.", + "main": "./dist/index", + "license": "MIT", + "scripts": { + "build": "gulp", + "lint": "./node_modules/.bin/tslint --project . --format codeFrame \"src/**/*.ts\"", + "lint:staged": "./node_modules/.bin/tslint --project . --format codeFrame \"src/**/*.ts\"", + "tsc": "node_modules/.bin/tsc --noEmit" + }, + "author": "Alex DiCarlo ", + "homepage": "https://neo-one.io", + "repository": { + "type": "git", + "url": "git+https://github.com/neo-one-suite/neo-one.git" + }, + "bugs": { + "url": "https://github.com/neo-one-suite/neo-one/issues" + }, + "keywords": [ + "neo", + "blockchain", + "neo-one", + "dapp" + ], + "private": true, + "engines": { + "node": ">=10.16.0" + }, + "browserslist": [ + "last 2 chrome versions", + "last 2 safari versions", + "last 2 edge versions", + "last 2 firefox versions" + ], + "sideEffects": false, + "dependencies": { + "@babel/core": "^7.6.2", + "@babel/plugin-proposal-async-generator-functions": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.5.5", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", + "@babel/plugin-syntax-numeric-separator": "^7.2.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", + "@babel/plugin-syntax-typescript": "^7.3.3", + "@babel/polyfill": "^7.6.0", + "@babel/preset-env": "^7.6.3", + "@babel/preset-react": "^7.0.0", + "@babel/runtime": "^7.6.3", + "@cypress/webpack-preprocessor": "^4.1.0", + "ajv": "^6.10.2", + "autoprefixer": "^9.6.1", + "babel-loader": "^8.0.6", + "babel-plugin-emotion": "^10.0.21", + "babel-plugin-lodash": "^3.3.4", + "babel-plugin-module-resolver": "^3.2.0", + "babel-plugin-universal-import": "^4.0.0", + "cache-loader": "^4.1.0", + "compression-webpack-plugin": "^3.0.0", + "cssnano": "^4.1.10", + "execa": "^3.2.0", + "extract-css-chunks-webpack-plugin": "^4.7.1", + "file-loader": "^5.0.2", + "find-cache-dir": "^3.0.0", + "fs-extra": "^8.1.0", + "loader-utils": "^1.2.3", + "lodash": "^4.17.15", + "lodash-webpack-plugin": "^0.11.5", + "mini-html-webpack-plugin": "^2.0.0", + "nodemon": "^2.0.1", + "optimize-css-assets-webpack-plugin": "^5.0.3", + "postcss-flexbugs-fixes": "^4.1.0", + "react": "^16.12.0", + "rxjs": "^6.5.3", + "stats-webpack-plugin": "^0.7.0", + "terser-webpack-plugin": "^2.2.1", + "thread-loader": "^2.1.3", + "ts-loader": "^6.1.0", + "ts-node": "^8.4.1", + "typescript": "3.9.5", + "url-loader": "^3.0.0", + "webpack": "^4.40.2", + "webpack-bundle-analyzer": "^3.4.1", + "webpack-dev-server": "^3.8.0", + "webpack-node-externals": "^1.7.2", + "webpackbar": "^4.0.0", + "workbox-webpack-plugin": "^4.3.1", + "yargs": "^14.2.0" + }, + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "@types/autoprefixer": "^9.6.1", + "@types/cssnano": "^4.0.0", + "@types/fs-extra": "^8.0.0", + "@types/gulp": "^4.0.6", + "@types/gulp-flatten": "^0.0.31", + "@types/gulp-plumber": "^0.0.32", + "@types/gulp-rename": "^0.0.33", + "@types/gulp-replace": "^0.0.31", + "@types/gulp-sourcemaps": "^0.0.32", + "@types/lodash": "^4.14.138", + "@types/react": "^16.9.15", + "@types/webpack": "^4.39.0", + "@types/webpack-bundle-analyzer": "^2.13.2", + "@types/webpack-dev-server": "^3.1.7", + "@types/yargs": "^13.0.3", + "gulp": "~4.0.2", + "gulp-rename": "^2.0.0", + "gulp-typescript": "^5.0.1", + "tslint": "^5.20.0" + } +} diff --git a/scripts/website/compile.ts b/packages/neo-one-build-tools-web/src/compile.ts similarity index 91% rename from scripts/website/compile.ts rename to packages/neo-one-build-tools-web/src/compile.ts index 4451e7bb14..0fdbadda31 100644 --- a/scripts/website/compile.ts +++ b/packages/neo-one-build-tools-web/src/compile.ts @@ -6,23 +6,23 @@ import yargs from 'yargs'; import { createKillProcess } from './createKillProcess'; import { overlay, preview, server, SERVER_DIST_DIR, testRunner, tools, workers } from './webpack'; -const argv = yargs +const { argv } = yargs .boolean('watch') .describe('watch', 'Run in watch mode.') .default('watch', false) .string('bundle') .describe('bundle', 'Bundle to compile.') - .default('bundle', 'react-static').argv; + .default('bundle', 'react-static'); -const devStage = process.env.NEO_ONE_PROD === 'true' ? 'prod' : 'dev'; +const stage = process.env.NEO_ONE_PROD === 'true' ? 'prod' : 'dev'; const createDispose = (watcher: webpack.Compiler.Watching): (() => Promise) => async () => new Promise((resolve) => watcher.close(resolve)); const watchConfig = (config: webpack.Configuration): (() => Promise) => createDispose(webpack(config).watch({}, () => undefined)); -const watchWorkers = () => watchConfig(workers({ stage: devStage })); -const watchOverlay = () => watchConfig(overlay({ stage: devStage })); -const watchTools = () => watchConfig(tools({ stage: devStage })); +const watchWorkers = () => watchConfig(workers({ stage })); +const watchOverlay = () => watchConfig(overlay({ stage })); +const watchTools = () => watchConfig(tools({ stage })); const watchWindow = async (config: webpack.Configuration, port: number) => { const devServer = new WebpackDevServer(webpack(config), { open: false, @@ -43,10 +43,10 @@ const watchWindow = async (config: webpack.Configuration, port: number) => { resolve(); }); }; -const watchPreview = async () => watchWindow(preview({ stage: devStage }), 8080); -const watchTestRunner = async () => watchWindow(testRunner({ stage: devStage }), 8081); +const watchPreview = async () => watchWindow(preview({ stage }), 8080); +const watchTestRunner = async () => watchWindow(testRunner({ stage }), 8081); const watchServer = async () => { - const stop = watchConfig(server({ stage: devStage })); + const stop = watchConfig(server({ stage })); // tslint:disable-next-line:no-require-imports const nodemon = require('nodemon'); diff --git a/scripts/website/createKillProcess.ts b/packages/neo-one-build-tools-web/src/createKillProcess.ts similarity index 100% rename from scripts/website/createKillProcess.ts rename to packages/neo-one-build-tools-web/src/createKillProcess.ts diff --git a/scripts/website/runCypress.ts b/packages/neo-one-build-tools-web/src/runCypress.ts similarity index 63% rename from scripts/website/runCypress.ts rename to packages/neo-one-build-tools-web/src/runCypress.ts index 287d45e78c..a82e694dfc 100644 --- a/scripts/website/runCypress.ts +++ b/packages/neo-one-build-tools-web/src/runCypress.ts @@ -4,26 +4,29 @@ import * as path from 'path'; import { timer } from 'rxjs'; import yargs from 'yargs'; -const argv = yargs +const { argv } = yargs .boolean('local') .describe('local', 'Run test locally') .default('local', false) .boolean('express') .describe('express', 'Run quick test on a single course') - .default('express', false).argv; + .default('express', false); const runCypress = async () => { // tslint:disable-next-line no-unused const { NODE_OPTIONS, TS_NODE_PROJECT, ...newEnv } = process.env; const cypressRetries = '3'; const finalEnv = { ...newEnv, CYPRESS_RETRIES: cypressRetries }; - let command = ['cypress', 'run', '--browser', 'chrome', '--spec']; + let command = ['cypress-run', '--browser', 'chrome', '--spec']; command = argv.express ? command.concat(['cypress/integration/TokenomicsCourse/Lesson2/Chapter5.ts']) - : command.concat(['cypress/integration/**/*']); + : // the glob must be in two sets of quotes so that Cypress reads the glob inside a single set of quotes + command.concat(['"cypress/integration/**/*"']); - console.log(`$ CYPRESS_RETRIES=${cypressRetries} yarn ${command.join(' ')}`); - const proc = execa('yarn', command, { + console.log( + `$ rush CYPRESS_RETRIES=${cypressRetries} cypress run --browser chrome --spec ${command[command.length - 1]}`, + ); + const proc = execa('rush', command, { env: finalEnv, extendEnv: false, cwd: path.resolve(__dirname, '..'), @@ -80,24 +83,40 @@ process.on('SIGTERM', () => { const run = async () => { const shutdownWait = 5000; - console.log('$ yarn website:start:prod-builds'); - const buildProc = execa('yarn', ['website:start:prod-builds']); + console.log('$ rush compile-website-prod'); + const buildProc = execa('rush', ['compile-website-prod']); mutableCleanup.push(async () => { buildProc.kill('SIGTERM', { forceKillAfterTimeout: shutdownWait }); await timer(shutdownWait + 500).toPromise(); }); + // Uncomment (and build) to debug compile-website-prod command + // if (buildProc.stdout !== null) { + // buildProc.stdout.pipe(process.stdout); + // } + // if (buildProc.stderr !== null) { + // buildProc.stderr.pipe(process.stderr); + // } + await buildProc; - console.log('$ yarn website:start:prod'); - const startProc = execa('yarn', ['website:start:prod']); + console.log('$ rush run-website-prod'); + const startProc = execa('rush', ['run-website-prod']); mutableCleanup.push(async () => { startProc.kill('SIGTERM', { forceKillAfterTimeout: shutdownWait }); await timer(shutdownWait + 500).toPromise(); }); - const TEN_MINUTES = 10 * 60 * 1000; - const FIVE_MINUTES = 5 * 60 * 1000; - await timer(argv.local ? FIVE_MINUTES : TEN_MINUTES).toPromise(); + // Uncomment (and build) to debug run-website-prod command + // if (startProc.stdout !== null) { + // startProc.stdout.pipe(process.stdout); + // } + // if (startProc.stderr !== null) { + // startProc.stderr.pipe(process.stderr); + // } + + const FIFTEEN_MINUTES = 15 * 60 * 1000; + const EIGHT_MINUTES = 8 * 60 * 1000; + await timer(argv.local ? EIGHT_MINUTES : FIFTEEN_MINUTES).toPromise(); await runCypress(); }; diff --git a/scripts/website/types.ts b/packages/neo-one-build-tools-web/src/types.ts similarity index 100% rename from scripts/website/types.ts rename to packages/neo-one-build-tools-web/src/types.ts diff --git a/scripts/website/webpack/addDefaultRules.ts b/packages/neo-one-build-tools-web/src/webpack/addDefaultRules.ts similarity index 100% rename from scripts/website/webpack/addDefaultRules.ts rename to packages/neo-one-build-tools-web/src/webpack/addDefaultRules.ts diff --git a/scripts/website/webpack/alias.ts b/packages/neo-one-build-tools-web/src/webpack/alias.ts similarity index 100% rename from scripts/website/webpack/alias.ts rename to packages/neo-one-build-tools-web/src/webpack/alias.ts diff --git a/scripts/website/webpack/browsers.ts b/packages/neo-one-build-tools-web/src/webpack/browsers.ts similarity index 100% rename from scripts/website/webpack/browsers.ts rename to packages/neo-one-build-tools-web/src/webpack/browsers.ts diff --git a/scripts/website/webpack/common.ts b/packages/neo-one-build-tools-web/src/webpack/common.ts similarity index 71% rename from scripts/website/webpack/common.ts rename to packages/neo-one-build-tools-web/src/webpack/common.ts index 661065e82e..b88dda8280 100644 --- a/scripts/website/webpack/common.ts +++ b/packages/neo-one-build-tools-web/src/webpack/common.ts @@ -1,3 +1,4 @@ +import path from 'path'; import webpack from 'webpack'; import { Bundle, Stage } from '../types'; import { addDefaultRules } from './addDefaultRules'; @@ -6,6 +7,9 @@ import { node } from './node'; import { optimization } from './optimization'; import { rules } from './rules'; +const TOOLS_NODE_MODULES = path.resolve(__dirname, '..', '..', 'node_modules'); +const RUSH_NODE_MODULES = path.resolve(__dirname, '..', '..', '..', '..', 'common', 'temp', 'node_modules'); + export const common = ({ stage, bundle }: { readonly stage: Stage; readonly bundle: Bundle }): webpack.Configuration => addDefaultRules({ mode: stage === 'dev' || stage === 'node' ? 'development' : 'production', @@ -14,6 +18,10 @@ export const common = ({ stage, bundle }: { readonly stage: Stage; readonly bund aliasFields: ['browser'], extensions: ['.mjs', '.js', '.jsx', '.json', '.ts', '.tsx'], alias, + modules: [RUSH_NODE_MODULES, 'node_modules'], + }, + resolveLoader: { + modules: [TOOLS_NODE_MODULES, 'node_modules'], }, optimization: optimization({ stage, bundle }), module: { diff --git a/scripts/website/webpack/console.js b/packages/neo-one-build-tools-web/src/webpack/console.js similarity index 100% rename from scripts/website/webpack/console.js rename to packages/neo-one-build-tools-web/src/webpack/console.js diff --git a/scripts/website/webpack/index.ts b/packages/neo-one-build-tools-web/src/webpack/index.ts similarity index 100% rename from scripts/website/webpack/index.ts rename to packages/neo-one-build-tools-web/src/webpack/index.ts diff --git a/scripts/website/webpack/loaders/babel.ts b/packages/neo-one-build-tools-web/src/webpack/loaders/babel.ts similarity index 86% rename from scripts/website/webpack/loaders/babel.ts rename to packages/neo-one-build-tools-web/src/webpack/loaders/babel.ts index 5d8e28e741..e7e7d928d6 100644 --- a/scripts/website/webpack/loaders/babel.ts +++ b/packages/neo-one-build-tools-web/src/webpack/loaders/babel.ts @@ -2,7 +2,7 @@ import * as path from 'path'; import { Bundle, Stage } from '../../types'; import { browsers } from '../browsers'; -const APP_ROOT_DIR = path.resolve(__dirname, '..', '..', '..', '..'); +const BUILD_DIR = path.resolve(__dirname, '..', '..', '..'); export const babel = ({ stage, @@ -16,6 +16,7 @@ export const babel = ({ const config = { configFile: false, babelrc: false, + cwd: path.resolve(__dirname, '..', '..', '..'), presets: [ '@babel/preset-react', [ @@ -55,7 +56,7 @@ export const babel = ({ return { ...config, - cacheDirectory: path.resolve(APP_ROOT_DIR, 'node_modules', '.cache', 'babel', stage, bundle), + cacheDirectory: path.resolve(BUILD_DIR, 'node_modules', '.cache', 'babel', stage, bundle), cacheCompression: false, }; }; diff --git a/scripts/website/webpack/loaders/babelLoader.ts b/packages/neo-one-build-tools-web/src/webpack/loaders/babelLoader.ts similarity index 100% rename from scripts/website/webpack/loaders/babelLoader.ts rename to packages/neo-one-build-tools-web/src/webpack/loaders/babelLoader.ts diff --git a/scripts/website/webpack/loaders/cacheLoader.ts b/packages/neo-one-build-tools-web/src/webpack/loaders/cacheLoader.ts similarity index 69% rename from scripts/website/webpack/loaders/cacheLoader.ts rename to packages/neo-one-build-tools-web/src/webpack/loaders/cacheLoader.ts index d05dc89397..842a12afe5 100644 --- a/scripts/website/webpack/loaders/cacheLoader.ts +++ b/packages/neo-one-build-tools-web/src/webpack/loaders/cacheLoader.ts @@ -1,7 +1,7 @@ import * as path from 'path'; import { Bundle, Stage } from '../../types'; -const APP_ROOT_DIR = path.resolve(__dirname, '..', '..', '..', '..'); +const BUILD_DIR = path.resolve(__dirname, '..', '..', '..'); export const cacheLoader = ({ stage, @@ -16,7 +16,7 @@ export const cacheLoader = ({ ? { loader: 'cache-loader', options: { - cacheDirectory: path.resolve(APP_ROOT_DIR, 'node_modules', '.cache', name, stage, bundle), + cacheDirectory: path.resolve(BUILD_DIR, 'node_modules', '.cache', name, stage, bundle), }, } : undefined; diff --git a/scripts/website/webpack/loaders/cssLoader.ts b/packages/neo-one-build-tools-web/src/webpack/loaders/cssLoader.ts similarity index 100% rename from scripts/website/webpack/loaders/cssLoader.ts rename to packages/neo-one-build-tools-web/src/webpack/loaders/cssLoader.ts diff --git a/scripts/website/webpack/loaders/fileLoader.ts b/packages/neo-one-build-tools-web/src/webpack/loaders/fileLoader.ts similarity index 100% rename from scripts/website/webpack/loaders/fileLoader.ts rename to packages/neo-one-build-tools-web/src/webpack/loaders/fileLoader.ts diff --git a/scripts/website/webpack/loaders/index.ts b/packages/neo-one-build-tools-web/src/webpack/loaders/index.ts similarity index 100% rename from scripts/website/webpack/loaders/index.ts rename to packages/neo-one-build-tools-web/src/webpack/loaders/index.ts diff --git a/scripts/website/webpack/loaders/jsLoader.ts b/packages/neo-one-build-tools-web/src/webpack/loaders/jsLoader.ts similarity index 100% rename from scripts/website/webpack/loaders/jsLoader.ts rename to packages/neo-one-build-tools-web/src/webpack/loaders/jsLoader.ts diff --git a/scripts/website/webpack/loaders/rawLoader.ts b/packages/neo-one-build-tools-web/src/webpack/loaders/rawLoader.ts similarity index 100% rename from scripts/website/webpack/loaders/rawLoader.ts rename to packages/neo-one-build-tools-web/src/webpack/loaders/rawLoader.ts diff --git a/packages/neo-one-build-tools-web/src/webpack/loaders/tsLoader.ts b/packages/neo-one-build-tools-web/src/webpack/loaders/tsLoader.ts new file mode 100644 index 0000000000..9370fccc18 --- /dev/null +++ b/packages/neo-one-build-tools-web/src/webpack/loaders/tsLoader.ts @@ -0,0 +1,55 @@ +import { Bundle, Stage } from '../../types'; +import { babelLoader } from './babelLoader'; +import { cacheLoader } from './cacheLoader'; + +export const tsLoader = ({ stage, bundle }: { readonly stage: Stage; readonly bundle: Bundle }) => ({ + test: /\.tsx?$/, + exclude: /node_modules/, + use: [ + cacheLoader({ stage, bundle, name: 'ts' }), + stage === 'dev' || process.env.NEO_ONE_CACHE === 'true' ? 'thread-loader' : undefined, + babelLoader({ stage, bundle }), + { + loader: 'ts-loader', + options: { + transpileOnly: stage === 'dev' || process.env.NEO_ONE_CACHE === 'true', + happyPackMode: stage === 'dev' || process.env.NEO_ONE_CACHE === 'true', + compilerOptions: { + baseUrl: '../', + paths: { + 'bn.js': ['node_modules/@neo-one/build-tools/types/bn.js.d.ts'], + }, + moduleResolution: 'node', + lib: ['esnext', 'dom'], + pretty: true, + allowSyntheticDefaultImports: true, + experimentalDecorators: true, + jsx: 'react', + alwaysStrict: true, + strict: true, + skipLibCheck: true, + noUnusedLocals: false, + noImplicitReturns: true, + allowUnusedLabels: false, + noUnusedParameters: false, + allowUnreachableCode: false, + noFallthroughCasesInSwitch: true, + forceConsistentCasingInFileNames: true, + importHelpers: true, + noEmitHelpers: true, + noEmit: false, + sourceMap: false, + inlineSources: true, + inlineSourceMap: true, + module: 'esnext', + target: 'es2017', + esModuleInterop: false, + resolveJsonModule: true, + }, + onlyCompileBundledFiles: true, + experimentalFileCaching: true, + experimentalWatchApi: stage === 'dev' || process.env.NEO_ONE_CACHE === 'true', + }, + }, + ].filter((value) => value !== undefined), +}); diff --git a/scripts/website/webpack/loaders/wasmFileLoader.ts b/packages/neo-one-build-tools-web/src/webpack/loaders/wasmFileLoader.ts similarity index 100% rename from scripts/website/webpack/loaders/wasmFileLoader.ts rename to packages/neo-one-build-tools-web/src/webpack/loaders/wasmFileLoader.ts diff --git a/scripts/website/webpack/node.ts b/packages/neo-one-build-tools-web/src/webpack/node.ts similarity index 100% rename from scripts/website/webpack/node.ts rename to packages/neo-one-build-tools-web/src/webpack/node.ts diff --git a/scripts/website/webpack/optimization.ts b/packages/neo-one-build-tools-web/src/webpack/optimization.ts similarity index 91% rename from scripts/website/webpack/optimization.ts rename to packages/neo-one-build-tools-web/src/webpack/optimization.ts index 78d95ccc5f..68c89b46a0 100644 --- a/scripts/website/webpack/optimization.ts +++ b/packages/neo-one-build-tools-web/src/webpack/optimization.ts @@ -6,11 +6,11 @@ import TerserWebpackPlugin from 'terser-webpack-plugin'; import webpack from 'webpack'; import { Bundle, Stage } from '../types'; -const APP_ROOT_DIR = path.resolve(__dirname, '..', '..', '..'); +const NODE_MODULES_PATH = path.resolve(__dirname, '..', '..', 'node_modules'); const getMinifer = (stage: Stage, bundle: Bundle) => { const common = { - cache: path.resolve(APP_ROOT_DIR, 'node_modules', 'terser-webpack-plugin', stage, bundle), + cache: path.resolve(NODE_MODULES_PATH, 'terser-webpack-plugin', stage, bundle), parallel: true, sourceMap: true, }; diff --git a/scripts/website/webpack/overlay.ts b/packages/neo-one-build-tools-web/src/webpack/overlay.ts similarity index 91% rename from scripts/website/webpack/overlay.ts rename to packages/neo-one-build-tools-web/src/webpack/overlay.ts index cbfc78480e..4b4189cf3d 100644 --- a/scripts/website/webpack/overlay.ts +++ b/packages/neo-one-build-tools-web/src/webpack/overlay.ts @@ -4,9 +4,9 @@ import { Stage } from '../types'; import { common } from './common'; import { plugins } from './plugins'; -const APP_ROOT_DIR = path.resolve(__dirname, '..', '..', '..'); -const DIST_DIR = path.resolve(APP_ROOT_DIR, 'dist', 'overlay'); +const APP_ROOT_DIR = path.resolve(__dirname, '..', '..', '..', '..'); const EDITOR_PACKAGE = path.resolve(APP_ROOT_DIR, 'packages', 'neo-one-editor'); +const DIST_DIR = path.resolve(APP_ROOT_DIR, 'dist', 'overlay'); export const overlay = ({ stage }: { readonly stage: Stage }): webpack.Configuration => ({ ...common({ stage, bundle: 'overlay' }), diff --git a/scripts/website/webpack/plugin/node.api.js b/packages/neo-one-build-tools-web/src/webpack/plugin/node.api.js similarity index 100% rename from scripts/website/webpack/plugin/node.api.js rename to packages/neo-one-build-tools-web/src/webpack/plugin/node.api.js diff --git a/scripts/website/webpack/plugin/node.tsx b/packages/neo-one-build-tools-web/src/webpack/plugin/node.tsx similarity index 95% rename from scripts/website/webpack/plugin/node.tsx rename to packages/neo-one-build-tools-web/src/webpack/plugin/node.tsx index 7d420866cc..2c27ceaa68 100644 --- a/scripts/website/webpack/plugin/node.tsx +++ b/packages/neo-one-build-tools-web/src/webpack/plugin/node.tsx @@ -15,7 +15,7 @@ import { optimization } from '../optimization'; import { plugins } from '../plugins'; import { rules } from '../rules'; -const APP_ROOT_DIR = path.resolve(__dirname, '..', '..', '..', '..'); +const APP_ROOT_DIR = path.resolve(__dirname, '..', '..', '..', '..', '..'); const WEBSITE_DIR = path.resolve(APP_ROOT_DIR, 'packages', 'neo-one-website'); const inlineScript = (body: string, key?: string) => ( @@ -49,6 +49,7 @@ export const node = () => ({ webpack: (mutableConfig: webpack.Configuration, { stage: stageIn }: { stage: Stage }) => { const stage = process.env.NEO_ONE_PROD === 'true' && stageIn === 'dev' ? 'prod' : stageIn; const resolve = mutableConfig.resolve === undefined ? {} : mutableConfig.resolve; + const addModules = [path.resolve(APP_ROOT_DIR, 'common', 'temp', 'node_modules')]; mutableConfig.resolve = { ...resolve, mainFields: ['browser', 'module', 'main'], @@ -58,6 +59,7 @@ export const node = () => ({ ...(resolve.alias === undefined ? {} : resolve.alias), ...alias, }, + modules: resolve.modules ? resolve.modules.concat(addModules) : addModules, }; const mod = mutableConfig.module === undefined ? {} : mutableConfig.module; @@ -152,9 +154,8 @@ export const node = () => ({ , , , - // @ts-ignore - , - , + , + , , ], }); diff --git a/scripts/website/webpack/plugins.ts b/packages/neo-one-build-tools-web/src/webpack/plugins.ts similarity index 100% rename from scripts/website/webpack/plugins.ts rename to packages/neo-one-build-tools-web/src/webpack/plugins.ts diff --git a/scripts/website/webpack/preview.ts b/packages/neo-one-build-tools-web/src/webpack/preview.ts similarity index 97% rename from scripts/website/webpack/preview.ts rename to packages/neo-one-build-tools-web/src/webpack/preview.ts index c59ce8e30a..eb45e9bbb0 100644 --- a/scripts/website/webpack/preview.ts +++ b/packages/neo-one-build-tools-web/src/webpack/preview.ts @@ -8,7 +8,7 @@ import { Stage } from '../types'; import { common } from './common'; import { plugins } from './plugins'; -const APP_ROOT_DIR = path.resolve(__dirname, '..', '..', '..'); +const APP_ROOT_DIR = path.resolve(__dirname, '..', '..', '..', '..'); const DIST_DIR = path.resolve(APP_ROOT_DIR, 'dist', 'preview'); const EDITOR_PACKAGE = path.resolve(APP_ROOT_DIR, 'packages', 'neo-one-editor'); diff --git a/scripts/website/webpack/rules.ts b/packages/neo-one-build-tools-web/src/webpack/rules.ts similarity index 100% rename from scripts/website/webpack/rules.ts rename to packages/neo-one-build-tools-web/src/webpack/rules.ts diff --git a/scripts/website/webpack/server.ts b/packages/neo-one-build-tools-web/src/webpack/server.ts similarity index 95% rename from scripts/website/webpack/server.ts rename to packages/neo-one-build-tools-web/src/webpack/server.ts index 036f3ef4f1..44f5bc6bf6 100644 --- a/scripts/website/webpack/server.ts +++ b/packages/neo-one-build-tools-web/src/webpack/server.ts @@ -5,7 +5,7 @@ import { addDefaultRules } from './addDefaultRules'; import { common } from './common'; import { plugins } from './plugins'; -const APP_ROOT_DIR = path.resolve(__dirname, '..', '..', '..'); +const APP_ROOT_DIR = path.resolve(__dirname, '..', '..', '..', '..'); export const SERVER_DIST_DIR = path.resolve(APP_ROOT_DIR, 'dist', 'server'); const EDITOR_SERVER_PACKAGE = path.resolve(APP_ROOT_DIR, 'packages', 'neo-one-editor-server'); diff --git a/scripts/website/webpack/testRunner.ts b/packages/neo-one-build-tools-web/src/webpack/testRunner.ts similarity index 97% rename from scripts/website/webpack/testRunner.ts rename to packages/neo-one-build-tools-web/src/webpack/testRunner.ts index 310619dfb9..42c4a42745 100644 --- a/scripts/website/webpack/testRunner.ts +++ b/packages/neo-one-build-tools-web/src/webpack/testRunner.ts @@ -8,7 +8,7 @@ import { Stage } from '../types'; import { common } from './common'; import { plugins } from './plugins'; -const APP_ROOT_DIR = path.resolve(__dirname, '..', '..', '..'); +const APP_ROOT_DIR = path.resolve(__dirname, '..', '..', '..', '..'); const DIST_DIR = path.resolve(APP_ROOT_DIR, 'dist', 'testRunner'); const EDITOR_PACKAGE = path.resolve(APP_ROOT_DIR, 'packages', 'neo-one-editor'); diff --git a/scripts/website/webpack/tools.ts b/packages/neo-one-build-tools-web/src/webpack/tools.ts similarity index 83% rename from scripts/website/webpack/tools.ts rename to packages/neo-one-build-tools-web/src/webpack/tools.ts index a114618103..10b6039c9a 100644 --- a/scripts/website/webpack/tools.ts +++ b/packages/neo-one-build-tools-web/src/webpack/tools.ts @@ -4,9 +4,9 @@ import { Stage } from '../types'; import { common } from './common'; import { plugins } from './plugins'; -const APP_ROOT_DIR = path.resolve(__dirname, '..', '..', '..'); -const DIST_DIR = path.resolve(APP_ROOT_DIR, 'dist', 'tools'); +const APP_ROOT_DIR = path.resolve(__dirname, '..', '..', '..', '..'); const TOOLS_PACKAGE = path.resolve(APP_ROOT_DIR, 'packages', 'neo-one-developer-tools-frame'); +const DIST_DIR = path.resolve(TOOLS_PACKAGE, 'dist'); export const tools = ({ stage }: { readonly stage: Stage }): webpack.Configuration => ({ ...common({ stage, bundle: 'tools' }), diff --git a/scripts/website/webpack/workers.ts b/packages/neo-one-build-tools-web/src/webpack/workers.ts similarity index 97% rename from scripts/website/webpack/workers.ts rename to packages/neo-one-build-tools-web/src/webpack/workers.ts index c01f4995e2..8e26200dc5 100644 --- a/scripts/website/webpack/workers.ts +++ b/packages/neo-one-build-tools-web/src/webpack/workers.ts @@ -4,9 +4,9 @@ import { Stage } from '../types'; import { common } from './common'; import { plugins } from './plugins'; -const APP_ROOT_DIR = path.resolve(__dirname, '..', '..', '..'); -const DIST_DIR = path.resolve(APP_ROOT_DIR, 'dist', 'workers'); +const APP_ROOT_DIR = path.resolve(__dirname, '..', '..', '..', '..'); const EDITOR_PACKAGE = path.resolve(APP_ROOT_DIR, 'packages', 'neo-one-editor'); +const DIST_DIR = path.resolve(APP_ROOT_DIR, 'dist', 'workers'); const LOCAL_BROWSER_WORKER_PACKAGE = path.resolve(APP_ROOT_DIR, 'packages', 'neo-one-local-browser-worker'); const NODE_BROWSER_WORKER_PACKAGE = path.resolve(APP_ROOT_DIR, 'packages', 'neo-one-node-browser-worker'); diff --git a/packages/neo-one-build-tools-web/tsconfig.json b/packages/neo-one-build-tools-web/tsconfig.json new file mode 100644 index 0000000000..f78a5a4f03 --- /dev/null +++ b/packages/neo-one-build-tools-web/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "rootDir": ".", + "outDir": "lib", + "target": "esnext", + "module": "commonjs", + "moduleResolution": "node", + "lib": ["esnext", "dom"], + "esModuleInterop": true, + "allowJs": true, + "jsx": "react", + "pretty": true, + "noEmit": false, + "declaration": false, + "inlineSourceMap": true, + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true, + "experimentalDecorators": true, + "alwaysStrict": true, + "strict": true, + "skipLibCheck": true, + "noUnusedLocals": false, + "noImplicitReturns": true, + "allowUnusedLabels": false, + "noUnusedParameters": false, + "allowUnreachableCode": false, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true + } +} diff --git a/packages/neo-one-build-tools/bin/neo-one-clean.js b/packages/neo-one-build-tools/bin/neo-one-clean.js new file mode 100644 index 0000000000..1e771447d4 --- /dev/null +++ b/packages/neo-one-build-tools/bin/neo-one-clean.js @@ -0,0 +1,10 @@ +#!/usr/bin/env node +const path = require('path'); + +require('ts-node').register({ + transpileOnly: true, + project: path.resolve(__dirname, '..', 'tsconfig.json'), +}); +const cleaner = require('../src/clean.ts'); + +cleaner.clean(); diff --git a/packages/neo-one-build-tools/bin/neo-one-lint-staged.js b/packages/neo-one-build-tools/bin/neo-one-lint-staged.js new file mode 100644 index 0000000000..cd3127907a --- /dev/null +++ b/packages/neo-one-build-tools/bin/neo-one-lint-staged.js @@ -0,0 +1,14 @@ +#!/usr/bin/env node +const path = require('path'); +const lintStaged = require('lint-staged'); + +require('ts-node').register({ + transpileOnly: true, + project: path.resolve(__dirname, '..', 'tsconfig.json'), +}); + +lintStaged({ + relative: true, +}).catch((error) => { + process.stderr.write(`${error.message}`); +}); diff --git a/packages/neo-one-build-tools/bin/neo-one-lint.js b/packages/neo-one-build-tools/bin/neo-one-lint.js new file mode 100644 index 0000000000..7c84a50e1c --- /dev/null +++ b/packages/neo-one-build-tools/bin/neo-one-lint.js @@ -0,0 +1,10 @@ +#!/usr/bin/env node +const path = require('path'); + +require('ts-node').register({ + transpileOnly: true, + project: path.resolve(__dirname, '..', 'tsconfig.json'), +}); +const linter = require('../src/lint.ts'); + +linter.lint(); diff --git a/packages/neo-one-build-tools/bin/neo-one-prepare.js b/packages/neo-one-build-tools/bin/neo-one-prepare.js new file mode 100644 index 0000000000..318039f101 --- /dev/null +++ b/packages/neo-one-build-tools/bin/neo-one-prepare.js @@ -0,0 +1,10 @@ +#!/usr/bin/env node +const path = require('path'); + +require('ts-node').register({ + transpileOnly: true, + project: path.resolve(__dirname, '..', 'tsconfig.json'), +}); +const runner = require('../src/prepare.ts'); + +runner.prepare(); diff --git a/packages/neo-one-build-tools/bin/neo-one-tsc.js b/packages/neo-one-build-tools/bin/neo-one-tsc.js new file mode 100644 index 0000000000..982cfe12cd --- /dev/null +++ b/packages/neo-one-build-tools/bin/neo-one-tsc.js @@ -0,0 +1,11 @@ +#!/usr/bin/env node +const path = require('path'); +const execa = require('execa'); + +execa( + path.resolve(__dirname, '..', 'node_modules', '.bin', 'tsc'), + ['--project', '.', '--noEmit'], + { + stdio: 'inherit', + }, +); diff --git a/packages/neo-one-build-tools/gulpfile.js b/packages/neo-one-build-tools/gulpfile.js new file mode 100644 index 0000000000..a702e20cec --- /dev/null +++ b/packages/neo-one-build-tools/gulpfile.js @@ -0,0 +1,32 @@ +const fs = require('fs-extra'); +const gulp = require('gulp'); +const gulpRename = require('gulp-rename'); +const path = require('path'); +// const sourceMaps = require('gulp-sourcemaps'); +const ts = require('gulp-typescript'); + +const flattenSource = gulpRename((name) => { + if (name.dirname === undefined) { + return; + } + // tslint:disable-next-line: no-object-mutation + name.dirname = name.dirname + .split(path.sep) + .filter((dir) => dir !== 'src') + .join(path.sep); +}); + +const clean = async () => fs.remove('dist'); + +const buildTools = () => + gulp + .src(['src/**/*.js', 'src/**/*.ts']) + .pipe(ts.createProject('./tsconfig.json')()) + .pipe(flattenSource) + .pipe(gulp.dest('dist')); + +gulp.task('default', async (done) => { + await clean(); + buildTools(); + done(); +}); diff --git a/tsconfig/tsconfig.build.json b/packages/neo-one-build-tools/includes/build-configs/tsconfig.build.json similarity index 55% rename from tsconfig/tsconfig.build.json rename to packages/neo-one-build-tools/includes/build-configs/tsconfig.build.json index dc0b8a346a..027dc02dbb 100644 --- a/tsconfig/tsconfig.build.json +++ b/packages/neo-one-build-tools/includes/build-configs/tsconfig.build.json @@ -1,15 +1,12 @@ { - "extends": "../tsconfig.json", + "extends": "../tsconfig.base.json", "compilerOptions": { "importHelpers": true, "noEmitHelpers": true, "noEmit": false, - "sourceMap": false, - "inlineSources": true, - "inlineSourceMap": true, "declaration": true, - "stripInternal": true, "removeComments": true, "allowJs": false - } + }, + "exclude": ["src/bin/**/*.ts"] } diff --git a/tsconfig/tsconfig.cjs.json b/packages/neo-one-build-tools/includes/build-configs/tsconfig.cjs.json similarity index 100% rename from tsconfig/tsconfig.cjs.json rename to packages/neo-one-build-tools/includes/build-configs/tsconfig.cjs.json diff --git a/tsconfig/tsconfig.es2017.cjs.json b/packages/neo-one-build-tools/includes/build-configs/tsconfig.es2017.browserify.cjs.json similarity index 100% rename from tsconfig/tsconfig.es2017.cjs.json rename to packages/neo-one-build-tools/includes/build-configs/tsconfig.es2017.browserify.cjs.json diff --git a/packages/neo-one-build-tools/includes/build-configs/tsconfig.es2017.cjs.json b/packages/neo-one-build-tools/includes/build-configs/tsconfig.es2017.cjs.json new file mode 100644 index 0000000000..7abe4f2972 --- /dev/null +++ b/packages/neo-one-build-tools/includes/build-configs/tsconfig.es2017.cjs.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.cjs.json", + "compilerOptions": { + "target": "es2017" + } +} diff --git a/tsconfig/tsconfig.es2017.esm.json b/packages/neo-one-build-tools/includes/build-configs/tsconfig.es2017.esm.json similarity index 100% rename from tsconfig/tsconfig.es2017.esm.json rename to packages/neo-one-build-tools/includes/build-configs/tsconfig.es2017.esm.json diff --git a/tsconfig/tsconfig.es2018.cjs.json b/packages/neo-one-build-tools/includes/build-configs/tsconfig.es2018.cjs.json similarity index 100% rename from tsconfig/tsconfig.es2018.cjs.json rename to packages/neo-one-build-tools/includes/build-configs/tsconfig.es2018.cjs.json diff --git a/tsconfig/tsconfig.esm.json b/packages/neo-one-build-tools/includes/build-configs/tsconfig.esm.json similarity index 100% rename from tsconfig/tsconfig.esm.json rename to packages/neo-one-build-tools/includes/build-configs/tsconfig.esm.json diff --git a/packages/neo-one-build-tools/includes/build-configs/tsconfig.esnext.browserify.esm.json b/packages/neo-one-build-tools/includes/build-configs/tsconfig.esnext.browserify.esm.json new file mode 100644 index 0000000000..d43a90962f --- /dev/null +++ b/packages/neo-one-build-tools/includes/build-configs/tsconfig.esnext.browserify.esm.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.esm.json", + "compilerOptions": { + "target": "esnext" + } +} diff --git a/packages/neo-one-build-tools/includes/build-configs/tsconfig.esnext.esm.json b/packages/neo-one-build-tools/includes/build-configs/tsconfig.esnext.esm.json new file mode 100644 index 0000000000..adb1db63d3 --- /dev/null +++ b/packages/neo-one-build-tools/includes/build-configs/tsconfig.esnext.esm.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.esm.json", + "compilerOptions": { + "target": "esnext", + "paths": { + "bn.js": ["node_modules/@neo-one/build-tools/types/bn.js.d.ts"], + "@neo-one/*": ["node_modules/@neo-one/*/dist/esm/index"] + } + } +} diff --git a/packages/neo-one-build-tools/includes/tsconfig.base.json b/packages/neo-one-build-tools/includes/tsconfig.base.json new file mode 100644 index 0000000000..dd77b34415 --- /dev/null +++ b/packages/neo-one-build-tools/includes/tsconfig.base.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "baseUrl": "../../../../", + "paths": { + "bn.js": ["node_modules/@neo-one/build-tools/types/bn.js.d.ts"] + }, + "target": "esnext", + "module": "commonjs", + "moduleResolution": "node", + "lib": ["esnext", "dom"], + "pretty": true, + "allowSyntheticDefaultImports": true, + "resolveJsonModule": false, + "experimentalDecorators": true, + "jsx": "react", + "alwaysStrict": true, + "strict": true, + "skipLibCheck": true, + "noUnusedLocals": false, + "noImplicitReturns": true, + "allowUnusedLabels": false, + "noUnusedParameters": false, + "allowUnreachableCode": false, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true + } +} diff --git a/packages/neo-one-build-tools/includes/tsconfig.dev.json b/packages/neo-one-build-tools/includes/tsconfig.dev.json new file mode 100644 index 0000000000..d6605a43a6 --- /dev/null +++ b/packages/neo-one-build-tools/includes/tsconfig.dev.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "paths": { + "bn.js": ["node_modules/@neo-one/build-tools/types/bn.js.d.ts"], + "@neo-one/*": ["../neo-one-*/src"] + } + }, + "exclude": ["./node_modules", "./dist", "./src/__data__/contracts/**/*.ts", "./template/**/*.ts?(x)"] +} diff --git a/tsconfig.static.json b/packages/neo-one-build-tools/includes/tsconfig.static.json similarity index 63% rename from tsconfig.static.json rename to packages/neo-one-build-tools/includes/tsconfig.static.json index 463d707862..b55997a1ce 100644 --- a/tsconfig.static.json +++ b/packages/neo-one-build-tools/includes/tsconfig.static.json @@ -1,5 +1,5 @@ { - "extends": "./tsconfig.json", + "extends": "./tsconfig.base.json", "compilerOptions": { "importHelpers": true, "noEmitHelpers": true, @@ -8,6 +8,8 @@ "inlineSources": true, "inlineSourceMap": true, "module": "esnext", - "target": "es2017" + "target": "es2017", + "esModuleInterop": false, + "resolveJsonModule": true } } diff --git a/packages/neo-one-build-tools/package.json b/packages/neo-one-build-tools/package.json new file mode 100644 index 0000000000..7c2f11c740 --- /dev/null +++ b/packages/neo-one-build-tools/package.json @@ -0,0 +1,92 @@ +{ + "name": "@neo-one/build-tools", + "version": "1.0.0", + "description": "NEOβ€’ONE build tools.", + "main": "./dist/index", + "license": "MIT", + "bin": { + "neo-one-lint": "bin/neo-one-lint.js", + "neo-one-lint-staged": "bin/neo-one-lint-staged.js", + "neo-one-publish": "bin/neo-one-publish.js", + "neo-one-tsc": "bin/neo-one-tsc.js" + }, + "scripts": { + "build": "gulp", + "lint": "./node_modules/.bin/tslint --project . --format codeFrame \"src/**/*.ts\"", + "lint:staged": "./node_modules/.bin/tslint --project . --format codeFrame \"src/**/*.ts\"", + "tsc": "node_modules/.bin/tsc --noEmit" + }, + "author": "Alex DiCarlo ", + "homepage": "https://neo-one.io", + "repository": { + "type": "git", + "url": "git+https://github.com/neo-one-suite/neo-one.git" + }, + "bugs": { + "url": "https://github.com/neo-one-suite/neo-one/issues" + }, + "keywords": [ + "neo", + "blockchain", + "neo-one", + "dapp" + ], + "private": true, + "engines": { + "node": ">=10.16.0" + }, + "browserslist": [ + "last 2 chrome versions", + "last 2 safari versions", + "last 2 edge versions", + "last 2 firefox versions" + ], + "sideEffects": false, + "dependencies": { + "execa": "^3.2.0", + "fs-extra": "^8.1.0", + "glob": "^7.1.4", + "gulp": "~4.0.2", + "gulp-banner": "^0.1.3", + "gulp-filter": "^6.0.0", + "gulp-flatten": "^0.4.0", + "gulp-if": "^3.0.0", + "gulp-json-transform": "^0.4.7", + "gulp-plumber": "^1.2.1", + "gulp-rename": "^2.0.0", + "gulp-replace": "^1.0.0", + "gulp-sourcemaps": "^2.6.5", + "gulp-typescript": "^5.0.1", + "lint-staged": "^9.4.1", + "lodash": "^4.17.15", + "minimatch": "^3.0.4", + "rollup": "^1.21.4", + "rollup-plugin-string": "^3.0.0", + "rollup-plugin-typescript2": "^0.25.0", + "rxjs-tslint-rules": "^4.24.3", + "ts-node": "^8.4.1", + "tslint": "^5.20.0", + "tslint-clean-code": "^0.2.9", + "tslint-config-prettier": "^1.18.0", + "tslint-consistent-codestyle": "^1.15.1", + "tslint-immutable": "^6.0.1", + "tslint-microsoft-contrib": "^6.2.0", + "tslint-sonarts": "^1.9.0", + "typescript": "3.9.5", + "yargs": "^14.2.0" + }, + "devDependencies": { + "@types/fs-extra": "^8.0.0", + "@types/gulp": "^4.0.6", + "@types/gulp-filter": "^3.0.33", + "@types/gulp-flatten": "^0.0.31", + "@types/gulp-if": "^0.0.33", + "@types/gulp-plumber": "^0.0.32", + "@types/gulp-rename": "^0.0.33", + "@types/gulp-replace": "^0.0.31", + "@types/gulp-sourcemaps": "^0.0.32", + "@types/lodash": "^4.14.138", + "@types/minimatch": "^3.0.3", + "@types/yargs": "^13.0.3" + } +} diff --git a/packages/neo-one-build-tools/src/build.ts b/packages/neo-one-build-tools/src/build.ts new file mode 100644 index 0000000000..9bd44dc66c --- /dev/null +++ b/packages/neo-one-build-tools/src/build.ts @@ -0,0 +1,114 @@ +// tslint:disable +import fs from 'fs-extra'; +import gulp from 'gulp'; +import { Format, getFormat } from './formats'; +import { buildBin, buildTypescript, rollupDevTools, CompileTypescriptOptions } from './builds'; +import yargs from 'yargs'; +import { getPackageInfo } from './utils'; + +const defaultBuildFormat = process.env.NEO_ONE_BUILD_FORMAT !== undefined ? process.env.NEO_ONE_BUILD_FORMAT : 'main'; + +const { argv } = yargs + .string('format') + .describe('format', 'specify an output library format') + .choices('format', ['main', 'next', 'browserify']) + .default('format', defaultBuildFormat); + +const ignoreGlobs = [ + '!src/__tests__/**/*', + '!src/__e2e__/**/*', + '!src/__data__/**/*', + '!src/__ledger_tests__/**/*', + '!src/__other_tests__/**/*', + '!src/bin/**/*', +]; + +class BuildTask { + public enabled: boolean; + public glob: string[]; + public options: Options | undefined; + public buildFormatFunction: ( + format: Format, + pkgName: string, + dependencies: string[], + ) => (glob: string[], options?: Options) => Promise | void; + private packageInfo: Promise<{ readonly name: string; readonly dependencies: string[] }>; + + constructor( + fn: ( + format: Format, + pkgName: string, + dependencies: string[], + ) => (glob: string[], options?: Options) => Promise | void, + initGlob?: string[], + ) { + this.packageInfo = getPackageInfo(); + this.enabled = true; + this.glob = initGlob ? initGlob : []; + this.buildFormatFunction = fn; + } + + public async execute(format: Format) { + const { name, dependencies } = await this.packageInfo; + if (this.enabled) { + const buildFunction = this.buildFormatFunction(format, name, dependencies); + const executed = Promise.resolve(buildFunction(this.glob, this.options)); + return executed; + } + } + + public addGlobPattern(pattern: string) { + this.glob = this.glob.concat(pattern); + } +} + +interface CopyStaticOptions { + readonly dest: string; +} + +export const copyStaticTask = new BuildTask( + (format) => (glob, options) => { + const outDest = `dist/${format.dist}`; + gulp.src(glob, { nodir: true }).pipe(gulp.dest(options !== undefined ? `${outDest}/${options.dest}` : outDest)); + }, + ['src/**/*'].concat(ignoreGlobs), +); +copyStaticTask.enabled = false; + +export const compileTypescriptTask = new BuildTask( + buildTypescript, + ['src/**/*.ts', 'src/**/*.tsx'].concat(ignoreGlobs), +); + +export const rollupToolsTask = new BuildTask(rollupDevTools, []); +rollupToolsTask.enabled = false; + +export const compileBinTask = new BuildTask(buildBin); + +export const formatString = argv.format; + +export const initialize = () => { + const format = getFormat(formatString); + + gulp.task('clean', async () => { + await fs.remove(`dist/${format.dist}`).then(() => fs.ensureDir(`dist`)); + }); + + gulp.task('copyStatic', async () => { + await copyStaticTask.execute(format); + }); + + gulp.task('compileTS', async () => { + await compileTypescriptTask.execute(format); + }); + + gulp.task('compileBin', async () => { + await compileBinTask.execute(format); + }); + + gulp.task('rollupTools', async () => { + await rollupToolsTask.execute(format); + }); + + gulp.task('default', gulp.series('clean', 'copyStatic', 'compileTS', 'compileBin', 'rollupTools')); +}; diff --git a/packages/neo-one-build-tools/src/builds/buildBin.ts b/packages/neo-one-build-tools/src/builds/buildBin.ts new file mode 100644 index 0000000000..f47ec506d4 --- /dev/null +++ b/packages/neo-one-build-tools/src/builds/buildBin.ts @@ -0,0 +1,63 @@ +// tslint:disable: match-default-export-name +import fs from 'fs-extra'; +import gulp from 'gulp'; +// @ts-ignore +import gulpBanner from 'gulp-banner'; +import gulpPlumber from 'gulp-plumber'; +import gulpRename from 'gulp-rename'; +import gulpSourcemaps from 'gulp-sourcemaps'; +import ts from 'gulp-typescript'; +import path from 'path'; +import typescript from 'typescript'; +import { Format } from '../formats'; +import { flattenBin, gulpReplaceBin, gulpReplaceModule, replaceCmd } from '../utils'; + +const gulpBin = (format: Format, binPath: string) => + gulpReplaceModule(format, gulp.src(binPath)) + .pipe(gulpSourcemaps.init()) + .pipe( + gulpRename((parsedPath) => { + if (parsedPath.dirname === undefined) { + throw new Error('error creating bin'); + } + // tslint:disable-next-line: no-object-mutation + parsedPath.dirname = `${parsedPath.dirname.slice(0, -'/src/bin'.length)}/bin`; + }), + ); + +const binBanner = `#!/usr/bin/env node +require('source-map-support').install({ handleUncaughtExceptions: false, environment: 'node' }); +`; + +const compileBin = (format: Format, binGlob: string) => { + const binProject = ts.createProject(format.tsconfig, { + typescript, + declaration: false, + }); + + return gulpBin(format, binGlob) + .pipe(gulpPlumber()) + .pipe(binProject()) + .pipe(gulpBanner(binBanner)) + .pipe(replaceCmd) + .pipe(flattenBin) + .pipe(gulpReplaceBin()) + .pipe(gulpSourcemaps.write('.', { includeContent: false, sourceRoot: '../src' })) + .pipe(gulp.dest('dist/cjs')); +}; + +export const buildBin = (format: Format) => () => { + /* build bin for main format only */ + if (format.name !== '') { + return; + } + + const binPath = path.join(process.cwd(), 'src', 'bin'); + if (!fs.existsSync(binPath)) { + return; + } + + const binGlob = `${binPath}/*.ts`; + + return compileBin(format, binGlob); +}; diff --git a/packages/neo-one-build-tools/src/builds/buildTypescript.ts b/packages/neo-one-build-tools/src/builds/buildTypescript.ts new file mode 100644 index 0000000000..50418d476f --- /dev/null +++ b/packages/neo-one-build-tools/src/builds/buildTypescript.ts @@ -0,0 +1,52 @@ +// tslint:disable: no-any match-default-export-name +import gulp from 'gulp'; +import gulpPlumber from 'gulp-plumber'; +import gulpSourcemaps from 'gulp-sourcemaps'; +import ts from 'gulp-typescript'; +import typescript from 'typescript'; +import { Format } from '../formats'; +import { + filterJS, + flattenSource, + gulpReplaceModule, + replaceBNImport, + replaceBNTypeImport, + replaceInternalSources, + replaceRXJSImport, + replaceStatic, +} from '../utils'; + +export interface CompileTypescriptOptions { + readonly stripInternal: boolean; +} + +// tslint:disable-next-line: readonly-array +export const buildTypescript = (format: Format, pkgName?: string) => ( + glob: string[], + options: CompileTypescriptOptions = { stripInternal: false }, +) => { + const isToolsPackage = pkgName === '@neo-one/developer-tools'; + + const project = ts.createProject(format.tsconfig, { + typescript, + baseUrl: process.cwd(), + stripInternal: options.stripInternal, + }); + + return gulpReplaceModule( + format, + gulp + .src(glob) + .pipe(gulpPlumber()) + .pipe(gulpSourcemaps.init()) + .pipe(project()) + .pipe(replaceRXJSImport(format)) + .pipe(replaceInternalSources) + .pipe(replaceBNTypeImport) + .pipe(replaceBNImport) + .pipe(replaceStatic) + .pipe(flattenSource) + .pipe(gulpSourcemaps.write('.', { includeContent: false, sourceRoot: '../src' })) + .pipe(filterJS(isToolsPackage)), + ).pipe(gulp.dest(`dist/${format.dist}`)); +}; diff --git a/packages/neo-one-build-tools/src/builds/index.ts b/packages/neo-one-build-tools/src/builds/index.ts new file mode 100644 index 0000000000..4f3f1d470a --- /dev/null +++ b/packages/neo-one-build-tools/src/builds/index.ts @@ -0,0 +1,3 @@ +export * from './buildBin'; +export * from './buildTypescript'; +export * from './rollupDevTools'; diff --git a/packages/neo-one-build-tools/src/builds/rollupDevTools.ts b/packages/neo-one-build-tools/src/builds/rollupDevTools.ts new file mode 100644 index 0000000000..2a3789537c --- /dev/null +++ b/packages/neo-one-build-tools/src/builds/rollupDevTools.ts @@ -0,0 +1,37 @@ +import path from 'path'; +import { rollup } from 'rollup'; +// @ts-ignore +import rollupString from 'rollup-plugin-string'; +// tslint:disable-next-line: match-default-export-name +import rollupTypescript from 'rollup-plugin-typescript2'; +import { Format } from '../formats'; + +const APP_ROOT_DIR = path.resolve(__dirname, '..', '..', '..'); + +export const rollupDevTools = (format: Format) => async () => { + const bundle = await rollup({ + input: path.join(APP_ROOT_DIR, 'neo-one-developer-tools', 'src', 'index.ts'), + external: ['resize-observer-polyfill'], + plugins: [ + rollupString.string({ + include: path.join(APP_ROOT_DIR, 'neo-one-developer-tools-frame', 'dist', 'tools.raw.js'), + }), + rollupTypescript({ + cacheRoot: path.join('node_modules', '.cache', 'rts2', format.target, format.module), + tsconfig: format.tsconfigESM, + tsconfigOverride: { + compilerOptions: { + inlineSources: false, + declaration: false, + }, + }, + check: false, + }), + ], + }); + + await bundle.write({ + format: format.module, + file: path.join('dist', format.dist, 'index.js'), + }); +}; diff --git a/packages/neo-one-build-tools/src/check.ts b/packages/neo-one-build-tools/src/check.ts new file mode 100644 index 0000000000..6fa6e56213 --- /dev/null +++ b/packages/neo-one-build-tools/src/check.ts @@ -0,0 +1,79 @@ +// tslint:disable: no-console +import fs from 'fs'; +// tslint:disable-next-line: match-default-export-name +import glob from 'glob'; +import path from 'path'; +import ts from 'typescript'; +import { packages } from './prepare'; +import { getImportDeclarations, getModuleSpecifier } from './tsUtils'; + +const packagePath = path.resolve(__dirname, '..', '..'); + +const getDevTypeDeps = (pathIn: string) => { + const devDeps = JSON.parse(fs.readFileSync(pathIn, 'utf-8')).devDependencies; + + return devDeps === null || devDeps === undefined ? {} : devDeps; +}; + +const getTypeDevDepsFromPackage = (pkgPath: string) => { + const devDeps = getDevTypeDeps(path.resolve(pkgPath, 'package.json')); + const prefix = '@types/'; + + return Object.keys(devDeps).map((key) => (key.startsWith(prefix) ? key.slice(prefix.length) : key)); +}; + +// tslint:disable-next-line: no-let +let packagesLeft = packages.length; + +const run = async (): Promise => { + const result = await Promise.all( + packages.map(async (pkg: string) => { + const pkgPath = path.resolve(packagePath, pkg); + const typeDepsSet = new Set(getTypeDevDepsFromPackage(pkgPath)); + const distPath = path.resolve(pkgPath, 'dist', 'cjs'); + const allDecFiles = await new Promise((resolve, reject) => + glob(path.join(distPath, '**', '*.d.ts'), (err, found) => { + if (err) { + reject(err); + } else { + resolve(found); + } + }), + ); + const warningSet = new Set(); + let resultOut = false; + allDecFiles.forEach((file) => { + const sourceFile = ts.createProgram([file], {}).getSourceFile(file); + if (!sourceFile) { + throw new Error(`File undefined: ${file}`); + } + const importDeclarationNodes = getImportDeclarations(sourceFile); + importDeclarationNodes.forEach((node) => { + const moduleSpec = getModuleSpecifier(node); + const text = moduleSpec === undefined ? undefined : moduleSpec.text; + if (text !== undefined && typeDepsSet.has(text) && !warningSet.has(text)) { + console.warn(`\nFound missing @type dependency in package ${pkg}: ${text}\n`); + resultOut = true; + warningSet.add(text); + } + }); + }); + packagesLeft -= 1; + console.log(`${packagesLeft} package${packagesLeft === 1 ? '' : 's'} remaining. Done scanning ${pkg}.`); + + return resultOut; + }), + ); + + return result.includes(true) ? ['Found missing @types dependencies', 1] : ['Done', 0]; +}; + +run() + .then(([message, exitCode]) => { + console.log(message); + process.exit(exitCode); + }) + .catch((err) => { + console.error(err); + process.exit(1); + }); diff --git a/packages/neo-one-build-tools/src/clean.ts b/packages/neo-one-build-tools/src/clean.ts new file mode 100644 index 0000000000..a6d6bcd773 --- /dev/null +++ b/packages/neo-one-build-tools/src/clean.ts @@ -0,0 +1,62 @@ +// tslint:disable no-console +import fs from 'fs-extra'; +import path from 'path'; +import yargs from 'yargs'; + +const argv = yargs + .boolean('full') + .describe('full', 'flag for also cleaning dist/* and .rush/* directories') + .default('full', false) + .boolean('debug') + .describe('debug', 'flag for logging actions') + .default('debug', false).argv; + +const APP_ROOT_DIR = path.resolve(__dirname, '..', '..', '..'); +const PACKAGES_DIR = path.resolve(APP_ROOT_DIR, 'packages'); + +const getLogger = (debug = false) => + debug + ? (input: string | readonly string[]) => console.log(input) + : (_input: string | readonly string[]) => { + /* do nothing */ + }; + +const logger = getLogger(argv.debug); + +const packagesToScan: readonly string[] = fs + .readdirSync(PACKAGES_DIR) + .filter((dir) => dir !== '.DS_Store') + .map((dir) => path.join(PACKAGES_DIR, dir)); + +logger('Packages being scanned:'); +logger(packagesToScan); + +const deleteAll = (modules: readonly string[]): void => { + modules.forEach((dir) => { + if (argv.full) { + logger(`Removing /.rush: ${path.resolve(dir, '.rush')}`); + fs.removeSync(path.resolve(dir, '.rush')); + logger(`Removing /dist: ${path.resolve(dir, 'dist')}`); + fs.removeSync(path.resolve(dir, 'dist')); + } + const filesInPackage = fs.readdirSync(dir); + filesInPackage.forEach((file) => { + if (file.includes('.log')) { + logger(`Removing log file: ${path.resolve(dir, file)}`); + fs.removeSync(path.resolve(dir, file)); + } + if (file === 'LICENSE') { + logger(`Removing LICENSE file: ${path.resolve(dir, file)}`); + fs.removeSync(path.resolve(dir, file)); + } + + if (file === 'README.md') { + logger(`Removing README.md from ${path.resolve(dir, file)}`); + fs.removeSync(path.resolve(dir, file)); + } + }); + }); + console.log('Done cleaning.'); +}; + +export const clean = () => deleteAll(packagesToScan); diff --git a/packages/neo-one-build-tools/src/formats.ts b/packages/neo-one-build-tools/src/formats.ts new file mode 100644 index 0000000000..c3f2a7eba7 --- /dev/null +++ b/packages/neo-one-build-tools/src/formats.ts @@ -0,0 +1,45 @@ +import path from 'path'; + +export interface Format { + readonly browser: boolean; + readonly dist: string; + readonly name: string; + readonly tsconfig: string; + readonly tsconfigESM: string; + readonly packageDir: string; + readonly target: 'es2017' | 'esnext'; + readonly module: 'cjs' | 'esm'; +} + +const MAIN_FORMAT: Format = { + target: 'es2017', + module: 'cjs', + browser: false, + dist: 'cjs', + name: '', + packageDir: process.cwd(), + tsconfig: path.resolve(__dirname, '../includes/build-configs/tsconfig.es2017.cjs.json'), + tsconfigESM: path.resolve(__dirname, '../includes/build-configs/tsconfig.es2017.esm.json'), +}; + +const NEXT_FORMAT: Format = { + target: 'esnext', + module: 'esm', + browser: false, + dist: 'esm', + name: 'esnext-esm', + packageDir: process.cwd(), + tsconfig: path.resolve(__dirname, '../includes/build-configs/tsconfig.esnext.esm.json'), + tsconfigESM: path.resolve(__dirname, '../includes/build-configs/tsconfig.esnext.esm.json'), +}; + +export const getFormat = (requestedFormat: string) => { + switch (requestedFormat) { + case 'main': + return MAIN_FORMAT; + case 'next': + return NEXT_FORMAT; + default: + throw new Error(`invalid requested format: ${requestedFormat}`); + } +}; diff --git a/packages/neo-one-build-tools/src/index.ts b/packages/neo-one-build-tools/src/index.ts new file mode 100644 index 0000000000..555cb3eb68 --- /dev/null +++ b/packages/neo-one-build-tools/src/index.ts @@ -0,0 +1 @@ +export * from './build'; diff --git a/packages/neo-one-build-tools/src/lint.ts b/packages/neo-one-build-tools/src/lint.ts new file mode 100644 index 0000000000..cdbb2141c2 --- /dev/null +++ b/packages/neo-one-build-tools/src/lint.ts @@ -0,0 +1,60 @@ +import fs from 'fs-extra'; +// tslint:disable-next-line: match-default-export-name +import minimatch from 'minimatch'; +import path from 'path'; +import { Configuration, Linter, LintResult } from 'tslint'; +import yargs from 'yargs'; + +const argv = yargs + .boolean('staged') + .describe('staged', 'flag for lint-staged') + .default('staged', false) + .string('pattern') + .describe('pattern', 'glob-file pattern to lint') + .default('pattern', 'src/**/*.ts?(x)').argv; + +const CWD = process.cwd(); +const APP_ROOT_DIR = path.resolve(__dirname, '..', '..', '..'); +const TSLINT_CONFIG = path.resolve(APP_ROOT_DIR, 'tslint.json'); + +export const writeReport = (report: LintResult) => { + if (report.errorCount !== 0 || report.warningCount !== 0) { + if (argv.staged) { + throw report.output; + } + process.stderr.write(`${report.output}\n`); + } +}; + +export const lint = () => { + const configuration = Configuration.findConfiguration(TSLINT_CONFIG).results; + if (configuration === undefined) { + throw new Error(`undefined configuration found at ${TSLINT_CONFIG}`); + } + + const options = { + fix: false, + formatter: 'codeFrame', + rulesDirectory: configuration.rulesDirectory, + }; + const maybeTSConfigLint = path.resolve(CWD, 'tsconfig.lint.json'); + const tsconfigPath = fs.existsSync(maybeTSConfigLint) ? maybeTSConfigLint : path.resolve(CWD, 'tsconfig.json'); + const program = Linter.createProgram(tsconfigPath); + const linter = new Linter(options, program); + + const programFiles = Linter.getFileNames(program); + const files = minimatch.match(programFiles, path.resolve(CWD, argv.pattern), { matchBase: true }); + files.forEach((file) => { + const maybeFileContents = program.getSourceFile(file); + if (maybeFileContents === undefined) { + throw new Error(`got bad sourcefile for ${file}`); + } + const fileContents = maybeFileContents.getFullText(); + + linter.lint(file, fileContents, configuration); + }); + + const results = linter.getResult(); + + writeReport(results); +}; diff --git a/packages/neo-one-build-tools/src/prepare.ts b/packages/neo-one-build-tools/src/prepare.ts new file mode 100644 index 0000000000..d5dd86e69e --- /dev/null +++ b/packages/neo-one-build-tools/src/prepare.ts @@ -0,0 +1,26 @@ +import fs from 'fs-extra'; +import path from 'path'; + +interface RushProject { + readonly shouldPublish?: boolean; + readonly projectFolder: string; +} + +const APP_ROOT_DIR = path.resolve(__dirname, '..', '..', '..'); +const RUSH_PATH = path.resolve(APP_ROOT_DIR, 'rush.json'); +const LICENSE_PATH = path.resolve(APP_ROOT_DIR, 'LICENSE'); +const README_PATH = path.resolve(APP_ROOT_DIR, 'README.md'); + +const rushJSON = JSON.parse(fs.readFileSync(RUSH_PATH, 'utf-8')); +export const packages = rushJSON.projects + .filter((project: RushProject) => project.shouldPublish) + .map((project: RushProject) => project.projectFolder.slice('packages/'.length)); + +const getFullPath = (pkg: string) => path.resolve(APP_ROOT_DIR, 'packages', pkg); + +export const prepare = () => + packages.forEach((pkg: string) => { + const pkgPath = getFullPath(pkg); + fs.copyFileSync(LICENSE_PATH, path.resolve(pkgPath, 'LICENSE')); + fs.copyFileSync(README_PATH, path.resolve(pkgPath, 'README.md')); + }); diff --git a/packages/neo-one-build-tools/src/tsUtils.ts b/packages/neo-one-build-tools/src/tsUtils.ts new file mode 100644 index 0000000000..fb62b8d34d --- /dev/null +++ b/packages/neo-one-build-tools/src/tsUtils.ts @@ -0,0 +1,91 @@ +import ts from 'typescript'; + +function getSyntaxKindName(kind: ts.SyntaxKind): string { + return getKindCache()[kind]; +} + +function getValueOrUndefined(value: T | null | undefined): T | undefined { + return value == undefined ? undefined : value; +} + +// tslint:disable-next-line no-let readonly-keyword +let mutableKindCache: { [kind: number]: string } | undefined; + +function getKindCache() { + if (mutableKindCache !== undefined) { + return mutableKindCache; + } + mutableKindCache = {}; + + // some SyntaxKinds are repeated, so only use the first one + // tslint:disable-next-line no-loop-statement + for (const name of Object.keys(ts.SyntaxKind).filter((k) => isNaN(parseInt(k, 10)))) { + // tslint:disable-next-line no-any + const value = (ts.SyntaxKind as any)[name] as number; + if ((mutableKindCache[value] as string | undefined) === undefined) { + mutableKindCache[value] = name; + } + } + + return mutableKindCache; +} + +type BodiedNode = ts.Node & { readonly body: ts.Node }; +type BodyableNode = ts.Node & { readonly body?: ts.Node }; + +function getBody(node: BodiedNode): ts.Node; +function getBody(node: BodyableNode): ts.Node | undefined; +function getBody(node: BodiedNode | BodyableNode): ts.Node | undefined { + return getValueOrUndefined(node.body); +} + +type StatementedNode = + | ts.Block + | ts.SourceFile + | ts.FunctionDeclaration + | ts.ModuleDeclaration + | ts.FunctionLikeDeclaration + | ts.CaseClause + | ts.DefaultClause; + +function getStatements(node: StatementedNode): readonly ts.Statement[] { + if (ts.isSourceFile(node) || ts.isCaseClause(node) || ts.isDefaultClause(node)) { + return node.statements; + } + + if (ts.isBlock(node)) { + return node.statements; + } + + let moduleBody = getBody(node); + // tslint:disable-next-line no-loop-statement no-any + while (moduleBody !== undefined && (moduleBody as any).statements == undefined) { + // tslint:disable-next-line no-any + moduleBody = getBody(moduleBody as any); + } + + if (moduleBody === undefined) { + throw new Error(`Could not find statements for ${getSyntaxKindName(node.kind)}`); + } + + // tslint:disable-next-line no-any + return (moduleBody as any).statements; +} + +// tslint:disable-next-line: export-name +export function getImportDeclarations(node: ts.SourceFile): readonly ts.ImportDeclaration[] { + return getStatements(node).filter(ts.isImportDeclaration); +} + +export function getModuleSpecifier(node: ts.ImportDeclaration | ts.ExportDeclaration): ts.StringLiteral | undefined { + const moduleSpecifier = getValueOrUndefined(node.moduleSpecifier); + if (moduleSpecifier === undefined) { + return undefined; + } + + if (!ts.isStringLiteral(moduleSpecifier)) { + return undefined; + } + + return moduleSpecifier; +} diff --git a/packages/neo-one-build-tools/src/utils.ts b/packages/neo-one-build-tools/src/utils.ts new file mode 100644 index 0000000000..5dd7054c96 --- /dev/null +++ b/packages/neo-one-build-tools/src/utils.ts @@ -0,0 +1,220 @@ +// tslint:disable:match-default-export-name no-any +import fs from 'fs-extra'; +import gulpFilter from 'gulp-filter'; +import gulpIf from 'gulp-if'; +import gulpRename from 'gulp-rename'; +import gulpReplace from 'gulp-replace'; +import _ from 'lodash'; +import path from 'path'; +import pkg from '../package.json'; +import { Format } from './formats'; + +const RXJS_IMPORT = 'rxjs'; + +const transformWhitelist = new Set(['@neo-one/ec-key']); + +export const getName = (format: Format, name: string) => (format.name === '' ? name : `${name}-${format.name}`); + +export const getPackageJSON = async () => { + const root = process.cwd(); + + // tslint:disable-next-line: no-any + let packageJSON: any = {}; + try { + packageJSON = await fs.readJSON(path.join(root, 'package.json')); + } catch { + throw new Error(`error locating package.json in ${root}`); + } + + return packageJSON; +}; + +export const getPackageInfo = async () => { + const pkgJSON = await getPackageJSON(); + + return { + dependencies: getInternalDependencies(pkgJSON), + name: pkgJSON.name, + }; +}; + +export const flattenSource = gulpRename((name) => { + if (name.dirname === undefined) { + return; + } + // tslint:disable-next-line: no-object-mutation + name.dirname = name.dirname + .split(path.sep) + .filter((dir) => dir !== 'src') + .join(path.sep); +}); + +export const flattenBin = gulpRename((name) => { + if (name.dirname === undefined) { + return; + } + // tslint:disable-next-line: no-object-mutation + name.dirname = name.dirname + .split(path.sep) + .filter((dir) => dir !== 'bin') + .join(path.sep); +}); + +export const replaceRXJSImport = (format: Format) => + gulpReplace(`${RXJS_IMPORT}/internal`, `${RXJS_IMPORT}/${format.module === 'esm' ? '_esm2015/' : ''}internal`); +export const replaceInternalSources = gulpReplace( + /import\("(?:..\/)*neo-one-([^\)]*)\/src"\)/g, + 'import("@neo-one/$1")', +); +export const replaceBNTypeImport = gulpReplace( + /import\("@neo-one\/build-tools\/types\/bn.js"\).BN/g, + 'import("bn.js")', +); +export const replaceBNImport = gulpReplace("import { BN } from 'bn.js';", "import BN from 'bn.js';"); +export const replaceStatic = gulpReplace('../static', './static'); +export const replaceCmd = gulpReplace('../cmd', './cmd'); +export const filterJS = (condition: boolean) => gulpIf(condition, gulpFilter(['**', '!**/*.js'])); + +const CLIENT_PACKAGES = new Set([ + '@neo-one/client', + '@neo-one/client-common', + '@neo-one/client-core', + '@neo-one/developer-tools', + '@neo-one/utils', + '@neo-one/client-switch', + '@neo-one/node-vm', + '@neo-one/client-full-common', + '@neo-one/node-core', +]); +const CLIENT_FULL_PACKAGES = new Set( + [...CLIENT_PACKAGES].concat(['@neo-one/client-full', '@neo-one/client-full-core']), +); + +export const DEP_MAPPING: any = { + esnext: { + esm: { + '@reactivex/ix-es2015-cjs': '@reactivex/ix-esnext-esm', + }, + cjs: { + '@reactivex/ix-es2015-cjs': '@reactivex/ix-esnext-cjs', + }, + }, + es2017: { + esm: { + '@reactivex/ix-es2015-cjs': '@reactivex/ix-es2015-esm', + }, + cjs: {}, + }, +}; + +export const mapDep = (format: Format, depName: string): string => { + if (DEP_MAPPING[format.target][format.module][depName] !== undefined) { + return DEP_MAPPING[format.target][format.module][depName]; + } + + return depName; +}; + +export const transformInternalDeps = (format: Format, depName: string): string => { + if (transformWhitelist.has(depName)) { + return depName; + } + if (depName.match(/^@neo-one\/.*/) && !format.browser) { + return getName(format, depName); + } + + if (format.browser && CLIENT_FULL_PACKAGES.has(depName)) { + return `${depName}-browserify`; + } + + return depName; +}; + +// tslint:disable-next-line: arrow-return-shorthand +const transformBasePackageJSON = (format: Format, orig: any) => ({ + name: format.name === '' ? orig.name : `${orig.name}-${format.name}`, + version: orig.version, + author: pkg.author, + description: orig.description, + license: pkg.license, + homepage: pkg.homepage, + repository: pkg.repository, + bugs: pkg.bugs, + keywords: pkg.keywords, + bin: format.name === '' ? orig.bin : undefined, + dependencies: + orig.dependencies === undefined + ? undefined + : _.fromPairs( + Object.entries(orig.dependencies) + .filter(([depName]) => depName !== '@neo-one/developer-tools-frame') + .map(([depName, version]) => [transformInternalDeps(format, depName), version]), + ), + publishConfig: { + access: 'public', + }, + engines: pkg.engines, +}); + +export const transformSrcPackageJSON = (format: Format, orig: any /*file: any*/) => ({ + ...transformBasePackageJSON(format, orig), + main: 'index.js', + module: format.module === 'esm' ? 'index.js' : undefined, + types: 'index.d.ts', + sideEffects: false, +}); + +const transformSmartContractPackageJSON = (format: Format, orig: any /*file: any*/) => ({ + ...transformBasePackageJSON(format, orig), + main: orig.main.startsWith('./lib/') ? orig.main.slice('./lib/'.length) : orig.main, + include: + orig.include === undefined ? undefined : orig.include.map((filepath: string) => filepath.slice(0, 'lib/'.length)), +}); + +const transformBrowserPackageJSON = (format: Format, orig: any /*file: any*/) => ({ + ...transformSrcPackageJSON(format, orig /*file*/), + browser: 'index.browser.js', +}); + +const transformPackageJSON = (format: Format, orig: any /*file: any*/) => + orig.smartContract !== undefined + ? transformSmartContractPackageJSON(format, orig /*file*/) + : orig.browser !== undefined + ? transformBrowserPackageJSON(format, orig /*file*/) + : transformSrcPackageJSON(format, orig /*file*/); + +// tslint:disable-next-line: arrow-return-shorthand +export const transformPackage = (format: Format, orig: any) => { + // jsonTransform((orig: any, file: any) => transformPackageJSON(format, orig /*file*/)); + + return transformPackageJSON(format, orig); +}; + +export const getInternalDependencies = (pkgJSON: any) => { + const dependencies = pkgJSON.dependencies === undefined ? [] : pkgJSON.dependencies; + + return Object.keys(dependencies).filter((dep) => dep.match(/^@neo-one\/.*/)); +}; + +const quoted = (value: string, quote: string): string => `${quote}${value}${quote}`; +export const gulpReplaceModule = (format: Format, stream: any) => + Object.entries(DEP_MAPPING[format.target][format.module]).reduce( + (streamIn, [moduleName, replaceName]) => streamIn.pipe(gulpReplace(moduleName, replaceName)), + stream, + ); + +export const gulpReplaceInternalSources = (format: Format, internalDeps: readonly string[], stream: any) => { + const quote = format.module === 'esm' ? "'" : '"'; + const deps = + format.name === '' + ? [] + : internalDeps.map((p) => [quoted(p, quote), quoted(transformInternalDeps(format, p), quote)]); + + return deps.reduce( + (streamIn, [moduleName, replaceName]) => streamIn.pipe(gulpReplace(moduleName, replaceName)), + stream, + ); +}; + +export const gulpReplaceBin = (quote = '"') => gulpReplace(/'\.\.\/lib\/(.*)'/g, quoted('../lib/$1', quote)); +export const gulpReplaceBinPack = (quote = '"') => gulpReplace(/'\.\.\/lib\/(.*)'/g, quoted('../$1', quote)); diff --git a/packages/neo-one-build-tools/tsconfig.json b/packages/neo-one-build-tools/tsconfig.json new file mode 100644 index 0000000000..8247f57057 --- /dev/null +++ b/packages/neo-one-build-tools/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "rootDir": ".", + "target": "esnext", + "module": "commonjs", + "moduleResolution": "node", + "lib": ["esnext", "dom"], + "esModuleInterop": true, + "allowJs": true, + "pretty": true, + "noEmit": false, + "declaration": false, + "inlineSourceMap": true, + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true, + "experimentalDecorators": true, + "alwaysStrict": true, + "strict": true, + "skipLibCheck": true, + "noUnusedLocals": false, + "noImplicitReturns": true, + "allowUnusedLabels": false, + "noUnusedParameters": false, + "allowUnreachableCode": false, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["**/*.ts"], + "exclude": ["node_modules", "lib"] +} diff --git a/types/bn.js.d.ts b/packages/neo-one-build-tools/types/bn.js.d.ts similarity index 99% rename from types/bn.js.d.ts rename to packages/neo-one-build-tools/types/bn.js.d.ts index c09bd0dfa5..883389c704 100644 --- a/types/bn.js.d.ts +++ b/packages/neo-one-build-tools/types/bn.js.d.ts @@ -569,3 +569,5 @@ declare class RedBN extends BN { */ redPow(b: BN): RedBN; } + +export default BN; diff --git a/types/e2e.d.ts b/packages/neo-one-build-tools/types/e2e.d.ts similarity index 74% rename from types/e2e.d.ts rename to packages/neo-one-build-tools/types/e2e.d.ts index ea364a9d2b..fcf519be14 100644 --- a/types/e2e.d.ts +++ b/packages/neo-one-build-tools/types/e2e.d.ts @@ -3,14 +3,21 @@ declare interface NodeProject { readonly env: any; } +declare interface CLIProject { + readonly exec: (command: string, options?: object) => Promise; + readonly env: any; +} + declare interface One { readonly addCleanup: (callback: () => Promise | void) => void; readonly cleanupTest: () => Promise; readonly createExec: (project: string) => (command: string, options?: object) => Promise; readonly createExecAsync: (project: string) => (command: string, options?: object) => void; readonly createNodeProject: (project: string) => NodeProject; + readonly createCLIProject: (project: string) => CLIProject; readonly until: (func: () => Promise) => Promise; readonly measureRequire: (mod: string) => Promise; readonly getProjectConfig: (project: string) => any; + readonly getProjectDir: (project: string) => string; } declare const one: One; diff --git a/packages/neo-one-react-core/src/global.d.ts b/packages/neo-one-build-tools/types/static.d.ts similarity index 100% rename from packages/neo-one-react-core/src/global.d.ts rename to packages/neo-one-build-tools/types/static.d.ts diff --git a/packages/neo-one-build-tools/types/unit.d.ts b/packages/neo-one-build-tools/types/unit.d.ts new file mode 100644 index 0000000000..27254b7bba --- /dev/null +++ b/packages/neo-one-build-tools/types/unit.d.ts @@ -0,0 +1,6 @@ +declare interface One { + readonly addCleanup: (callback: () => Promise | void) => void; + readonly cleanupTest: () => Promise; + readonly teardown: () => Promise; +} +declare const one: One; diff --git a/packages/neo-one-cli-common-node/.npmignore b/packages/neo-one-cli-common-node/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-cli-common-node/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-cli-common-node/CHANGELOG.json b/packages/neo-one-cli-common-node/CHANGELOG.json new file mode 100644 index 0000000000..c65f105afc --- /dev/null +++ b/packages/neo-one-cli-common-node/CHANGELOG.json @@ -0,0 +1,114 @@ +{ + "name": "@neo-one/cli-common-node", + "entries": [ + { + "version": "2.7.1", + "tag": "@neo-one/cli-common-node_v2.7.1", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/cli-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full-core\" from `^2.7.0` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/cli-common-node_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "minor": [ + { + "comment": "Adds outDir to neo-one configuration." + }, + { + "comment": "Export createUserAccountProviderFunc." + } + ], + "patch": [ + { + "comment": "Add appropriate @types dependencies." + }, + { + "comment": "Update documentation on starting neotracker." + }, + { + "comment": "Update CLI compile options." + }, + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + }, + { + "comment": "update defaultNetworks to live nodes" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.6.0", + "tag": "@neo-one/cli-common-node_v2.6.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/cli-common\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full-core\" from `^2.4.1` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/cli-common-node_v2.5.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + }, + { + "comment": "Upgrade TS to v3.8.1-rc" + } + ], + "patch": [ + { + "comment": "update cosmicconfig to 6.0.0" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/cli-common\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full-core\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-cli-common-node/CHANGELOG.md b/packages/neo-one-cli-common-node/CHANGELOG.md index f8d7e63003..cbf1f0e2b8 100644 --- a/packages/neo-one-cli-common-node/CHANGELOG.md +++ b/packages/neo-one-cli-common-node/CHANGELOG.md @@ -1,91 +1,48 @@ -# Change Log +# Change Log - @neo-one/cli-common-node -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.4.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli-common-node@2.3.0...@neo-one/cli-common-node@2.4.0) (2019-11-20) +## 2.7.1 +Tue, 08 Dec 2020 19:29:01 GMT +*Version update only* -### Features +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT -* **neotracker:** add neotracker command to neo-one build ([#1870](https://github.com/neo-one-suite/neo-one/issues/1870)) ([9a3e32a](https://github.com/neo-one-suite/neo-one/commit/9a3e32af4301bcc0fb37353661696c88a194d9be)) +### Minor changes +- Adds outDir to neo-one configuration. +- Export createUserAccountProviderFunc. +### Patches +- Add appropriate @types dependencies. +- Update documentation on starting neotracker. +- Update CLI compile options. +- Upgrade TypeScript from v3.8.3 to v3.9.5 +- update defaultNetworks to live nodes +### Updates -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli-common-node@1.1.14...@neo-one/cli-common-node@2.3.0) (2019-10-23) +- bump package version for future release clarity -**Note:** Version bump only for package @neo-one/cli-common-node +## 2.6.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes +- update package release process to take better advantage of rush tooling +## 2.5.0 +Mon, 13 Apr 2020 23:20:32 GMT +### Minor changes -## [1.1.14](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli-common-node@1.1.13...@neo-one/cli-common-node@1.1.14) (2019-10-23) +- Migrate to Rush +- Upgrade TS to v3.8.1-rc -**Note:** Version bump only for package @neo-one/cli-common-node +### Patches +- update cosmicconfig to 6.0.0 - - - -## [1.1.13](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli-common-node@1.1.12...@neo-one/cli-common-node@1.1.13) (2019-10-23) - -**Note:** Version bump only for package @neo-one/cli-common-node - - - - - -## [1.1.12](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli-common-node@1.1.11...@neo-one/cli-common-node@1.1.12) (2019-09-04) - -**Note:** Version bump only for package @neo-one/cli-common-node - - - - - -## [1.1.11](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli-common-node@1.1.10...@neo-one/cli-common-node@1.1.11) (2019-09-03) - -**Note:** Version bump only for package @neo-one/cli-common-node - - - - - -## [1.1.10](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli-common-node@1.1.9...@neo-one/cli-common-node@1.1.10) (2019-09-02) - -**Note:** Version bump only for package @neo-one/cli-common-node - - - - - -## [1.1.9](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli-common-node@1.1.8...@neo-one/cli-common-node@1.1.9) (2019-08-31) - -**Note:** Version bump only for package @neo-one/cli-common-node - - - - - -## [1.1.8](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli-common-node@1.1.7...@neo-one/cli-common-node@1.1.8) (2019-08-30) - -**Note:** Version bump only for package @neo-one/cli-common-node - - - - - -## [1.1.7](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli-common-node@1.1.6...@neo-one/cli-common-node@1.1.7) (2019-08-23) - -**Note:** Version bump only for package @neo-one/cli-common-node - - - - - -## 1.1.6 (2019-08-22) - -**Note:** Version bump only for package @neo-one/cli-common-node diff --git a/packages/neo-one-cli-common-node/gulpfile.js b/packages/neo-one-cli-common-node/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-cli-common-node/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-cli-common-node/package.json b/packages/neo-one-cli-common-node/package.json index 31cf42da44..4cd60fcba0 100644 --- a/packages/neo-one-cli-common-node/package.json +++ b/packages/neo-one-cli-common-node/package.json @@ -1,26 +1,35 @@ { "name": "@neo-one/cli-common-node", - "version": "2.4.0", + "version": "2.7.1", "description": "NEOβ€’ONE code common to the node cli and other node packages in NEOβ€’ONE.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/cli-common": "^2.4.0", - "@neo-one/client-core": "^2.3.0", - "@neo-one/client-full-core": "^2.3.0", - "cosmiconfig": "^5.2.1", + "@neo-one/cli-common": "^3.0.0", + "@neo-one/client-core": "^3.0.0", + "@neo-one/client-full-core": "^3.0.0", + "@types/lodash": "^4.14.138", + "cosmiconfig": "^6.0.0", "fs-extra": "^8.1.0", "lodash": "^4.17.15", "prompts": "^2.2.1", "schema-utils": "^2.1.0", - "ts-node": "^8.3.0", + "ts-node": "^8.4.1", "tslib": "^1.10.0" }, "devDependencies": { - "@types/cosmiconfig": "^5.0.3", + "@neo-one/build-tools": "^1.0.0", "@types/fs-extra": "^8.0.0", - "@types/lodash": "^4.14.138", "@types/prompts": "^2.0.1", - "@types/schema-utils": "^1.0.0" - }, - "sideEffects": false + "@types/schema-utils": "^1.0.0", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-cli-common-node/src/configuration.ts b/packages/neo-one-cli-common-node/src/configuration.ts index c2c944da8d..6b113db10d 100644 --- a/packages/neo-one-cli-common-node/src/configuration.ts +++ b/packages/neo-one-cli-common-node/src/configuration.ts @@ -1,9 +1,10 @@ // tslint:disable no-any import { CodegenFramework, CodegenLanguage, Configuration } from '@neo-one/cli-common'; -import cosmiconfig from 'cosmiconfig'; +import { cosmiconfig } from 'cosmiconfig'; import * as fs from 'fs-extra'; import _ from 'lodash'; import * as nodePath from 'path'; +// tslint:disable-next-line: match-default-export-name import validate from 'schema-utils'; import { register } from 'ts-node'; import { defaultNetworks } from './networks'; @@ -16,6 +17,7 @@ const configurationDefaults = { path: nodePath.join('neo-one', 'migration.js'), }, contracts: { + outDir: nodePath.join('neo-one', 'compiled'), path: nodePath.join('neo-one', 'contracts'), }, codegen: { @@ -33,7 +35,7 @@ const configurationDefaults = { neotracker: { path: nodePath.join('.neo-one', 'neotracker'), port: 9041, - skip: false, + skip: true, }, }; @@ -89,10 +91,15 @@ const configurationSchema = { }, contracts: { type: 'object', - allRequired: true, + allRequired: false, additionalProperties: false, properties: { + outDir: { type: 'string' }, path: { type: 'string' }, + json: { type: 'boolean' }, + avm: { type: 'boolean' }, + debug: { type: 'boolean' }, + opcodes: { type: 'boolean' }, }, }, codegen: { @@ -154,6 +161,7 @@ const relativizePaths = (config: Configuration) => ({ }, contracts: { ...config.contracts, + outDir: nodePath.relative(process.cwd(), config.contracts.outDir), path: nodePath.relative(process.cwd(), config.contracts.path), }, codegen: { @@ -177,8 +185,18 @@ const createDefaultConfiguration = (configIn: Configuration, importDefaultNetwor ${exportConfig} { contracts: { + // The NEOβ€’ONE compile command will output the compile results in this directory. + outDir: '${config.contracts.outDir}', // NEOβ€’ONE will look for smart contracts in this directory. path: '${config.contracts.path}', + // Set this to true if you want the compile command to output JSON. + // json: ${true}, + // Set this to true if you want the compile command to output AVM. + // avm: ${false}, + // Set this to true if you want the compile command to output additional debug information. + // debug: ${false}, + // Set this to true if you want the compile command to output the AVM in a human-readable format for debugging (requires debug: true). + // opcodes: ${false}, }, artifacts: { // NEOβ€’ONE will store build and deployment artifacts that should be checked in to vcs in this directory. @@ -207,15 +225,15 @@ ${exportConfig} { port: ${config.network.port}, }, // NEOβ€’ONE will configure various parts of the CLI that require network accounts using the value provided here, for example, when deploying contracts. - // Refer to the documentation at https://neo-one.io/docs/configuration for more information. + // Refer to the documentation at https://neo-one.io/docs/config-options for more information. networks: defaultNetworks, neotracker: { - // NEOβ€’ONE will start an instance of NEO tracker using this path for local data. This directory should not be committed. + // NEOβ€’ONE will start an instance of NEO Tracker using this path for local data. This directory should not be committed. path: '${config.neotracker.path}', - // NEOβ€’ONE will start an instance of NEO tracker using this port. + // NEOβ€’ONE will start an instance of NEO Tracker using this port. port: 9041, - // Set to true if you'd like NEOβ€’ONE to skip starting a NEO tracker instance when running 'neo-one build'. - skip: false, + // Set to false if you'd like NEOβ€’ONE to start an instance of NEO Tracker when running 'neo-one build'. You will need @neotracker/core installed as a dependency for this to work. + skip: true, } }; `; @@ -270,7 +288,7 @@ const getProjectLanguage = async (rootDir: string): Promise => return exists ? 'typescript' : 'javascript'; }; -const validateConfig = async (rootDir: string, configIn: cosmiconfig.Config): Promise => { +const validateConfig = async (rootDir: string, configIn: any): Promise => { const config = applyDefaults(configIn); validate(configurationSchema, configIn, { name: 'NEOβ€’ONE' } as any); @@ -287,10 +305,16 @@ const validateConfig = async (rootDir: string, configIn: cosmiconfig.Config): Pr }, migration: { ...config.migration, - path: nodePath.resolve(rootDir, config.migration.path), + path: nodePath.resolve( + rootDir, + newLanguage === undefined || newLanguage === 'javascript' + ? config.migration.path + : config.migration.path.slice(0, -3).concat('.ts'), + ), }, contracts: { ...config.contracts, + outDir: nodePath.resolve(rootDir, config.contracts.outDir), path: nodePath.resolve(rootDir, config.contracts.path), }, codegen: { @@ -318,17 +342,15 @@ export const loadConfiguration = async (): Promise => { if (cachedConfig === undefined) { const explorer = cosmiconfig('neo-one', { loaders: { - '.ts': { - async: async (filePath: string): Promise => { - register({ - compilerOptions: { - module: 'commonjs', - }, - }); - const obj = await import(filePath); + '.ts': async (filePath: string): Promise => { + register({ + compilerOptions: { + module: 'commonjs', + }, + }); + const obj = await import(filePath); - return obj.default === undefined ? obj : obj.default; - }, + return obj.default === undefined ? obj : obj.default; }, }, searchPlaces: ['.neo-one.config.js', '.neo-one.config.ts'], diff --git a/packages/neo-one-cli-common-node/src/networks.ts b/packages/neo-one-cli-common-node/src/networks.ts index 6fcaeb9891..02f688b4a0 100644 --- a/packages/neo-one-cli-common-node/src/networks.ts +++ b/packages/neo-one-cli-common-node/src/networks.ts @@ -2,12 +2,12 @@ import { LocalKeyStore, LocalMemoryStore, NEOONEProvider } from '@neo-one/client import { LocalUserAccountProvider } from '@neo-one/client-full-core'; import prompts from 'prompts'; -const createUserAccountProviderFunc = (network: string, rpcURL: string) => async () => { +export const createUserAccountProviderFunc = (network: string, rpcURL: string) => async () => { const keystore = new LocalKeyStore(new LocalMemoryStore()); const { privateKeys } = await prompts({ type: 'list', name: 'privateKeys', - message: `Please enter one or more private keys separated by commas for use on the ${network} network.`, + message: `Please enter one or more private keys separated by commas for use on the "${network}" network.`, validate: (value) => (value.length > 0 ? true : 'Must enter at least one private key.'), }); await Promise.all(privateKeys.map((privateKey: string) => keystore.addUserAccount({ network, privateKey }))); @@ -21,12 +21,12 @@ const createUserAccountProviderFunc = (network: string, rpcURL: string) => async // tslint:disable-next-line export-name export const defaultNetworks = { main: { - userAccountProvider: createUserAccountProviderFunc('main', 'https://main.neo-one.io/rpc'), + userAccountProvider: createUserAccountProviderFunc('main', 'https://neotracker.io/rpc'), }, test: { - userAccountProvider: createUserAccountProviderFunc('test', 'https://test.neo-one.io/rpc'), + userAccountProvider: createUserAccountProviderFunc('test', 'https://testnet.neotracker.io/rpc'), }, - neoOne: { - userAccountProvider: createUserAccountProviderFunc('neo-one', 'https://neo-one.neo-one.io/rpc'), + local: { + userAccountProvider: createUserAccountProviderFunc('neo-one', 'localhost:9040'), }, }; diff --git a/packages/neo-one-cli-common-node/tsconfig.json b/packages/neo-one-cli-common-node/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-cli-common-node/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-cli-common/.npmignore b/packages/neo-one-cli-common/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-cli-common/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-cli-common/CHANGELOG.json b/packages/neo-one-cli-common/CHANGELOG.json new file mode 100644 index 0000000000..afc9e6edab --- /dev/null +++ b/packages/neo-one-cli-common/CHANGELOG.json @@ -0,0 +1,113 @@ +{ + "name": "@neo-one/cli-common", + "entries": [ + { + "version": "3.0.0", + "tag": "@neo-one/cli-common_v3.0.0", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "major": [ + { + "comment": "3.0.0preview3-alpha release bump" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full-core\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/cli-common_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "minor": [ + { + "comment": "Adds outDir to neo-one configuration." + } + ], + "patch": [ + { + "comment": "Update CLI compile options." + }, + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + } + ] + } + }, + { + "version": "2.6.0", + "tag": "@neo-one/cli-common_v2.6.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full-core\" from `^2.4.1` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/cli-common_v2.5.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full-core\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-cli-common/CHANGELOG.md b/packages/neo-one-cli-common/CHANGELOG.md index 8721ebce7e..fe75aec702 100644 --- a/packages/neo-one-cli-common/CHANGELOG.md +++ b/packages/neo-one-cli-common/CHANGELOG.md @@ -1,83 +1,41 @@ -# Change Log +# Change Log - @neo-one/cli-common -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.4.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli-common@2.3.0...@neo-one/cli-common@2.4.0) (2019-11-20) +## 3.0.0 +Tue, 08 Dec 2020 19:29:01 GMT +### Breaking changes -### Features +- 3.0.0preview3-alpha release bump -* **neotracker:** add neotracker command to neo-one build ([#1870](https://github.com/neo-one-suite/neo-one/issues/1870)) ([9a3e32a](https://github.com/neo-one-suite/neo-one/commit/9a3e32af4301bcc0fb37353661696c88a194d9be)) +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT +### Minor changes +- Adds outDir to neo-one configuration. +### Patches +- Update CLI compile options. +- Upgrade TypeScript from v3.8.3 to v3.9.5 -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli-common@1.1.13...@neo-one/cli-common@2.3.0) (2019-10-23) +### Updates -**Note:** Version bump only for package @neo-one/cli-common +- bump package version for future release clarity +## 2.6.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes +- update package release process to take better advantage of rush tooling +## 2.5.0 +Mon, 13 Apr 2020 23:20:32 GMT -## [1.1.13](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli-common@1.1.12...@neo-one/cli-common@1.1.13) (2019-10-23) +### Minor changes -**Note:** Version bump only for package @neo-one/cli-common +- Migrate to Rush - - - - -## [1.1.12](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli-common@1.1.11...@neo-one/cli-common@1.1.12) (2019-10-23) - -**Note:** Version bump only for package @neo-one/cli-common - - - - - -## [1.1.11](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli-common@1.1.10...@neo-one/cli-common@1.1.11) (2019-09-04) - -**Note:** Version bump only for package @neo-one/cli-common - - - - - -## [1.1.10](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli-common@1.1.9...@neo-one/cli-common@1.1.10) (2019-09-02) - -**Note:** Version bump only for package @neo-one/cli-common - - - - - -## [1.1.9](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli-common@1.1.8...@neo-one/cli-common@1.1.9) (2019-08-31) - -**Note:** Version bump only for package @neo-one/cli-common - - - - - -## [1.1.8](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli-common@1.1.7...@neo-one/cli-common@1.1.8) (2019-08-30) - -**Note:** Version bump only for package @neo-one/cli-common - - - - - -## [1.1.7](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli-common@1.1.6...@neo-one/cli-common@1.1.7) (2019-08-23) - -**Note:** Version bump only for package @neo-one/cli-common - - - - - -## 1.1.6 (2019-08-22) - -**Note:** Version bump only for package @neo-one/cli-common diff --git a/packages/neo-one-cli-common/gulpfile.js b/packages/neo-one-cli-common/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-cli-common/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-cli-common/package.json b/packages/neo-one-cli-common/package.json index 35b3b44a21..46da699832 100644 --- a/packages/neo-one-cli-common/package.json +++ b/packages/neo-one-cli-common/package.json @@ -1,15 +1,27 @@ { "name": "@neo-one/cli-common", - "version": "2.4.0", + "version": "3.0.0", "description": "NEOβ€’ONE code common to the cli and browser.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.3.0", - "@neo-one/client-core": "^2.3.0", - "@neo-one/client-full-core": "^2.3.0", - "@neo-one/utils": "^2.3.0", + "@neo-one/client-common": "^3.0.0", + "@neo-one/client-core": "^3.0.0", + "@neo-one/client-full-core": "^3.0.0", + "@neo-one/utils": "^3.0.0", "bignumber.js": "^9.0.0", "tslib": "^1.10.0" }, - "sideEffects": false + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-cli-common/src/configuration.ts b/packages/neo-one-cli-common/src/configuration.ts index 16a36f4746..30172c6c01 100644 --- a/packages/neo-one-cli-common/src/configuration.ts +++ b/packages/neo-one-cli-common/src/configuration.ts @@ -4,7 +4,12 @@ export type CodegenFramework = 'none' | 'react' | 'angular' | 'vue'; export type CodegenLanguage = 'typescript' | 'javascript'; export interface ContractsConfiguration { + readonly outDir: string; readonly path: string; + readonly json?: boolean; + readonly avm?: boolean; + readonly debug?: boolean; + readonly opcodes?: boolean; } export interface CodegenConfiguration { diff --git a/packages/neo-one-cli-common/src/deployContract.ts b/packages/neo-one-cli-common/src/deployContract.ts index c41e28fceb..a6eb8413a4 100644 --- a/packages/neo-one-cli-common/src/deployContract.ts +++ b/packages/neo-one-cli-common/src/deployContract.ts @@ -1,4 +1,4 @@ -import { ABI, AddressString, common, crypto, SourceMaps } from '@neo-one/client-common'; +import { AddressString, common, ContractManifestClient, crypto, SourceMaps } from '@neo-one/client-common'; import { NEOONEDataProvider } from '@neo-one/client-core'; import { ContractRegister } from '@neo-one/client-full-core'; import { constants } from '@neo-one/utils'; @@ -8,7 +8,7 @@ import { getClients } from './getClients'; export const deployContract = async ( provider: NEOONEDataProvider, contract: ContractRegister, - abi: ABI, + manifest: ContractManifestClient, sourceMaps: SourceMaps, masterPrivateKey: string = constants.PRIVATE_NET_PRIVATE_KEY, ): Promise => { @@ -18,17 +18,17 @@ export const deployContract = async ( try { const existing = await client.read(provider.network).getContract(common.uInt160ToString(hash)); - return existing.address; + return common.uInt160ToString(existing.manifest.hash); } catch { // do nothing } - const result = await client.publishAndDeploy(contract, abi, [], { systemFee: new BigNumber(-1) }, sourceMaps); + const result = await client.publishAndDeploy(contract, manifest, [], { systemFee: new BigNumber(-1) }, sourceMaps); const [receipt] = await Promise.all([result.confirmed(), developerClient.runConsensusNow()]); if (receipt.result.state === 'FAULT') { throw new Error(receipt.result.message); } - return receipt.result.value.address; + return common.uInt160ToString(receipt.result.value.manifest.hash); }; diff --git a/packages/neo-one-cli-common/src/setupWallets.ts b/packages/neo-one-cli-common/src/setupWallets.ts index 2686700d32..787817cfdb 100644 --- a/packages/neo-one-cli-common/src/setupWallets.ts +++ b/packages/neo-one-cli-common/src/setupWallets.ts @@ -6,7 +6,7 @@ import { Transfer, wifToPrivateKey, } from '@neo-one/client-common'; -import { Hash256, NEOONEDataProvider } from '@neo-one/client-core'; +import { Hash160, NEOONEDataProvider } from '@neo-one/client-core'; import { constants } from '@neo-one/utils'; import BigNumber from 'bignumber.js'; import { getClients } from './getClients'; @@ -84,12 +84,12 @@ export const WALLETS: readonly BootstrapWallet[] = [ const createWalletTransfers = (to: BootstrapWallet) => [ { to: privateKeyToAddress(wifToPrivateKey(to.wif)), - asset: Hash256.NEO, + asset: Hash160.NEO, amount: to.amount, }, { to: privateKeyToAddress(wifToPrivateKey(to.wif)), - asset: Hash256.GAS, + asset: Hash160.GAS, amount: to.amount, }, ]; @@ -123,8 +123,8 @@ export const setupWallets = async ( ]); if ( - (account.balances[Hash256.NEO] as BigNumber | undefined) === undefined || - account.balances[Hash256.NEO].isEqualTo(0) + (account.balances[Hash160.NEO] as BigNumber | undefined) === undefined || + account.balances[Hash160.NEO].isEqualTo(0) ) { const result = await client.transfer( WALLETS.reduce((acc, wallet) => acc.concat(createWalletTransfers(wallet)), []), diff --git a/packages/neo-one-cli-common/tsconfig.json b/packages/neo-one-cli-common/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-cli-common/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-cli/.npmignore b/packages/neo-one-cli/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-cli/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-cli/CHANGELOG.json b/packages/neo-one-cli/CHANGELOG.json new file mode 100644 index 0000000000..0e34535228 --- /dev/null +++ b/packages/neo-one-cli/CHANGELOG.json @@ -0,0 +1,307 @@ +{ + "name": "@neo-one/cli", + "entries": [ + { + "version": "3.0.0", + "tag": "@neo-one/cli_v3.0.0", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "major": [ + { + "comment": "3.0.0preview3-alpha release bump" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/cli-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/cli-common-node\" from `^2.7.0` to `^2.7.1`" + }, + { + "comment": "Updating dependency \"@neo-one/client\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full\" from `^2.7.0` to `^2.7.1`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full-core\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-neo-settings\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-codegen\" from `^2.7.0` to `^2.7.1`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-compiler\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-compiler-node\" from `^2.7.0` to `^2.7.1`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils-node\" from `^2.6.1` to `^2.6.2`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-test\" from `^2.7.0` to `^2.7.1`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/cli_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "minor": [ + { + "comment": "Adds outDir to neo-one config for output directory path of compile command. Adds E2E test for compile command." + }, + { + "comment": "add debug support" + }, + { + "comment": "Export createUserAccountProviderFunc." + }, + { + "comment": "Remove @neotracker/core as a @neo-one/cli dependency." + } + ], + "patch": [ + { + "comment": "Add appropriate @types dependencies." + }, + { + "comment": "patch migration.ts file transpiling" + }, + { + "comment": "Update NEO Tracker dependency." + }, + { + "comment": "Update CLI compile options." + }, + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "Add E2E test for neo-one init command." + }, + { + "comment": "bump package version for future release clarity" + } + ], + "dependency": [ + { + "comment": "Dependency @neo-one/node version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Dependency @neo-one/node-core version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Dependency @neo-one/node-neo-settings version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.6.0` to `^2.6.1`" + }, + { + "comment": "Updating dependency \"@neo-one/logger-config\" from `^2.6.0` to `^2.6.1`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + }, + { + "comment": "Updating dependency \"@neo-one/utils-node\" from `^2.6.0` to `^2.6.1`" + } + ] + } + }, + { + "version": "2.6.0", + "tag": "@neo-one/cli_v2.6.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/cli-common\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/cli-common-node\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full-core\" from `^2.4.1` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/logger-config\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-neo-settings\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-codegen\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-compiler\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-compiler-node\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils-node\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-test\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/cli_v2.5.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "add 'compile' command to cli" + }, + { + "comment": "Migrate to Rush" + }, + { + "comment": "Upgrade TS to v3.8.1-rc" + } + ], + "patch": [ + { + "comment": "Minor bug fix. `yarn neo-one build` would start a NEO Tracker instance, even if config specified to skip NEO Tracker." + }, + { + "comment": "update dependencies" + }, + { + "comment": "Add e2e exchange test based on switcheo" + }, + { + "comment": "update @types/react to 16.9.14" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/cli-common\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/cli-common-node\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full-core\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/logger-config\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node\" from `^2.3.1` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-neo-settings\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-codegen\" from `^2.3.1` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-compiler\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-compiler-node\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils-node\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-test\" from `^2.3.1` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-cli/CHANGELOG.md b/packages/neo-one-cli/CHANGELOG.md index c4629c58ba..f1e8c1855d 100644 --- a/packages/neo-one-cli/CHANGELOG.md +++ b/packages/neo-one-cli/CHANGELOG.md @@ -1,220 +1,57 @@ -# Change Log +# Change Log - @neo-one/cli -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.4.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli@2.3.0...@neo-one/cli@2.4.0) (2019-11-20) +## 3.0.0 +Tue, 08 Dec 2020 19:29:01 GMT +### Breaking changes -### Features +- 3.0.0preview3-alpha release bump -* **neotracker:** add neotracker command to neo-one build ([#1870](https://github.com/neo-one-suite/neo-one/issues/1870)) ([9a3e32a](https://github.com/neo-one-suite/neo-one/commit/9a3e32af4301bcc0fb37353661696c88a194d9be)) +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT +### Minor changes +- Adds outDir to neo-one config for output directory path of compile command. Adds E2E test for compile command. +- add debug support +- Export createUserAccountProviderFunc. +- Remove @neotracker/core as a @neo-one/cli dependency. +### Patches +- Add appropriate @types dependencies. +- patch migration.ts file transpiling +- Update NEO Tracker dependency. +- Update CLI compile options. +- Upgrade TypeScript from v3.8.3 to v3.9.5 -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli@1.4.1...@neo-one/cli@2.3.0) (2019-10-23) +### Updates -**Note:** Version bump only for package @neo-one/cli +- Add E2E test for neo-one init command. +- bump package version for future release clarity +## 2.6.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes +- update package release process to take better advantage of rush tooling +## 2.5.0 +Mon, 13 Apr 2020 23:20:32 GMT -## [1.4.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli@1.4.0...@neo-one/cli@1.4.1) (2019-10-23) +### Minor changes -**Note:** Version bump only for package @neo-one/cli +- add 'compile' command to cli +- Migrate to Rush +- Upgrade TS to v3.8.1-rc +### Patches +- Minor bug fix. `yarn neo-one build` would start a NEO Tracker instance, even if config specified to skip NEO Tracker. +- update dependencies +- Add e2e exchange test based on switcheo +- update @types/react to 16.9.14 - - -# [1.4.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli@1.3.6...@neo-one/cli@1.4.0) (2019-10-23) - - -### Bug Fixes - -* **ts:** revert back to TS v3.5.3 until v3.6.3 is released ([070d519](https://github.com/neo-one-suite/neo-one/commit/070d5190bdacbec433af37c69fef1cc7702b8bde)) - - -### Features - -* **dapi codegen:** setup DapiUserAccountProvider by default during codegen ([6b438db](https://github.com/neo-one-suite/neo-one/commit/6b438dba827b47272d5fc11f390f6912eb0303bc)) -* **ts:** upgrade to TS v3.6.3 ([82595a9](https://github.com/neo-one-suite/neo-one/commit/82595a91c063a4fa08ef06f631cd1dab4cb965f3)) - - - - - -## [1.3.6](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli@1.3.5...@neo-one/cli@1.3.6) (2019-09-04) - -**Note:** Version bump only for package @neo-one/cli - - - - - -## [1.3.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli@1.3.4...@neo-one/cli@1.3.5) (2019-09-03) - -**Note:** Version bump only for package @neo-one/cli - - - - - -## [1.3.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli@1.3.3...@neo-one/cli@1.3.4) (2019-09-02) - -**Note:** Version bump only for package @neo-one/cli - - - - - -## [1.3.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli@1.3.2...@neo-one/cli@1.3.3) (2019-08-31) - -**Note:** Version bump only for package @neo-one/cli - - - - - -## [1.3.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli@1.3.1...@neo-one/cli@1.3.2) (2019-08-31) - -**Note:** Version bump only for package @neo-one/cli - - - - - -## [1.3.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli@1.3.0...@neo-one/cli@1.3.1) (2019-08-30) - -**Note:** Version bump only for package @neo-one/cli - - - - - -# [1.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli@1.2.0...@neo-one/cli@1.3.0) (2019-08-23) - - -### Features - -* **build:** fix bin package.jsons ([#1704](https://github.com/neo-one-suite/neo-one/issues/1704)) ([e7f9b83](https://github.com/neo-one-suite/neo-one/commit/e7f9b83)) - - - - - -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli@1.1.5...@neo-one/cli@1.2.0) (2019-08-22) - - -### Features - -* **monitor:** remove @neo-one/monitor. replace with opencensus, pino, and debug ([#1597](https://github.com/neo-one-suite/neo-one/issues/1597)) ([4b1a28f](https://github.com/neo-one-suite/neo-one/commit/4b1a28f)) - - - - - -## [1.1.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli@1.1.4...@neo-one/cli@1.1.5) (2019-07-29) - -**Note:** Version bump only for package @neo-one/cli - - - - - -## [1.1.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli@1.1.3...@neo-one/cli@1.1.4) (2019-06-20) - - -### Bug Fixes - -* **cli:** fix cli-spinner title flashing ([8bd0c96](https://github.com/neo-one-suite/neo-one/commit/8bd0c96)) -* **deps:** update dependency typescript to v3.5.1 ([#1365](https://github.com/neo-one-suite/neo-one/issues/1365)) ([ec89546](https://github.com/neo-one-suite/neo-one/commit/ec89546)) - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli@1.1.2...@neo-one/cli@1.1.3) (2019-06-04) - - -### Bug Fixes - -* **@neo-one/types:** eliminate global types from @neo-one/types ([004330d](https://github.com/neo-one-suite/neo-one/commit/004330d)) -* **deps:** update definitelytyped ([a8aec42](https://github.com/neo-one-suite/neo-one/commit/a8aec42)) -* **deps:** update dependency fs-extra to v8 ([b11630d](https://github.com/neo-one-suite/neo-one/commit/b11630d)) -* **npm:** update deps to remove install warnings ([29c08e8](https://github.com/neo-one-suite/neo-one/commit/29c08e8)) - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli@1.1.1...@neo-one/cli@1.1.2) (2019-04-12) - -**Note:** Version bump only for package @neo-one/cli - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli@1.1.0...@neo-one/cli@1.1.1) (2019-03-27) - - -### Bug Fixes - -* **deps:** update dependency @types/inquirer to ^0.0.44 ([872f99b](https://github.com/neo-one-suite/neo-one/commit/872f99b)) -* **deps:** update dependency @types/inquirer to v6 ([bc4e905](https://github.com/neo-one-suite/neo-one/commit/bc4e905)) -* **deps:** update dependency log-update to v3 ([4fd5c9b](https://github.com/neo-one-suite/neo-one/commit/4fd5c9b)) - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli@1.0.3...@neo-one/cli@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/cli - - - - - -## [1.0.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli@1.0.3-alpha.0...@neo-one/cli@1.0.3) (2019-02-21) - -**Note:** Version bump only for package @neo-one/cli - - - - - -## [1.0.3-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli@1.0.2...@neo-one/cli@1.0.3-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **deps:** update dependency @types/ora to v3 ([4b9d583](https://github.com/neo-one-suite/neo-one/commit/4b9d583)) -* **deps:** update dependency inquirer to v6.2.2 ([74e7d32](https://github.com/neo-one-suite/neo-one/commit/74e7d32)) -* **deps:** update dependency rxjs to v6.4.0 ([e28af2a](https://github.com/neo-one-suite/neo-one/commit/e28af2a)) - - -### Features - -* **neo-one-cli:** print last N lines of server log when server fails to start ([ae35800](https://github.com/neo-one-suite/neo-one/commit/ae35800)) -* **toolchain:** NEO-ONE client/cli presents an error to the user when version conflict exists. ([182db32](https://github.com/neo-one-suite/neo-one/commit/182db32)), closes [#716](https://github.com/neo-one-suite/neo-one/issues/716) - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli@1.0.1...@neo-one/cli@1.0.2) (2018-11-13) - -**Note:** Version bump only for package @neo-one/cli - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/cli@1.0.0...@neo-one/cli@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/cli diff --git a/packages/neo-one-cli/bin/neo-one.js b/packages/neo-one-cli/bin/neo-one.js new file mode 100644 index 0000000000..efbbf54a8d --- /dev/null +++ b/packages/neo-one-cli/bin/neo-one.js @@ -0,0 +1,2 @@ +#!/usr/bin/env node +require('../dist/cjs/neo-one.js'); diff --git a/packages/neo-one-cli/gulpfile.js b/packages/neo-one-cli/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-cli/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-cli/package.json b/packages/neo-one-cli/package.json index 340040e0fb..b7ff994012 100644 --- a/packages/neo-one-cli/package.json +++ b/packages/neo-one-cli/package.json @@ -1,50 +1,75 @@ { "name": "@neo-one/cli", - "version": "2.4.0", + "version": "3.0.0", "description": "NEOβ€’ONE CLI for developing NEO dapps.", - "main": "./src/index", + "main": "./dist/cjs/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "bin": { + "neo-one": "bin/neo-one.js" + }, + "sideEffects": false, "dependencies": { - "@babel/core": "^7.5.5", + "@babel/core": "^7.6.2", "@babel/register": "^7.5.5", - "@neo-one/cli-common": "^2.4.0", - "@neo-one/cli-common-node": "^2.4.0", - "@neo-one/client-common": "^2.3.0", - "@neo-one/client-core": "^2.3.0", - "@neo-one/client-full-core": "^2.3.0", - "@neo-one/logger": "^2.3.0", - "@neo-one/logger-config": "^2.3.0", - "@neo-one/node": "^2.3.1", - "@neo-one/node-neo-settings": "^2.3.0", - "@neo-one/smart-contract-codegen": "^2.3.1", - "@neo-one/smart-contract-compiler": "^2.3.0", - "@neo-one/smart-contract-compiler-node": "^2.3.0", - "@neo-one/utils": "^2.3.0", - "@neo-one/utils-node": "^2.3.0", - "@neotracker/core": "^1.3.0", + "@neo-one/cli-common": "^3.0.0", + "@neo-one/cli-common-node": "^2.7.1", + "@neo-one/client": "^3.0.0", + "@neo-one/client-common": "^3.0.0", + "@neo-one/client-core": "^3.0.0", + "@neo-one/client-full": "^2.7.1", + "@neo-one/client-full-core": "^3.0.0", + "@neo-one/client-switch": "^3.0.0", + "@neo-one/logger": "^2.6.1", + "@neo-one/logger-config": "^2.6.1", + "@neo-one/node": "^3.0.0", + "@neo-one/node-core": "^3.0.0", + "@neo-one/node-neo-settings": "^3.0.0", + "@neo-one/smart-contract-codegen": "^2.7.1", + "@neo-one/smart-contract-compiler": "^3.0.0", + "@neo-one/smart-contract-compiler-node": "^2.7.1", + "@neo-one/utils": "^3.0.0", + "@neo-one/utils-node": "^2.6.2", + "@types/listr": "^0.14.2", + "@types/yargs": "^13.0.3", "bignumber.js": "^9.0.0", "bn.js": "^5.0.0", "cross-fetch": "^3.0.4", "execa": "^3.2.0", "fs-extra": "^8.1.0", "import-local": "^3.0.2", + "jszip": "^3.5.0", "listr": "^0.14.3", "lodash": "^4.17.15", + "nodemon": "^2.0.1", "prompts": "^2.2.1", "safe-stable-stringify": "^1.1.0", "source-map": "^0.7.3", - "ts-node": "^8.3.0", - "typescript": "^3.6.3", - "yargs": "^14.0.0" + "ts-node": "^8.4.1", + "tslib": "^1.10.0", + "typescript": "3.9.5", + "yargs": "^14.2.0" }, "devDependencies": { - "@angular/core": "^8.2.4", + "@angular/core": "^8.2.7", + "@neo-one/build-tools": "^1.0.0", + "@neo-one/smart-contract": "^2.7.0", + "@neo-one/smart-contract-test": "^2.7.1", + "@neotracker/core": "1.4.1", "@types/bn.js": "^4.11.5", "@types/fs-extra": "^8.0.0", - "@types/listr": "^0.14.2", + "@types/jest": "^24.0.18", "@types/lodash": "^4.14.138", "@types/prompts": "^2.0.1", - "@types/yargs": "^13.0.2", + "@types/react": "^16.9.15", + "gulp": "~4.0.2", + "react": "^16.12.0", + "rxjs": "^6.5.3", "zone.js": "^0.10.2" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-cli/src/__data__/buildTests.ts b/packages/neo-one-cli/src/__data__/buildTests.ts index 729be22c62..193ddade3d 100644 --- a/packages/neo-one-cli/src/__data__/buildTests.ts +++ b/packages/neo-one-cli/src/__data__/buildTests.ts @@ -1,3 +1,4 @@ +/// // tslint:disable no-any import { ABI, common, Contract, crypto, privateKeyToAddress, UserAccountID } from '@neo-one/client-common'; import { Client, DeveloperClient, Hash256 } from '@neo-one/client-core'; @@ -59,6 +60,39 @@ const verifyEscrowContract = (contract?: Contract): void => { expect(contract.dynamicInvoke).toBeTruthy(); }; +const mintTokens = async (ico: any, accountID: UserAccountID, developerClient?: DeveloperClient): Promise => { + const mintResult = await ico.mintTokens({ + sendTo: [ + { + amount: new BigNumber(10), + asset: Hash256.NEO, + }, + ], + }); + + const [mintReceipt] = await Promise.all([ + mintResult.confirmed(), + developerClient === undefined ? Promise.resolve() : developerClient.runConsensusNow(), + ]); + if (mintReceipt.result.state === 'FAULT') { + throw new Error(mintReceipt.result.message); + } + + expect(mintReceipt.result.state).toEqual('HALT'); + expect(mintReceipt.result.value).toBeUndefined(); + expect(mintReceipt.result.gasCost).toMatchSnapshot('mint cost'); + expect(mintReceipt.result.gasConsumed).toMatchSnapshot('mint consumed'); + expect(mintReceipt.events).toHaveLength(1); + const event = mintReceipt.events[0]; + expect(event.name).toEqual('transfer'); + if (event.name !== 'transfer') { + throw new Error('For TS'); + } + expect(event.parameters.from).toBeUndefined(); + expect(event.parameters.to).toEqual(accountID.address); + expect(event.parameters.amount.toString()).toEqual('100'); +}; + const verifySmartContracts = async ( ico: any, token: any, @@ -100,36 +134,7 @@ const verifySmartContracts = async ( expect(initialRemaining.toString()).toEqual(new BigNumber(10_000_000_000).toString()); expect(initialBalance.toString()).toEqual('0'); - const mintResult = await ico.mintTokens({ - sendTo: [ - { - amount: new BigNumber(10), - asset: Hash256.NEO, - }, - ], - }); - - const [mintReceipt] = await Promise.all([ - mintResult.confirmed(), - developerClient === undefined ? Promise.resolve() : developerClient.runConsensusNow(), - ]); - if (mintReceipt.result.state === 'FAULT') { - throw new Error(mintReceipt.result.message); - } - - expect(mintReceipt.result.state).toEqual('HALT'); - expect(mintReceipt.result.value).toBeUndefined(); - expect(mintReceipt.result.gasCost).toMatchSnapshot('mint cost'); - expect(mintReceipt.result.gasConsumed).toMatchSnapshot('mint consumed'); - expect(mintReceipt.events).toHaveLength(1); - const event = mintReceipt.events[0]; - expect(event.name).toEqual('transfer'); - if (event.name !== 'transfer') { - throw new Error('For TS'); - } - expect(event.parameters.from).toBeUndefined(); - expect(event.parameters.to).toEqual(accountID.address); - expect(event.parameters.amount.toString()).toEqual('100'); + await mintTokens(ico, accountID, developerClient); await verifySmartContractAfterMint(ico, token, escrow, accountID, toAccountID, developerClient); }; diff --git a/packages/neo-one-cli/src/__data__/projects/exchange/.neo-one.config.js b/packages/neo-one-cli/src/__data__/projects/exchange/.neo-one.config.js new file mode 100644 index 0000000000..1f0c8087a7 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/.neo-one.config.js @@ -0,0 +1,36 @@ +const nodePath = require('path'); + +const tmpDir = + process.env.NEO_ONE_TMP_DIR === undefined + ? process.cwd() + : process.env.NEO_ONE_TMP_DIR; +const nodePort = parseInt( + process.env.NEO_ONE_PORT_0 === undefined ? 10000 : process.env.NEO_ONE_PORT_0, + 10, +); +const neotrackerPort = parseInt( + process.env.NEO_ONE_PORT_1 === undefined ? 10001 : process.env.NEO_ONE_PORT_1, + 10, +); + +module.exports = { + contracts: { + outDir: nodePath.join(tmpDir, 'compiled'), + }, + migration: { + path: nodePath.join('neo-one', 'migration.ts'), + }, + codegen: { + path: 'codegen', + language: 'typescript', + framework: 'react', + }, + network: { + path: nodePath.join(tmpDir, 'node'), + port: nodePort, + }, + neotracker: { + path: nodePath.join(tmpDir, 'neotracker'), + port: neotrackerPort, + }, +}; diff --git a/babel.config.js b/packages/neo-one-cli/src/__data__/projects/exchange/babel.config.js similarity index 100% rename from babel.config.js rename to packages/neo-one-cli/src/__data__/projects/exchange/babel.config.js diff --git a/packages/neo-one-cli/src/__data__/projects/exchange/codegen/Coin/abi.ts b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/Coin/abi.ts new file mode 100644 index 0000000000..487ed6dcf6 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/Coin/abi.ts @@ -0,0 +1,386 @@ +/* @hash e73b67a2ace21376012481fbc20fa017 */ +// tslint:disable +/* eslint-disable */ +import { ABI } from '@neo-one/client'; + +export const coinABI: ABI = { + events: [ + { + name: 'transfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: true, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: true, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + }, + { + name: 'approveSendTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + }, + { + name: 'revokeSendTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + }, + ], + functions: [ + { + constant: true, + name: 'name', + parameters: [], + returnType: { + forwardedValue: false, + optional: false, + type: 'String', + }, + }, + { + constant: true, + name: 'symbol', + parameters: [], + returnType: { + forwardedValue: false, + optional: false, + type: 'String', + }, + }, + { + constant: true, + name: 'decimals', + parameters: [], + returnType: { + decimals: 0, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + }, + { + constant: true, + name: 'totalSupply', + parameters: [], + returnType: { + decimals: 8, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + }, + { + claim: false, + constant: true, + name: 'balanceOf', + parameters: [ + { + forwardedValue: false, + name: 'address', + optional: false, + type: 'Address', + }, + ], + receive: false, + returnType: { + decimals: 8, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: true, + name: 'approvedTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + ], + receive: false, + returnType: { + decimals: 8, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: false, + name: 'transfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + { + forwardedValue: false, + name: 'approveArgs', + optional: false, + rest: true, + type: 'ForwardValue', + }, + ], + receive: false, + returnType: { + forwardedValue: false, + optional: false, + type: 'Boolean', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: false, + name: 'approveSendTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + decimals: 0, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + receive: false, + returnType: { + forwardedValue: false, + optional: false, + type: 'Boolean', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: false, + name: 'approveReceiveTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + { + forwardedValue: false, + name: 'asset', + optional: false, + type: 'Address', + }, + ], + receive: false, + returnType: { + forwardedValue: false, + optional: false, + type: 'Boolean', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: false, + name: 'revokeSendTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + receive: false, + returnType: { + forwardedValue: false, + optional: false, + type: 'Boolean', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: false, + name: 'onRevokeSendTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + { + forwardedValue: false, + name: 'asset', + optional: false, + type: 'Address', + }, + ], + receive: false, + returnType: { + optional: false, + type: 'Void', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: false, + name: 'issue', + parameters: [ + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + receive: false, + returnType: { + forwardedValue: false, + optional: false, + type: 'Boolean', + }, + send: false, + sendUnsafe: false, + }, + { + name: 'deploy', + parameters: [], + returnType: { + type: 'Boolean', + }, + }, + ], +}; diff --git a/packages/neo-one-cli/src/__data__/projects/exchange/codegen/Coin/contract.ts b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/Coin/contract.ts new file mode 100644 index 0000000000..a911df0706 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/Coin/contract.ts @@ -0,0 +1,20 @@ +/* @hash b723bd931fe73ca53b24336890a29891 */ +// tslint:disable +/* eslint-disable */ +import { Client } from '@neo-one/client'; +import { CoinSmartContract } from './types'; +import { coinABI } from './abi'; +import { sourceMaps } from '../sourceMaps'; + +const definition = { + networks: { + local: { + address: 'AJJrj2p9Cj4xNtFH6Pv3JNmyVEAbm8YHPH', + }, + }, + abi: coinABI, + sourceMaps, +}; + +export const createCoinSmartContract = (client: TClient): CoinSmartContract => + client.smartContract(definition); diff --git a/packages/neo-one-cli/src/__data__/projects/exchange/codegen/Coin/types.ts b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/Coin/types.ts new file mode 100644 index 0000000000..35bb813a6c --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/Coin/types.ts @@ -0,0 +1,231 @@ +/* @hash 2e74dd7bd230bb0fa2257db29d05b500 */ +// tslint:disable +/* eslint-disable */ +import { + AddressString, + Client, + Event, + ForwardOptions, + ForwardValue, + GetOptions, + InvocationTransaction, + InvokeReceipt, + SmartContract, + TransactionOptions, + TransactionResult, +} from '@neo-one/client'; +import BigNumber from 'bignumber.js'; + +export interface CoinTransferEventParameters { + readonly from: AddressString | undefined; + readonly to: AddressString | undefined; + readonly amount: BigNumber; +} +export interface CoinTransferEvent extends Event<'transfer', CoinTransferEventParameters> {} +export interface CoinApproveSendTransferEventParameters { + readonly from: AddressString; + readonly to: AddressString; + readonly amount: BigNumber; +} +export interface CoinApproveSendTransferEvent + extends Event<'approveSendTransfer', CoinApproveSendTransferEventParameters> {} +export interface CoinRevokeSendTransferEventParameters { + readonly from: AddressString; + readonly to: AddressString; + readonly amount: BigNumber; +} +export interface CoinRevokeSendTransferEvent + extends Event<'revokeSendTransfer', CoinRevokeSendTransferEventParameters> {} +export type CoinEvent = CoinTransferEvent | CoinApproveSendTransferEvent | CoinRevokeSendTransferEvent; + +export interface CoinSmartContract extends SmartContract { + readonly approveReceiveTransfer: { + (from: AddressString, amount: BigNumber, asset: AddressString, options?: TransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + from: AddressString, + amount: BigNumber, + asset: AddressString, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly approveSendTransfer: { + (from: AddressString, to: AddressString, amount: BigNumber, options?: TransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + from: AddressString, + to: AddressString, + amount: BigNumber, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly approvedTransfer: (from: AddressString, to: AddressString) => Promise; + readonly balanceOf: (address: AddressString) => Promise; + readonly decimals: () => Promise; + readonly deploy: { + (options?: TransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly issue: { + (to: AddressString, amount: BigNumber, options?: TransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + to: AddressString, + amount: BigNumber, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly name: () => Promise; + readonly onRevokeSendTransfer: { + (from: AddressString, amount: BigNumber, asset: AddressString, options?: TransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + from: AddressString, + amount: BigNumber, + asset: AddressString, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly revokeSendTransfer: { + (from: AddressString, to: AddressString, amount: BigNumber, options?: TransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + from: AddressString, + to: AddressString, + amount: BigNumber, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly symbol: () => Promise; + readonly totalSupply: () => Promise; + readonly transfer: { + >( + from: AddressString, + to: AddressString, + amount: BigNumber, + forwardOptions?: TForwardOptions, + ...approveArgs: ForwardValue[] + ): Promise< + TransactionResult< + InvokeReceipt ? CoinEvent | T : CoinEvent>, + InvocationTransaction + > + >; + >( + from: AddressString, + to: AddressString, + amount: BigNumber, + options?: TransactionOptions, + forwardOptions?: TForwardOptions, + ...approveArgs: ForwardValue[] + ): Promise< + TransactionResult< + InvokeReceipt ? CoinEvent | T : CoinEvent>, + InvocationTransaction + > + >; + readonly confirmed: { + >( + from: AddressString, + to: AddressString, + amount: BigNumber, + forwardOptions?: TForwardOptions, + ...approveArgs: ForwardValue[] + ): Promise< + InvokeReceipt ? CoinEvent | T : CoinEvent> & { + readonly transaction: InvocationTransaction; + } + >; + >( + from: AddressString, + to: AddressString, + amount: BigNumber, + options?: TransactionOptions & GetOptions, + forwardOptions?: TForwardOptions, + ...approveArgs: ForwardValue[] + ): Promise< + InvokeReceipt ? CoinEvent | T : CoinEvent> & { + readonly transaction: InvocationTransaction; + } + >; + }; + }; +} + +export interface CoinMigrationSmartContract { + readonly approveReceiveTransfer: ( + from: AddressString | Promise, + amount: BigNumber | Promise, + asset: AddressString | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly approveSendTransfer: ( + from: AddressString | Promise, + to: AddressString | Promise, + amount: BigNumber | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly approvedTransfer: ( + from: AddressString | Promise, + to: AddressString | Promise, + ) => Promise; + readonly balanceOf: (address: AddressString | Promise) => Promise; + readonly decimals: () => Promise; + readonly deploy: ( + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly issue: ( + to: AddressString | Promise, + amount: BigNumber | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly name: () => Promise; + readonly onRevokeSendTransfer: ( + from: AddressString | Promise, + amount: BigNumber | Promise, + asset: AddressString | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly revokeSendTransfer: ( + from: AddressString | Promise, + to: AddressString | Promise, + amount: BigNumber | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly symbol: () => Promise; + readonly totalSupply: () => Promise; + readonly transfer: { + >( + from: AddressString | Promise, + to: AddressString | Promise, + amount: BigNumber | Promise, + forwardOptions?: TForwardOptions, + ...approveArgs: (ForwardValue | Promise)[] + ): Promise< + InvokeReceipt ? CoinEvent | T : CoinEvent> & { + readonly transaction: InvocationTransaction; + } + >; + >( + from: AddressString | Promise, + to: AddressString | Promise, + amount: BigNumber | Promise, + options?: TransactionOptions & GetOptions, + forwardOptions?: TForwardOptions, + ...approveArgs: (ForwardValue | Promise)[] + ): Promise< + InvokeReceipt ? CoinEvent | T : CoinEvent> & { + readonly transaction: InvocationTransaction; + } + >; + }; +} diff --git a/packages/neo-one-cli/src/__data__/projects/exchange/codegen/CoinICO/abi.ts b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/CoinICO/abi.ts new file mode 100644 index 0000000000..11be6b9648 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/CoinICO/abi.ts @@ -0,0 +1,189 @@ +/* @hash e43306678803b29fe220755a9983ac86 */ +// tslint:disable +/* eslint-disable */ +import { ABI } from '@neo-one/client'; + +export const coinIcoABI: ABI = { + events: [ + { + name: 'transfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: true, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: true, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + }, + { + name: 'approveSendTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + }, + { + name: 'revokeSendTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + }, + ], + functions: [ + { + constant: true, + name: 'amountPerNEO', + parameters: [], + returnType: { + decimals: 0, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + }, + { + constant: true, + name: 'owner', + parameters: [], + returnType: { + forwardedValue: false, + optional: false, + type: 'Address', + }, + }, + { + constant: true, + name: 'startTimeSeconds', + parameters: [], + returnType: { + decimals: 0, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + }, + { + constant: true, + name: 'icoDurationSeconds', + parameters: [], + returnType: { + decimals: 0, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + }, + { + constant: true, + name: 'remaining', + parameters: [], + returnType: { + decimals: 8, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + }, + { + claim: false, + constant: false, + name: 'mintTokens', + parameters: [], + receive: true, + returnType: { + optional: false, + type: 'Void', + }, + send: false, + sendUnsafe: false, + }, + { + name: 'refundAssets', + parameters: [], + returnType: { + type: 'Void', + }, + sendUnsafe: true, + }, + { + name: 'deploy', + parameters: [ + { + default: { + type: 'sender', + }, + forwardedValue: false, + name: 'owner', + optional: true, + type: 'Address', + }, + { + decimals: 0, + forwardedValue: false, + name: 'startTimeSeconds', + optional: true, + type: 'Integer', + }, + { + decimals: 0, + forwardedValue: false, + name: 'icoDurationSeconds', + optional: true, + type: 'Integer', + }, + ], + returnType: { + type: 'Boolean', + }, + }, + ], +}; diff --git a/packages/neo-one-cli/src/__data__/projects/exchange/codegen/CoinICO/contract.ts b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/CoinICO/contract.ts new file mode 100644 index 0000000000..95d36f1333 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/CoinICO/contract.ts @@ -0,0 +1,20 @@ +/* @hash ae43031c4e6001d8705f07eea63c04b7 */ +// tslint:disable +/* eslint-disable */ +import { Client } from '@neo-one/client'; +import { CoinICOSmartContract } from './types'; +import { coinIcoABI } from './abi'; +import { sourceMaps } from '../sourceMaps'; + +const definition = { + networks: { + local: { + address: 'AUuCyg68Gvh3sY3ysPvsxWUHQ3oY7eeKSB', + }, + }, + abi: coinIcoABI, + sourceMaps, +}; + +export const createCoinICOSmartContract = (client: TClient): CoinICOSmartContract => + client.smartContract(definition); diff --git a/packages/neo-one-cli/src/__data__/projects/exchange/codegen/CoinICO/types.ts b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/CoinICO/types.ts new file mode 100644 index 0000000000..b51f44a396 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/CoinICO/types.ts @@ -0,0 +1,97 @@ +/* @hash 54c80006770301fdd48e7cfa29de9dbd */ +// tslint:disable +/* eslint-disable */ +import { + AddressString, + Client, + Event, + GetOptions, + InvocationTransaction, + InvokeReceipt, + InvokeReceiveTransactionOptions, + InvokeSendUnsafeTransactionOptions, + SmartContract, + TransactionOptions, + TransactionResult, +} from '@neo-one/client'; +import BigNumber from 'bignumber.js'; + +export interface CoinICOTransferEventParameters { + readonly from: AddressString | undefined; + readonly to: AddressString | undefined; + readonly amount: BigNumber; +} +export interface CoinICOTransferEvent extends Event<'transfer', CoinICOTransferEventParameters> {} +export interface CoinICOApproveSendTransferEventParameters { + readonly from: AddressString; + readonly to: AddressString; + readonly amount: BigNumber; +} +export interface CoinICOApproveSendTransferEvent + extends Event<'approveSendTransfer', CoinICOApproveSendTransferEventParameters> {} +export interface CoinICORevokeSendTransferEventParameters { + readonly from: AddressString; + readonly to: AddressString; + readonly amount: BigNumber; +} +export interface CoinICORevokeSendTransferEvent + extends Event<'revokeSendTransfer', CoinICORevokeSendTransferEventParameters> {} +export type CoinICOEvent = CoinICOTransferEvent | CoinICOApproveSendTransferEvent | CoinICORevokeSendTransferEvent; + +export interface CoinICOSmartContract extends SmartContract { + readonly amountPerNEO: () => Promise; + readonly deploy: { + ( + owner?: AddressString, + startTimeSeconds?: BigNumber, + icoDurationSeconds?: BigNumber, + options?: TransactionOptions, + ): Promise, InvocationTransaction>>; + readonly confirmed: ( + owner?: AddressString, + startTimeSeconds?: BigNumber, + icoDurationSeconds?: BigNumber, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly icoDurationSeconds: () => Promise; + readonly mintTokens: { + (options?: InvokeReceiveTransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + options?: InvokeReceiveTransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly owner: () => Promise; + readonly refundAssets: { + (options?: InvokeSendUnsafeTransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + options?: InvokeSendUnsafeTransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly remaining: () => Promise; + readonly startTimeSeconds: () => Promise; +} + +export interface CoinICOMigrationSmartContract { + readonly amountPerNEO: () => Promise; + readonly deploy: ( + owner?: AddressString | Promise, + startTimeSeconds?: BigNumber | Promise, + icoDurationSeconds?: BigNumber | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly icoDurationSeconds: () => Promise; + readonly mintTokens: ( + options?: InvokeReceiveTransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly owner: () => Promise; + readonly refundAssets: ( + options?: InvokeSendUnsafeTransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly remaining: () => Promise; + readonly startTimeSeconds: () => Promise; +} diff --git a/packages/neo-one-cli/src/__data__/projects/exchange/codegen/Exchange/abi.ts b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/Exchange/abi.ts new file mode 100644 index 0000000000..03a0e1bd4a --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/Exchange/abi.ts @@ -0,0 +1,561 @@ +/* @hash 587b6e8299d7ecce1d9df13cd272ced5 */ +// tslint:disable +/* eslint-disable */ +import { ABI } from '@neo-one/client'; + +export const exchangeABI: ABI = { + events: [ + { + name: 'deposited', + parameters: [ + { + forwardedValue: false, + name: 'address', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'assetID', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + }, + { + name: 'withdrawn', + parameters: [ + { + forwardedValue: false, + name: 'address', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'assetID', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + }, + { + name: 'offerCreated', + parameters: [ + { + forwardedValue: false, + name: 'makerAddress', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'offerAssetID', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'offerAmount', + optional: false, + type: 'Integer', + }, + { + forwardedValue: false, + name: 'wantAssetID', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'wantAmount', + optional: false, + type: 'Integer', + }, + { + forwardedValue: false, + name: 'offerHash', + optional: false, + type: 'Hash256', + }, + ], + }, + { + name: 'offerCancelled', + parameters: [ + { + forwardedValue: false, + name: 'offerHash', + optional: false, + type: 'Hash256', + }, + ], + }, + { + name: 'burnt', + parameters: [ + { + forwardedValue: false, + name: 'filler', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'takerFeeAssetID', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'takerFeeAmount', + optional: false, + type: 'Integer', + }, + ], + }, + { + name: 'offerFilled', + parameters: [ + { + forwardedValue: false, + name: 'filler', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'offerHash', + optional: false, + type: 'Hash256', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amountToFill', + optional: false, + type: 'Integer', + }, + { + forwardedValue: false, + name: 'offerAssetID', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'offerAmount', + optional: false, + type: 'Integer', + }, + { + forwardedValue: false, + name: 'wantAssetID', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'wantAmount', + optional: false, + type: 'Integer', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amountToTake', + optional: false, + type: 'Integer', + }, + ], + }, + ], + functions: [ + { + constant: true, + name: 'owner', + parameters: [], + returnType: { + forwardedValue: false, + optional: false, + type: 'Address', + }, + }, + { + claim: false, + constant: true, + name: 'balanceOf', + parameters: [ + { + forwardedValue: false, + name: 'address', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'assetID', + optional: false, + type: 'Address', + }, + ], + receive: false, + returnType: { + decimals: 8, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: true, + name: 'getOffer', + parameters: [ + { + forwardedValue: false, + name: 'offerHash', + optional: false, + type: 'Hash256', + }, + ], + receive: false, + returnType: { + forwardedValue: false, + optional: true, + properties: { + maker: { + forwardedValue: false, + optional: false, + type: 'Address', + }, + makerFeeAssetID: { + forwardedValue: false, + optional: false, + type: 'Address', + }, + makerFeeAvailableAmount: { + decimals: 8, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + nonce: { + forwardedValue: false, + optional: false, + type: 'String', + }, + offerAmount: { + decimals: 8, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + offerAssetID: { + forwardedValue: false, + optional: false, + type: 'Address', + }, + wantAmount: { + decimals: 8, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + wantAssetID: { + forwardedValue: false, + optional: false, + type: 'Address', + }, + }, + type: 'Object', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: false, + name: 'depositNEP5', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'assetID', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + receive: false, + returnType: { + optional: false, + type: 'Void', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: false, + name: 'withdrawNEP5', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'assetID', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + receive: false, + returnType: { + optional: false, + type: 'Void', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: false, + name: 'makeOffer', + parameters: [ + { + forwardedValue: false, + name: 'maker', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'offerAssetID', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'offerAmount', + optional: false, + type: 'Integer', + }, + { + forwardedValue: false, + name: 'wantAssetID', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'wantAmount', + optional: false, + type: 'Integer', + }, + { + forwardedValue: false, + name: 'makerFeeAssetID', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'makerFeeAvailableAmount', + optional: false, + type: 'Integer', + }, + { + forwardedValue: false, + name: 'nonce', + optional: false, + type: 'String', + }, + ], + receive: false, + returnType: { + optional: false, + type: 'Void', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: false, + name: 'fillOffer', + parameters: [ + { + forwardedValue: false, + name: 'filler', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'offerHash', + optional: false, + type: 'Hash256', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amountToTake', + optional: false, + type: 'Integer', + }, + { + forwardedValue: false, + name: 'takerFeeAssetID', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'takerFeeAmount', + optional: false, + type: 'Integer', + }, + { + forwardedValue: false, + name: 'burnTakerFee', + optional: false, + type: 'Boolean', + }, + { + decimals: 8, + forwardedValue: false, + name: 'makerFeeAmount', + optional: false, + type: 'Integer', + }, + { + forwardedValue: false, + name: 'burnMakerFee', + optional: false, + type: 'Boolean', + }, + ], + receive: false, + returnType: { + optional: false, + type: 'Void', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: false, + name: 'cancelOffer', + parameters: [ + { + forwardedValue: false, + name: 'maker', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'offerHash', + optional: false, + type: 'Hash256', + }, + ], + receive: false, + returnType: { + optional: false, + type: 'Void', + }, + send: false, + sendUnsafe: false, + }, + { + constant: true, + name: 'feeAddress', + parameters: [], + returnType: { + forwardedValue: false, + optional: false, + type: 'Address', + }, + }, + { + name: 'setFeeAddress', + parameters: [ + { + forwardedValue: false, + name: 'feeAddress', + optional: false, + type: 'Address', + }, + ], + returnType: { + type: 'Void', + }, + }, + { + name: 'deploy', + parameters: [ + { + default: { + type: 'sender', + }, + forwardedValue: false, + name: 'owner', + optional: true, + type: 'Address', + }, + ], + returnType: { + type: 'Boolean', + }, + }, + ], +}; diff --git a/packages/neo-one-cli/src/__data__/projects/exchange/codegen/Exchange/contract.ts b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/Exchange/contract.ts new file mode 100644 index 0000000000..67e273b182 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/Exchange/contract.ts @@ -0,0 +1,20 @@ +/* @hash 5b872188871a9c4e807737501775f4f4 */ +// tslint:disable +/* eslint-disable */ +import { Client } from '@neo-one/client'; +import { ExchangeSmartContract } from './types'; +import { exchangeABI } from './abi'; +import { sourceMaps } from '../sourceMaps'; + +const definition = { + networks: { + local: { + address: 'AUbnSw4LtdnNg5HyobXKvrz8nwSPDnzp5n', + }, + }, + abi: exchangeABI, + sourceMaps, +}; + +export const createExchangeSmartContract = (client: TClient): ExchangeSmartContract => + client.smartContract(definition); diff --git a/packages/neo-one-cli/src/__data__/projects/exchange/codegen/Exchange/types.ts b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/Exchange/types.ts new file mode 100644 index 0000000000..3739e8ced7 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/Exchange/types.ts @@ -0,0 +1,256 @@ +/* @hash 3555ebc02381102d8fba532cc5e0ab40 */ +// tslint:disable +/* eslint-disable */ +import { + AddressString, + Client, + Event, + GetOptions, + Hash256String, + InvocationTransaction, + InvokeReceipt, + SmartContract, + TransactionOptions, + TransactionResult, +} from '@neo-one/client'; +import BigNumber from 'bignumber.js'; + +export interface ExchangeDepositedEventParameters { + readonly address: AddressString; + readonly assetID: AddressString; + readonly amount: BigNumber; +} +export interface ExchangeDepositedEvent extends Event<'deposited', ExchangeDepositedEventParameters> {} +export interface ExchangeWithdrawnEventParameters { + readonly address: AddressString; + readonly assetID: AddressString; + readonly amount: BigNumber; +} +export interface ExchangeWithdrawnEvent extends Event<'withdrawn', ExchangeWithdrawnEventParameters> {} +export interface ExchangeOfferCreatedEventParameters { + readonly makerAddress: AddressString; + readonly offerAssetID: AddressString; + readonly offerAmount: BigNumber; + readonly wantAssetID: AddressString; + readonly wantAmount: BigNumber; + readonly offerHash: Hash256String; +} +export interface ExchangeOfferCreatedEvent extends Event<'offerCreated', ExchangeOfferCreatedEventParameters> {} +export interface ExchangeOfferCancelledEventParameters { + readonly offerHash: Hash256String; +} +export interface ExchangeOfferCancelledEvent extends Event<'offerCancelled', ExchangeOfferCancelledEventParameters> {} +export interface ExchangeBurntEventParameters { + readonly filler: AddressString; + readonly takerFeeAssetID: AddressString; + readonly takerFeeAmount: BigNumber; +} +export interface ExchangeBurntEvent extends Event<'burnt', ExchangeBurntEventParameters> {} +export interface ExchangeOfferFilledEventParameters { + readonly filler: AddressString; + readonly offerHash: Hash256String; + readonly amountToFill: BigNumber; + readonly offerAssetID: AddressString; + readonly offerAmount: BigNumber; + readonly wantAssetID: AddressString; + readonly wantAmount: BigNumber; + readonly amountToTake: BigNumber; +} +export interface ExchangeOfferFilledEvent extends Event<'offerFilled', ExchangeOfferFilledEventParameters> {} +export type ExchangeEvent = + | ExchangeDepositedEvent + | ExchangeWithdrawnEvent + | ExchangeOfferCreatedEvent + | ExchangeOfferCancelledEvent + | ExchangeBurntEvent + | ExchangeOfferFilledEvent; + +export interface ExchangeSmartContract extends SmartContract { + readonly balanceOf: (address: AddressString, assetID: AddressString) => Promise; + readonly cancelOffer: { + (maker: AddressString, offerHash: Hash256String, options?: TransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + maker: AddressString, + offerHash: Hash256String, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly deploy: { + (owner?: AddressString, options?: TransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + owner?: AddressString, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly depositNEP5: { + (from: AddressString, assetID: AddressString, amount: BigNumber, options?: TransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + from: AddressString, + assetID: AddressString, + amount: BigNumber, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly feeAddress: () => Promise; + readonly fillOffer: { + ( + filler: AddressString, + offerHash: Hash256String, + amountToTake: BigNumber, + takerFeeAssetID: AddressString, + takerFeeAmount: BigNumber, + burnTakerFee: boolean, + makerFeeAmount: BigNumber, + burnMakerFee: boolean, + options?: TransactionOptions, + ): Promise, InvocationTransaction>>; + readonly confirmed: ( + filler: AddressString, + offerHash: Hash256String, + amountToTake: BigNumber, + takerFeeAssetID: AddressString, + takerFeeAmount: BigNumber, + burnTakerFee: boolean, + makerFeeAmount: BigNumber, + burnMakerFee: boolean, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly getOffer: ( + offerHash: Hash256String, + ) => Promise< + | { + readonly maker: AddressString; + readonly offerAssetID: AddressString; + readonly offerAmount: BigNumber; + readonly wantAssetID: AddressString; + readonly wantAmount: BigNumber; + readonly makerFeeAssetID: AddressString; + readonly makerFeeAvailableAmount: BigNumber; + readonly nonce: string; + } + | undefined + >; + readonly makeOffer: { + ( + maker: AddressString, + offerAssetID: AddressString, + offerAmount: BigNumber, + wantAssetID: AddressString, + wantAmount: BigNumber, + makerFeeAssetID: AddressString, + makerFeeAvailableAmount: BigNumber, + nonce: string, + options?: TransactionOptions, + ): Promise, InvocationTransaction>>; + readonly confirmed: ( + maker: AddressString, + offerAssetID: AddressString, + offerAmount: BigNumber, + wantAssetID: AddressString, + wantAmount: BigNumber, + makerFeeAssetID: AddressString, + makerFeeAvailableAmount: BigNumber, + nonce: string, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly owner: () => Promise; + readonly setFeeAddress: { + (feeAddress: AddressString, options?: TransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + feeAddress: AddressString, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly withdrawNEP5: { + (from: AddressString, assetID: AddressString, amount: BigNumber, options?: TransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + from: AddressString, + assetID: AddressString, + amount: BigNumber, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; +} + +export interface ExchangeMigrationSmartContract { + readonly balanceOf: ( + address: AddressString | Promise, + assetID: AddressString | Promise, + ) => Promise; + readonly cancelOffer: ( + maker: AddressString | Promise, + offerHash: Hash256String | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly deploy: ( + owner?: AddressString | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly depositNEP5: ( + from: AddressString | Promise, + assetID: AddressString | Promise, + amount: BigNumber | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly feeAddress: () => Promise; + readonly fillOffer: ( + filler: AddressString | Promise, + offerHash: Hash256String | Promise, + amountToTake: BigNumber | Promise, + takerFeeAssetID: AddressString | Promise, + takerFeeAmount: BigNumber | Promise, + burnTakerFee: boolean | Promise, + makerFeeAmount: BigNumber | Promise, + burnMakerFee: boolean | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly getOffer: ( + offerHash: Hash256String | Promise, + ) => Promise< + | { + readonly maker: AddressString; + readonly offerAssetID: AddressString; + readonly offerAmount: BigNumber; + readonly wantAssetID: AddressString; + readonly wantAmount: BigNumber; + readonly makerFeeAssetID: AddressString; + readonly makerFeeAvailableAmount: BigNumber; + readonly nonce: string; + } + | undefined + >; + readonly makeOffer: ( + maker: AddressString | Promise, + offerAssetID: AddressString | Promise, + offerAmount: BigNumber | Promise, + wantAssetID: AddressString | Promise, + wantAmount: BigNumber | Promise, + makerFeeAssetID: AddressString | Promise, + makerFeeAvailableAmount: BigNumber | Promise, + nonce: string | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly owner: () => Promise; + readonly setFeeAddress: ( + feeAddress: AddressString | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly withdrawNEP5: ( + from: AddressString | Promise, + assetID: AddressString | Promise, + amount: BigNumber | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; +} diff --git a/packages/neo-one-cli/src/__data__/projects/exchange/codegen/ICO/abi.ts b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/ICO/abi.ts new file mode 100644 index 0000000000..7504dd5581 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/ICO/abi.ts @@ -0,0 +1,189 @@ +/* @hash 92bf39e9a0b258178c4a0615b94794a8 */ +// tslint:disable +/* eslint-disable */ +import { ABI } from '@neo-one/client'; + +export const icoABI: ABI = { + events: [ + { + name: 'transfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: true, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: true, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + }, + { + name: 'approveSendTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + }, + { + name: 'revokeSendTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + }, + ], + functions: [ + { + constant: true, + name: 'amountPerNEO', + parameters: [], + returnType: { + decimals: 0, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + }, + { + constant: true, + name: 'owner', + parameters: [], + returnType: { + forwardedValue: false, + optional: false, + type: 'Address', + }, + }, + { + constant: true, + name: 'startTimeSeconds', + parameters: [], + returnType: { + decimals: 0, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + }, + { + constant: true, + name: 'icoDurationSeconds', + parameters: [], + returnType: { + decimals: 0, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + }, + { + constant: true, + name: 'remaining', + parameters: [], + returnType: { + decimals: 8, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + }, + { + claim: false, + constant: false, + name: 'mintTokens', + parameters: [], + receive: true, + returnType: { + optional: false, + type: 'Void', + }, + send: false, + sendUnsafe: false, + }, + { + name: 'refundAssets', + parameters: [], + returnType: { + type: 'Void', + }, + sendUnsafe: true, + }, + { + name: 'deploy', + parameters: [ + { + default: { + type: 'sender', + }, + forwardedValue: false, + name: 'owner', + optional: true, + type: 'Address', + }, + { + decimals: 0, + forwardedValue: false, + name: 'startTimeSeconds', + optional: true, + type: 'Integer', + }, + { + decimals: 0, + forwardedValue: false, + name: 'icoDurationSeconds', + optional: true, + type: 'Integer', + }, + ], + returnType: { + type: 'Boolean', + }, + }, + ], +}; diff --git a/packages/neo-one-cli/src/__data__/projects/exchange/codegen/ICO/contract.ts b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/ICO/contract.ts new file mode 100644 index 0000000000..a4f0b5157a --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/ICO/contract.ts @@ -0,0 +1,20 @@ +/* @hash 8b54820e64a7ce70e65a1a385c996efd */ +// tslint:disable +/* eslint-disable */ +import { Client } from '@neo-one/client'; +import { ICOSmartContract } from './types'; +import { icoABI } from './abi'; +import { sourceMaps } from '../sourceMaps'; + +const definition = { + networks: { + local: { + address: 'ARW79N7gAWHytcWSkkXvwrJiR4FTyvf2f8', + }, + }, + abi: icoABI, + sourceMaps, +}; + +export const createICOSmartContract = (client: TClient): ICOSmartContract => + client.smartContract(definition); diff --git a/packages/neo-one-cli/src/__data__/projects/exchange/codegen/ICO/types.ts b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/ICO/types.ts new file mode 100644 index 0000000000..b3b68dcaee --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/ICO/types.ts @@ -0,0 +1,96 @@ +/* @hash 8b95758943c21aea9e5a6b028f96b9c0 */ +// tslint:disable +/* eslint-disable */ +import { + AddressString, + Client, + Event, + GetOptions, + InvocationTransaction, + InvokeReceipt, + InvokeReceiveTransactionOptions, + InvokeSendUnsafeTransactionOptions, + SmartContract, + TransactionOptions, + TransactionResult, +} from '@neo-one/client'; +import BigNumber from 'bignumber.js'; + +export interface ICOTransferEventParameters { + readonly from: AddressString | undefined; + readonly to: AddressString | undefined; + readonly amount: BigNumber; +} +export interface ICOTransferEvent extends Event<'transfer', ICOTransferEventParameters> {} +export interface ICOApproveSendTransferEventParameters { + readonly from: AddressString; + readonly to: AddressString; + readonly amount: BigNumber; +} +export interface ICOApproveSendTransferEvent + extends Event<'approveSendTransfer', ICOApproveSendTransferEventParameters> {} +export interface ICORevokeSendTransferEventParameters { + readonly from: AddressString; + readonly to: AddressString; + readonly amount: BigNumber; +} +export interface ICORevokeSendTransferEvent extends Event<'revokeSendTransfer', ICORevokeSendTransferEventParameters> {} +export type ICOEvent = ICOTransferEvent | ICOApproveSendTransferEvent | ICORevokeSendTransferEvent; + +export interface ICOSmartContract extends SmartContract { + readonly amountPerNEO: () => Promise; + readonly deploy: { + ( + owner?: AddressString, + startTimeSeconds?: BigNumber, + icoDurationSeconds?: BigNumber, + options?: TransactionOptions, + ): Promise, InvocationTransaction>>; + readonly confirmed: ( + owner?: AddressString, + startTimeSeconds?: BigNumber, + icoDurationSeconds?: BigNumber, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly icoDurationSeconds: () => Promise; + readonly mintTokens: { + (options?: InvokeReceiveTransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + options?: InvokeReceiveTransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly owner: () => Promise; + readonly refundAssets: { + (options?: InvokeSendUnsafeTransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + options?: InvokeSendUnsafeTransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly remaining: () => Promise; + readonly startTimeSeconds: () => Promise; +} + +export interface ICOMigrationSmartContract { + readonly amountPerNEO: () => Promise; + readonly deploy: ( + owner?: AddressString | Promise, + startTimeSeconds?: BigNumber | Promise, + icoDurationSeconds?: BigNumber | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly icoDurationSeconds: () => Promise; + readonly mintTokens: ( + options?: InvokeReceiveTransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly owner: () => Promise; + readonly refundAssets: ( + options?: InvokeSendUnsafeTransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly remaining: () => Promise; + readonly startTimeSeconds: () => Promise; +} diff --git a/packages/neo-one-cli/src/__data__/projects/exchange/codegen/Token/abi.ts b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/Token/abi.ts new file mode 100644 index 0000000000..ee5e804078 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/Token/abi.ts @@ -0,0 +1,386 @@ +/* @hash d32f1bef82338bb52029f74d0a8416ae */ +// tslint:disable +/* eslint-disable */ +import { ABI } from '@neo-one/client'; + +export const tokenABI: ABI = { + events: [ + { + name: 'transfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: true, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: true, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + }, + { + name: 'approveSendTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + }, + { + name: 'revokeSendTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + }, + ], + functions: [ + { + constant: true, + name: 'name', + parameters: [], + returnType: { + forwardedValue: false, + optional: false, + type: 'String', + }, + }, + { + constant: true, + name: 'symbol', + parameters: [], + returnType: { + forwardedValue: false, + optional: false, + type: 'String', + }, + }, + { + constant: true, + name: 'decimals', + parameters: [], + returnType: { + decimals: 0, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + }, + { + constant: true, + name: 'totalSupply', + parameters: [], + returnType: { + decimals: 8, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + }, + { + claim: false, + constant: true, + name: 'balanceOf', + parameters: [ + { + forwardedValue: false, + name: 'address', + optional: false, + type: 'Address', + }, + ], + receive: false, + returnType: { + decimals: 8, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: true, + name: 'approvedTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + ], + receive: false, + returnType: { + decimals: 8, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: false, + name: 'transfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + { + forwardedValue: false, + name: 'approveArgs', + optional: false, + rest: true, + type: 'ForwardValue', + }, + ], + receive: false, + returnType: { + forwardedValue: false, + optional: false, + type: 'Boolean', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: false, + name: 'approveSendTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + decimals: 0, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + receive: false, + returnType: { + forwardedValue: false, + optional: false, + type: 'Boolean', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: false, + name: 'approveReceiveTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + { + forwardedValue: false, + name: 'asset', + optional: false, + type: 'Address', + }, + ], + receive: false, + returnType: { + forwardedValue: false, + optional: false, + type: 'Boolean', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: false, + name: 'revokeSendTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + receive: false, + returnType: { + forwardedValue: false, + optional: false, + type: 'Boolean', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: false, + name: 'onRevokeSendTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + { + forwardedValue: false, + name: 'asset', + optional: false, + type: 'Address', + }, + ], + receive: false, + returnType: { + optional: false, + type: 'Void', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: false, + name: 'issue', + parameters: [ + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + receive: false, + returnType: { + forwardedValue: false, + optional: false, + type: 'Boolean', + }, + send: false, + sendUnsafe: false, + }, + { + name: 'deploy', + parameters: [], + returnType: { + type: 'Boolean', + }, + }, + ], +}; diff --git a/packages/neo-one-cli/src/__data__/projects/exchange/codegen/Token/contract.ts b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/Token/contract.ts new file mode 100644 index 0000000000..598609e960 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/Token/contract.ts @@ -0,0 +1,20 @@ +/* @hash 263c8504db4e13520cc3c13f6046952f */ +// tslint:disable +/* eslint-disable */ +import { Client } from '@neo-one/client'; +import { TokenSmartContract } from './types'; +import { tokenABI } from './abi'; +import { sourceMaps } from '../sourceMaps'; + +const definition = { + networks: { + local: { + address: 'AWFQ5usn6UPEQo85pNxLyNuuGnSvC9uckv', + }, + }, + abi: tokenABI, + sourceMaps, +}; + +export const createTokenSmartContract = (client: TClient): TokenSmartContract => + client.smartContract(definition); diff --git a/packages/neo-one-cli/src/__data__/projects/exchange/codegen/Token/types.ts b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/Token/types.ts new file mode 100644 index 0000000000..8386d696a0 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/Token/types.ts @@ -0,0 +1,231 @@ +/* @hash 42fc669f6a4783cc65d07d56271354f8 */ +// tslint:disable +/* eslint-disable */ +import { + AddressString, + Client, + Event, + ForwardOptions, + ForwardValue, + GetOptions, + InvocationTransaction, + InvokeReceipt, + SmartContract, + TransactionOptions, + TransactionResult, +} from '@neo-one/client'; +import BigNumber from 'bignumber.js'; + +export interface TokenTransferEventParameters { + readonly from: AddressString | undefined; + readonly to: AddressString | undefined; + readonly amount: BigNumber; +} +export interface TokenTransferEvent extends Event<'transfer', TokenTransferEventParameters> {} +export interface TokenApproveSendTransferEventParameters { + readonly from: AddressString; + readonly to: AddressString; + readonly amount: BigNumber; +} +export interface TokenApproveSendTransferEvent + extends Event<'approveSendTransfer', TokenApproveSendTransferEventParameters> {} +export interface TokenRevokeSendTransferEventParameters { + readonly from: AddressString; + readonly to: AddressString; + readonly amount: BigNumber; +} +export interface TokenRevokeSendTransferEvent + extends Event<'revokeSendTransfer', TokenRevokeSendTransferEventParameters> {} +export type TokenEvent = TokenTransferEvent | TokenApproveSendTransferEvent | TokenRevokeSendTransferEvent; + +export interface TokenSmartContract extends SmartContract { + readonly approveReceiveTransfer: { + (from: AddressString, amount: BigNumber, asset: AddressString, options?: TransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + from: AddressString, + amount: BigNumber, + asset: AddressString, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly approveSendTransfer: { + (from: AddressString, to: AddressString, amount: BigNumber, options?: TransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + from: AddressString, + to: AddressString, + amount: BigNumber, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly approvedTransfer: (from: AddressString, to: AddressString) => Promise; + readonly balanceOf: (address: AddressString) => Promise; + readonly decimals: () => Promise; + readonly deploy: { + (options?: TransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly issue: { + (to: AddressString, amount: BigNumber, options?: TransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + to: AddressString, + amount: BigNumber, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly name: () => Promise; + readonly onRevokeSendTransfer: { + (from: AddressString, amount: BigNumber, asset: AddressString, options?: TransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + from: AddressString, + amount: BigNumber, + asset: AddressString, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly revokeSendTransfer: { + (from: AddressString, to: AddressString, amount: BigNumber, options?: TransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + from: AddressString, + to: AddressString, + amount: BigNumber, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly symbol: () => Promise; + readonly totalSupply: () => Promise; + readonly transfer: { + >( + from: AddressString, + to: AddressString, + amount: BigNumber, + forwardOptions?: TForwardOptions, + ...approveArgs: ForwardValue[] + ): Promise< + TransactionResult< + InvokeReceipt ? TokenEvent | T : TokenEvent>, + InvocationTransaction + > + >; + >( + from: AddressString, + to: AddressString, + amount: BigNumber, + options?: TransactionOptions, + forwardOptions?: TForwardOptions, + ...approveArgs: ForwardValue[] + ): Promise< + TransactionResult< + InvokeReceipt ? TokenEvent | T : TokenEvent>, + InvocationTransaction + > + >; + readonly confirmed: { + >( + from: AddressString, + to: AddressString, + amount: BigNumber, + forwardOptions?: TForwardOptions, + ...approveArgs: ForwardValue[] + ): Promise< + InvokeReceipt ? TokenEvent | T : TokenEvent> & { + readonly transaction: InvocationTransaction; + } + >; + >( + from: AddressString, + to: AddressString, + amount: BigNumber, + options?: TransactionOptions & GetOptions, + forwardOptions?: TForwardOptions, + ...approveArgs: ForwardValue[] + ): Promise< + InvokeReceipt ? TokenEvent | T : TokenEvent> & { + readonly transaction: InvocationTransaction; + } + >; + }; + }; +} + +export interface TokenMigrationSmartContract { + readonly approveReceiveTransfer: ( + from: AddressString | Promise, + amount: BigNumber | Promise, + asset: AddressString | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly approveSendTransfer: ( + from: AddressString | Promise, + to: AddressString | Promise, + amount: BigNumber | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly approvedTransfer: ( + from: AddressString | Promise, + to: AddressString | Promise, + ) => Promise; + readonly balanceOf: (address: AddressString | Promise) => Promise; + readonly decimals: () => Promise; + readonly deploy: ( + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly issue: ( + to: AddressString | Promise, + amount: BigNumber | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly name: () => Promise; + readonly onRevokeSendTransfer: ( + from: AddressString | Promise, + amount: BigNumber | Promise, + asset: AddressString | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly revokeSendTransfer: ( + from: AddressString | Promise, + to: AddressString | Promise, + amount: BigNumber | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly symbol: () => Promise; + readonly totalSupply: () => Promise; + readonly transfer: { + >( + from: AddressString | Promise, + to: AddressString | Promise, + amount: BigNumber | Promise, + forwardOptions?: TForwardOptions, + ...approveArgs: (ForwardValue | Promise)[] + ): Promise< + InvokeReceipt ? TokenEvent | T : TokenEvent> & { + readonly transaction: InvocationTransaction; + } + >; + >( + from: AddressString | Promise, + to: AddressString | Promise, + amount: BigNumber | Promise, + options?: TransactionOptions & GetOptions, + forwardOptions?: TForwardOptions, + ...approveArgs: (ForwardValue | Promise)[] + ): Promise< + InvokeReceipt ? TokenEvent | T : TokenEvent> & { + readonly transaction: InvocationTransaction; + } + >; + }; +} diff --git a/packages/neo-one-cli/src/__data__/projects/exchange/codegen/client.ts b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/client.ts new file mode 100644 index 0000000000..52460b6a4f --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/client.ts @@ -0,0 +1,107 @@ +/* @hash dd096b49c861db1ef931d609f5542192 */ +// tslint:disable +/* eslint-disable */ +import { + addLocalKeysSync, + Client, + DapiUserAccountProvider, + DeveloperClient, + DeveloperClients, + LocalKeyStore, + LocalMemoryStore, + LocalUserAccountProvider, + NEOONEProvider, + NEOONEDataProvider, + UserAccountProviders, +} from '@neo-one/client'; + +export interface DefaultUserAccountProviders { + readonly memory: LocalUserAccountProvider; +} + +const getDefaultUserAccountProviders = (provider: NEOONEProvider) => { + const localUserAccountProvider = { + memory: new LocalUserAccountProvider({ + keystore: new LocalKeyStore(new LocalMemoryStore()), + provider, + }), + }; + + const dapi = typeof globalThis === 'undefined' ? undefined : (globalThis as any).neoDapi; + if (dapi !== undefined) { + return { + ...localUserAccountProvider, + dapi: new DapiUserAccountProvider({ + dapi, + provider, + onError: (error) => { + throw error; + }, + }), + }; + } + + return localUserAccountProvider; +}; + +const isLocalUserAccountProvider = (userAccountProvider: any): userAccountProvider is LocalUserAccountProvider => + userAccountProvider instanceof LocalUserAccountProvider; + +export const createClient = = DefaultUserAccountProviders>( + getUserAccountProvidersOrHost: + | string + | ((provider: NEOONEProvider) => TUserAccountProviders) = getDefaultUserAccountProviders as any, +): Client< + TUserAccountProviders extends UserAccountProviders ? TUserAccountProvider : any, + TUserAccountProviders +> => { + let getUserAccountProviders = getDefaultUserAccountProviders; + let host = 'localhost'; + if (typeof getUserAccountProvidersOrHost === 'string') { + host = getUserAccountProvidersOrHost; + } else if (getUserAccountProvidersOrHost != undefined) { + getUserAccountProviders = getUserAccountProvidersOrHost as any; + } + + const providers = []; + if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') { + providers.push({ network: 'local', rpcURL: `http://${host}:10010/rpc` }); + } + const provider = new NEOONEProvider(providers); + const userAccountProviders = getUserAccountProviders(provider); + const localUserAccountProviders = Object.values(userAccountProviders).filter( + isLocalUserAccountProvider, + ) as LocalUserAccountProvider[]; + const localUserAccountProvider = localUserAccountProviders.find( + (userAccountProvider) => userAccountProvider.keystore instanceof LocalKeyStore, + ); + if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') { + if (localUserAccountProvider !== undefined) { + const localKeyStore = localUserAccountProvider.keystore; + if (localKeyStore instanceof LocalKeyStore) { + addLocalKeysSync( + [ + { network: 'local', name: 'master', privateKey: 'L4qhHtwbiAMu1nrSmsTP5a3dJbxA3SNS6oheKnKd8E7KTJyCLcUv' }, + { network: 'local', name: 'alfa', privateKey: 'KyX5sPKRpAMb3XAFLUrHv7u1LxKkKFrpyJDgE4kceRX9FRJ4WRCQ' }, + { network: 'local', name: 'bravo', privateKey: 'L5LfJc2Ngsxu8ZFMvnJbYJ1QdQCstzRXmKLybsFS1aQFURkJ5CHS' }, + { network: 'local', name: 'charlie', privateKey: 'KxCH2Ei4TLqp2Qa7swz9bstQc5uREiCpvzvL9R6xLX8X5U8ZqeBj' }, + { network: 'local', name: 'delta', privateKey: 'KyVvngWhhfHiociMuwyLmGw8xTu9myKXRnvv5Fes9jDMa2Zyc6P9' }, + { network: 'local', name: 'echo', privateKey: 'L37qr7PWqWmgjUPfRC9mS78GjRxgGi4azySCsLUBMAa5hMka2JEm' }, + { network: 'local', name: 'foxtrot', privateKey: 'KwFf8gdSWxvC5Pp8AidNdF6mHqjH3CukyF3RnfwS5vzMQKLGTP13' }, + { network: 'local', name: 'golf', privateKey: 'Kyn2BN3QuHGYgkt9qJgvwzY8yH4xgTUAKwnGhvU1w8Nh3JnivrAr' }, + { network: 'local', name: 'hotel', privateKey: 'L5UXfz1xyzDkghGwistNMCV8pbpU4fg14Ez9rfo1y4KgwiadnWX3' }, + { network: 'local', name: 'india', privateKey: 'L5Yoq3X4ojx2FvZZxHbMcvT6var4LaXKHEpMYyyxw4jjhSUNJTRa' }, + { network: 'local', name: 'juliett', privateKey: 'L1DWex8PtmQJH4GYK9YAuyzmotyL6anY937LxJF54iaALrTtxsD6' }, + ], + localKeyStore, + ); + } + } + } + + return new Client(userAccountProviders as any); +}; + +export const createDeveloperClients = (host = 'localhost'): DeveloperClients => ({ + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10010/rpc` })), +}); diff --git a/packages/neo-one-cli/src/__data__/projects/exchange/codegen/contracts.ts b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/contracts.ts new file mode 100644 index 0000000000..c8e5131709 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/contracts.ts @@ -0,0 +1,40 @@ +/* @hash 4fe191c2c4a879ff8f89833cfe5800f4 */ +// tslint:disable +/* eslint-disable */ +import { Client } from '@neo-one/client'; + +import { CoinSmartContract, CoinMigrationSmartContract } from './Coin/types'; +import { CoinICOSmartContract, CoinICOMigrationSmartContract } from './CoinICO/types'; +import { ExchangeSmartContract, ExchangeMigrationSmartContract } from './Exchange/types'; +import { ICOSmartContract, ICOMigrationSmartContract } from './ICO/types'; +import { TokenSmartContract, TokenMigrationSmartContract } from './Token/types'; + +import { createCoinSmartContract } from './Coin/contract'; +import { createCoinICOSmartContract } from './CoinICO/contract'; +import { createExchangeSmartContract } from './Exchange/contract'; +import { createICOSmartContract } from './ICO/contract'; +import { createTokenSmartContract } from './Token/contract'; + +export interface Contracts { + readonly coin: CoinSmartContract; + readonly coinIco: CoinICOSmartContract; + readonly exchange: ExchangeSmartContract; + readonly ico: ICOSmartContract; + readonly token: TokenSmartContract; +} +// Refer to the MigrationSmartContract documentation at https://neo-one.io/docs/deployment for more information. +export interface MigrationContracts { + readonly coin: CoinMigrationSmartContract; + readonly coinIco: CoinICOMigrationSmartContract; + readonly exchange: ExchangeMigrationSmartContract; + readonly ico: ICOMigrationSmartContract; + readonly token: TokenMigrationSmartContract; +} + +export const createContracts = (client: TClient): Contracts => ({ + coin: createCoinSmartContract(client), + coinIco: createCoinICOSmartContract(client), + exchange: createExchangeSmartContract(client), + ico: createICOSmartContract(client), + token: createTokenSmartContract(client), +}); diff --git a/packages/neo-one-cli/src/__data__/projects/exchange/codegen/index.ts b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/index.ts new file mode 100644 index 0000000000..397602449b --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/index.ts @@ -0,0 +1,21 @@ +/* @hash 5c6ca72be538b270bf4294f0cc95ac42 */ +// tslint:disable +/* eslint-disable */ +export * from './contracts'; +export * from './react'; +export * from './client'; +export * from './Coin/contract'; +export * from './Coin/types'; +export * from './Coin/abi'; +export * from './Exchange/contract'; +export * from './Exchange/types'; +export * from './Exchange/abi'; +export * from './Token/contract'; +export * from './Token/types'; +export * from './Token/abi'; +export * from './CoinICO/contract'; +export * from './CoinICO/types'; +export * from './CoinICO/abi'; +export * from './ICO/contract'; +export * from './ICO/types'; +export * from './ICO/abi'; diff --git a/packages/neo-one-cli/src/__data__/projects/exchange/codegen/react.tsx b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/react.tsx new file mode 100644 index 0000000000..1ec2a253e6 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/react.tsx @@ -0,0 +1,60 @@ +/* @hash 1009d59e30be76e4416ca52dd13e15e1 */ +// tslint:disable +/* eslint-disable */ +import { Client, DeveloperClients, DeveloperTools } from '@neo-one/client'; +import * as React from 'react'; +import { Contracts } from './contracts'; +import { createClient, createDeveloperClients } from './client'; +import { createCoinSmartContract } from './Coin/contract'; +import { createExchangeSmartContract } from './Exchange/contract'; +import { createTokenSmartContract } from './Token/contract'; +import { createCoinICOSmartContract } from './CoinICO/contract'; +import { createICOSmartContract } from './ICO/contract'; + +export interface WithClients { + readonly client: TClient; + readonly developerClients: DeveloperClients; + readonly host?: string; +} +export type ContractsWithClients = Contracts & WithClients; + +const Context = React.createContext>(undefined as any); + +export type ContractsProviderProps = Partial> & { + readonly children?: React.ReactNode; +}; +export const ContractsProvider = ({ + client: clientIn, + developerClients: developerClientsIn, + host, + children, +}: ContractsProviderProps) => { + const client = clientIn === undefined ? createClient(host) : clientIn; + const developerClients = developerClientsIn === undefined ? createDeveloperClients(host) : developerClientsIn; + DeveloperTools.enable({ client, developerClients }); + + return ( + + {children} + + ); +}; + +export interface WithContractsProps { + readonly children: (contracts: ContractsWithClients) => React.ReactNode; +} +export const WithContracts = ({ children }: WithContractsProps) => ( + {children} +); + +export const useContracts = (): ContractsWithClients => React.useContext(Context); diff --git a/packages/neo-one-cli/src/__data__/projects/exchange/codegen/sourceMaps.ts b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/sourceMaps.ts new file mode 100644 index 0000000000..3c96373911 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/sourceMaps.ts @@ -0,0 +1,78 @@ +/* @hash 4d3a0c5a2890db595d75a5a337406243 */ +// tslint:disable +/* eslint-disable */ +import { SourceMaps } from '@neo-one/client'; + +let sourceMapsIn: SourceMaps = {}; + +if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') { + sourceMapsIn = { + AJJrj2p9Cj4xNtFH6Pv3JNmyVEAbm8YHPH: { + mappings: + 'AAAA;AAWuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqnCnB;AAAA;AAAA;ADrnCmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqnCT;AAAA;AAAA;ADrnCS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqnCC;AAAA;AAAA;ADrnCD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC+mC9B;AAAA;AAAA;AD/mC8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC+mCpB;AAAA;AAAA;AD/mCoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC+mCV;AAAA;AAAA;AD/mCU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACymC7B;AAAA;AAAA;ADzmC6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACymCnB;AAAA;AAAA;ADzmCmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACymCT;AAAA;AAAA;ADzmCS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyB/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AALF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8DiE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA9DjE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACS;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAHiD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOpB;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAH0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMrB;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAxB+E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAjF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAX;AAAA;AAAA;AAAA;AAAf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOE;AAAA;AAAA;AAPF;AAOE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAPF;AAQE;AAAA;AAAA;AARF;AAQE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AARF;AASE;AAAA;AAAA;AATF;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATF;AAcE;AAAA;AAAA;AAdF;AAcE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAdF;AAmBE;AAAA;AAAA;AAnBF;AAmBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnBF;AA0BE;AAAA;AAAA;AA1BF;AA0BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAkCE;AAAA;AAAA;AAlCF;AAkCE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAlCF;AAsEE;AAAA;AAAA;AAtEF;AAsEE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAtEF;AAqFE;AAAA;AAAA;AArFF;AAqFE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArFF;AAyFE;AAAA;AAAA;AAzFF;AAyFE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzFF;AAoHE;AAAA;AAAA;AApHF;AAoHE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AApHF;AAwHE;AAAA;AAAA;AAxHF;AAwHE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxHF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', + names: [], + sources: ['../neo-one/contracts/Coin.ts', '../../../../../../neo-one-smart-contract/src/index.d.ts'], + sourcesContent: [ + "import {\n Address,\n constant,\n Contract,\n createEventNotifier,\n Fixed,\n ForwardValue,\n MapStorage,\n SmartContract,\n} from '@neo-one/smart-contract';\n\nconst notifyTransfer = createEventNotifier
>(\n 'transfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyApproveSendTransfer = createEventNotifier>(\n 'approveSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyRevokeSendTransfer = createEventNotifier>(\n 'revokeSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\n\ninterface CoinPayableContract {\n readonly approveReceiveTransfer: (\n from: Address,\n amount: Fixed<8>,\n asset: Address,\n // tslint:disable-next-line readonly-array\n ...args: ForwardValue[]\n ) => boolean;\n readonly onRevokeSendTransfer: (from: Address, amount: Fixed<8>, asset: Address) => void;\n}\n\nexport class Coin extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'NEOβ€’ONE Coin',\n };\n public readonly name = 'Eno';\n public readonly symbol = 'ENO';\n public readonly decimals = 8;\n private readonly balances = MapStorage.for>();\n private readonly approvedTransfers = MapStorage.for<[Address, Address], Fixed<8>>();\n private mutableSupply: Fixed<8> = 0;\n\n @constant\n public get totalSupply(): Fixed<8> {\n return this.mutableSupply;\n }\n\n @constant\n public balanceOf(address: Address): Fixed<8> {\n const balance = this.balances.get(address);\n\n return balance === undefined ? 0 : balance;\n }\n\n @constant\n public approvedTransfer(from: Address, to: Address): Fixed<8> {\n const approved = this.approvedTransfers.get([from, to]);\n\n return approved === undefined ? 0 : approved;\n }\n\n // tslint:disable-next-line readonly-array\n public transfer(from: Address, to: Address, amount: Fixed<8>, ...approveArgs: ForwardValue[]): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const fromBalance = this.balanceOf(from);\n if (fromBalance < amount) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n const reduceApproved = approved >= amount && Address.isCaller(to);\n if (!reduceApproved && !Address.isCaller(from)) {\n return false;\n }\n\n const contract = Contract.for(to);\n if (contract !== undefined && !Address.isCaller(to)) {\n const smartContract = SmartContract.for(to);\n if (!smartContract.approveReceiveTransfer(from, amount, this.address, ...approveArgs)) {\n return false;\n }\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(from, fromBalance - amount);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(from, to, amount);\n\n if (reduceApproved) {\n this.approvedTransfers.set([from, to], approved - amount);\n }\n\n return true;\n }\n\n public approveSendTransfer(from: Address, to: Address, amount: Fixed<0>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], this.approvedTransfer(from, to) + amount);\n notifyApproveSendTransfer(from, to, amount);\n\n return true;\n }\n\n public approveReceiveTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): boolean {\n return false;\n }\n\n public revokeSendTransfer(from: Address, to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n if (approved < amount) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], approved - amount);\n notifyRevokeSendTransfer(from, to, amount);\n\n const contract = Contract.for(to);\n if (contract !== undefined) {\n const smartContract = SmartContract.for(to);\n // NOTE: This should catch errors once we have stack isolation\n smartContract.onRevokeSendTransfer(from, amount, this.address);\n }\n\n return true;\n }\n\n public onRevokeSendTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): void {\n // do nothing\n }\n\n public issue(to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(undefined, to, amount);\n this.mutableSupply += amount;\n\n return true;\n }\n}\n", + "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? ReturnType extends SmartContractArg\n ? T[K]\n : never\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Address;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Hash256;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", + ], + version: 3, + }, + ARW79N7gAWHytcWSkkXvwrJiR4FTyvf2f8: { + mappings: + 'AAAA;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQF;AAAA;AAAA;AAAA;AAAA;AAES;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACaA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACkCE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AAAA;AAAA;AADjB;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACmrCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFxxCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUE;AAAA;AAAA;AAVF;AAUE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACE;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAxB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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACmrCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFxxCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOE;AAAA;AAAA;AAPF;AAOE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAPF;AAWI;AAAA;AAAA;AAXJ;AAWI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAXJ;AAYI;AAAA;AAAA;AAZJ;AAYI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAZJ;AAaI;AAAA;AAAA;AAbJ;AAaI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAbJ;AAqBE;AAAA;AAAA;AArBF;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArBF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAdA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', + names: [], + sources: [ + '../neo-one/contracts/ICO.ts', + '../neo-one/contracts/Token.ts', + '../../../../../../neo-one-smart-contract/src/index.d.ts', + ], + sourcesContent: [ + "import {\n Address,\n Blockchain,\n constant,\n Deploy,\n Fixed,\n Hash256,\n Integer,\n LinkedSmartContract,\n receive,\n SmartContract,\n} from '@neo-one/smart-contract';\nimport { Token } from './Token';\n\nexport class ICO extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'NEOβ€’ONE ICO',\n };\n public readonly amountPerNEO = 10;\n private mutableRemaining: Fixed<8> = 10_000_000_000_00000000;\n\n public constructor(\n public readonly owner: Address = Deploy.senderAddress,\n public readonly startTimeSeconds: Integer = Blockchain.currentBlockTime,\n public readonly icoDurationSeconds: Integer = 157700000,\n ) {\n super();\n if (!Address.isCaller(owner)) {\n throw new Error('Sender was not the owner.');\n }\n }\n\n @constant\n public get remaining(): Fixed<8> {\n return this.mutableRemaining;\n }\n\n @receive\n public mintTokens(): void {\n if (!this.hasStarted() || this.hasEnded()) {\n throw new Error('Invalid mintTokens');\n }\n\n const { references } = Blockchain.currentTransaction;\n if (references.length === 0) {\n throw new Error('Invalid mintTokens');\n }\n const sender = references[0].address;\n\n let amount = 0;\n // tslint:disable-next-line no-loop-statement\n for (const output of Blockchain.currentTransaction.outputs) {\n if (output.address.equals(this.address)) {\n if (!output.asset.equals(Hash256.NEO)) {\n throw new Error('Invalid mintTokens');\n }\n\n amount += output.value * this.amountPerNEO;\n }\n }\n\n if (amount > this.remaining) {\n throw new Error('Invalid mintTokens');\n }\n\n if (amount === 0) {\n throw new Error('Invalid mintTokens');\n }\n\n const token = LinkedSmartContract.for();\n if (!token.issue(sender, amount)) {\n throw new Error('Invalid mintTokens');\n }\n this.mutableRemaining -= amount;\n }\n\n private hasStarted(): boolean {\n return Blockchain.currentBlockTime >= this.startTimeSeconds;\n }\n\n private hasEnded(): boolean {\n return Blockchain.currentBlockTime > this.startTimeSeconds + this.icoDurationSeconds;\n }\n}\n", + "import {\n Address,\n constant,\n Contract,\n createEventNotifier,\n Fixed,\n ForwardValue,\n MapStorage,\n SmartContract,\n} from '@neo-one/smart-contract';\n\nconst notifyTransfer = createEventNotifier
>(\n 'transfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyApproveSendTransfer = createEventNotifier>(\n 'approveSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyRevokeSendTransfer = createEventNotifier>(\n 'revokeSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\n\ninterface TokenPayableContract {\n readonly approveReceiveTransfer: (\n from: Address,\n amount: Fixed<8>,\n asset: Address,\n // tslint:disable-next-line readonly-array\n ...args: ForwardValue[]\n ) => boolean;\n readonly onRevokeSendTransfer: (from: Address, amount: Fixed<8>, asset: Address) => void;\n}\n\nexport class Token extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'NEOβ€’ONE Token',\n };\n public readonly name = 'One';\n public readonly symbol = 'ONE';\n public readonly decimals = 8;\n private readonly balances = MapStorage.for>();\n private readonly approvedTransfers = MapStorage.for<[Address, Address], Fixed<8>>();\n private mutableSupply: Fixed<8> = 0;\n\n @constant\n public get totalSupply(): Fixed<8> {\n return this.mutableSupply;\n }\n\n @constant\n public balanceOf(address: Address): Fixed<8> {\n const balance = this.balances.get(address);\n\n return balance === undefined ? 0 : balance;\n }\n\n @constant\n public approvedTransfer(from: Address, to: Address): Fixed<8> {\n const approved = this.approvedTransfers.get([from, to]);\n\n return approved === undefined ? 0 : approved;\n }\n\n // tslint:disable-next-line readonly-array\n public transfer(from: Address, to: Address, amount: Fixed<8>, ...approveArgs: ForwardValue[]): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const fromBalance = this.balanceOf(from);\n if (fromBalance < amount) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n const reduceApproved = approved >= amount && Address.isCaller(to);\n if (!reduceApproved && !Address.isCaller(from)) {\n return false;\n }\n\n const contract = Contract.for(to);\n if (contract !== undefined && !Address.isCaller(to)) {\n const smartContract = SmartContract.for(to);\n if (!smartContract.approveReceiveTransfer(from, amount, this.address, ...approveArgs)) {\n return false;\n }\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(from, fromBalance - amount);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(from, to, amount);\n\n if (reduceApproved) {\n this.approvedTransfers.set([from, to], approved - amount);\n }\n\n return true;\n }\n\n public approveSendTransfer(from: Address, to: Address, amount: Fixed<0>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], this.approvedTransfer(from, to) + amount);\n notifyApproveSendTransfer(from, to, amount);\n\n return true;\n }\n\n public approveReceiveTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): boolean {\n return false;\n }\n\n public revokeSendTransfer(from: Address, to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n if (approved < amount) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], approved - amount);\n notifyRevokeSendTransfer(from, to, amount);\n\n const contract = Contract.for(to);\n if (contract !== undefined) {\n const smartContract = SmartContract.for(to);\n // NOTE: This should catch errors once we have stack isolation\n smartContract.onRevokeSendTransfer(from, amount, this.address);\n }\n\n return true;\n }\n\n public onRevokeSendTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): void {\n // do nothing\n }\n\n public issue(to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(undefined, to, amount);\n this.mutableSupply += amount;\n\n return true;\n }\n}\n", + "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? ReturnType extends SmartContractArg\n ? T[K]\n : never\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Address;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Hash256;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", + ], + version: 3, + }, + AUbnSw4LtdnNg5HyobXKvrz8nwSPDnzp5n: { + mappings: + 'AAAA;AAYwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AConCpB;AAAA;AAAA;ADpnCoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AConCV;AAAA;AAAA;ADpnCU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AConCA;AAAA;AAAA;ADpnCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACmnCpB;AAAA;AAAA;ADnnCoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACmnCV;AAAA;AAAA;ADnnCU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACmnCA;AAAA;AAAA;ADnnCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqmCvB;AAAA;AAAA;ADrmCuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqmCb;AAAA;AAAA;ADrmCa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqmCH;AAAA;AAAA;ADrmCG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqmCO;AAAA;AAAA;ADrmCP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqmCiB;AAAA;AAAA;ADrmCjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqmC2B;AAAA;AAAA;ADrmC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC8lC6C;AAAA;AAAA;AD9lC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmChB;AAAA;AAAA;ADxmCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmCN;AAAA;AAAA;ADxmCM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmCI;AAAA;AAAA;ADxmCJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACkkCjB;AAAA;AAAA;ADlkCiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACkkCP;AAAA;AAAA;ADlkCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACkkCG;AAAA;AAAA;ADlkCH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACkkCa;AAAA;AAAA;ADlkCb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACkkCuB;AAAA;AAAA;ADlkCvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACkkCiC;AAAA;AAAA;ADlkCjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACkkC2C;AAAA;AAAA;ADlkC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACkkCqD;AAAA;AAAA;ADlkCrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADjB;AAAA;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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AADqD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAjE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAhB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAhB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AARyE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA3E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AASW;AAAA;AAAA;AAAA;AAAA;AAOK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAA;AAAA;AADsC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAA;AAAA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADgC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAFkE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AARF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAU8E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAvCM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGE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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAJ;AAA4C;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAd;AAAA;AAAoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACyC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAf;AAAA;AApH1B;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AADjB;AAAA;AAAA;AAAA;AAAA;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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAlD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAA;AAAA;AAAA;AAC4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAf;AAAA;AAnIJ;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AADjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACmC;AAAA;AAAA;AADnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC6D;AAAA;AAAA;AAAA;AAAA;AAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAlB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAY;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAxB;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AAH2D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmII;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmIqD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAFjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAK8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA5B;AAA2C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAhF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAqD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA3F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAFnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAFK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxOR;AAAA;AAAA;AAwOQ;AAAA;AAAA;AAAA;AAFgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAlB;AAGO;AAAA;AAAA;AAAA;AAAA;AAEL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkDjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAhDQ;AAAA;AAAA;AAAA;AAAA;AAAA;AACgC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsKQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAtKR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsKiE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAFzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAFK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAPe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAA9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgB;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAJ;AAAuB;AAAA;AAAA;AAAA;AAAA;AACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAvB;AAEO;AAAA;AAAA;AAAA;AAAA;AACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAE;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAhE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArFM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0GA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA6D;AAAA;AAAA;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAmD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAzF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAA;AAAA;AAAA;AACsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAF/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAArB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAZ2D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBA;AAAA;AAAA;AAAA;AAAA;AAES;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AARA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AALF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AApRF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAlB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAlB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAArB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4BN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKqB;AAAA;AAAA;AALrB;AAKqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AALrB;AAaE;AAAA;AAAA;AAbF;AAaE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAbF;AAoBE;AAAA;AAAA;AApBF;AAoBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AApBF;AAyBE;AAAA;AAAA;AAzBF;AAyBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzBF;AAkCE;AAAA;AAAA;AAlCF;AAkCE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAlCF;AA6CE;AAAA;AAAA;AA7CF;AA6CE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA7CF;AAiGE;AAAA;AAAA;AAjGF;AAiGE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAjGF;AA2ME;AAAA;AAAA;AA3MF;AA2ME;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA3MF;AAkOE;AAAA;AAAA;AAlOF;AAkOE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAlOF;AA0NE;AAAA;AAAA;AA1NF;AA0NE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1NF;AAKE;AAAA;AAAA;AALF;AAKE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAmB;AAAA;AAAA;AAAA;AAAA;AAAiC;AAAA;AAAA;AAAA;AAAA;AAAjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAAA;AAAA;AAAA;AAAA;AAApD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAImB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEuB;AAAA;AAAA;AAAA;AAAA;AAAzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AALF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AALF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKqB;AAAA;AAAA;AALrB;AAKqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AALrB;AAaE;AAAA;AAAA;AAbF;AAaE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAbF;AAoBE;AAAA;AAAA;AApBF;AAoBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AApBF;AAyBE;AAAA;AAAA;AAzBF;AAyBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzBF;AAkCE;AAAA;AAAA;AAlCF;AAkCE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAlCF;AA6CE;AAAA;AAAA;AA7CF;AA6CE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA7CF;AAiGE;AAAA;AAAA;AAjGF;AAiGE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAjGF;AA2ME;AAAA;AAAA;AA3MF;AA2ME;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA3MF;AAkOE;AAAA;AAAA;AAlOF;AAkOE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAlOF;AA0NE;AAAA;AAAA;AA1NF;AA0NE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1NF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', + names: [], + sources: ['../neo-one/contracts/Exchange.ts', '../../../../../../neo-one-smart-contract/src/index.d.ts'], + sourcesContent: [ + "import {\n Address,\n constant,\n Deploy,\n Hash256,\n MapStorage,\n crypto,\n Fixed8,\n createEventNotifier,\n SmartContract,\n} from '@neo-one/smart-contract';\n\nconst notifyDeposited = createEventNotifier('deposited', 'address', 'assetID', 'amount');\nconst notifyWithdrawn = createEventNotifier('withdrawn', 'address', 'assetID', 'amount');\nconst notifyOfferCreated = createEventNotifier(\n 'offerCreated',\n 'makerAddress',\n 'offerAssetID',\n 'offerAmount',\n 'wantAssetID',\n 'wantAmount',\n 'offerHash',\n);\nconst notifyOfferCancelled = createEventNotifier('offerCancelled', 'offerHash');\nconst notifyBurnt = createEventNotifier(\n 'burnt',\n 'filler',\n 'takerFeeAssetID',\n 'takerFeeAmount',\n);\nconst notifyFilled = createEventNotifier(\n 'offerFilled',\n 'filler',\n 'offerHash',\n 'amountToFill',\n 'offerAssetID',\n 'offerAmount',\n 'wantAssetID',\n 'wantAmount',\n 'amountToTake',\n);\n\ninterface NEP5 {\n readonly transfer: (from: Address, to: Address, amount: Fixed8) => boolean;\n}\n\ntype Offer = {\n readonly maker: Address;\n readonly offerAssetID: Address;\n readonly offerAmount: Fixed8;\n readonly wantAssetID: Address;\n readonly wantAmount: Fixed8;\n readonly makerFeeAssetID: Address;\n readonly makerFeeAvailableAmount: Fixed8;\n readonly nonce: string;\n};\n\n// Based on the Switcheo BrokerContract: https://github.com/Switcheo/switcheo-neo\nexport class Exchange extends SmartContract {\n private mutableFeeAddress: Address;\n private readonly balances = MapStorage.for<[Address, Address], Fixed8>();\n private readonly offers = MapStorage.for();\n\n public constructor(public readonly owner: Address = Deploy.senderAddress) {\n super();\n if (!Address.isCaller(owner)) {\n throw new Error('Sender was not the owner.');\n }\n this.mutableFeeAddress = this.address;\n }\n\n @constant\n public balanceOf(address: Address, assetID: Address): Fixed8 {\n const balance = this.balances.get([address, assetID]);\n\n return balance === undefined ? 0 : balance;\n }\n\n @constant\n public getOffer(offerHash: Hash256): Offer | undefined {\n return this.offers.get(offerHash);\n }\n\n public depositNEP5(from: Address, assetID: Address, amount: Fixed8): void {\n if (!Address.isCaller(from)) throw new Error('Caller was not the sender!');\n if (amount < 1) throw new Error('Amount must be greater than 0!');\n\n this.transferNEP5(from, this.address, assetID, amount);\n this.balances.set([from, assetID], this.balanceOf(from, assetID) + amount);\n notifyDeposited(from, assetID, amount);\n }\n\n public withdrawNEP5(from: Address, assetID: Address, amount: Fixed8): void {\n if (amount < 0) throw new Error(`Amount must be greater than 0: ${amount}`);\n const balance = this.balanceOf(from, assetID);\n if (balance < amount) throw new Error(`Not enough Balance to withdraw ${amount}!`);\n if (!Address.isCaller(from)) throw new Error('Caller is not authorized to withdraw funds!');\n\n this.transferNEP5(this.address, from, assetID, amount);\n this.balances.set([from, assetID], this.balanceOf(from, assetID) - amount);\n notifyWithdrawn(from, assetID, amount);\n }\n\n public makeOffer(\n maker: Address,\n offerAssetID: Address,\n offerAmount: Fixed8,\n wantAssetID: Address,\n wantAmount: Fixed8,\n makerFeeAssetID: Address,\n makerFeeAvailableAmount: Fixed8,\n nonce: string,\n ): void {\n // Check that transaction is called/signed by the maker\n if (!Address.isCaller(maker)) throw new Error('Caller is not authorized to make an offer on behalf of the maker!');\n // Check that the offer does not already exist\n const offerHash = this.getOfferHash(\n maker,\n offerAssetID,\n offerAmount,\n wantAssetID,\n wantAmount,\n makerFeeAssetID,\n makerFeeAvailableAmount,\n nonce,\n );\n if (this.getOffer(offerHash) !== undefined) throw new Error('Offer does not exist!');\n // Check that amounts > 0\n if (offerAmount <= 0 || wantAmount <= 0) throw new Error('Invalid amount. All amounts must be > 0!');\n // Check that the trade is across different assets\n if (offerAssetID === wantAssetID) throw new Error('Cannot make an offer for the same asset!');\n // Check fees\n if (makerFeeAvailableAmount < 0) throw new Error('Fee available amount cannot be < 0!');\n // Reduce available balance for the offered asset and amount\n this.balances.set([maker, offerAssetID], this.balanceOf(maker, offerAssetID) - offerAmount);\n // Reserve fees from the maker fee asset only if it is different from want asset\n if (makerFeeAssetID !== wantAssetID && makerFeeAvailableAmount > 0) {\n // Reduce fees here separately as it is a different asset type\n this.balances.set([maker, makerFeeAssetID], this.balanceOf(maker, makerFeeAssetID) - makerFeeAvailableAmount);\n }\n // Add the offer to storage\n this.offers.set(offerHash, {\n maker,\n offerAssetID,\n offerAmount,\n wantAssetID,\n wantAmount,\n makerFeeAssetID,\n makerFeeAvailableAmount,\n nonce,\n });\n notifyOfferCreated(maker, offerAssetID, offerAmount, wantAssetID, wantAmount, offerHash);\n }\n\n // Currently above the 10 GAS limit.\n public fillOffer(\n filler: Address,\n offerHash: Hash256,\n amountToTake: Fixed8,\n takerFeeAssetID: Address,\n takerFeeAmount: Fixed8,\n burnTakerFee: boolean,\n makerFeeAmount: Fixed8,\n burnMakerFee: boolean,\n ): void {\n // Check that transaction is called/signed by the filler\n if (!Address.isCaller(filler)) throw new Error('Caller is not authorized to fill offer on behalf of the filler!');\n // Check fees\n if (takerFeeAmount < 0) throw new Error('takerFeeAmount must not be < 0!');\n if (makerFeeAmount < 0) throw new Error('makerFeeAmount must not be < 0!');\n // Check that the offer still exists\n const offer = this.getOffer(offerHash);\n if (offer === undefined) throw new Error('Offer does not exist!');\n // Check that the filler is different from the maker\n if (filler === offer.maker) throw new Error('Filler cannot be the same as the maker!');\n // Check that the amount that will be taken is at least 1\n if (amountToTake < 1) throw new Error('Filler must take a nonzero amount of the offered asset!');\n // Check that you cannot take more than available\n if (amountToTake > offer.offerAmount) throw new Error('Filler requests more than available in offer!');\n // Calculate amount we have to give the offerer (what the offerer wants)\n const amountToFill = (amountToTake * offer.wantAmount) / offer.offerAmount;\n if (amountToFill < 1) throw new Error('Must fill a nonzero amount of the offered asset!');\n // Check that there is enough balance to reduce for filler\n const wantAssetBalance = this.balanceOf(filler, offer.wantAssetID);\n if (wantAssetBalance < amountToFill) throw new Error('Not enough balance to fill offer!');\n // Check if we should deduct fees separately from the taker amount & there is enough balance in native fees if using native fees\n const deductTakerFeesSeparately = takerFeeAssetID !== offer.offerAssetID;\n const feeAssetBalance = this.balanceOf(filler, takerFeeAssetID);\n if (deductTakerFeesSeparately && takerFeeAmount > 0 && feeAssetBalance <= takerFeeAmount) {\n throw new Error('Filler does not have enough balance for fee!');\n }\n // Check that maker fee does not exceed remaining amount that can be deducted as maker fees\n if (offer.makerFeeAvailableAmount < makerFeeAmount) throw new Error('Maker does not have enough balance for fee!');\n // Check if we should deduct fees separately from the maker receiving amount\n const deductMakerFeesSeparately = offer.makerFeeAssetID !== offer.wantAssetID;\n\n // Reduce balance from filler\n this.balances.set([filler, offer.wantAssetID], this.balanceOf(filler, offer.wantAssetID) - amountToFill);\n // Move filled asset to the maker balance (reduce fees if needed)\n const amountForMakerAfterFees = deductMakerFeesSeparately ? amountToFill : amountToFill - makerFeeAmount;\n this.balances.set(\n [offer.maker, offer.wantAssetID],\n this.balanceOf(offer.maker, offer.wantAssetID) + amountForMakerAfterFees,\n );\n // Move taken asset to the taker balance\n const amountToTakeAfterFees = deductTakerFeesSeparately ? amountToTake : amountToTake - takerFeeAmount;\n this.balances.set([filler, offer.offerAssetID], this.balanceOf(filler, offer.offerAssetID) + amountToTakeAfterFees);\n\n // Move fees\n if (takerFeeAmount > 0) {\n if (deductTakerFeesSeparately) {\n // Reduce fees here from contract balance separately as it is a different asset type\n this.balances.set([filler, takerFeeAssetID], this.balanceOf(filler, takerFeeAssetID) - takerFeeAmount);\n }\n if (burnTakerFee) {\n // Emit burnt event for easier client tracking\n notifyBurnt(filler, takerFeeAssetID, takerFeeAmount);\n } else {\n // Only increase fee address balance if not burning\n this.balances.set(\n [this.feeAddress, takerFeeAssetID],\n this.balanceOf(this.feeAddress, takerFeeAssetID) + takerFeeAmount,\n );\n }\n }\n let makerFeeAvailableAmount = offer.makerFeeAvailableAmount;\n if (makerFeeAmount > 0) {\n // Reduce from available maker fees here\n makerFeeAvailableAmount = offer.makerFeeAvailableAmount - makerFeeAmount;\n\n if (burnMakerFee) {\n // Emit burnt event for easier client tracking\n notifyBurnt(offer.maker, offer.makerFeeAssetID, makerFeeAmount);\n } else {\n // Only increase fee address balance if not burning\n this.balances.set(\n [this.feeAddress, offer.makerFeeAssetID],\n this.balanceOf(this.feeAddress, offer.makerFeeAssetID) + makerFeeAmount,\n );\n }\n }\n\n const offerAmount = offer.offerAmount - amountToTake;\n const wantAmount = offer.wantAmount - amountToFill;\n if (offerAmount === 0) {\n this.offers.delete(offerHash);\n } else {\n this.offers.set(offerHash, { ...offer, offerAmount, wantAmount, makerFeeAvailableAmount });\n }\n notifyFilled(\n filler,\n offerHash,\n amountToFill,\n offer.offerAssetID,\n offer.offerAmount,\n offer.wantAssetID,\n offer.wantAmount,\n amountToTake,\n );\n }\n\n public cancelOffer(maker: Address, offerHash: Hash256): void {\n if (!Address.isCaller(maker)) throw new Error('Only the offer maker may cancel an offer!');\n\n const offer = this.getOffer(offerHash);\n if (offer === undefined) throw new Error('Offer does not exist!');\n\n this.balances.set([maker, offer.offerAssetID], this.balanceOf(maker, offer.offerAssetID) + offer.offerAmount);\n this.balances.set(\n [maker, offer.makerFeeAssetID],\n this.balanceOf(maker, offer.makerFeeAssetID) + offer.makerFeeAvailableAmount,\n );\n this.offers.delete(offerHash);\n notifyOfferCancelled(offerHash);\n }\n\n public set feeAddress(address: Address) {\n if (!Address.isCaller(this.owner)) {\n throw new Error('Only the contract owner can change the FeeAddress!');\n }\n\n this.mutableFeeAddress = address;\n }\n\n @constant\n public get feeAddress(): Address {\n return this.mutableFeeAddress;\n }\n\n private getOfferHash(\n maker: Address,\n offerAssetID: Address,\n offerAmount: Fixed8,\n wantAssetID: Address,\n wantAmount: Fixed8,\n makerFeeAssetID: Address,\n makerFeeAvailableAmount: Fixed8,\n nonce: string,\n ): Hash256 {\n const offerBuffer = Buffer.concat([\n maker,\n offerAssetID,\n wantAssetID,\n makerFeeAssetID,\n Buffer.from([offerAmount, wantAmount, makerFeeAvailableAmount].toString()),\n Buffer.from(nonce),\n ]);\n\n return crypto.hash256(offerBuffer);\n }\n\n private transferNEP5(from: Address, to: Address, assetID: Address, amount: Fixed8): void {\n const nep5Asset = SmartContract.for(assetID);\n if (!nep5Asset.transfer(from, to, amount)) {\n throw new Error('Failed to transfer NEP-5 tokens!');\n }\n }\n}\n", + "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? ReturnType extends SmartContractArg\n ? T[K]\n : never\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Address;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Hash256;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", + ], + version: 3, + }, + AUuCyg68Gvh3sY3ysPvsxWUHQ3oY7eeKSB: { + mappings: + 'AAAA;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQF;AAAA;AAAA;AAAA;AAAA;AAES;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACaA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACkCE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AAAA;AAAA;AADjB;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACmrCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFxxCe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAX;AAAA;AAAA;AAAA;AAAK;AAAL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUE;AAAA;AAAA;AAVF;AAUE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACE;AAAA;AAAA;AAAA;AAAA;AAAiC;AAAA;AAAA;AAAA;AAAA;AAAjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AAAA;AAAA;AAAA;AAAA;AADnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEE;AAAA;AAAA;AAAA;AAAA;AAA4C;AAAA;AAAA;AAAA;AAAA;AAA5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4C;AAAA;AAAA;AAAA;AAAA;AAF9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGE;AAAA;AAAA;AAAA;AAAA;AAA8C;AAAA;AAAA;AAAA;AAAA;AAA9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8C;AAAA;AAAA;AAAA;AAAA;AAHhD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAH+B;AAAA;AAAA;AAAA;AAAA;AAA/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACqC;AAAA;AAAA;AAAA;AAAA;AAArC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAPJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAVF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0BE;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAxB;A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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACmrCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFxxCe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAX;AAAA;AAAA;AAAA;AAAK;AAAL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOE;AAAA;AAAA;AAPF;AAOE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAPF;AAWI;AAAA;AAAA;AAXJ;AAWI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAXJ;AAYI;AAAA;AAAA;AAZJ;AAYI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAZJ;AAaI;AAAA;AAAA;AAbJ;AAaI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAbJ;AAqBE;AAAA;AAAA;AArBF;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArBF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAdA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', + names: [], + sources: [ + '../neo-one/contracts/CoinICO.ts', + '../neo-one/contracts/Coin.ts', + '../../../../../../neo-one-smart-contract/src/index.d.ts', + ], + sourcesContent: [ + "import {\n Address,\n Blockchain,\n constant,\n Deploy,\n Fixed,\n Hash256,\n Integer,\n LinkedSmartContract,\n receive,\n SmartContract,\n} from '@neo-one/smart-contract';\nimport { Coin } from './Coin';\n\nexport class CoinICO extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'NEOβ€’ONE Coin ICO',\n };\n public readonly amountPerNEO = 10;\n private mutableRemaining: Fixed<8> = 10_000_000_00000000;\n\n public constructor(\n public readonly owner: Address = Deploy.senderAddress,\n public readonly startTimeSeconds: Integer = Blockchain.currentBlockTime,\n public readonly icoDurationSeconds: Integer = 157700000,\n ) {\n super();\n if (!Address.isCaller(owner)) {\n throw new Error('Sender was not the owner.');\n }\n }\n\n @constant\n public get remaining(): Fixed<8> {\n return this.mutableRemaining;\n }\n\n @receive\n public mintTokens(): void {\n if (!this.hasStarted() || this.hasEnded()) {\n throw new Error('Invalid mintTokens');\n }\n\n const { references } = Blockchain.currentTransaction;\n if (references.length === 0) {\n throw new Error('Invalid mintTokens');\n }\n const sender = references[0].address;\n\n let amount = 0;\n // tslint:disable-next-line no-loop-statement\n for (const output of Blockchain.currentTransaction.outputs) {\n if (output.address.equals(this.address)) {\n if (!output.asset.equals(Hash256.NEO)) {\n throw new Error('Invalid mintTokens');\n }\n\n amount += output.value * this.amountPerNEO;\n }\n }\n\n if (amount > this.remaining) {\n throw new Error('Invalid mintTokens');\n }\n\n if (amount === 0) {\n throw new Error('Invalid mintTokens');\n }\n\n const coin = LinkedSmartContract.for();\n if (!coin.issue(sender, amount)) {\n throw new Error('Invalid mintTokens');\n }\n this.mutableRemaining -= amount;\n }\n\n private hasStarted(): boolean {\n return Blockchain.currentBlockTime >= this.startTimeSeconds;\n }\n\n private hasEnded(): boolean {\n return Blockchain.currentBlockTime > this.startTimeSeconds + this.icoDurationSeconds;\n }\n}\n", + "import {\n Address,\n constant,\n Contract,\n createEventNotifier,\n Fixed,\n ForwardValue,\n MapStorage,\n SmartContract,\n} from '@neo-one/smart-contract';\n\nconst notifyTransfer = createEventNotifier
>(\n 'transfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyApproveSendTransfer = createEventNotifier>(\n 'approveSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyRevokeSendTransfer = createEventNotifier>(\n 'revokeSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\n\ninterface CoinPayableContract {\n readonly approveReceiveTransfer: (\n from: Address,\n amount: Fixed<8>,\n asset: Address,\n // tslint:disable-next-line readonly-array\n ...args: ForwardValue[]\n ) => boolean;\n readonly onRevokeSendTransfer: (from: Address, amount: Fixed<8>, asset: Address) => void;\n}\n\nexport class Coin extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'NEOβ€’ONE Coin',\n };\n public readonly name = 'Eno';\n public readonly symbol = 'ENO';\n public readonly decimals = 8;\n private readonly balances = MapStorage.for>();\n private readonly approvedTransfers = MapStorage.for<[Address, Address], Fixed<8>>();\n private mutableSupply: Fixed<8> = 0;\n\n @constant\n public get totalSupply(): Fixed<8> {\n return this.mutableSupply;\n }\n\n @constant\n public balanceOf(address: Address): Fixed<8> {\n const balance = this.balances.get(address);\n\n return balance === undefined ? 0 : balance;\n }\n\n @constant\n public approvedTransfer(from: Address, to: Address): Fixed<8> {\n const approved = this.approvedTransfers.get([from, to]);\n\n return approved === undefined ? 0 : approved;\n }\n\n // tslint:disable-next-line readonly-array\n public transfer(from: Address, to: Address, amount: Fixed<8>, ...approveArgs: ForwardValue[]): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const fromBalance = this.balanceOf(from);\n if (fromBalance < amount) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n const reduceApproved = approved >= amount && Address.isCaller(to);\n if (!reduceApproved && !Address.isCaller(from)) {\n return false;\n }\n\n const contract = Contract.for(to);\n if (contract !== undefined && !Address.isCaller(to)) {\n const smartContract = SmartContract.for(to);\n if (!smartContract.approveReceiveTransfer(from, amount, this.address, ...approveArgs)) {\n return false;\n }\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(from, fromBalance - amount);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(from, to, amount);\n\n if (reduceApproved) {\n this.approvedTransfers.set([from, to], approved - amount);\n }\n\n return true;\n }\n\n public approveSendTransfer(from: Address, to: Address, amount: Fixed<0>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], this.approvedTransfer(from, to) + amount);\n notifyApproveSendTransfer(from, to, amount);\n\n return true;\n }\n\n public approveReceiveTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): boolean {\n return false;\n }\n\n public revokeSendTransfer(from: Address, to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n if (approved < amount) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], approved - amount);\n notifyRevokeSendTransfer(from, to, amount);\n\n const contract = Contract.for(to);\n if (contract !== undefined) {\n const smartContract = SmartContract.for(to);\n // NOTE: This should catch errors once we have stack isolation\n smartContract.onRevokeSendTransfer(from, amount, this.address);\n }\n\n return true;\n }\n\n public onRevokeSendTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): void {\n // do nothing\n }\n\n public issue(to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(undefined, to, amount);\n this.mutableSupply += amount;\n\n return true;\n }\n}\n", + "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? ReturnType extends SmartContractArg\n ? T[K]\n : never\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Address;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Hash256;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", + ], + version: 3, + }, + AWFQ5usn6UPEQo85pNxLyNuuGnSvC9uckv: { + mappings: + 'AAAA;AAWuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqnCnB;AAAA;AAAA;ADrnCmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqnCT;AAAA;AAAA;ADrnCS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqnCC;AAAA;AAAA;ADrnCD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC+mC9B;AAAA;AAAA;AD/mC8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC+mCpB;AAAA;AAAA;AD/mCoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC+mCV;AAAA;AAAA;AD/mCU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACymC7B;AAAA;AAAA;ADzmC6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACymCnB;AAAA;AAAA;ADzmCmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACymCT;AAAA;AAAA;ADzmCS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyB/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AALF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8DkE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA9DlE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACS;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAHiD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOpB;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAH0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMrB;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAxB+E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAjF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAX;AAAA;AAAA;AAAA;AAAf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOE;AAAA;AAAA;AAPF;AAOE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAPF;AAQE;AAAA;AAAA;AARF;AAQE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AARF;AASE;AAAA;AAAA;AATF;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATF;AAcE;AAAA;AAAA;AAdF;AAcE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAdF;AAmBE;AAAA;AAAA;AAnBF;AAmBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnBF;AA0BE;AAAA;AAAA;AA1BF;AA0BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAkCE;AAAA;AAAA;AAlCF;AAkCE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAlCF;AAsEE;AAAA;AAAA;AAtEF;AAsEE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAtEF;AAqFE;AAAA;AAAA;AArFF;AAqFE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArFF;AAyFE;AAAA;AAAA;AAzFF;AAyFE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzFF;AAoHE;AAAA;AAAA;AApHF;AAoHE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AApHF;AAwHE;AAAA;AAAA;AAxHF;AAwHE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxHF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', + names: [], + sources: ['../neo-one/contracts/Token.ts', '../../../../../../neo-one-smart-contract/src/index.d.ts'], + sourcesContent: [ + "import {\n Address,\n constant,\n Contract,\n createEventNotifier,\n Fixed,\n ForwardValue,\n MapStorage,\n SmartContract,\n} from '@neo-one/smart-contract';\n\nconst notifyTransfer = createEventNotifier
>(\n 'transfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyApproveSendTransfer = createEventNotifier>(\n 'approveSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyRevokeSendTransfer = createEventNotifier>(\n 'revokeSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\n\ninterface TokenPayableContract {\n readonly approveReceiveTransfer: (\n from: Address,\n amount: Fixed<8>,\n asset: Address,\n // tslint:disable-next-line readonly-array\n ...args: ForwardValue[]\n ) => boolean;\n readonly onRevokeSendTransfer: (from: Address, amount: Fixed<8>, asset: Address) => void;\n}\n\nexport class Token extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'NEOβ€’ONE Token',\n };\n public readonly name = 'One';\n public readonly symbol = 'ONE';\n public readonly decimals = 8;\n private readonly balances = MapStorage.for>();\n private readonly approvedTransfers = MapStorage.for<[Address, Address], Fixed<8>>();\n private mutableSupply: Fixed<8> = 0;\n\n @constant\n public get totalSupply(): Fixed<8> {\n return this.mutableSupply;\n }\n\n @constant\n public balanceOf(address: Address): Fixed<8> {\n const balance = this.balances.get(address);\n\n return balance === undefined ? 0 : balance;\n }\n\n @constant\n public approvedTransfer(from: Address, to: Address): Fixed<8> {\n const approved = this.approvedTransfers.get([from, to]);\n\n return approved === undefined ? 0 : approved;\n }\n\n // tslint:disable-next-line readonly-array\n public transfer(from: Address, to: Address, amount: Fixed<8>, ...approveArgs: ForwardValue[]): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const fromBalance = this.balanceOf(from);\n if (fromBalance < amount) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n const reduceApproved = approved >= amount && Address.isCaller(to);\n if (!reduceApproved && !Address.isCaller(from)) {\n return false;\n }\n\n const contract = Contract.for(to);\n if (contract !== undefined && !Address.isCaller(to)) {\n const smartContract = SmartContract.for(to);\n if (!smartContract.approveReceiveTransfer(from, amount, this.address, ...approveArgs)) {\n return false;\n }\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(from, fromBalance - amount);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(from, to, amount);\n\n if (reduceApproved) {\n this.approvedTransfers.set([from, to], approved - amount);\n }\n\n return true;\n }\n\n public approveSendTransfer(from: Address, to: Address, amount: Fixed<0>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], this.approvedTransfer(from, to) + amount);\n notifyApproveSendTransfer(from, to, amount);\n\n return true;\n }\n\n public approveReceiveTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): boolean {\n return false;\n }\n\n public revokeSendTransfer(from: Address, to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n if (approved < amount) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], approved - amount);\n notifyRevokeSendTransfer(from, to, amount);\n\n const contract = Contract.for(to);\n if (contract !== undefined) {\n const smartContract = SmartContract.for(to);\n // NOTE: This should catch errors once we have stack isolation\n smartContract.onRevokeSendTransfer(from, amount, this.address);\n }\n\n return true;\n }\n\n public onRevokeSendTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): void {\n // do nothing\n }\n\n public issue(to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(undefined, to, amount);\n this.mutableSupply += amount;\n\n return true;\n }\n}\n", + "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? ReturnType extends SmartContractArg\n ? T[K]\n : never\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Address;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Hash256;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", + ], + version: 3, + }, + } as any; +} + +export const sourceMaps: SourceMaps = sourceMapsIn; diff --git a/packages/neo-one-cli/src/__data__/projects/exchange/codegen/test.ts b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/test.ts new file mode 100644 index 0000000000..4368c1aebd --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/codegen/test.ts @@ -0,0 +1,17 @@ +/* @hash 7f4682a38c988dedec87b805dda91de0 */ +// tslint:disable +/* eslint-disable */ +import { createWithContracts, TestOptions, WithContractsOptions } from '@neo-one/smart-contract-test'; +import { Contracts } from './contracts'; +import * as path from 'path'; + +export const withContracts: ( + test: (contracts: Contracts & TestOptions) => Promise, + options?: WithContractsOptions, +) => Promise = createWithContracts([ + { name: 'Coin', filePath: path.resolve(__dirname, '../neo-one/contracts/Coin.ts') }, + { name: 'Exchange', filePath: path.resolve(__dirname, '../neo-one/contracts/Exchange.ts') }, + { name: 'Token', filePath: path.resolve(__dirname, '../neo-one/contracts/Token.ts') }, + { name: 'CoinICO', filePath: path.resolve(__dirname, '../neo-one/contracts/CoinICO.ts') }, + { name: 'ICO', filePath: path.resolve(__dirname, '../neo-one/contracts/ICO.ts') }, +]); diff --git a/packages/neo-one-cli/src/__data__/projects/exchange/neo-one/contracts/Coin.ts b/packages/neo-one-cli/src/__data__/projects/exchange/neo-one/contracts/Coin.ts new file mode 100644 index 0000000000..130b92723d --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/neo-one/contracts/Coin.ts @@ -0,0 +1,174 @@ +import { + Address, + constant, + Contract, + createEventNotifier, + Fixed, + ForwardValue, + MapStorage, + SmartContract, +} from '@neo-one/smart-contract'; + +const notifyTransfer = createEventNotifier
>( + 'transfer', + 'from', + 'to', + 'amount', +); +const notifyApproveSendTransfer = createEventNotifier>( + 'approveSendTransfer', + 'from', + 'to', + 'amount', +); +const notifyRevokeSendTransfer = createEventNotifier>( + 'revokeSendTransfer', + 'from', + 'to', + 'amount', +); + +interface CoinPayableContract { + readonly approveReceiveTransfer: ( + from: Address, + amount: Fixed<8>, + asset: Address, + // tslint:disable-next-line readonly-array + ...args: ForwardValue[] + ) => boolean; + readonly onRevokeSendTransfer: (from: Address, amount: Fixed<8>, asset: Address) => void; +} + +export class Coin extends SmartContract { + public readonly properties = { + codeVersion: '1.0', + author: 'dicarlo2', + email: 'alex.dicarlo@neotracker.io', + description: 'NEOβ€’ONE Coin', + }; + public readonly name = 'Eno'; + public readonly symbol = 'ENO'; + public readonly decimals = 8; + private readonly balances = MapStorage.for>(); + private readonly approvedTransfers = MapStorage.for<[Address, Address], Fixed<8>>(); + private mutableSupply: Fixed<8> = 0; + + @constant + public get totalSupply(): Fixed<8> { + return this.mutableSupply; + } + + @constant + public balanceOf(address: Address): Fixed<8> { + const balance = this.balances.get(address); + + return balance === undefined ? 0 : balance; + } + + @constant + public approvedTransfer(from: Address, to: Address): Fixed<8> { + const approved = this.approvedTransfers.get([from, to]); + + return approved === undefined ? 0 : approved; + } + + // tslint:disable-next-line readonly-array + public transfer(from: Address, to: Address, amount: Fixed<8>, ...approveArgs: ForwardValue[]): boolean { + if (amount < 0) { + throw new Error(`Amount must be greater than 0: ${amount}`); + } + + const fromBalance = this.balanceOf(from); + if (fromBalance < amount) { + return false; + } + + const approved = this.approvedTransfer(from, to); + const reduceApproved = approved >= amount && Address.isCaller(to); + if (!reduceApproved && !Address.isCaller(from)) { + return false; + } + + const contract = Contract.for(to); + if (contract !== undefined && !Address.isCaller(to)) { + const smartContract = SmartContract.for(to); + if (!smartContract.approveReceiveTransfer(from, amount, this.address, ...approveArgs)) { + return false; + } + } + + const toBalance = this.balanceOf(to); + this.balances.set(from, fromBalance - amount); + this.balances.set(to, toBalance + amount); + notifyTransfer(from, to, amount); + + if (reduceApproved) { + this.approvedTransfers.set([from, to], approved - amount); + } + + return true; + } + + public approveSendTransfer(from: Address, to: Address, amount: Fixed<0>): boolean { + if (amount < 0) { + throw new Error(`Amount must be greater than 0: ${amount}`); + } + + if (!Address.isCaller(from)) { + return false; + } + + this.approvedTransfers.set([from, to], this.approvedTransfer(from, to) + amount); + notifyApproveSendTransfer(from, to, amount); + + return true; + } + + public approveReceiveTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): boolean { + return false; + } + + public revokeSendTransfer(from: Address, to: Address, amount: Fixed<8>): boolean { + if (amount < 0) { + throw new Error(`Amount must be greater than 0: ${amount}`); + } + + if (!Address.isCaller(from)) { + return false; + } + + const approved = this.approvedTransfer(from, to); + if (approved < amount) { + return false; + } + + this.approvedTransfers.set([from, to], approved - amount); + notifyRevokeSendTransfer(from, to, amount); + + const contract = Contract.for(to); + if (contract !== undefined) { + const smartContract = SmartContract.for(to); + // NOTE: This should catch errors once we have stack isolation + smartContract.onRevokeSendTransfer(from, amount, this.address); + } + + return true; + } + + public onRevokeSendTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): void { + // do nothing + } + + public issue(to: Address, amount: Fixed<8>): boolean { + if (amount < 0) { + throw new Error(`Amount must be greater than 0: ${amount}`); + } + + const toBalance = this.balanceOf(to); + this.balances.set(to, toBalance + amount); + notifyTransfer(undefined, to, amount); + this.mutableSupply += amount; + + return true; + } +} diff --git a/packages/neo-one-cli/src/__data__/projects/exchange/neo-one/contracts/CoinICO.ts b/packages/neo-one-cli/src/__data__/projects/exchange/neo-one/contracts/CoinICO.ts new file mode 100644 index 0000000000..fdf02a0b5b --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/neo-one/contracts/CoinICO.ts @@ -0,0 +1,87 @@ +import { + Address, + Blockchain, + constant, + Deploy, + Fixed, + Hash256, + Integer, + LinkedSmartContract, + receive, + SmartContract, +} from '@neo-one/smart-contract'; +import { Coin } from './Coin'; + +export class CoinICO extends SmartContract { + public readonly properties = { + codeVersion: '1.0', + author: 'dicarlo2', + email: 'alex.dicarlo@neotracker.io', + description: 'NEOβ€’ONE Coin ICO', + }; + public readonly amountPerNEO = 10; + private mutableRemaining: Fixed<8> = 10_000_000_00000000; + + public constructor( + public readonly owner: Address = Deploy.senderAddress, + public readonly startTimeSeconds: Integer = Blockchain.currentBlockTime, + public readonly icoDurationSeconds: Integer = 157700000, + ) { + super(); + if (!Address.isCaller(owner)) { + throw new Error('Sender was not the owner.'); + } + } + + @constant + public get remaining(): Fixed<8> { + return this.mutableRemaining; + } + + @receive + public mintTokens(): void { + if (!this.hasStarted() || this.hasEnded()) { + throw new Error('Invalid mintTokens'); + } + + const { references } = Blockchain.currentTransaction; + if (references.length === 0) { + throw new Error('Invalid mintTokens'); + } + const sender = references[0].address; + + let amount = 0; + // tslint:disable-next-line no-loop-statement + for (const output of Blockchain.currentTransaction.outputs) { + if (output.address.equals(this.address)) { + if (!output.asset.equals(Hash256.NEO)) { + throw new Error('Invalid mintTokens'); + } + + amount += output.value * this.amountPerNEO; + } + } + + if (amount > this.remaining) { + throw new Error('Invalid mintTokens'); + } + + if (amount === 0) { + throw new Error('Invalid mintTokens'); + } + + const coin = LinkedSmartContract.for(); + if (!coin.issue(sender, amount)) { + throw new Error('Invalid mintTokens'); + } + this.mutableRemaining -= amount; + } + + private hasStarted(): boolean { + return Blockchain.currentBlockTime >= this.startTimeSeconds; + } + + private hasEnded(): boolean { + return Blockchain.currentBlockTime > this.startTimeSeconds + this.icoDurationSeconds; + } +} diff --git a/packages/neo-one-cli/src/__data__/projects/exchange/neo-one/contracts/Exchange.ts b/packages/neo-one-cli/src/__data__/projects/exchange/neo-one/contracts/Exchange.ts new file mode 100644 index 0000000000..ec1b4c8e27 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/neo-one/contracts/Exchange.ts @@ -0,0 +1,318 @@ +import { + Address, + constant, + Deploy, + Hash256, + MapStorage, + crypto, + Fixed8, + createEventNotifier, + SmartContract, +} from '@neo-one/smart-contract'; + +const notifyDeposited = createEventNotifier('deposited', 'address', 'assetID', 'amount'); +const notifyWithdrawn = createEventNotifier('withdrawn', 'address', 'assetID', 'amount'); +const notifyOfferCreated = createEventNotifier( + 'offerCreated', + 'makerAddress', + 'offerAssetID', + 'offerAmount', + 'wantAssetID', + 'wantAmount', + 'offerHash', +); +const notifyOfferCancelled = createEventNotifier('offerCancelled', 'offerHash'); +const notifyBurnt = createEventNotifier( + 'burnt', + 'filler', + 'takerFeeAssetID', + 'takerFeeAmount', +); +const notifyFilled = createEventNotifier( + 'offerFilled', + 'filler', + 'offerHash', + 'amountToFill', + 'offerAssetID', + 'offerAmount', + 'wantAssetID', + 'wantAmount', + 'amountToTake', +); + +interface NEP5 { + readonly transfer: (from: Address, to: Address, amount: Fixed8) => boolean; +} + +type Offer = { + readonly maker: Address; + readonly offerAssetID: Address; + readonly offerAmount: Fixed8; + readonly wantAssetID: Address; + readonly wantAmount: Fixed8; + readonly makerFeeAssetID: Address; + readonly makerFeeAvailableAmount: Fixed8; + readonly nonce: string; +}; + +// Based on the Switcheo BrokerContract: https://github.com/Switcheo/switcheo-neo +export class Exchange extends SmartContract { + private mutableFeeAddress: Address; + private readonly balances = MapStorage.for<[Address, Address], Fixed8>(); + private readonly offers = MapStorage.for(); + + public constructor(public readonly owner: Address = Deploy.senderAddress) { + super(); + if (!Address.isCaller(owner)) { + throw new Error('Sender was not the owner.'); + } + this.mutableFeeAddress = this.address; + } + + @constant + public balanceOf(address: Address, assetID: Address): Fixed8 { + const balance = this.balances.get([address, assetID]); + + return balance === undefined ? 0 : balance; + } + + @constant + public getOffer(offerHash: Hash256): Offer | undefined { + return this.offers.get(offerHash); + } + + public depositNEP5(from: Address, assetID: Address, amount: Fixed8): void { + if (!Address.isCaller(from)) throw new Error('Caller was not the sender!'); + if (amount < 1) throw new Error('Amount must be greater than 0!'); + + this.transferNEP5(from, this.address, assetID, amount); + this.balances.set([from, assetID], this.balanceOf(from, assetID) + amount); + notifyDeposited(from, assetID, amount); + } + + public withdrawNEP5(from: Address, assetID: Address, amount: Fixed8): void { + if (amount < 0) throw new Error(`Amount must be greater than 0: ${amount}`); + const balance = this.balanceOf(from, assetID); + if (balance < amount) throw new Error(`Not enough Balance to withdraw ${amount}!`); + if (!Address.isCaller(from)) throw new Error('Caller is not authorized to withdraw funds!'); + + this.transferNEP5(this.address, from, assetID, amount); + this.balances.set([from, assetID], this.balanceOf(from, assetID) - amount); + notifyWithdrawn(from, assetID, amount); + } + + public makeOffer( + maker: Address, + offerAssetID: Address, + offerAmount: Fixed8, + wantAssetID: Address, + wantAmount: Fixed8, + makerFeeAssetID: Address, + makerFeeAvailableAmount: Fixed8, + nonce: string, + ): void { + // Check that transaction is called/signed by the maker + if (!Address.isCaller(maker)) throw new Error('Caller is not authorized to make an offer on behalf of the maker!'); + // Check that the offer does not already exist + const offerHash = this.getOfferHash( + maker, + offerAssetID, + offerAmount, + wantAssetID, + wantAmount, + makerFeeAssetID, + makerFeeAvailableAmount, + nonce, + ); + if (this.getOffer(offerHash) !== undefined) throw new Error('Offer does not exist!'); + // Check that amounts > 0 + if (offerAmount <= 0 || wantAmount <= 0) throw new Error('Invalid amount. All amounts must be > 0!'); + // Check that the trade is across different assets + if (offerAssetID === wantAssetID) throw new Error('Cannot make an offer for the same asset!'); + // Check fees + if (makerFeeAvailableAmount < 0) throw new Error('Fee available amount cannot be < 0!'); + // Reduce available balance for the offered asset and amount + this.balances.set([maker, offerAssetID], this.balanceOf(maker, offerAssetID) - offerAmount); + // Reserve fees from the maker fee asset only if it is different from want asset + if (makerFeeAssetID !== wantAssetID && makerFeeAvailableAmount > 0) { + // Reduce fees here separately as it is a different asset type + this.balances.set([maker, makerFeeAssetID], this.balanceOf(maker, makerFeeAssetID) - makerFeeAvailableAmount); + } + // Add the offer to storage + this.offers.set(offerHash, { + maker, + offerAssetID, + offerAmount, + wantAssetID, + wantAmount, + makerFeeAssetID, + makerFeeAvailableAmount, + nonce, + }); + notifyOfferCreated(maker, offerAssetID, offerAmount, wantAssetID, wantAmount, offerHash); + } + + // Currently above the 10 GAS limit. + public fillOffer( + filler: Address, + offerHash: Hash256, + amountToTake: Fixed8, + takerFeeAssetID: Address, + takerFeeAmount: Fixed8, + burnTakerFee: boolean, + makerFeeAmount: Fixed8, + burnMakerFee: boolean, + ): void { + // Check that transaction is called/signed by the filler + if (!Address.isCaller(filler)) throw new Error('Caller is not authorized to fill offer on behalf of the filler!'); + // Check fees + if (takerFeeAmount < 0) throw new Error('takerFeeAmount must not be < 0!'); + if (makerFeeAmount < 0) throw new Error('makerFeeAmount must not be < 0!'); + // Check that the offer still exists + const offer = this.getOffer(offerHash); + if (offer === undefined) throw new Error('Offer does not exist!'); + // Check that the filler is different from the maker + if (filler === offer.maker) throw new Error('Filler cannot be the same as the maker!'); + // Check that the amount that will be taken is at least 1 + if (amountToTake < 1) throw new Error('Filler must take a nonzero amount of the offered asset!'); + // Check that you cannot take more than available + if (amountToTake > offer.offerAmount) throw new Error('Filler requests more than available in offer!'); + // Calculate amount we have to give the offerer (what the offerer wants) + const amountToFill = (amountToTake * offer.wantAmount) / offer.offerAmount; + if (amountToFill < 1) throw new Error('Must fill a nonzero amount of the offered asset!'); + // Check that there is enough balance to reduce for filler + const wantAssetBalance = this.balanceOf(filler, offer.wantAssetID); + if (wantAssetBalance < amountToFill) throw new Error('Not enough balance to fill offer!'); + // Check if we should deduct fees separately from the taker amount & there is enough balance in native fees if using native fees + const deductTakerFeesSeparately = takerFeeAssetID !== offer.offerAssetID; + const feeAssetBalance = this.balanceOf(filler, takerFeeAssetID); + if (deductTakerFeesSeparately && takerFeeAmount > 0 && feeAssetBalance <= takerFeeAmount) { + throw new Error('Filler does not have enough balance for fee!'); + } + // Check that maker fee does not exceed remaining amount that can be deducted as maker fees + if (offer.makerFeeAvailableAmount < makerFeeAmount) throw new Error('Maker does not have enough balance for fee!'); + // Check if we should deduct fees separately from the maker receiving amount + const deductMakerFeesSeparately = offer.makerFeeAssetID !== offer.wantAssetID; + + // Reduce balance from filler + this.balances.set([filler, offer.wantAssetID], this.balanceOf(filler, offer.wantAssetID) - amountToFill); + // Move filled asset to the maker balance (reduce fees if needed) + const amountForMakerAfterFees = deductMakerFeesSeparately ? amountToFill : amountToFill - makerFeeAmount; + this.balances.set( + [offer.maker, offer.wantAssetID], + this.balanceOf(offer.maker, offer.wantAssetID) + amountForMakerAfterFees, + ); + // Move taken asset to the taker balance + const amountToTakeAfterFees = deductTakerFeesSeparately ? amountToTake : amountToTake - takerFeeAmount; + this.balances.set([filler, offer.offerAssetID], this.balanceOf(filler, offer.offerAssetID) + amountToTakeAfterFees); + + // Move fees + if (takerFeeAmount > 0) { + if (deductTakerFeesSeparately) { + // Reduce fees here from contract balance separately as it is a different asset type + this.balances.set([filler, takerFeeAssetID], this.balanceOf(filler, takerFeeAssetID) - takerFeeAmount); + } + if (burnTakerFee) { + // Emit burnt event for easier client tracking + notifyBurnt(filler, takerFeeAssetID, takerFeeAmount); + } else { + // Only increase fee address balance if not burning + this.balances.set( + [this.feeAddress, takerFeeAssetID], + this.balanceOf(this.feeAddress, takerFeeAssetID) + takerFeeAmount, + ); + } + } + let makerFeeAvailableAmount = offer.makerFeeAvailableAmount; + if (makerFeeAmount > 0) { + // Reduce from available maker fees here + makerFeeAvailableAmount = offer.makerFeeAvailableAmount - makerFeeAmount; + + if (burnMakerFee) { + // Emit burnt event for easier client tracking + notifyBurnt(offer.maker, offer.makerFeeAssetID, makerFeeAmount); + } else { + // Only increase fee address balance if not burning + this.balances.set( + [this.feeAddress, offer.makerFeeAssetID], + this.balanceOf(this.feeAddress, offer.makerFeeAssetID) + makerFeeAmount, + ); + } + } + + const offerAmount = offer.offerAmount - amountToTake; + const wantAmount = offer.wantAmount - amountToFill; + if (offerAmount === 0) { + this.offers.delete(offerHash); + } else { + this.offers.set(offerHash, { ...offer, offerAmount, wantAmount, makerFeeAvailableAmount }); + } + notifyFilled( + filler, + offerHash, + amountToFill, + offer.offerAssetID, + offer.offerAmount, + offer.wantAssetID, + offer.wantAmount, + amountToTake, + ); + } + + public cancelOffer(maker: Address, offerHash: Hash256): void { + if (!Address.isCaller(maker)) throw new Error('Only the offer maker may cancel an offer!'); + + const offer = this.getOffer(offerHash); + if (offer === undefined) throw new Error('Offer does not exist!'); + + this.balances.set([maker, offer.offerAssetID], this.balanceOf(maker, offer.offerAssetID) + offer.offerAmount); + this.balances.set( + [maker, offer.makerFeeAssetID], + this.balanceOf(maker, offer.makerFeeAssetID) + offer.makerFeeAvailableAmount, + ); + this.offers.delete(offerHash); + notifyOfferCancelled(offerHash); + } + + public set feeAddress(address: Address) { + if (!Address.isCaller(this.owner)) { + throw new Error('Only the contract owner can change the FeeAddress!'); + } + + this.mutableFeeAddress = address; + } + + @constant + public get feeAddress(): Address { + return this.mutableFeeAddress; + } + + private getOfferHash( + maker: Address, + offerAssetID: Address, + offerAmount: Fixed8, + wantAssetID: Address, + wantAmount: Fixed8, + makerFeeAssetID: Address, + makerFeeAvailableAmount: Fixed8, + nonce: string, + ): Hash256 { + const offerBuffer = Buffer.concat([ + maker, + offerAssetID, + wantAssetID, + makerFeeAssetID, + Buffer.from([offerAmount, wantAmount, makerFeeAvailableAmount].toString()), + Buffer.from(nonce), + ]); + + return crypto.hash256(offerBuffer); + } + + private transferNEP5(from: Address, to: Address, assetID: Address, amount: Fixed8): void { + const nep5Asset = SmartContract.for(assetID); + if (!nep5Asset.transfer(from, to, amount)) { + throw new Error('Failed to transfer NEP-5 tokens!'); + } + } +} diff --git a/packages/neo-one-cli/src/__data__/projects/exchange/neo-one/contracts/ICO.ts b/packages/neo-one-cli/src/__data__/projects/exchange/neo-one/contracts/ICO.ts new file mode 100644 index 0000000000..7416b5d372 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/neo-one/contracts/ICO.ts @@ -0,0 +1,87 @@ +import { + Address, + Blockchain, + constant, + Deploy, + Fixed, + Hash256, + Integer, + LinkedSmartContract, + receive, + SmartContract, +} from '@neo-one/smart-contract'; +import { Token } from './Token'; + +export class ICO extends SmartContract { + public readonly properties = { + codeVersion: '1.0', + author: 'dicarlo2', + email: 'alex.dicarlo@neotracker.io', + description: 'NEOβ€’ONE ICO', + }; + public readonly amountPerNEO = 10; + private mutableRemaining: Fixed<8> = 10_000_000_000_00000000; + + public constructor( + public readonly owner: Address = Deploy.senderAddress, + public readonly startTimeSeconds: Integer = Blockchain.currentBlockTime, + public readonly icoDurationSeconds: Integer = 157700000, + ) { + super(); + if (!Address.isCaller(owner)) { + throw new Error('Sender was not the owner.'); + } + } + + @constant + public get remaining(): Fixed<8> { + return this.mutableRemaining; + } + + @receive + public mintTokens(): void { + if (!this.hasStarted() || this.hasEnded()) { + throw new Error('Invalid mintTokens'); + } + + const { references } = Blockchain.currentTransaction; + if (references.length === 0) { + throw new Error('Invalid mintTokens'); + } + const sender = references[0].address; + + let amount = 0; + // tslint:disable-next-line no-loop-statement + for (const output of Blockchain.currentTransaction.outputs) { + if (output.address.equals(this.address)) { + if (!output.asset.equals(Hash256.NEO)) { + throw new Error('Invalid mintTokens'); + } + + amount += output.value * this.amountPerNEO; + } + } + + if (amount > this.remaining) { + throw new Error('Invalid mintTokens'); + } + + if (amount === 0) { + throw new Error('Invalid mintTokens'); + } + + const token = LinkedSmartContract.for(); + if (!token.issue(sender, amount)) { + throw new Error('Invalid mintTokens'); + } + this.mutableRemaining -= amount; + } + + private hasStarted(): boolean { + return Blockchain.currentBlockTime >= this.startTimeSeconds; + } + + private hasEnded(): boolean { + return Blockchain.currentBlockTime > this.startTimeSeconds + this.icoDurationSeconds; + } +} diff --git a/packages/neo-one-cli/src/__data__/projects/exchange/neo-one/contracts/Token.ts b/packages/neo-one-cli/src/__data__/projects/exchange/neo-one/contracts/Token.ts new file mode 100644 index 0000000000..60303e0e37 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/neo-one/contracts/Token.ts @@ -0,0 +1,174 @@ +import { + Address, + constant, + Contract, + createEventNotifier, + Fixed, + ForwardValue, + MapStorage, + SmartContract, +} from '@neo-one/smart-contract'; + +const notifyTransfer = createEventNotifier
>( + 'transfer', + 'from', + 'to', + 'amount', +); +const notifyApproveSendTransfer = createEventNotifier>( + 'approveSendTransfer', + 'from', + 'to', + 'amount', +); +const notifyRevokeSendTransfer = createEventNotifier>( + 'revokeSendTransfer', + 'from', + 'to', + 'amount', +); + +interface TokenPayableContract { + readonly approveReceiveTransfer: ( + from: Address, + amount: Fixed<8>, + asset: Address, + // tslint:disable-next-line readonly-array + ...args: ForwardValue[] + ) => boolean; + readonly onRevokeSendTransfer: (from: Address, amount: Fixed<8>, asset: Address) => void; +} + +export class Token extends SmartContract { + public readonly properties = { + codeVersion: '1.0', + author: 'dicarlo2', + email: 'alex.dicarlo@neotracker.io', + description: 'NEOβ€’ONE Token', + }; + public readonly name = 'One'; + public readonly symbol = 'ONE'; + public readonly decimals = 8; + private readonly balances = MapStorage.for>(); + private readonly approvedTransfers = MapStorage.for<[Address, Address], Fixed<8>>(); + private mutableSupply: Fixed<8> = 0; + + @constant + public get totalSupply(): Fixed<8> { + return this.mutableSupply; + } + + @constant + public balanceOf(address: Address): Fixed<8> { + const balance = this.balances.get(address); + + return balance === undefined ? 0 : balance; + } + + @constant + public approvedTransfer(from: Address, to: Address): Fixed<8> { + const approved = this.approvedTransfers.get([from, to]); + + return approved === undefined ? 0 : approved; + } + + // tslint:disable-next-line readonly-array + public transfer(from: Address, to: Address, amount: Fixed<8>, ...approveArgs: ForwardValue[]): boolean { + if (amount < 0) { + throw new Error(`Amount must be greater than 0: ${amount}`); + } + + const fromBalance = this.balanceOf(from); + if (fromBalance < amount) { + return false; + } + + const approved = this.approvedTransfer(from, to); + const reduceApproved = approved >= amount && Address.isCaller(to); + if (!reduceApproved && !Address.isCaller(from)) { + return false; + } + + const contract = Contract.for(to); + if (contract !== undefined && !Address.isCaller(to)) { + const smartContract = SmartContract.for(to); + if (!smartContract.approveReceiveTransfer(from, amount, this.address, ...approveArgs)) { + return false; + } + } + + const toBalance = this.balanceOf(to); + this.balances.set(from, fromBalance - amount); + this.balances.set(to, toBalance + amount); + notifyTransfer(from, to, amount); + + if (reduceApproved) { + this.approvedTransfers.set([from, to], approved - amount); + } + + return true; + } + + public approveSendTransfer(from: Address, to: Address, amount: Fixed<0>): boolean { + if (amount < 0) { + throw new Error(`Amount must be greater than 0: ${amount}`); + } + + if (!Address.isCaller(from)) { + return false; + } + + this.approvedTransfers.set([from, to], this.approvedTransfer(from, to) + amount); + notifyApproveSendTransfer(from, to, amount); + + return true; + } + + public approveReceiveTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): boolean { + return false; + } + + public revokeSendTransfer(from: Address, to: Address, amount: Fixed<8>): boolean { + if (amount < 0) { + throw new Error(`Amount must be greater than 0: ${amount}`); + } + + if (!Address.isCaller(from)) { + return false; + } + + const approved = this.approvedTransfer(from, to); + if (approved < amount) { + return false; + } + + this.approvedTransfers.set([from, to], approved - amount); + notifyRevokeSendTransfer(from, to, amount); + + const contract = Contract.for(to); + if (contract !== undefined) { + const smartContract = SmartContract.for(to); + // NOTE: This should catch errors once we have stack isolation + smartContract.onRevokeSendTransfer(from, amount, this.address); + } + + return true; + } + + public onRevokeSendTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): void { + // do nothing + } + + public issue(to: Address, amount: Fixed<8>): boolean { + if (amount < 0) { + throw new Error(`Amount must be greater than 0: ${amount}`); + } + + const toBalance = this.balanceOf(to); + this.balances.set(to, toBalance + amount); + notifyTransfer(undefined, to, amount); + this.mutableSupply += amount; + + return true; + } +} diff --git a/packages/neo-one-smart-contract-lib/src/__data__/contracts/tsconfig.json b/packages/neo-one-cli/src/__data__/projects/exchange/neo-one/contracts/tsconfig.json similarity index 100% rename from packages/neo-one-smart-contract-lib/src/__data__/contracts/tsconfig.json rename to packages/neo-one-cli/src/__data__/projects/exchange/neo-one/contracts/tsconfig.json diff --git a/packages/neo-one-cli/src/__data__/projects/exchange/neo-one/migration.ts b/packages/neo-one-cli/src/__data__/projects/exchange/neo-one/migration.ts new file mode 100644 index 0000000000..45ceabbd16 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/exchange/neo-one/migration.ts @@ -0,0 +1,10 @@ +// tslint:disable no-floating-promises no-default-export no-implicit-dependencies export-name +import BigNumber from 'bignumber.js'; +import { MigrationContracts } from '../codegen'; + +export default ({ token, ico, coin, coinIco }: MigrationContracts, _network: string) => { + token.deploy(); + coin.deploy(); + ico.deploy(undefined, new BigNumber(1566864121), undefined); + coinIco.deploy(undefined, new BigNumber(1566864121), undefined); +}; diff --git a/packages/neo-one-cli/src/__data__/projects/ico-Js/.neo-one.config.js b/packages/neo-one-cli/src/__data__/projects/ico-Js/.neo-one.config.js index 36e440b67d..a77af926aa 100644 --- a/packages/neo-one-cli/src/__data__/projects/ico-Js/.neo-one.config.js +++ b/packages/neo-one-cli/src/__data__/projects/ico-Js/.neo-one.config.js @@ -14,6 +14,9 @@ const neotrackerPort = parseInt( ); module.exports = { + contracts: { + outDir: nodePath.join(tmpDir, 'compiled'), + }, migration: { path: nodePath.join('neo-one', 'migration.ts'), }, @@ -29,6 +32,6 @@ module.exports = { neotracker: { path: nodePath.join(tmpDir, 'neotracker'), port: neotrackerPort, - skip: false, + skip: true, }, }; diff --git a/packages/neo-one-cli/src/__data__/projects/ico-Js/codegen/client.js b/packages/neo-one-cli/src/__data__/projects/ico-Js/codegen/client.js index fee9888198..c30b909183 100644 --- a/packages/neo-one-cli/src/__data__/projects/ico-Js/codegen/client.js +++ b/packages/neo-one-cli/src/__data__/projects/ico-Js/codegen/client.js @@ -1,7 +1,8 @@ -/* @hash 6a825bb1fc578614e72a5301095a3be1 */ +/* @hash cf67ecdbed890bdd640f40dacfed0a42 */ // tslint:disable /* eslint-disable */ import { + addLocalKeysSync, Client, DapiUserAccountProvider, DeveloperClient, @@ -20,7 +21,8 @@ const getDefaultUserAccountProviders = (provider) => { }), }; - const dapi = typeof globalThis === 'undefined' ? undefined : globalThis.neoDapi; + const dapi = + typeof globalThis === 'undefined' ? undefined : globalThis.neoDapi; if (dapi !== undefined) { return { ...localUserAccountProvider, @@ -37,7 +39,8 @@ const getDefaultUserAccountProviders = (provider) => { return localUserAccountProvider; }; -const isLocalUserAccountProvider = (userAccountProvider) => userAccountProvider instanceof LocalUserAccountProvider; +const isLocalUserAccountProvider = (userAccountProvider) => + userAccountProvider instanceof LocalUserAccountProvider; export const createClient = (getUserAccountProvidersOrHost) => { let getUserAccountProviders = getDefaultUserAccountProviders; @@ -49,78 +52,99 @@ export const createClient = (getUserAccountProvidersOrHost) => { } const providers = []; - if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') { - providers.push({ network: 'local', rpcURL: `http://${host}:10070/rpc` }); + if ( + process.env.NODE_ENV !== 'production' || + process.env.NEO_ONE_DEV === 'true' + ) { + providers.push({ network: 'local', rpcURL: `http://${host}:10020/rpc` }); } const provider = new NEOONEProvider(providers); const userAccountProviders = getUserAccountProviders(provider); - const localUserAccountProviders = Object.values(userAccountProviders).filter(isLocalUserAccountProvider); + const localUserAccountProviders = Object.values(userAccountProviders).filter( + isLocalUserAccountProvider, + ); const localUserAccountProvider = localUserAccountProviders.find( - (userAccountProvider) => userAccountProvider.keystore instanceof LocalKeyStore, + (userAccountProvider) => + userAccountProvider.keystore instanceof LocalKeyStore, ); - if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') { + if ( + process.env.NODE_ENV !== 'production' || + process.env.NEO_ONE_DEV === 'true' + ) { if (localUserAccountProvider !== undefined) { const localKeyStore = localUserAccountProvider.keystore; if (localKeyStore instanceof LocalKeyStore) { - Promise.all([ - localKeyStore.addUserAccount({ - network: 'local', - name: 'master', - privateKey: 'L4qhHtwbiAMu1nrSmsTP5a3dJbxA3SNS6oheKnKd8E7KTJyCLcUv', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'alfa', - privateKey: 'KyX5sPKRpAMb3XAFLUrHv7u1LxKkKFrpyJDgE4kceRX9FRJ4WRCQ', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'bravo', - privateKey: 'L5LfJc2Ngsxu8ZFMvnJbYJ1QdQCstzRXmKLybsFS1aQFURkJ5CHS', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'charlie', - privateKey: 'KxCH2Ei4TLqp2Qa7swz9bstQc5uREiCpvzvL9R6xLX8X5U8ZqeBj', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'delta', - privateKey: 'KyVvngWhhfHiociMuwyLmGw8xTu9myKXRnvv5Fes9jDMa2Zyc6P9', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'echo', - privateKey: 'L37qr7PWqWmgjUPfRC9mS78GjRxgGi4azySCsLUBMAa5hMka2JEm', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'foxtrot', - privateKey: 'KwFf8gdSWxvC5Pp8AidNdF6mHqjH3CukyF3RnfwS5vzMQKLGTP13', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'golf', - privateKey: 'Kyn2BN3QuHGYgkt9qJgvwzY8yH4xgTUAKwnGhvU1w8Nh3JnivrAr', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'hotel', - privateKey: 'L5UXfz1xyzDkghGwistNMCV8pbpU4fg14Ez9rfo1y4KgwiadnWX3', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'india', - privateKey: 'L5Yoq3X4ojx2FvZZxHbMcvT6var4LaXKHEpMYyyxw4jjhSUNJTRa', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'juliett', - privateKey: 'L1DWex8PtmQJH4GYK9YAuyzmotyL6anY937LxJF54iaALrTtxsD6', - }), - ]).catch(() => { - // do nothing - }); + addLocalKeysSync( + [ + { + network: 'local', + name: 'master', + privateKey: + 'L4qhHtwbiAMu1nrSmsTP5a3dJbxA3SNS6oheKnKd8E7KTJyCLcUv', + }, + { + network: 'local', + name: 'alfa', + privateKey: + 'KyX5sPKRpAMb3XAFLUrHv7u1LxKkKFrpyJDgE4kceRX9FRJ4WRCQ', + }, + { + network: 'local', + name: 'bravo', + privateKey: + 'L5LfJc2Ngsxu8ZFMvnJbYJ1QdQCstzRXmKLybsFS1aQFURkJ5CHS', + }, + { + network: 'local', + name: 'charlie', + privateKey: + 'KxCH2Ei4TLqp2Qa7swz9bstQc5uREiCpvzvL9R6xLX8X5U8ZqeBj', + }, + { + network: 'local', + name: 'delta', + privateKey: + 'KyVvngWhhfHiociMuwyLmGw8xTu9myKXRnvv5Fes9jDMa2Zyc6P9', + }, + { + network: 'local', + name: 'echo', + privateKey: + 'L37qr7PWqWmgjUPfRC9mS78GjRxgGi4azySCsLUBMAa5hMka2JEm', + }, + { + network: 'local', + name: 'foxtrot', + privateKey: + 'KwFf8gdSWxvC5Pp8AidNdF6mHqjH3CukyF3RnfwS5vzMQKLGTP13', + }, + { + network: 'local', + name: 'golf', + privateKey: + 'Kyn2BN3QuHGYgkt9qJgvwzY8yH4xgTUAKwnGhvU1w8Nh3JnivrAr', + }, + { + network: 'local', + name: 'hotel', + privateKey: + 'L5UXfz1xyzDkghGwistNMCV8pbpU4fg14Ez9rfo1y4KgwiadnWX3', + }, + { + network: 'local', + name: 'india', + privateKey: + 'L5Yoq3X4ojx2FvZZxHbMcvT6var4LaXKHEpMYyyxw4jjhSUNJTRa', + }, + { + network: 'local', + name: 'juliett', + privateKey: + 'L1DWex8PtmQJH4GYK9YAuyzmotyL6anY937LxJF54iaALrTtxsD6', + }, + ], + localKeyStore, + ); } } } @@ -129,5 +153,10 @@ export const createClient = (getUserAccountProvidersOrHost) => { }; export const createDeveloperClients = (host = 'localhost') => ({ - local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10070/rpc` })), + local: new DeveloperClient( + new NEOONEDataProvider({ + network: 'local', + rpcURL: `http://${host}:10020/rpc`, + }), + ), }); diff --git a/packages/neo-one-cli/src/__data__/projects/ico-Js/codegen/sourceMaps.js b/packages/neo-one-cli/src/__data__/projects/ico-Js/codegen/sourceMaps.js index 355a122e9b..63d6668903 100644 --- a/packages/neo-one-cli/src/__data__/projects/ico-Js/codegen/sourceMaps.js +++ b/packages/neo-one-cli/src/__data__/projects/ico-Js/codegen/sourceMaps.js @@ -1,4 +1,4 @@ -/* @hash 3845add30574df455694167cc9d030d8 */ +/* @hash 389a1a76bd5b1158b377fc2432e0c752 */ // tslint:disable /* eslint-disable */ let sourceMapsIn = {}; @@ -7,17 +7,17 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') sourceMapsIn = { ARW79N7gAWHytcWSkkXvwrJiR4FTyvf2f8: { mappings: - 'AAAA;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQF;AAAA;AAAA;AAAA;AAAA;AAES;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACaA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACkCE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AAAA;AAAA;AADjB;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACirCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFtxCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUE;AAAA;AAAA;AAVF;AAUE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACE;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAxB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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACirCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFtxCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOE;AAAA;AAAA;AAPF;AAOE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAPF;AAWI;AAAA;AAAA;AAXJ;AAWI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAXJ;AAYI;AAAA;AAAA;AAZJ;AAYI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAZJ;AAaI;AAAA;AAAA;AAbJ;AAaI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAbJ;AAqBE;AAAA;AAAA;AArBF;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArBF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAdA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', + 'AAAA;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQF;AAAA;AAAA;AAAA;AAAA;AAES;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACaA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACkCE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AAAA;AAAA;AADjB;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACmrCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFxxCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUE;AAAA;AAAA;AAVF;AAUE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACE;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAxB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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACmrCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFxxCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOE;AAAA;AAAA;AAPF;AAOE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAPF;AAWI;AAAA;AAAA;AAXJ;AAWI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAXJ;AAYI;AAAA;AAAA;AAZJ;AAYI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAZJ;AAaI;AAAA;AAAA;AAbJ;AAaI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAbJ;AAqBE;AAAA;AAAA;AArBF;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArBF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAdA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', names: [], sources: [ '../neo-one/contracts/ICO.ts', '../neo-one/contracts/Token.ts', - '../../../../../../../dist/neo-one/packages/neo-one-smart-contract/index.d.ts', + '../../../../../../neo-one-smart-contract/src/index.d.ts', ], sourcesContent: [ "import {\n Address,\n Blockchain,\n constant,\n Deploy,\n Fixed,\n Hash256,\n Integer,\n LinkedSmartContract,\n receive,\n SmartContract,\n} from '@neo-one/smart-contract';\nimport { Token } from './Token';\n\nexport class ICO extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'NEOβ€’ONE ICO',\n };\n public readonly amountPerNEO = 10;\n private mutableRemaining: Fixed<8> = 10_000_000_000_00000000;\n\n public constructor(\n public readonly owner: Address = Deploy.senderAddress,\n public readonly startTimeSeconds: Integer = Blockchain.currentBlockTime,\n public readonly icoDurationSeconds: Integer = 157700000,\n ) {\n super();\n if (!Address.isCaller(owner)) {\n throw new Error('Sender was not the owner.');\n }\n }\n\n @constant\n public get remaining(): Fixed<8> {\n return this.mutableRemaining;\n }\n\n @receive\n public mintTokens(): void {\n if (!this.hasStarted() || this.hasEnded()) {\n throw new Error('Invalid mintTokens');\n }\n\n const { references } = Blockchain.currentTransaction;\n if (references.length === 0) {\n throw new Error('Invalid mintTokens');\n }\n const sender = references[0].address;\n\n let amount = 0;\n // tslint:disable-next-line no-loop-statement\n for (const output of Blockchain.currentTransaction.outputs) {\n if (output.address.equals(this.address)) {\n if (!output.asset.equals(Hash256.NEO)) {\n throw new Error('Invalid mintTokens');\n }\n\n amount += output.value * this.amountPerNEO;\n }\n }\n\n if (amount > this.remaining) {\n throw new Error('Invalid mintTokens');\n }\n\n if (amount === 0) {\n throw new Error('Invalid mintTokens');\n }\n\n const token = LinkedSmartContract.for();\n if (!token.issue(sender, amount)) {\n throw new Error('Invalid mintTokens');\n }\n this.mutableRemaining -= amount;\n }\n\n private hasStarted(): boolean {\n return Blockchain.currentBlockTime >= this.startTimeSeconds;\n }\n\n private hasEnded(): boolean {\n return Blockchain.currentBlockTime > this.startTimeSeconds + this.icoDurationSeconds;\n }\n}\n", "import {\n Address,\n constant,\n Contract,\n createEventNotifier,\n Fixed,\n ForwardValue,\n MapStorage,\n SmartContract,\n} from '@neo-one/smart-contract';\n\nconst notifyTransfer = createEventNotifier
>(\n 'transfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyApproveSendTransfer = createEventNotifier>(\n 'approveSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyRevokeSendTransfer = createEventNotifier>(\n 'revokeSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\n\ninterface TokenPayableContract {\n readonly approveReceiveTransfer: (\n from: Address,\n amount: Fixed<8>,\n asset: Address,\n // tslint:disable-next-line readonly-array\n ...args: ForwardValue[]\n ) => boolean;\n readonly onRevokeSendTransfer: (from: Address, amount: Fixed<8>, asset: Address) => void;\n}\n\nexport class Token extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'NEOβ€’ONE Token',\n };\n public readonly name = 'One';\n public readonly symbol = 'ONE';\n public readonly decimals = 8;\n private readonly balances = MapStorage.for>();\n private readonly approvedTransfers = MapStorage.for<[Address, Address], Fixed<8>>();\n private mutableSupply: Fixed<8> = 0;\n\n @constant\n public get totalSupply(): Fixed<8> {\n return this.mutableSupply;\n }\n\n @constant\n public balanceOf(address: Address): Fixed<8> {\n const balance = this.balances.get(address);\n\n return balance === undefined ? 0 : balance;\n }\n\n @constant\n public approvedTransfer(from: Address, to: Address): Fixed<8> {\n const approved = this.approvedTransfers.get([from, to]);\n\n return approved === undefined ? 0 : approved;\n }\n\n // tslint:disable-next-line readonly-array\n public transfer(from: Address, to: Address, amount: Fixed<8>, ...approveArgs: ForwardValue[]): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const fromBalance = this.balanceOf(from);\n if (fromBalance < amount) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n const reduceApproved = approved >= amount && Address.isCaller(to);\n if (!reduceApproved && !Address.isCaller(from)) {\n return false;\n }\n\n const contract = Contract.for(to);\n if (contract !== undefined && !Address.isCaller(to)) {\n const smartContract = SmartContract.for(to);\n if (!smartContract.approveReceiveTransfer(from, amount, this.address, ...approveArgs)) {\n return false;\n }\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(from, fromBalance - amount);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(from, to, amount);\n\n if (reduceApproved) {\n this.approvedTransfers.set([from, to], approved - amount);\n }\n\n return true;\n }\n\n public approveSendTransfer(from: Address, to: Address, amount: Fixed<0>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], this.approvedTransfer(from, to) + amount);\n notifyApproveSendTransfer(from, to, amount);\n\n return true;\n }\n\n public approveReceiveTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): boolean {\n return false;\n }\n\n public revokeSendTransfer(from: Address, to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n if (approved < amount) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], approved - amount);\n notifyRevokeSendTransfer(from, to, amount);\n\n const contract = Contract.for(to);\n if (contract !== undefined) {\n const smartContract = SmartContract.for(to);\n // NOTE: This should catch errors once we have stack isolation\n smartContract.onRevokeSendTransfer(from, amount, this.address);\n }\n\n return true;\n }\n\n public onRevokeSendTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): void {\n // do nothing\n }\n\n public issue(to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(undefined, to, amount);\n this.mutableSupply += amount;\n\n return true;\n }\n}\n", - "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? (ReturnType extends SmartContractArg ? T[K] : never)\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Buffer;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", + "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? ReturnType extends SmartContractArg\n ? T[K]\n : never\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Address;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Hash256;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", ], version: 3, }, @@ -25,13 +25,10 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') mappings: 'AAAA;AAe+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwnC3B;AAAA;AAAA;ADxnC2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwnCjB;AAAA;AAAA;ADxnCiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwnCP;AAAA;AAAA;ADxnCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwnCG;AAAA;AAAA;ADxnCH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgnCzB;AAAA;AAAA;ADhnCyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgnCf;AAAA;AAAA;ADhnCe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgnCL;AAAA;AAAA;ADhnCK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgnCK;AAAA;AAAA;ADhnCL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmC1B;AAAA;AAAA;ADxmC0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmChB;AAAA;AAAA;ADxmCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmCN;AAAA;AAAA;ADxmCM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmCI;AAAA;AAAA;ADxmCJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmB5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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AAAA;AAAA;AAAA;AADvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAZnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYqE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAd;AAAA;AAAA;AAAA;AAAA;AAAlB;AAAA;AAAA;AAAA;AAAS;AAAT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAe+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASE;AAAA;AAAA;AATF;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATF;AAgBE;AAAA;AAAA;AAhBF;AAgBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAhBF;AA2BE;AAAA;AAAA;AA3BF;AA2BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA3BF;AA+BE;AAAA;AAAA;AA/BF;AA+BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/BF;AA+CE;AAAA;AAAA;AA/CF;AA+CE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/CF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASE;AAAA;AAAA;AATF;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATF;AAgBE;AAAA;AAAA;AAhBF;AAgBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAhBF;AA2BE;AAAA;AAAA;AA3BF;AA2BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA3BF;AA+BE;AAAA;AAAA;AA/BF;AA+BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/BF;AA+CE;AAAA;AAAA;AA/CF;AA+CE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/CF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', names: [], - sources: [ - '../neo-one/contracts/Escrow.ts', - '../../../../../../../dist/neo-one/packages/neo-one-smart-contract/index.d.ts', - ], + sources: ['../neo-one/contracts/Escrow.ts', '../../../../../../neo-one-smart-contract/src/index.d.ts'], sourcesContent: [ "import {\n Address,\n constant,\n createEventNotifier,\n declareEvent,\n Fixed,\n ForwardedValue,\n MapStorage,\n SmartContract,\n} from '@neo-one/smart-contract';\n\ninterface Token {\n readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n}\n\nconst notifyBalanceAvailable = createEventNotifier>(\n 'balanceAvailable',\n 'from',\n 'to',\n 'asset',\n 'amount',\n);\n\nconst notifyBalanceClaimed = createEventNotifier>(\n 'balanceClaimed',\n 'from',\n 'to',\n 'asset',\n 'amount',\n);\n\nconst notifyBalanceRefunded = createEventNotifier>(\n 'balanceRefunded',\n 'from',\n 'to',\n 'asset',\n 'amount',\n);\n\ndeclareEvent
>('transfer', 'from', 'to', 'amount');\n\nexport class Escrow extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'Escrow',\n };\n private readonly balances = MapStorage.for<[Address, Address, Address], Fixed<8>>();\n\n @constant\n public balanceOf(from: Address, to: Address, asset: Address): Fixed<8> {\n const balance = this.balances.get([to, asset, from]);\n\n return balance === undefined ? 0 : balance;\n }\n\n public approveReceiveTransfer(from: Address, amount: Fixed<8>, asset: Address, to: ForwardedValue
): boolean {\n if (!Address.isCaller(asset)) {\n return false;\n }\n\n this.setBalance(from, to, asset, this.balanceOf(from, to, asset) + amount);\n notifyBalanceAvailable(from, to, asset, amount);\n\n return true;\n }\n\n public onRevokeSendTransfer(_from: Address, _amount: Fixed<0>, _asset: Address): void {\n // do nothing\n }\n\n public claim(from: Address, to: Address, asset: Address, amount: Fixed<8>): boolean {\n if (!Address.isCaller(to)) {\n return false;\n }\n\n const contract = SmartContract.for(asset);\n if (contract.transfer(this.address, to, amount)) {\n this.setBalance(from, to, asset, this.balanceOf(from, to, asset) - amount);\n notifyBalanceClaimed(from, to, asset, amount);\n\n return true;\n }\n\n return false;\n }\n\n public refund(from: Address, to: Address, asset: Address, amount: Fixed<8>): boolean {\n if (!Address.isCaller(from)) {\n return false;\n }\n\n const contract = SmartContract.for(asset);\n if (contract.transfer(this.address, from, amount)) {\n this.setBalance(from, to, asset, this.balanceOf(from, to, asset) - amount);\n notifyBalanceRefunded(from, to, asset, amount);\n\n return true;\n }\n\n return false;\n }\n\n private setBalance(from: Address, to: Address, asset: Address, amount: Fixed<8>): void {\n this.balances.set([to, asset, from], amount);\n }\n}\n", - "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? (ReturnType extends SmartContractArg ? T[K] : never)\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Buffer;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", + "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? ReturnType extends SmartContractArg\n ? T[K]\n : never\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Address;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Hash256;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", ], version: 3, }, @@ -39,13 +36,10 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') mappings: 'AAAA;AAWuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqnCnB;AAAA;AAAA;ADrnCmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqnCT;AAAA;AAAA;ADrnCS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqnCC;AAAA;AAAA;ADrnCD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC+mC9B;AAAA;AAAA;AD/mC8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC+mCpB;AAAA;AAAA;AD/mCoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC+mCV;AAAA;AAAA;AD/mCU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACymC7B;AAAA;AAAA;ADzmC6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACymCnB;AAAA;AAAA;ADzmCmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACymCT;AAAA;AAAA;ADzmCS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyB/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAES;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC6C;AAAA;AAAA;AAAA;AAAA;AAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAlB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAY;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAxB;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AAH2C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACuC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC8D;AAAA;AAAA;AAAA;AAAA;AAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAA;AAAA;AAAA;AAA3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAa;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAT;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAzB;AAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAApC;AAAA;AAAA;AAH4D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AApCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACE;AAAA;AAAA;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAEE;AAAA;AAAA;AAAA;AAAA;AAFF;AAAA;AAAA;AAAA;AAAA;AAGE;AAAA;AAAA;AAAA;AAAA;AAHF;AAAA;AAAA;AAAA;AAAA;AAKE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AALF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8DkE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA9DlE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACS;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAHiD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOpB;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAH0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMrB;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAxB+E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAjF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAX;AAAA;AAAA;AAAA;AAAf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOE;AAAA;AAAA;AAPF;AAOE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAPF;AAQE;AAAA;AAAA;AARF;AAQE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AARF;AASE;AAAA;AAAA;AATF;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATF;AAcE;AAAA;AAAA;AAdF;AAcE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAdF;AAmBE;AAAA;AAAA;AAnBF;AAmBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnBF;AA0BE;AAAA;AAAA;AA1BF;AA0BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAkCE;AAAA;AAAA;AAlCF;AAkCE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAlCF;AAsEE;AAAA;AAAA;AAtEF;AAsEE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAtEF;AAqFE;AAAA;AAAA;AArFF;AAqFE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArFF;AAyFE;AAAA;AAAA;AAzFF;AAyFE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzFF;AAoHE;AAAA;AAAA;AApHF;AAoHE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AApHF;AAwHE;AAAA;AAAA;AAxHF;AAwHE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxHF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', names: [], - sources: [ - '../neo-one/contracts/Token.ts', - '../../../../../../../dist/neo-one/packages/neo-one-smart-contract/index.d.ts', - ], + sources: ['../neo-one/contracts/Token.ts', '../../../../../../neo-one-smart-contract/src/index.d.ts'], sourcesContent: [ "import {\n Address,\n constant,\n Contract,\n createEventNotifier,\n Fixed,\n ForwardValue,\n MapStorage,\n SmartContract,\n} from '@neo-one/smart-contract';\n\nconst notifyTransfer = createEventNotifier
>(\n 'transfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyApproveSendTransfer = createEventNotifier>(\n 'approveSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyRevokeSendTransfer = createEventNotifier>(\n 'revokeSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\n\ninterface TokenPayableContract {\n readonly approveReceiveTransfer: (\n from: Address,\n amount: Fixed<8>,\n asset: Address,\n // tslint:disable-next-line readonly-array\n ...args: ForwardValue[]\n ) => boolean;\n readonly onRevokeSendTransfer: (from: Address, amount: Fixed<8>, asset: Address) => void;\n}\n\nexport class Token extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'NEOβ€’ONE Token',\n };\n public readonly name = 'One';\n public readonly symbol = 'ONE';\n public readonly decimals = 8;\n private readonly balances = MapStorage.for>();\n private readonly approvedTransfers = MapStorage.for<[Address, Address], Fixed<8>>();\n private mutableSupply: Fixed<8> = 0;\n\n @constant\n public get totalSupply(): Fixed<8> {\n return this.mutableSupply;\n }\n\n @constant\n public balanceOf(address: Address): Fixed<8> {\n const balance = this.balances.get(address);\n\n return balance === undefined ? 0 : balance;\n }\n\n @constant\n public approvedTransfer(from: Address, to: Address): Fixed<8> {\n const approved = this.approvedTransfers.get([from, to]);\n\n return approved === undefined ? 0 : approved;\n }\n\n // tslint:disable-next-line readonly-array\n public transfer(from: Address, to: Address, amount: Fixed<8>, ...approveArgs: ForwardValue[]): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const fromBalance = this.balanceOf(from);\n if (fromBalance < amount) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n const reduceApproved = approved >= amount && Address.isCaller(to);\n if (!reduceApproved && !Address.isCaller(from)) {\n return false;\n }\n\n const contract = Contract.for(to);\n if (contract !== undefined && !Address.isCaller(to)) {\n const smartContract = SmartContract.for(to);\n if (!smartContract.approveReceiveTransfer(from, amount, this.address, ...approveArgs)) {\n return false;\n }\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(from, fromBalance - amount);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(from, to, amount);\n\n if (reduceApproved) {\n this.approvedTransfers.set([from, to], approved - amount);\n }\n\n return true;\n }\n\n public approveSendTransfer(from: Address, to: Address, amount: Fixed<0>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], this.approvedTransfer(from, to) + amount);\n notifyApproveSendTransfer(from, to, amount);\n\n return true;\n }\n\n public approveReceiveTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): boolean {\n return false;\n }\n\n public revokeSendTransfer(from: Address, to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n if (approved < amount) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], approved - amount);\n notifyRevokeSendTransfer(from, to, amount);\n\n const contract = Contract.for(to);\n if (contract !== undefined) {\n const smartContract = SmartContract.for(to);\n // NOTE: This should catch errors once we have stack isolation\n smartContract.onRevokeSendTransfer(from, amount, this.address);\n }\n\n return true;\n }\n\n public onRevokeSendTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): void {\n // do nothing\n }\n\n public issue(to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(undefined, to, amount);\n this.mutableSupply += amount;\n\n return true;\n }\n}\n", - "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? (ReturnType extends SmartContractArg ? T[K] : never)\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Buffer;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", + "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? ReturnType extends SmartContractArg\n ? T[K]\n : never\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Address;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Hash256;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", ], version: 3, }, diff --git a/packages/neo-one-cli/src/__data__/projects/ico-Js/codegen/test.js b/packages/neo-one-cli/src/__data__/projects/ico-Js/codegen/test.js index 4be0adec7e..746176e394 100644 --- a/packages/neo-one-cli/src/__data__/projects/ico-Js/codegen/test.js +++ b/packages/neo-one-cli/src/__data__/projects/ico-Js/codegen/test.js @@ -5,7 +5,16 @@ import { createWithContracts } from '@neo-one/smart-contract-test'; import * as path from 'path'; export const withContracts = createWithContracts([ - { name: 'Escrow', filePath: path.resolve(__dirname, '../neo-one/contracts/Escrow.ts') }, - { name: 'Token', filePath: path.resolve(__dirname, '../neo-one/contracts/Token.ts') }, - { name: 'ICO', filePath: path.resolve(__dirname, '../neo-one/contracts/ICO.ts') }, + { + name: 'Escrow', + filePath: path.resolve(__dirname, '../neo-one/contracts/Escrow.ts'), + }, + { + name: 'Token', + filePath: path.resolve(__dirname, '../neo-one/contracts/Token.ts'), + }, + { + name: 'ICO', + filePath: path.resolve(__dirname, '../neo-one/contracts/ICO.ts'), + }, ]); diff --git a/packages/neo-one-cli/src/__data__/projects/ico-angular/.neo-one.config.js b/packages/neo-one-cli/src/__data__/projects/ico-angular/.neo-one.config.js index 92d3078935..db968d3fed 100644 --- a/packages/neo-one-cli/src/__data__/projects/ico-angular/.neo-one.config.js +++ b/packages/neo-one-cli/src/__data__/projects/ico-angular/.neo-one.config.js @@ -14,6 +14,9 @@ const neotrackerPort = parseInt( ); module.exports = { + contracts: { + outDir: nodePath.join(tmpDir, 'compiled'), + }, migration: { path: nodePath.join('neo-one', 'migration.ts'), }, diff --git a/packages/neo-one-cli/src/__data__/projects/ico-angular/codegen/client.ts b/packages/neo-one-cli/src/__data__/projects/ico-angular/codegen/client.ts index 3f9f2289fe..a4e8e2d2fa 100644 --- a/packages/neo-one-cli/src/__data__/projects/ico-angular/codegen/client.ts +++ b/packages/neo-one-cli/src/__data__/projects/ico-angular/codegen/client.ts @@ -1,7 +1,8 @@ -/* @hash 658682a5c04a79eecb8d789927f232d5 */ +/* @hash 281b309e14983b410d31265f1cf201e2 */ // tslint:disable /* eslint-disable */ import { + addLocalKeysSync, Client, DapiUserAccountProvider, DeveloperClient, @@ -64,7 +65,7 @@ export const createClient = { - // do nothing - }); + addLocalKeysSync( + [ + { network: 'local', name: 'master', privateKey: 'L4qhHtwbiAMu1nrSmsTP5a3dJbxA3SNS6oheKnKd8E7KTJyCLcUv' }, + { network: 'local', name: 'alfa', privateKey: 'KyX5sPKRpAMb3XAFLUrHv7u1LxKkKFrpyJDgE4kceRX9FRJ4WRCQ' }, + { network: 'local', name: 'bravo', privateKey: 'L5LfJc2Ngsxu8ZFMvnJbYJ1QdQCstzRXmKLybsFS1aQFURkJ5CHS' }, + { network: 'local', name: 'charlie', privateKey: 'KxCH2Ei4TLqp2Qa7swz9bstQc5uREiCpvzvL9R6xLX8X5U8ZqeBj' }, + { network: 'local', name: 'delta', privateKey: 'KyVvngWhhfHiociMuwyLmGw8xTu9myKXRnvv5Fes9jDMa2Zyc6P9' }, + { network: 'local', name: 'echo', privateKey: 'L37qr7PWqWmgjUPfRC9mS78GjRxgGi4azySCsLUBMAa5hMka2JEm' }, + { network: 'local', name: 'foxtrot', privateKey: 'KwFf8gdSWxvC5Pp8AidNdF6mHqjH3CukyF3RnfwS5vzMQKLGTP13' }, + { network: 'local', name: 'golf', privateKey: 'Kyn2BN3QuHGYgkt9qJgvwzY8yH4xgTUAKwnGhvU1w8Nh3JnivrAr' }, + { network: 'local', name: 'hotel', privateKey: 'L5UXfz1xyzDkghGwistNMCV8pbpU4fg14Ez9rfo1y4KgwiadnWX3' }, + { network: 'local', name: 'india', privateKey: 'L5Yoq3X4ojx2FvZZxHbMcvT6var4LaXKHEpMYyyxw4jjhSUNJTRa' }, + { network: 'local', name: 'juliett', privateKey: 'L1DWex8PtmQJH4GYK9YAuyzmotyL6anY937LxJF54iaALrTtxsD6' }, + ], + localKeyStore, + ); } } } @@ -145,5 +103,5 @@ export const createClient = ({ - local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10080/rpc` })), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10030/rpc` })), }); diff --git a/packages/neo-one-cli/src/__data__/projects/ico-angular/codegen/contracts.ts b/packages/neo-one-cli/src/__data__/projects/ico-angular/codegen/contracts.ts index d068c176c9..647ff366bd 100644 --- a/packages/neo-one-cli/src/__data__/projects/ico-angular/codegen/contracts.ts +++ b/packages/neo-one-cli/src/__data__/projects/ico-angular/codegen/contracts.ts @@ -1,4 +1,4 @@ -/* @hash 05fd692dad792caa7b0650e950261f1f */ +/* @hash 793fa245837019b4c9e3a66341f16035 */ // tslint:disable /* eslint-disable */ import { Client } from '@neo-one/client'; @@ -16,7 +16,7 @@ export interface Contracts { readonly ico: ICOSmartContract; readonly token: TokenSmartContract; } - +// Refer to the MigrationSmartContract documentation at https://neo-one.io/docs/deployment for more information. export interface MigrationContracts { readonly escrow: EscrowMigrationSmartContract; readonly ico: ICOMigrationSmartContract; diff --git a/packages/neo-one-cli/src/__data__/projects/ico-angular/codegen/sourceMaps.ts b/packages/neo-one-cli/src/__data__/projects/ico-angular/codegen/sourceMaps.ts index d789ee6b47..fb2ef29fdc 100644 --- a/packages/neo-one-cli/src/__data__/projects/ico-angular/codegen/sourceMaps.ts +++ b/packages/neo-one-cli/src/__data__/projects/ico-angular/codegen/sourceMaps.ts @@ -1,4 +1,4 @@ -/* @hash 9559df74ef382864b0da19e61812339b */ +/* @hash 131b18f0b432f289ffa8df09b9d4b599 */ // tslint:disable /* eslint-disable */ import { SourceMaps } from '@neo-one/client'; @@ -9,17 +9,17 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') sourceMapsIn = { ARW79N7gAWHytcWSkkXvwrJiR4FTyvf2f8: { mappings: - 'AAAA;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQF;AAAA;AAAA;AAAA;AAAA;AAES;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACaA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACkCE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AAAA;AAAA;AADjB;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACirCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFtxCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUE;AAAA;AAAA;AAVF;AAUE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACE;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAxB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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACirCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFtxCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOE;AAAA;AAAA;AAPF;AAOE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAPF;AAWI;AAAA;AAAA;AAXJ;AAWI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAXJ;AAYI;AAAA;AAAA;AAZJ;AAYI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAZJ;AAaI;AAAA;AAAA;AAbJ;AAaI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAbJ;AAqBE;AAAA;AAAA;AArBF;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArBF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAdA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', + 'AAAA;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQF;AAAA;AAAA;AAAA;AAAA;AAES;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACaA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACkCE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AAAA;AAAA;AADjB;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACmrCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFxxCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUE;AAAA;AAAA;AAVF;AAUE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACE;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAxB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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACmrCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFxxCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOE;AAAA;AAAA;AAPF;AAOE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAPF;AAWI;AAAA;AAAA;AAXJ;AAWI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAXJ;AAYI;AAAA;AAAA;AAZJ;AAYI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAZJ;AAaI;AAAA;AAAA;AAbJ;AAaI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAbJ;AAqBE;AAAA;AAAA;AArBF;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArBF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAdA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', names: [], sources: [ '../neo-one/contracts/ICO.ts', '../neo-one/contracts/Token.ts', - '../../../../../../../dist/neo-one/packages/neo-one-smart-contract/index.d.ts', + '../../../../../../neo-one-smart-contract/src/index.d.ts', ], sourcesContent: [ "import {\n Address,\n Blockchain,\n constant,\n Deploy,\n Fixed,\n Hash256,\n Integer,\n LinkedSmartContract,\n receive,\n SmartContract,\n} from '@neo-one/smart-contract';\nimport { Token } from './Token';\n\nexport class ICO extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'NEOβ€’ONE ICO',\n };\n public readonly amountPerNEO = 10;\n private mutableRemaining: Fixed<8> = 10_000_000_000_00000000;\n\n public constructor(\n public readonly owner: Address = Deploy.senderAddress,\n public readonly startTimeSeconds: Integer = Blockchain.currentBlockTime,\n public readonly icoDurationSeconds: Integer = 157700000,\n ) {\n super();\n if (!Address.isCaller(owner)) {\n throw new Error('Sender was not the owner.');\n }\n }\n\n @constant\n public get remaining(): Fixed<8> {\n return this.mutableRemaining;\n }\n\n @receive\n public mintTokens(): void {\n if (!this.hasStarted() || this.hasEnded()) {\n throw new Error('Invalid mintTokens');\n }\n\n const { references } = Blockchain.currentTransaction;\n if (references.length === 0) {\n throw new Error('Invalid mintTokens');\n }\n const sender = references[0].address;\n\n let amount = 0;\n // tslint:disable-next-line no-loop-statement\n for (const output of Blockchain.currentTransaction.outputs) {\n if (output.address.equals(this.address)) {\n if (!output.asset.equals(Hash256.NEO)) {\n throw new Error('Invalid mintTokens');\n }\n\n amount += output.value * this.amountPerNEO;\n }\n }\n\n if (amount > this.remaining) {\n throw new Error('Invalid mintTokens');\n }\n\n if (amount === 0) {\n throw new Error('Invalid mintTokens');\n }\n\n const token = LinkedSmartContract.for();\n if (!token.issue(sender, amount)) {\n throw new Error('Invalid mintTokens');\n }\n this.mutableRemaining -= amount;\n }\n\n private hasStarted(): boolean {\n return Blockchain.currentBlockTime >= this.startTimeSeconds;\n }\n\n private hasEnded(): boolean {\n return Blockchain.currentBlockTime > this.startTimeSeconds + this.icoDurationSeconds;\n }\n}\n", "import {\n Address,\n constant,\n Contract,\n createEventNotifier,\n Fixed,\n ForwardValue,\n MapStorage,\n SmartContract,\n} from '@neo-one/smart-contract';\n\nconst notifyTransfer = createEventNotifier
>(\n 'transfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyApproveSendTransfer = createEventNotifier>(\n 'approveSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyRevokeSendTransfer = createEventNotifier>(\n 'revokeSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\n\ninterface TokenPayableContract {\n readonly approveReceiveTransfer: (\n from: Address,\n amount: Fixed<8>,\n asset: Address,\n // tslint:disable-next-line readonly-array\n ...args: ForwardValue[]\n ) => boolean;\n readonly onRevokeSendTransfer: (from: Address, amount: Fixed<8>, asset: Address) => void;\n}\n\nexport class Token extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'NEOβ€’ONE Token',\n };\n public readonly name = 'One';\n public readonly symbol = 'ONE';\n public readonly decimals = 8;\n private readonly balances = MapStorage.for>();\n private readonly approvedTransfers = MapStorage.for<[Address, Address], Fixed<8>>();\n private mutableSupply: Fixed<8> = 0;\n\n @constant\n public get totalSupply(): Fixed<8> {\n return this.mutableSupply;\n }\n\n @constant\n public balanceOf(address: Address): Fixed<8> {\n const balance = this.balances.get(address);\n\n return balance === undefined ? 0 : balance;\n }\n\n @constant\n public approvedTransfer(from: Address, to: Address): Fixed<8> {\n const approved = this.approvedTransfers.get([from, to]);\n\n return approved === undefined ? 0 : approved;\n }\n\n // tslint:disable-next-line readonly-array\n public transfer(from: Address, to: Address, amount: Fixed<8>, ...approveArgs: ForwardValue[]): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const fromBalance = this.balanceOf(from);\n if (fromBalance < amount) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n const reduceApproved = approved >= amount && Address.isCaller(to);\n if (!reduceApproved && !Address.isCaller(from)) {\n return false;\n }\n\n const contract = Contract.for(to);\n if (contract !== undefined && !Address.isCaller(to)) {\n const smartContract = SmartContract.for(to);\n if (!smartContract.approveReceiveTransfer(from, amount, this.address, ...approveArgs)) {\n return false;\n }\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(from, fromBalance - amount);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(from, to, amount);\n\n if (reduceApproved) {\n this.approvedTransfers.set([from, to], approved - amount);\n }\n\n return true;\n }\n\n public approveSendTransfer(from: Address, to: Address, amount: Fixed<0>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], this.approvedTransfer(from, to) + amount);\n notifyApproveSendTransfer(from, to, amount);\n\n return true;\n }\n\n public approveReceiveTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): boolean {\n return false;\n }\n\n public revokeSendTransfer(from: Address, to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n if (approved < amount) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], approved - amount);\n notifyRevokeSendTransfer(from, to, amount);\n\n const contract = Contract.for(to);\n if (contract !== undefined) {\n const smartContract = SmartContract.for(to);\n // NOTE: This should catch errors once we have stack isolation\n smartContract.onRevokeSendTransfer(from, amount, this.address);\n }\n\n return true;\n }\n\n public onRevokeSendTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): void {\n // do nothing\n }\n\n public issue(to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(undefined, to, amount);\n this.mutableSupply += amount;\n\n return true;\n }\n}\n", - "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? (ReturnType extends SmartContractArg ? T[K] : never)\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Buffer;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", + "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? ReturnType extends SmartContractArg\n ? T[K]\n : never\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Address;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Hash256;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", ], version: 3, }, @@ -27,13 +27,10 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') mappings: 'AAAA;AAe+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwnC3B;AAAA;AAAA;ADxnC2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwnCjB;AAAA;AAAA;ADxnCiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwnCP;AAAA;AAAA;ADxnCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwnCG;AAAA;AAAA;ADxnCH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgnCzB;AAAA;AAAA;ADhnCyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgnCf;AAAA;AAAA;ADhnCe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgnCL;AAAA;AAAA;ADhnCK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgnCK;AAAA;AAAA;ADhnCL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmC1B;AAAA;AAAA;ADxmC0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmChB;AAAA;AAAA;ADxmCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmCN;AAAA;AAAA;ADxmCM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmCI;AAAA;AAAA;ADxmCJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmB5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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AAAA;AAAA;AAAA;AADvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAZnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYqE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAd;AAAA;AAAA;AAAA;AAAA;AAAlB;AAAA;AAAA;AAAA;AAAS;AAAT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAe+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASE;AAAA;AAAA;AATF;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATF;AAgBE;AAAA;AAAA;AAhBF;AAgBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAhBF;AA2BE;AAAA;AAAA;AA3BF;AA2BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA3BF;AA+BE;AAAA;AAAA;AA/BF;AA+BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/BF;AA+CE;AAAA;AAAA;AA/CF;AA+CE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/CF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASE;AAAA;AAAA;AATF;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATF;AAgBE;AAAA;AAAA;AAhBF;AAgBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAhBF;AA2BE;AAAA;AAAA;AA3BF;AA2BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA3BF;AA+BE;AAAA;AAAA;AA/BF;AA+BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/BF;AA+CE;AAAA;AAAA;AA/CF;AA+CE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/CF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', names: [], - sources: [ - '../neo-one/contracts/Escrow.ts', - '../../../../../../../dist/neo-one/packages/neo-one-smart-contract/index.d.ts', - ], + sources: ['../neo-one/contracts/Escrow.ts', '../../../../../../neo-one-smart-contract/src/index.d.ts'], sourcesContent: [ "import {\n Address,\n constant,\n createEventNotifier,\n declareEvent,\n Fixed,\n ForwardedValue,\n MapStorage,\n SmartContract,\n} from '@neo-one/smart-contract';\n\ninterface Token {\n readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n}\n\nconst notifyBalanceAvailable = createEventNotifier>(\n 'balanceAvailable',\n 'from',\n 'to',\n 'asset',\n 'amount',\n);\n\nconst notifyBalanceClaimed = createEventNotifier>(\n 'balanceClaimed',\n 'from',\n 'to',\n 'asset',\n 'amount',\n);\n\nconst notifyBalanceRefunded = createEventNotifier>(\n 'balanceRefunded',\n 'from',\n 'to',\n 'asset',\n 'amount',\n);\n\ndeclareEvent
>('transfer', 'from', 'to', 'amount');\n\nexport class Escrow extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'Escrow',\n };\n private readonly balances = MapStorage.for<[Address, Address, Address], Fixed<8>>();\n\n @constant\n public balanceOf(from: Address, to: Address, asset: Address): Fixed<8> {\n const balance = this.balances.get([to, asset, from]);\n\n return balance === undefined ? 0 : balance;\n }\n\n public approveReceiveTransfer(from: Address, amount: Fixed<8>, asset: Address, to: ForwardedValue
): boolean {\n if (!Address.isCaller(asset)) {\n return false;\n }\n\n this.setBalance(from, to, asset, this.balanceOf(from, to, asset) + amount);\n notifyBalanceAvailable(from, to, asset, amount);\n\n return true;\n }\n\n public onRevokeSendTransfer(_from: Address, _amount: Fixed<0>, _asset: Address): void {\n // do nothing\n }\n\n public claim(from: Address, to: Address, asset: Address, amount: Fixed<8>): boolean {\n if (!Address.isCaller(to)) {\n return false;\n }\n\n const contract = SmartContract.for(asset);\n if (contract.transfer(this.address, to, amount)) {\n this.setBalance(from, to, asset, this.balanceOf(from, to, asset) - amount);\n notifyBalanceClaimed(from, to, asset, amount);\n\n return true;\n }\n\n return false;\n }\n\n public refund(from: Address, to: Address, asset: Address, amount: Fixed<8>): boolean {\n if (!Address.isCaller(from)) {\n return false;\n }\n\n const contract = SmartContract.for(asset);\n if (contract.transfer(this.address, from, amount)) {\n this.setBalance(from, to, asset, this.balanceOf(from, to, asset) - amount);\n notifyBalanceRefunded(from, to, asset, amount);\n\n return true;\n }\n\n return false;\n }\n\n private setBalance(from: Address, to: Address, asset: Address, amount: Fixed<8>): void {\n this.balances.set([to, asset, from], amount);\n }\n}\n", - "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? (ReturnType extends SmartContractArg ? T[K] : never)\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Buffer;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", + "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? ReturnType extends SmartContractArg\n ? T[K]\n : never\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Address;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Hash256;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", ], version: 3, }, @@ -41,13 +38,10 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') mappings: 'AAAA;AAWuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqnCnB;AAAA;AAAA;ADrnCmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqnCT;AAAA;AAAA;ADrnCS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqnCC;AAAA;AAAA;ADrnCD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC+mC9B;AAAA;AAAA;AD/mC8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC+mCpB;AAAA;AAAA;AD/mCoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC+mCV;AAAA;AAAA;AD/mCU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACymC7B;AAAA;AAAA;ADzmC6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACymCnB;AAAA;AAAA;ADzmCmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACymCT;AAAA;AAAA;ADzmCS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyB/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AALF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8DkE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA9DlE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACS;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAHiD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOpB;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAH0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMrB;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAxB+E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAjF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAX;AAAA;AAAA;AAAA;AAAf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOE;AAAA;AAAA;AAPF;AAOE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAPF;AAQE;AAAA;AAAA;AARF;AAQE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AARF;AASE;AAAA;AAAA;AATF;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATF;AAcE;AAAA;AAAA;AAdF;AAcE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAdF;AAmBE;AAAA;AAAA;AAnBF;AAmBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnBF;AA0BE;AAAA;AAAA;AA1BF;AA0BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAkCE;AAAA;AAAA;AAlCF;AAkCE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAlCF;AAsEE;AAAA;AAAA;AAtEF;AAsEE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAtEF;AAqFE;AAAA;AAAA;AArFF;AAqFE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArFF;AAyFE;AAAA;AAAA;AAzFF;AAyFE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzFF;AAoHE;AAAA;AAAA;AApHF;AAoHE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AApHF;AAwHE;AAAA;AAAA;AAxHF;AAwHE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxHF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', names: [], - sources: [ - '../neo-one/contracts/Token.ts', - '../../../../../../../dist/neo-one/packages/neo-one-smart-contract/index.d.ts', - ], + sources: ['../neo-one/contracts/Token.ts', '../../../../../../neo-one-smart-contract/src/index.d.ts'], sourcesContent: [ "import {\n Address,\n constant,\n Contract,\n createEventNotifier,\n Fixed,\n ForwardValue,\n MapStorage,\n SmartContract,\n} from '@neo-one/smart-contract';\n\nconst notifyTransfer = createEventNotifier
>(\n 'transfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyApproveSendTransfer = createEventNotifier>(\n 'approveSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyRevokeSendTransfer = createEventNotifier>(\n 'revokeSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\n\ninterface TokenPayableContract {\n readonly approveReceiveTransfer: (\n from: Address,\n amount: Fixed<8>,\n asset: Address,\n // tslint:disable-next-line readonly-array\n ...args: ForwardValue[]\n ) => boolean;\n readonly onRevokeSendTransfer: (from: Address, amount: Fixed<8>, asset: Address) => void;\n}\n\nexport class Token extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'NEOβ€’ONE Token',\n };\n public readonly name = 'One';\n public readonly symbol = 'ONE';\n public readonly decimals = 8;\n private readonly balances = MapStorage.for>();\n private readonly approvedTransfers = MapStorage.for<[Address, Address], Fixed<8>>();\n private mutableSupply: Fixed<8> = 0;\n\n @constant\n public get totalSupply(): Fixed<8> {\n return this.mutableSupply;\n }\n\n @constant\n public balanceOf(address: Address): Fixed<8> {\n const balance = this.balances.get(address);\n\n return balance === undefined ? 0 : balance;\n }\n\n @constant\n public approvedTransfer(from: Address, to: Address): Fixed<8> {\n const approved = this.approvedTransfers.get([from, to]);\n\n return approved === undefined ? 0 : approved;\n }\n\n // tslint:disable-next-line readonly-array\n public transfer(from: Address, to: Address, amount: Fixed<8>, ...approveArgs: ForwardValue[]): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const fromBalance = this.balanceOf(from);\n if (fromBalance < amount) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n const reduceApproved = approved >= amount && Address.isCaller(to);\n if (!reduceApproved && !Address.isCaller(from)) {\n return false;\n }\n\n const contract = Contract.for(to);\n if (contract !== undefined && !Address.isCaller(to)) {\n const smartContract = SmartContract.for(to);\n if (!smartContract.approveReceiveTransfer(from, amount, this.address, ...approveArgs)) {\n return false;\n }\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(from, fromBalance - amount);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(from, to, amount);\n\n if (reduceApproved) {\n this.approvedTransfers.set([from, to], approved - amount);\n }\n\n return true;\n }\n\n public approveSendTransfer(from: Address, to: Address, amount: Fixed<0>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], this.approvedTransfer(from, to) + amount);\n notifyApproveSendTransfer(from, to, amount);\n\n return true;\n }\n\n public approveReceiveTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): boolean {\n return false;\n }\n\n public revokeSendTransfer(from: Address, to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n if (approved < amount) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], approved - amount);\n notifyRevokeSendTransfer(from, to, amount);\n\n const contract = Contract.for(to);\n if (contract !== undefined) {\n const smartContract = SmartContract.for(to);\n // NOTE: This should catch errors once we have stack isolation\n smartContract.onRevokeSendTransfer(from, amount, this.address);\n }\n\n return true;\n }\n\n public onRevokeSendTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): void {\n // do nothing\n }\n\n public issue(to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(undefined, to, amount);\n this.mutableSupply += amount;\n\n return true;\n }\n}\n", - "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? (ReturnType extends SmartContractArg ? T[K] : never)\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Buffer;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", + "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? ReturnType extends SmartContractArg\n ? T[K]\n : never\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Address;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Hash256;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", ], version: 3, }, diff --git a/packages/neo-one-cli/src/__data__/projects/ico-angularJs/.neo-one.config.js b/packages/neo-one-cli/src/__data__/projects/ico-angularJs/.neo-one.config.js index 44b390b8a9..0683d189cd 100644 --- a/packages/neo-one-cli/src/__data__/projects/ico-angularJs/.neo-one.config.js +++ b/packages/neo-one-cli/src/__data__/projects/ico-angularJs/.neo-one.config.js @@ -14,6 +14,9 @@ const neotrackerPort = parseInt( ); module.exports = { + contracts: { + outDir: nodePath.join(tmpDir, 'compiled'), + }, migration: { path: nodePath.join('neo-one', 'migration.ts'), }, diff --git a/packages/neo-one-cli/src/__data__/projects/ico-angularJs/codegen/client.js b/packages/neo-one-cli/src/__data__/projects/ico-angularJs/codegen/client.js index 1a163311bf..5e7ff3fd10 100644 --- a/packages/neo-one-cli/src/__data__/projects/ico-angularJs/codegen/client.js +++ b/packages/neo-one-cli/src/__data__/projects/ico-angularJs/codegen/client.js @@ -1,7 +1,8 @@ -/* @hash 893ab51f0aaf08008112d33346cc4e1d */ +/* @hash 2cf036ce916c8b4860204369700ebb7b */ // tslint:disable /* eslint-disable */ import { + addLocalKeysSync, Client, DapiUserAccountProvider, DeveloperClient, @@ -50,7 +51,7 @@ export const createClient = (getUserAccountProvidersOrHost) => { const providers = []; if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') { - providers.push({ network: 'local', rpcURL: `http://${host}:10090/rpc` }); + providers.push({ network: 'local', rpcURL: `http://${host}:10040/rpc` }); } const provider = new NEOONEProvider(providers); const userAccountProviders = getUserAccountProviders(provider); @@ -62,65 +63,22 @@ export const createClient = (getUserAccountProvidersOrHost) => { if (localUserAccountProvider !== undefined) { const localKeyStore = localUserAccountProvider.keystore; if (localKeyStore instanceof LocalKeyStore) { - Promise.all([ - localKeyStore.addUserAccount({ - network: 'local', - name: 'master', - privateKey: 'L4qhHtwbiAMu1nrSmsTP5a3dJbxA3SNS6oheKnKd8E7KTJyCLcUv', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'alfa', - privateKey: 'KyX5sPKRpAMb3XAFLUrHv7u1LxKkKFrpyJDgE4kceRX9FRJ4WRCQ', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'bravo', - privateKey: 'L5LfJc2Ngsxu8ZFMvnJbYJ1QdQCstzRXmKLybsFS1aQFURkJ5CHS', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'charlie', - privateKey: 'KxCH2Ei4TLqp2Qa7swz9bstQc5uREiCpvzvL9R6xLX8X5U8ZqeBj', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'delta', - privateKey: 'KyVvngWhhfHiociMuwyLmGw8xTu9myKXRnvv5Fes9jDMa2Zyc6P9', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'echo', - privateKey: 'L37qr7PWqWmgjUPfRC9mS78GjRxgGi4azySCsLUBMAa5hMka2JEm', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'foxtrot', - privateKey: 'KwFf8gdSWxvC5Pp8AidNdF6mHqjH3CukyF3RnfwS5vzMQKLGTP13', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'golf', - privateKey: 'Kyn2BN3QuHGYgkt9qJgvwzY8yH4xgTUAKwnGhvU1w8Nh3JnivrAr', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'hotel', - privateKey: 'L5UXfz1xyzDkghGwistNMCV8pbpU4fg14Ez9rfo1y4KgwiadnWX3', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'india', - privateKey: 'L5Yoq3X4ojx2FvZZxHbMcvT6var4LaXKHEpMYyyxw4jjhSUNJTRa', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'juliett', - privateKey: 'L1DWex8PtmQJH4GYK9YAuyzmotyL6anY937LxJF54iaALrTtxsD6', - }), - ]).catch(() => { - // do nothing - }); + addLocalKeysSync( + [ + { network: 'local', name: 'master', privateKey: 'L4qhHtwbiAMu1nrSmsTP5a3dJbxA3SNS6oheKnKd8E7KTJyCLcUv' }, + { network: 'local', name: 'alfa', privateKey: 'KyX5sPKRpAMb3XAFLUrHv7u1LxKkKFrpyJDgE4kceRX9FRJ4WRCQ' }, + { network: 'local', name: 'bravo', privateKey: 'L5LfJc2Ngsxu8ZFMvnJbYJ1QdQCstzRXmKLybsFS1aQFURkJ5CHS' }, + { network: 'local', name: 'charlie', privateKey: 'KxCH2Ei4TLqp2Qa7swz9bstQc5uREiCpvzvL9R6xLX8X5U8ZqeBj' }, + { network: 'local', name: 'delta', privateKey: 'KyVvngWhhfHiociMuwyLmGw8xTu9myKXRnvv5Fes9jDMa2Zyc6P9' }, + { network: 'local', name: 'echo', privateKey: 'L37qr7PWqWmgjUPfRC9mS78GjRxgGi4azySCsLUBMAa5hMka2JEm' }, + { network: 'local', name: 'foxtrot', privateKey: 'KwFf8gdSWxvC5Pp8AidNdF6mHqjH3CukyF3RnfwS5vzMQKLGTP13' }, + { network: 'local', name: 'golf', privateKey: 'Kyn2BN3QuHGYgkt9qJgvwzY8yH4xgTUAKwnGhvU1w8Nh3JnivrAr' }, + { network: 'local', name: 'hotel', privateKey: 'L5UXfz1xyzDkghGwistNMCV8pbpU4fg14Ez9rfo1y4KgwiadnWX3' }, + { network: 'local', name: 'india', privateKey: 'L5Yoq3X4ojx2FvZZxHbMcvT6var4LaXKHEpMYyyxw4jjhSUNJTRa' }, + { network: 'local', name: 'juliett', privateKey: 'L1DWex8PtmQJH4GYK9YAuyzmotyL6anY937LxJF54iaALrTtxsD6' }, + ], + localKeyStore, + ); } } } @@ -129,5 +87,5 @@ export const createClient = (getUserAccountProvidersOrHost) => { }; export const createDeveloperClients = (host = 'localhost') => ({ - local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10090/rpc` })), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10040/rpc` })), }); diff --git a/packages/neo-one-cli/src/__data__/projects/ico-angularJs/codegen/sourceMaps.js b/packages/neo-one-cli/src/__data__/projects/ico-angularJs/codegen/sourceMaps.js index 355a122e9b..63d6668903 100644 --- a/packages/neo-one-cli/src/__data__/projects/ico-angularJs/codegen/sourceMaps.js +++ b/packages/neo-one-cli/src/__data__/projects/ico-angularJs/codegen/sourceMaps.js @@ -1,4 +1,4 @@ -/* @hash 3845add30574df455694167cc9d030d8 */ +/* @hash 389a1a76bd5b1158b377fc2432e0c752 */ // tslint:disable /* eslint-disable */ let sourceMapsIn = {}; @@ -7,17 +7,17 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') sourceMapsIn = { ARW79N7gAWHytcWSkkXvwrJiR4FTyvf2f8: { mappings: - 'AAAA;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQF;AAAA;AAAA;AAAA;AAAA;AAES;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACaA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACkCE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AAAA;AAAA;AADjB;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACirCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFtxCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUE;AAAA;AAAA;AAVF;AAUE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACE;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAxB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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACirCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFtxCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOE;AAAA;AAAA;AAPF;AAOE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAPF;AAWI;AAAA;AAAA;AAXJ;AAWI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAXJ;AAYI;AAAA;AAAA;AAZJ;AAYI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAZJ;AAaI;AAAA;AAAA;AAbJ;AAaI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAbJ;AAqBE;AAAA;AAAA;AArBF;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArBF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAdA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', + 'AAAA;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQF;AAAA;AAAA;AAAA;AAAA;AAES;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACaA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACkCE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AAAA;AAAA;AADjB;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACmrCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFxxCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUE;AAAA;AAAA;AAVF;AAUE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACE;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAxB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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACmrCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFxxCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOE;AAAA;AAAA;AAPF;AAOE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAPF;AAWI;AAAA;AAAA;AAXJ;AAWI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAXJ;AAYI;AAAA;AAAA;AAZJ;AAYI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAZJ;AAaI;AAAA;AAAA;AAbJ;AAaI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAbJ;AAqBE;AAAA;AAAA;AArBF;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArBF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAdA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', names: [], sources: [ '../neo-one/contracts/ICO.ts', '../neo-one/contracts/Token.ts', - '../../../../../../../dist/neo-one/packages/neo-one-smart-contract/index.d.ts', + '../../../../../../neo-one-smart-contract/src/index.d.ts', ], sourcesContent: [ "import {\n Address,\n Blockchain,\n constant,\n Deploy,\n Fixed,\n Hash256,\n Integer,\n LinkedSmartContract,\n receive,\n SmartContract,\n} from '@neo-one/smart-contract';\nimport { Token } from './Token';\n\nexport class ICO extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'NEOβ€’ONE ICO',\n };\n public readonly amountPerNEO = 10;\n private mutableRemaining: Fixed<8> = 10_000_000_000_00000000;\n\n public constructor(\n public readonly owner: Address = Deploy.senderAddress,\n public readonly startTimeSeconds: Integer = Blockchain.currentBlockTime,\n public readonly icoDurationSeconds: Integer = 157700000,\n ) {\n super();\n if (!Address.isCaller(owner)) {\n throw new Error('Sender was not the owner.');\n }\n }\n\n @constant\n public get remaining(): Fixed<8> {\n return this.mutableRemaining;\n }\n\n @receive\n public mintTokens(): void {\n if (!this.hasStarted() || this.hasEnded()) {\n throw new Error('Invalid mintTokens');\n }\n\n const { references } = Blockchain.currentTransaction;\n if (references.length === 0) {\n throw new Error('Invalid mintTokens');\n }\n const sender = references[0].address;\n\n let amount = 0;\n // tslint:disable-next-line no-loop-statement\n for (const output of Blockchain.currentTransaction.outputs) {\n if (output.address.equals(this.address)) {\n if (!output.asset.equals(Hash256.NEO)) {\n throw new Error('Invalid mintTokens');\n }\n\n amount += output.value * this.amountPerNEO;\n }\n }\n\n if (amount > this.remaining) {\n throw new Error('Invalid mintTokens');\n }\n\n if (amount === 0) {\n throw new Error('Invalid mintTokens');\n }\n\n const token = LinkedSmartContract.for();\n if (!token.issue(sender, amount)) {\n throw new Error('Invalid mintTokens');\n }\n this.mutableRemaining -= amount;\n }\n\n private hasStarted(): boolean {\n return Blockchain.currentBlockTime >= this.startTimeSeconds;\n }\n\n private hasEnded(): boolean {\n return Blockchain.currentBlockTime > this.startTimeSeconds + this.icoDurationSeconds;\n }\n}\n", "import {\n Address,\n constant,\n Contract,\n createEventNotifier,\n Fixed,\n ForwardValue,\n MapStorage,\n SmartContract,\n} from '@neo-one/smart-contract';\n\nconst notifyTransfer = createEventNotifier
>(\n 'transfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyApproveSendTransfer = createEventNotifier>(\n 'approveSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyRevokeSendTransfer = createEventNotifier>(\n 'revokeSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\n\ninterface TokenPayableContract {\n readonly approveReceiveTransfer: (\n from: Address,\n amount: Fixed<8>,\n asset: Address,\n // tslint:disable-next-line readonly-array\n ...args: ForwardValue[]\n ) => boolean;\n readonly onRevokeSendTransfer: (from: Address, amount: Fixed<8>, asset: Address) => void;\n}\n\nexport class Token extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'NEOβ€’ONE Token',\n };\n public readonly name = 'One';\n public readonly symbol = 'ONE';\n public readonly decimals = 8;\n private readonly balances = MapStorage.for>();\n private readonly approvedTransfers = MapStorage.for<[Address, Address], Fixed<8>>();\n private mutableSupply: Fixed<8> = 0;\n\n @constant\n public get totalSupply(): Fixed<8> {\n return this.mutableSupply;\n }\n\n @constant\n public balanceOf(address: Address): Fixed<8> {\n const balance = this.balances.get(address);\n\n return balance === undefined ? 0 : balance;\n }\n\n @constant\n public approvedTransfer(from: Address, to: Address): Fixed<8> {\n const approved = this.approvedTransfers.get([from, to]);\n\n return approved === undefined ? 0 : approved;\n }\n\n // tslint:disable-next-line readonly-array\n public transfer(from: Address, to: Address, amount: Fixed<8>, ...approveArgs: ForwardValue[]): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const fromBalance = this.balanceOf(from);\n if (fromBalance < amount) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n const reduceApproved = approved >= amount && Address.isCaller(to);\n if (!reduceApproved && !Address.isCaller(from)) {\n return false;\n }\n\n const contract = Contract.for(to);\n if (contract !== undefined && !Address.isCaller(to)) {\n const smartContract = SmartContract.for(to);\n if (!smartContract.approveReceiveTransfer(from, amount, this.address, ...approveArgs)) {\n return false;\n }\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(from, fromBalance - amount);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(from, to, amount);\n\n if (reduceApproved) {\n this.approvedTransfers.set([from, to], approved - amount);\n }\n\n return true;\n }\n\n public approveSendTransfer(from: Address, to: Address, amount: Fixed<0>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], this.approvedTransfer(from, to) + amount);\n notifyApproveSendTransfer(from, to, amount);\n\n return true;\n }\n\n public approveReceiveTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): boolean {\n return false;\n }\n\n public revokeSendTransfer(from: Address, to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n if (approved < amount) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], approved - amount);\n notifyRevokeSendTransfer(from, to, amount);\n\n const contract = Contract.for(to);\n if (contract !== undefined) {\n const smartContract = SmartContract.for(to);\n // NOTE: This should catch errors once we have stack isolation\n smartContract.onRevokeSendTransfer(from, amount, this.address);\n }\n\n return true;\n }\n\n public onRevokeSendTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): void {\n // do nothing\n }\n\n public issue(to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(undefined, to, amount);\n this.mutableSupply += amount;\n\n return true;\n }\n}\n", - "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? (ReturnType extends SmartContractArg ? T[K] : never)\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Buffer;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", + "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? ReturnType extends SmartContractArg\n ? T[K]\n : never\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Address;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Hash256;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", ], version: 3, }, @@ -25,13 +25,10 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') mappings: 'AAAA;AAe+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwnC3B;AAAA;AAAA;ADxnC2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwnCjB;AAAA;AAAA;ADxnCiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwnCP;AAAA;AAAA;ADxnCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwnCG;AAAA;AAAA;ADxnCH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgnCzB;AAAA;AAAA;ADhnCyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgnCf;AAAA;AAAA;ADhnCe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgnCL;AAAA;AAAA;ADhnCK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgnCK;AAAA;AAAA;ADhnCL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmC1B;AAAA;AAAA;ADxmC0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmChB;AAAA;AAAA;ADxmCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmCN;AAAA;AAAA;ADxmCM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmCI;AAAA;AAAA;ADxmCJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmB5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACgC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC6C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACuE;AAAA;AAAA;AAAA;AAAA;AACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAlB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAY;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAxB;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AAHqE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA6C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA+D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA+E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA/E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAqH;AAAA;AAAA;AAAA;AAAA;AAC7F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACS;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAGwD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAf;AAAA;AAZnC;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AADjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACgC;AAAA;AAAA;AADhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC6C;AAAA;AAAA;AAD7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACuE;AAAA;AAAA;AAAA;AAAA;AACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAlB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAY;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAxB;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AAHqE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAZnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYqE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAd;AAAA;AAAA;AAAA;AAAA;AAAlB;AAAA;AAAA;AAAA;AAAS;AAAT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAe+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASE;AAAA;AAAA;AATF;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATF;AAgBE;AAAA;AAAA;AAhBF;AAgBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAhBF;AA2BE;AAAA;AAAA;AA3BF;AA2BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA3BF;AA+BE;AAAA;AAAA;AA/BF;AA+BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/BF;AA+CE;AAAA;AAAA;AA/CF;AA+CE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/CF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASE;AAAA;AAAA;AATF;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATF;AAgBE;AAAA;AAAA;AAhBF;AAgBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAhBF;AA2BE;AAAA;AAAA;AA3BF;AA2BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA3BF;AA+BE;AAAA;AAAA;AA/BF;AA+BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/BF;AA+CE;AAAA;AAAA;AA/CF;AA+CE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/CF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', names: [], - sources: [ - '../neo-one/contracts/Escrow.ts', - '../../../../../../../dist/neo-one/packages/neo-one-smart-contract/index.d.ts', - ], + sources: ['../neo-one/contracts/Escrow.ts', '../../../../../../neo-one-smart-contract/src/index.d.ts'], sourcesContent: [ "import {\n Address,\n constant,\n createEventNotifier,\n declareEvent,\n Fixed,\n ForwardedValue,\n MapStorage,\n SmartContract,\n} from '@neo-one/smart-contract';\n\ninterface Token {\n readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n}\n\nconst notifyBalanceAvailable = createEventNotifier>(\n 'balanceAvailable',\n 'from',\n 'to',\n 'asset',\n 'amount',\n);\n\nconst notifyBalanceClaimed = createEventNotifier>(\n 'balanceClaimed',\n 'from',\n 'to',\n 'asset',\n 'amount',\n);\n\nconst notifyBalanceRefunded = createEventNotifier>(\n 'balanceRefunded',\n 'from',\n 'to',\n 'asset',\n 'amount',\n);\n\ndeclareEvent
>('transfer', 'from', 'to', 'amount');\n\nexport class Escrow extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'Escrow',\n };\n private readonly balances = MapStorage.for<[Address, Address, Address], Fixed<8>>();\n\n @constant\n public balanceOf(from: Address, to: Address, asset: Address): Fixed<8> {\n const balance = this.balances.get([to, asset, from]);\n\n return balance === undefined ? 0 : balance;\n }\n\n public approveReceiveTransfer(from: Address, amount: Fixed<8>, asset: Address, to: ForwardedValue
): boolean {\n if (!Address.isCaller(asset)) {\n return false;\n }\n\n this.setBalance(from, to, asset, this.balanceOf(from, to, asset) + amount);\n notifyBalanceAvailable(from, to, asset, amount);\n\n return true;\n }\n\n public onRevokeSendTransfer(_from: Address, _amount: Fixed<0>, _asset: Address): void {\n // do nothing\n }\n\n public claim(from: Address, to: Address, asset: Address, amount: Fixed<8>): boolean {\n if (!Address.isCaller(to)) {\n return false;\n }\n\n const contract = SmartContract.for(asset);\n if (contract.transfer(this.address, to, amount)) {\n this.setBalance(from, to, asset, this.balanceOf(from, to, asset) - amount);\n notifyBalanceClaimed(from, to, asset, amount);\n\n return true;\n }\n\n return false;\n }\n\n public refund(from: Address, to: Address, asset: Address, amount: Fixed<8>): boolean {\n if (!Address.isCaller(from)) {\n return false;\n }\n\n const contract = SmartContract.for(asset);\n if (contract.transfer(this.address, from, amount)) {\n this.setBalance(from, to, asset, this.balanceOf(from, to, asset) - amount);\n notifyBalanceRefunded(from, to, asset, amount);\n\n return true;\n }\n\n return false;\n }\n\n private setBalance(from: Address, to: Address, asset: Address, amount: Fixed<8>): void {\n this.balances.set([to, asset, from], amount);\n }\n}\n", - "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? (ReturnType extends SmartContractArg ? T[K] : never)\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Buffer;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", + "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? ReturnType extends SmartContractArg\n ? T[K]\n : never\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Address;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Hash256;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", ], version: 3, }, @@ -39,13 +36,10 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') mappings: 'AAAA;AAWuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqnCnB;AAAA;AAAA;ADrnCmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqnCT;AAAA;AAAA;ADrnCS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqnCC;AAAA;AAAA;ADrnCD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC+mC9B;AAAA;AAAA;AD/mC8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC+mCpB;AAAA;AAAA;AD/mCoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC+mCV;AAAA;AAAA;AD/mCU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACymC7B;AAAA;AAAA;ADzmC6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACymCnB;AAAA;AAAA;ADzmCmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACymCT;AAAA;AAAA;ADzmCS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyB/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AALF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8DkE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA9DlE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACS;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAHiD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOpB;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAZgF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAlF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAjE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACS;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/FA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACE;AAAA;AAAA;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAEE;AAAA;AAAA;AAAA;AAAA;AAFF;AAAA;AAAA;AAAA;AAAA;AAGE;AAAA;AAAA;AAAA;AAAA;AAHF;AAAA;AAAA;AAAA;AAAA;AAKE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AALF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsHkE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAtHlE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgC;AAAA;AAAA;AAAA;AAAA;AAAhC;AAAA;AAAA;AAAA;AAAA;AAA+C;AAAA;AAAA;AAAA;AAAA;AAA/C;AAAA;AAAA;AAAA;AAAA;AAAiE;AAAA;AAAA;AAAA;AAAA;AAAjE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+GkE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/GlE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4FA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiF;AAAA;AAAA;AAAA;AAAA;AAC3E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAP;AAAA;AAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAJ;AAAgB;AAAA;AAAA;AAAA;AAAA;AACE;AAAkC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAM;AAAN;AAAlC;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACS;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAG2C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAxEnB;AAAA;AAAA;AAAA;AAAA;AACwB;AAAA;AAAA;AADxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACuC;AAAA;AAAA;AADvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC8D;AAAA;AAAA;AAAA;AAAA;AAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAA;AAAA;AAAA;AAA3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAa;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAT;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAzB;AAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAApC;AAAA;AAAA;AAH4D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwEmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxEnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwEQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAT;AAAA;AAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAT;AAAA;AAAJ;AACS;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAhD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAE8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAa;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAT;AAAA;AAAJ;AAA4B;AAAA;AAAA;AAAA;AAAA;AACoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAtH1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+GU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiD;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AAAA;AAAc;AAAd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAH0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMrB;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAxB+E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAjF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAX;AAAA;AAAA;AAAA;AAAf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOE;AAAA;AAAA;AAPF;AAOE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAPF;AAQE;AAAA;AAAA;AARF;AAQE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AARF;AASE;AAAA;AAAA;AATF;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATF;AAcE;AAAA;AAAA;AAdF;AAcE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAdF;AAmBE;AAAA;AAAA;AAnBF;AAmBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnBF;AA0BE;AAAA;AAAA;AA1BF;AA0BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAkCE;AAAA;AAAA;AAlCF;AAkCE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAlCF;AAsEE;AAAA;AAAA;AAtEF;AAsEE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAtEF;AAqFE;AAAA;AAAA;AArFF;AAqFE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArFF;AAyFE;AAAA;AAAA;AAzFF;AAyFE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzFF;AAoHE;AAAA;AAAA;AApHF;AAoHE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AApHF;AAwHE;AAAA;AAAA;AAxHF;AAwHE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxHF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', names: [], - sources: [ - '../neo-one/contracts/Token.ts', - '../../../../../../../dist/neo-one/packages/neo-one-smart-contract/index.d.ts', - ], + sources: ['../neo-one/contracts/Token.ts', '../../../../../../neo-one-smart-contract/src/index.d.ts'], sourcesContent: [ "import {\n Address,\n constant,\n Contract,\n createEventNotifier,\n Fixed,\n ForwardValue,\n MapStorage,\n SmartContract,\n} from '@neo-one/smart-contract';\n\nconst notifyTransfer = createEventNotifier
>(\n 'transfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyApproveSendTransfer = createEventNotifier>(\n 'approveSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyRevokeSendTransfer = createEventNotifier>(\n 'revokeSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\n\ninterface TokenPayableContract {\n readonly approveReceiveTransfer: (\n from: Address,\n amount: Fixed<8>,\n asset: Address,\n // tslint:disable-next-line readonly-array\n ...args: ForwardValue[]\n ) => boolean;\n readonly onRevokeSendTransfer: (from: Address, amount: Fixed<8>, asset: Address) => void;\n}\n\nexport class Token extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'NEOβ€’ONE Token',\n };\n public readonly name = 'One';\n public readonly symbol = 'ONE';\n public readonly decimals = 8;\n private readonly balances = MapStorage.for>();\n private readonly approvedTransfers = MapStorage.for<[Address, Address], Fixed<8>>();\n private mutableSupply: Fixed<8> = 0;\n\n @constant\n public get totalSupply(): Fixed<8> {\n return this.mutableSupply;\n }\n\n @constant\n public balanceOf(address: Address): Fixed<8> {\n const balance = this.balances.get(address);\n\n return balance === undefined ? 0 : balance;\n }\n\n @constant\n public approvedTransfer(from: Address, to: Address): Fixed<8> {\n const approved = this.approvedTransfers.get([from, to]);\n\n return approved === undefined ? 0 : approved;\n }\n\n // tslint:disable-next-line readonly-array\n public transfer(from: Address, to: Address, amount: Fixed<8>, ...approveArgs: ForwardValue[]): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const fromBalance = this.balanceOf(from);\n if (fromBalance < amount) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n const reduceApproved = approved >= amount && Address.isCaller(to);\n if (!reduceApproved && !Address.isCaller(from)) {\n return false;\n }\n\n const contract = Contract.for(to);\n if (contract !== undefined && !Address.isCaller(to)) {\n const smartContract = SmartContract.for(to);\n if (!smartContract.approveReceiveTransfer(from, amount, this.address, ...approveArgs)) {\n return false;\n }\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(from, fromBalance - amount);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(from, to, amount);\n\n if (reduceApproved) {\n this.approvedTransfers.set([from, to], approved - amount);\n }\n\n return true;\n }\n\n public approveSendTransfer(from: Address, to: Address, amount: Fixed<0>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], this.approvedTransfer(from, to) + amount);\n notifyApproveSendTransfer(from, to, amount);\n\n return true;\n }\n\n public approveReceiveTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): boolean {\n return false;\n }\n\n public revokeSendTransfer(from: Address, to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n if (approved < amount) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], approved - amount);\n notifyRevokeSendTransfer(from, to, amount);\n\n const contract = Contract.for(to);\n if (contract !== undefined) {\n const smartContract = SmartContract.for(to);\n // NOTE: This should catch errors once we have stack isolation\n smartContract.onRevokeSendTransfer(from, amount, this.address);\n }\n\n return true;\n }\n\n public onRevokeSendTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): void {\n // do nothing\n }\n\n public issue(to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(undefined, to, amount);\n this.mutableSupply += amount;\n\n return true;\n }\n}\n", - "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? (ReturnType extends SmartContractArg ? T[K] : never)\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Buffer;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", + "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? ReturnType extends SmartContractArg\n ? T[K]\n : never\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Address;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Hash256;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", ], version: 3, }, diff --git a/packages/neo-one-cli/src/__data__/projects/ico-neotracker/.neo-one.config.js b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/.neo-one.config.js new file mode 100644 index 0000000000..a0ee7b1eff --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/.neo-one.config.js @@ -0,0 +1,37 @@ +const nodePath = require('path'); + +const tmpDir = + process.env.NEO_ONE_TMP_DIR === undefined + ? process.cwd() + : process.env.NEO_ONE_TMP_DIR; +const nodePort = parseInt( + process.env.NEO_ONE_PORT_0 === undefined ? 10000 : process.env.NEO_ONE_PORT_0, + 10, +); +const neotrackerPort = parseInt( + process.env.NEO_ONE_PORT_1 === undefined ? 10001 : process.env.NEO_ONE_PORT_1, + 10, +); + +module.exports = { + contracts: { + outDir: nodePath.join(tmpDir, 'compiled'), + }, + migration: { + path: nodePath.join('neo-one', 'migration.ts'), + }, + codegen: { + path: 'codegen', + language: 'typescript', + framework: 'react', + }, + network: { + path: nodePath.join(tmpDir, 'node'), + port: nodePort, + }, + neotracker: { + path: nodePath.join(tmpDir, 'neotracker'), + port: neotrackerPort, + skip: true, + }, +}; diff --git a/packages/neo-one-cli/src/__data__/projects/ico-neotracker/babel.config.js b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/babel.config.js new file mode 100644 index 0000000000..794cae9b64 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/babel.config.js @@ -0,0 +1,15 @@ +const r = require.resolve; + +module.exports = { + presets: [ + [ + r('@babel/preset-env'), + { + modules: 'commonjs', + useBuiltIns: 'usage', + corejs: 3, + targets: { node: true }, + }, + ], + ], +}; diff --git a/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/Escrow/abi.ts b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/Escrow/abi.ts new file mode 100644 index 0000000000..436688ca74 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/Escrow/abi.ts @@ -0,0 +1,319 @@ +/* @hash 8f26a43615cb2db073a299c446a2f907 */ +// tslint:disable +/* eslint-disable */ +import { ABI } from '@neo-one/client'; + +export const escrowABI: ABI = { + events: [ + { + name: 'balanceAvailable', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'asset', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + }, + { + name: 'balanceClaimed', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'asset', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + }, + { + name: 'balanceRefunded', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'asset', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + }, + { + name: 'transfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: true, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: true, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + }, + ], + functions: [ + { + claim: false, + constant: true, + name: 'balanceOf', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'asset', + optional: false, + type: 'Address', + }, + ], + receive: false, + returnType: { + decimals: 8, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: false, + name: 'approveReceiveTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + { + forwardedValue: false, + name: 'asset', + optional: false, + type: 'Address', + }, + { + forwardedValue: true, + name: 'to', + optional: false, + type: 'Address', + }, + ], + receive: false, + returnType: { + forwardedValue: false, + optional: false, + type: 'Boolean', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: false, + name: 'onRevokeSendTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + decimals: 0, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + { + forwardedValue: false, + name: 'asset', + optional: false, + type: 'Address', + }, + ], + receive: false, + returnType: { + optional: false, + type: 'Void', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: false, + name: 'claim', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'asset', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + receive: false, + returnType: { + forwardedValue: false, + optional: false, + type: 'Boolean', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: false, + name: 'refund', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'asset', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + receive: false, + returnType: { + forwardedValue: false, + optional: false, + type: 'Boolean', + }, + send: false, + sendUnsafe: false, + }, + { + name: 'deploy', + parameters: [], + returnType: { + type: 'Boolean', + }, + }, + ], +}; diff --git a/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/Escrow/contract.ts b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/Escrow/contract.ts new file mode 100644 index 0000000000..2198675c83 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/Escrow/contract.ts @@ -0,0 +1,20 @@ +/* @hash 0fbc4e67b9658e21a3a70c09098f3244 */ +// tslint:disable +/* eslint-disable */ +import { Client } from '@neo-one/client'; +import { EscrowSmartContract } from './types'; +import { escrowABI } from './abi'; +import { sourceMaps } from '../sourceMaps'; + +const definition = { + networks: { + local: { + address: 'AVtU2izPDU8HPiw4ZCuyqAsxg6WjUa7w29', + }, + }, + abi: escrowABI, + sourceMaps, +}; + +export const createEscrowSmartContract = (client: TClient): EscrowSmartContract => + client.smartContract(definition); diff --git a/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/Escrow/types.ts b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/Escrow/types.ts new file mode 100644 index 0000000000..69bfa1dcb3 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/Escrow/types.ts @@ -0,0 +1,163 @@ +/* @hash f8ffd0b09b5f7eb9dc30108a869436e9 */ +// tslint:disable +/* eslint-disable */ +import { + AddressString, + Client, + Event, + ForwardOptions, + ForwardValue, + GetOptions, + InvocationTransaction, + InvokeReceipt, + SmartContract, + TransactionOptions, + TransactionResult, +} from '@neo-one/client'; +import BigNumber from 'bignumber.js'; + +export interface EscrowBalanceAvailableEventParameters { + readonly from: AddressString; + readonly to: AddressString; + readonly asset: AddressString; + readonly amount: BigNumber; +} +export interface EscrowBalanceAvailableEvent extends Event<'balanceAvailable', EscrowBalanceAvailableEventParameters> {} +export interface EscrowBalanceClaimedEventParameters { + readonly from: AddressString; + readonly to: AddressString; + readonly asset: AddressString; + readonly amount: BigNumber; +} +export interface EscrowBalanceClaimedEvent extends Event<'balanceClaimed', EscrowBalanceClaimedEventParameters> {} +export interface EscrowBalanceRefundedEventParameters { + readonly from: AddressString; + readonly to: AddressString; + readonly asset: AddressString; + readonly amount: BigNumber; +} +export interface EscrowBalanceRefundedEvent extends Event<'balanceRefunded', EscrowBalanceRefundedEventParameters> {} +export interface EscrowTransferEventParameters { + readonly from: AddressString | undefined; + readonly to: AddressString | undefined; + readonly amount: BigNumber; +} +export interface EscrowTransferEvent extends Event<'transfer', EscrowTransferEventParameters> {} +export type EscrowEvent = + | EscrowBalanceAvailableEvent + | EscrowBalanceClaimedEvent + | EscrowBalanceRefundedEvent + | EscrowTransferEvent; + +export interface EscrowSmartContract extends SmartContract { + readonly approveReceiveTransfer: { + ( + from: AddressString, + amount: BigNumber, + asset: AddressString, + to: AddressString, + options?: TransactionOptions, + ): Promise, InvocationTransaction>>; + readonly confirmed: ( + from: AddressString, + amount: BigNumber, + asset: AddressString, + to: AddressString, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly forwardApproveReceiveTransferArgs: (to: AddressString) => [ForwardOptions, ForwardValue]; + readonly balanceOf: (from: AddressString, to: AddressString, asset: AddressString) => Promise; + readonly claim: { + ( + from: AddressString, + to: AddressString, + asset: AddressString, + amount: BigNumber, + options?: TransactionOptions, + ): Promise, InvocationTransaction>>; + readonly confirmed: ( + from: AddressString, + to: AddressString, + asset: AddressString, + amount: BigNumber, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly deploy: { + (options?: TransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly onRevokeSendTransfer: { + (from: AddressString, amount: BigNumber, asset: AddressString, options?: TransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + from: AddressString, + amount: BigNumber, + asset: AddressString, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly refund: { + ( + from: AddressString, + to: AddressString, + asset: AddressString, + amount: BigNumber, + options?: TransactionOptions, + ): Promise, InvocationTransaction>>; + readonly confirmed: ( + from: AddressString, + to: AddressString, + asset: AddressString, + amount: BigNumber, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; +} + +export interface EscrowMigrationSmartContract { + readonly approveReceiveTransfer: ( + from: AddressString | Promise, + amount: BigNumber | Promise, + asset: AddressString | Promise, + to: AddressString | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly forwardApproveReceiveTransferArgs: ( + to: AddressString | Promise, + ) => [ForwardOptions, ForwardValue]; + readonly balanceOf: ( + from: AddressString | Promise, + to: AddressString | Promise, + asset: AddressString | Promise, + ) => Promise; + readonly claim: ( + from: AddressString | Promise, + to: AddressString | Promise, + asset: AddressString | Promise, + amount: BigNumber | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly deploy: ( + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly onRevokeSendTransfer: ( + from: AddressString | Promise, + amount: BigNumber | Promise, + asset: AddressString | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly refund: ( + from: AddressString | Promise, + to: AddressString | Promise, + asset: AddressString | Promise, + amount: BigNumber | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; +} diff --git a/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/ICO/abi.ts b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/ICO/abi.ts new file mode 100644 index 0000000000..7504dd5581 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/ICO/abi.ts @@ -0,0 +1,189 @@ +/* @hash 92bf39e9a0b258178c4a0615b94794a8 */ +// tslint:disable +/* eslint-disable */ +import { ABI } from '@neo-one/client'; + +export const icoABI: ABI = { + events: [ + { + name: 'transfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: true, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: true, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + }, + { + name: 'approveSendTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + }, + { + name: 'revokeSendTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + }, + ], + functions: [ + { + constant: true, + name: 'amountPerNEO', + parameters: [], + returnType: { + decimals: 0, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + }, + { + constant: true, + name: 'owner', + parameters: [], + returnType: { + forwardedValue: false, + optional: false, + type: 'Address', + }, + }, + { + constant: true, + name: 'startTimeSeconds', + parameters: [], + returnType: { + decimals: 0, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + }, + { + constant: true, + name: 'icoDurationSeconds', + parameters: [], + returnType: { + decimals: 0, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + }, + { + constant: true, + name: 'remaining', + parameters: [], + returnType: { + decimals: 8, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + }, + { + claim: false, + constant: false, + name: 'mintTokens', + parameters: [], + receive: true, + returnType: { + optional: false, + type: 'Void', + }, + send: false, + sendUnsafe: false, + }, + { + name: 'refundAssets', + parameters: [], + returnType: { + type: 'Void', + }, + sendUnsafe: true, + }, + { + name: 'deploy', + parameters: [ + { + default: { + type: 'sender', + }, + forwardedValue: false, + name: 'owner', + optional: true, + type: 'Address', + }, + { + decimals: 0, + forwardedValue: false, + name: 'startTimeSeconds', + optional: true, + type: 'Integer', + }, + { + decimals: 0, + forwardedValue: false, + name: 'icoDurationSeconds', + optional: true, + type: 'Integer', + }, + ], + returnType: { + type: 'Boolean', + }, + }, + ], +}; diff --git a/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/ICO/contract.ts b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/ICO/contract.ts new file mode 100644 index 0000000000..a4f0b5157a --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/ICO/contract.ts @@ -0,0 +1,20 @@ +/* @hash 8b54820e64a7ce70e65a1a385c996efd */ +// tslint:disable +/* eslint-disable */ +import { Client } from '@neo-one/client'; +import { ICOSmartContract } from './types'; +import { icoABI } from './abi'; +import { sourceMaps } from '../sourceMaps'; + +const definition = { + networks: { + local: { + address: 'ARW79N7gAWHytcWSkkXvwrJiR4FTyvf2f8', + }, + }, + abi: icoABI, + sourceMaps, +}; + +export const createICOSmartContract = (client: TClient): ICOSmartContract => + client.smartContract(definition); diff --git a/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/ICO/types.ts b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/ICO/types.ts new file mode 100644 index 0000000000..b3b68dcaee --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/ICO/types.ts @@ -0,0 +1,96 @@ +/* @hash 8b95758943c21aea9e5a6b028f96b9c0 */ +// tslint:disable +/* eslint-disable */ +import { + AddressString, + Client, + Event, + GetOptions, + InvocationTransaction, + InvokeReceipt, + InvokeReceiveTransactionOptions, + InvokeSendUnsafeTransactionOptions, + SmartContract, + TransactionOptions, + TransactionResult, +} from '@neo-one/client'; +import BigNumber from 'bignumber.js'; + +export interface ICOTransferEventParameters { + readonly from: AddressString | undefined; + readonly to: AddressString | undefined; + readonly amount: BigNumber; +} +export interface ICOTransferEvent extends Event<'transfer', ICOTransferEventParameters> {} +export interface ICOApproveSendTransferEventParameters { + readonly from: AddressString; + readonly to: AddressString; + readonly amount: BigNumber; +} +export interface ICOApproveSendTransferEvent + extends Event<'approveSendTransfer', ICOApproveSendTransferEventParameters> {} +export interface ICORevokeSendTransferEventParameters { + readonly from: AddressString; + readonly to: AddressString; + readonly amount: BigNumber; +} +export interface ICORevokeSendTransferEvent extends Event<'revokeSendTransfer', ICORevokeSendTransferEventParameters> {} +export type ICOEvent = ICOTransferEvent | ICOApproveSendTransferEvent | ICORevokeSendTransferEvent; + +export interface ICOSmartContract extends SmartContract { + readonly amountPerNEO: () => Promise; + readonly deploy: { + ( + owner?: AddressString, + startTimeSeconds?: BigNumber, + icoDurationSeconds?: BigNumber, + options?: TransactionOptions, + ): Promise, InvocationTransaction>>; + readonly confirmed: ( + owner?: AddressString, + startTimeSeconds?: BigNumber, + icoDurationSeconds?: BigNumber, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly icoDurationSeconds: () => Promise; + readonly mintTokens: { + (options?: InvokeReceiveTransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + options?: InvokeReceiveTransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly owner: () => Promise; + readonly refundAssets: { + (options?: InvokeSendUnsafeTransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + options?: InvokeSendUnsafeTransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly remaining: () => Promise; + readonly startTimeSeconds: () => Promise; +} + +export interface ICOMigrationSmartContract { + readonly amountPerNEO: () => Promise; + readonly deploy: ( + owner?: AddressString | Promise, + startTimeSeconds?: BigNumber | Promise, + icoDurationSeconds?: BigNumber | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly icoDurationSeconds: () => Promise; + readonly mintTokens: ( + options?: InvokeReceiveTransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly owner: () => Promise; + readonly refundAssets: ( + options?: InvokeSendUnsafeTransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly remaining: () => Promise; + readonly startTimeSeconds: () => Promise; +} diff --git a/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/Token/abi.ts b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/Token/abi.ts new file mode 100644 index 0000000000..ee5e804078 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/Token/abi.ts @@ -0,0 +1,386 @@ +/* @hash d32f1bef82338bb52029f74d0a8416ae */ +// tslint:disable +/* eslint-disable */ +import { ABI } from '@neo-one/client'; + +export const tokenABI: ABI = { + events: [ + { + name: 'transfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: true, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: true, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + }, + { + name: 'approveSendTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + }, + { + name: 'revokeSendTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + }, + ], + functions: [ + { + constant: true, + name: 'name', + parameters: [], + returnType: { + forwardedValue: false, + optional: false, + type: 'String', + }, + }, + { + constant: true, + name: 'symbol', + parameters: [], + returnType: { + forwardedValue: false, + optional: false, + type: 'String', + }, + }, + { + constant: true, + name: 'decimals', + parameters: [], + returnType: { + decimals: 0, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + }, + { + constant: true, + name: 'totalSupply', + parameters: [], + returnType: { + decimals: 8, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + }, + { + claim: false, + constant: true, + name: 'balanceOf', + parameters: [ + { + forwardedValue: false, + name: 'address', + optional: false, + type: 'Address', + }, + ], + receive: false, + returnType: { + decimals: 8, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: true, + name: 'approvedTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + ], + receive: false, + returnType: { + decimals: 8, + forwardedValue: false, + optional: false, + type: 'Integer', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: false, + name: 'transfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + { + forwardedValue: false, + name: 'approveArgs', + optional: false, + rest: true, + type: 'ForwardValue', + }, + ], + receive: false, + returnType: { + forwardedValue: false, + optional: false, + type: 'Boolean', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: false, + name: 'approveSendTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + decimals: 0, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + receive: false, + returnType: { + forwardedValue: false, + optional: false, + type: 'Boolean', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: false, + name: 'approveReceiveTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + { + forwardedValue: false, + name: 'asset', + optional: false, + type: 'Address', + }, + ], + receive: false, + returnType: { + forwardedValue: false, + optional: false, + type: 'Boolean', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: false, + name: 'revokeSendTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + receive: false, + returnType: { + forwardedValue: false, + optional: false, + type: 'Boolean', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: false, + name: 'onRevokeSendTransfer', + parameters: [ + { + forwardedValue: false, + name: 'from', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + { + forwardedValue: false, + name: 'asset', + optional: false, + type: 'Address', + }, + ], + receive: false, + returnType: { + optional: false, + type: 'Void', + }, + send: false, + sendUnsafe: false, + }, + { + claim: false, + constant: false, + name: 'issue', + parameters: [ + { + forwardedValue: false, + name: 'to', + optional: false, + type: 'Address', + }, + { + decimals: 8, + forwardedValue: false, + name: 'amount', + optional: false, + type: 'Integer', + }, + ], + receive: false, + returnType: { + forwardedValue: false, + optional: false, + type: 'Boolean', + }, + send: false, + sendUnsafe: false, + }, + { + name: 'deploy', + parameters: [], + returnType: { + type: 'Boolean', + }, + }, + ], +}; diff --git a/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/Token/contract.ts b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/Token/contract.ts new file mode 100644 index 0000000000..598609e960 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/Token/contract.ts @@ -0,0 +1,20 @@ +/* @hash 263c8504db4e13520cc3c13f6046952f */ +// tslint:disable +/* eslint-disable */ +import { Client } from '@neo-one/client'; +import { TokenSmartContract } from './types'; +import { tokenABI } from './abi'; +import { sourceMaps } from '../sourceMaps'; + +const definition = { + networks: { + local: { + address: 'AWFQ5usn6UPEQo85pNxLyNuuGnSvC9uckv', + }, + }, + abi: tokenABI, + sourceMaps, +}; + +export const createTokenSmartContract = (client: TClient): TokenSmartContract => + client.smartContract(definition); diff --git a/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/Token/types.ts b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/Token/types.ts new file mode 100644 index 0000000000..8386d696a0 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/Token/types.ts @@ -0,0 +1,231 @@ +/* @hash 42fc669f6a4783cc65d07d56271354f8 */ +// tslint:disable +/* eslint-disable */ +import { + AddressString, + Client, + Event, + ForwardOptions, + ForwardValue, + GetOptions, + InvocationTransaction, + InvokeReceipt, + SmartContract, + TransactionOptions, + TransactionResult, +} from '@neo-one/client'; +import BigNumber from 'bignumber.js'; + +export interface TokenTransferEventParameters { + readonly from: AddressString | undefined; + readonly to: AddressString | undefined; + readonly amount: BigNumber; +} +export interface TokenTransferEvent extends Event<'transfer', TokenTransferEventParameters> {} +export interface TokenApproveSendTransferEventParameters { + readonly from: AddressString; + readonly to: AddressString; + readonly amount: BigNumber; +} +export interface TokenApproveSendTransferEvent + extends Event<'approveSendTransfer', TokenApproveSendTransferEventParameters> {} +export interface TokenRevokeSendTransferEventParameters { + readonly from: AddressString; + readonly to: AddressString; + readonly amount: BigNumber; +} +export interface TokenRevokeSendTransferEvent + extends Event<'revokeSendTransfer', TokenRevokeSendTransferEventParameters> {} +export type TokenEvent = TokenTransferEvent | TokenApproveSendTransferEvent | TokenRevokeSendTransferEvent; + +export interface TokenSmartContract extends SmartContract { + readonly approveReceiveTransfer: { + (from: AddressString, amount: BigNumber, asset: AddressString, options?: TransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + from: AddressString, + amount: BigNumber, + asset: AddressString, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly approveSendTransfer: { + (from: AddressString, to: AddressString, amount: BigNumber, options?: TransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + from: AddressString, + to: AddressString, + amount: BigNumber, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly approvedTransfer: (from: AddressString, to: AddressString) => Promise; + readonly balanceOf: (address: AddressString) => Promise; + readonly decimals: () => Promise; + readonly deploy: { + (options?: TransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly issue: { + (to: AddressString, amount: BigNumber, options?: TransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + to: AddressString, + amount: BigNumber, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly name: () => Promise; + readonly onRevokeSendTransfer: { + (from: AddressString, amount: BigNumber, asset: AddressString, options?: TransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + from: AddressString, + amount: BigNumber, + asset: AddressString, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly revokeSendTransfer: { + (from: AddressString, to: AddressString, amount: BigNumber, options?: TransactionOptions): Promise< + TransactionResult, InvocationTransaction> + >; + readonly confirmed: ( + from: AddressString, + to: AddressString, + amount: BigNumber, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + }; + readonly symbol: () => Promise; + readonly totalSupply: () => Promise; + readonly transfer: { + >( + from: AddressString, + to: AddressString, + amount: BigNumber, + forwardOptions?: TForwardOptions, + ...approveArgs: ForwardValue[] + ): Promise< + TransactionResult< + InvokeReceipt ? TokenEvent | T : TokenEvent>, + InvocationTransaction + > + >; + >( + from: AddressString, + to: AddressString, + amount: BigNumber, + options?: TransactionOptions, + forwardOptions?: TForwardOptions, + ...approveArgs: ForwardValue[] + ): Promise< + TransactionResult< + InvokeReceipt ? TokenEvent | T : TokenEvent>, + InvocationTransaction + > + >; + readonly confirmed: { + >( + from: AddressString, + to: AddressString, + amount: BigNumber, + forwardOptions?: TForwardOptions, + ...approveArgs: ForwardValue[] + ): Promise< + InvokeReceipt ? TokenEvent | T : TokenEvent> & { + readonly transaction: InvocationTransaction; + } + >; + >( + from: AddressString, + to: AddressString, + amount: BigNumber, + options?: TransactionOptions & GetOptions, + forwardOptions?: TForwardOptions, + ...approveArgs: ForwardValue[] + ): Promise< + InvokeReceipt ? TokenEvent | T : TokenEvent> & { + readonly transaction: InvocationTransaction; + } + >; + }; + }; +} + +export interface TokenMigrationSmartContract { + readonly approveReceiveTransfer: ( + from: AddressString | Promise, + amount: BigNumber | Promise, + asset: AddressString | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly approveSendTransfer: ( + from: AddressString | Promise, + to: AddressString | Promise, + amount: BigNumber | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly approvedTransfer: ( + from: AddressString | Promise, + to: AddressString | Promise, + ) => Promise; + readonly balanceOf: (address: AddressString | Promise) => Promise; + readonly decimals: () => Promise; + readonly deploy: ( + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly issue: ( + to: AddressString | Promise, + amount: BigNumber | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly name: () => Promise; + readonly onRevokeSendTransfer: ( + from: AddressString | Promise, + amount: BigNumber | Promise, + asset: AddressString | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly revokeSendTransfer: ( + from: AddressString | Promise, + to: AddressString | Promise, + amount: BigNumber | Promise, + options?: TransactionOptions & GetOptions, + ) => Promise & { readonly transaction: InvocationTransaction }>; + readonly symbol: () => Promise; + readonly totalSupply: () => Promise; + readonly transfer: { + >( + from: AddressString | Promise, + to: AddressString | Promise, + amount: BigNumber | Promise, + forwardOptions?: TForwardOptions, + ...approveArgs: (ForwardValue | Promise)[] + ): Promise< + InvokeReceipt ? TokenEvent | T : TokenEvent> & { + readonly transaction: InvocationTransaction; + } + >; + >( + from: AddressString | Promise, + to: AddressString | Promise, + amount: BigNumber | Promise, + options?: TransactionOptions & GetOptions, + forwardOptions?: TForwardOptions, + ...approveArgs: (ForwardValue | Promise)[] + ): Promise< + InvokeReceipt ? TokenEvent | T : TokenEvent> & { + readonly transaction: InvocationTransaction; + } + >; + }; +} diff --git a/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/client.ts b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/client.ts new file mode 100644 index 0000000000..847db97c7f --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/client.ts @@ -0,0 +1,149 @@ +/* @hash 738771d3d985773a31f97225fbf28aa0 */ +// tslint:disable +/* eslint-disable */ +import { + Client, + DapiUserAccountProvider, + DeveloperClient, + DeveloperClients, + LocalKeyStore, + LocalMemoryStore, + LocalUserAccountProvider, + NEOONEProvider, + NEOONEDataProvider, + UserAccountProviders, +} from '@neo-one/client'; + +export interface DefaultUserAccountProviders { + readonly memory: LocalUserAccountProvider; +} + +const getDefaultUserAccountProviders = (provider: NEOONEProvider) => { + const localUserAccountProvider = { + memory: new LocalUserAccountProvider({ + keystore: new LocalKeyStore(new LocalMemoryStore()), + provider, + }), + }; + + const dapi = typeof globalThis === 'undefined' ? undefined : (globalThis as any).neoDapi; + if (dapi !== undefined) { + return { + ...localUserAccountProvider, + dapi: new DapiUserAccountProvider({ + dapi, + provider, + onError: (error) => { + throw error; + }, + }), + }; + } + + return localUserAccountProvider; +}; + +const isLocalUserAccountProvider = (userAccountProvider: any): userAccountProvider is LocalUserAccountProvider => + userAccountProvider instanceof LocalUserAccountProvider; + +export const createClient = = DefaultUserAccountProviders>( + getUserAccountProvidersOrHost: + | string + | ((provider: NEOONEProvider) => TUserAccountProviders) = getDefaultUserAccountProviders as any, +): Client< + TUserAccountProviders extends UserAccountProviders ? TUserAccountProvider : any, + TUserAccountProviders +> => { + let getUserAccountProviders = getDefaultUserAccountProviders; + let host = 'localhost'; + if (typeof getUserAccountProvidersOrHost === 'string') { + host = getUserAccountProvidersOrHost; + } else if (getUserAccountProvidersOrHost != undefined) { + getUserAccountProviders = getUserAccountProvidersOrHost as any; + } + + const providers = []; + if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') { + providers.push({ network: 'local', rpcURL: `http://${host}:10130/rpc` }); + } + const provider = new NEOONEProvider(providers); + const userAccountProviders = getUserAccountProviders(provider); + const localUserAccountProviders = Object.values(userAccountProviders).filter( + isLocalUserAccountProvider, + ) as LocalUserAccountProvider[]; + const localUserAccountProvider = localUserAccountProviders.find( + (userAccountProvider) => userAccountProvider.keystore instanceof LocalKeyStore, + ); + if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') { + if (localUserAccountProvider !== undefined) { + const localKeyStore = localUserAccountProvider.keystore; + if (localKeyStore instanceof LocalKeyStore) { + Promise.all([ + localKeyStore.addUserAccount({ + network: 'local', + name: 'master', + privateKey: 'L4qhHtwbiAMu1nrSmsTP5a3dJbxA3SNS6oheKnKd8E7KTJyCLcUv', + }), + localKeyStore.addUserAccount({ + network: 'local', + name: 'alfa', + privateKey: 'KyX5sPKRpAMb3XAFLUrHv7u1LxKkKFrpyJDgE4kceRX9FRJ4WRCQ', + }), + localKeyStore.addUserAccount({ + network: 'local', + name: 'bravo', + privateKey: 'L5LfJc2Ngsxu8ZFMvnJbYJ1QdQCstzRXmKLybsFS1aQFURkJ5CHS', + }), + localKeyStore.addUserAccount({ + network: 'local', + name: 'charlie', + privateKey: 'KxCH2Ei4TLqp2Qa7swz9bstQc5uREiCpvzvL9R6xLX8X5U8ZqeBj', + }), + localKeyStore.addUserAccount({ + network: 'local', + name: 'delta', + privateKey: 'KyVvngWhhfHiociMuwyLmGw8xTu9myKXRnvv5Fes9jDMa2Zyc6P9', + }), + localKeyStore.addUserAccount({ + network: 'local', + name: 'echo', + privateKey: 'L37qr7PWqWmgjUPfRC9mS78GjRxgGi4azySCsLUBMAa5hMka2JEm', + }), + localKeyStore.addUserAccount({ + network: 'local', + name: 'foxtrot', + privateKey: 'KwFf8gdSWxvC5Pp8AidNdF6mHqjH3CukyF3RnfwS5vzMQKLGTP13', + }), + localKeyStore.addUserAccount({ + network: 'local', + name: 'golf', + privateKey: 'Kyn2BN3QuHGYgkt9qJgvwzY8yH4xgTUAKwnGhvU1w8Nh3JnivrAr', + }), + localKeyStore.addUserAccount({ + network: 'local', + name: 'hotel', + privateKey: 'L5UXfz1xyzDkghGwistNMCV8pbpU4fg14Ez9rfo1y4KgwiadnWX3', + }), + localKeyStore.addUserAccount({ + network: 'local', + name: 'india', + privateKey: 'L5Yoq3X4ojx2FvZZxHbMcvT6var4LaXKHEpMYyyxw4jjhSUNJTRa', + }), + localKeyStore.addUserAccount({ + network: 'local', + name: 'juliett', + privateKey: 'L1DWex8PtmQJH4GYK9YAuyzmotyL6anY937LxJF54iaALrTtxsD6', + }), + ]).catch(() => { + // do nothing + }); + } + } + } + + return new Client(userAccountProviders as any); +}; + +export const createDeveloperClients = (host = 'localhost'): DeveloperClients => ({ + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10130/rpc` })), +}); diff --git a/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/contracts.ts b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/contracts.ts new file mode 100644 index 0000000000..d068c176c9 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/contracts.ts @@ -0,0 +1,30 @@ +/* @hash 05fd692dad792caa7b0650e950261f1f */ +// tslint:disable +/* eslint-disable */ +import { Client } from '@neo-one/client'; + +import { EscrowSmartContract, EscrowMigrationSmartContract } from './Escrow/types'; +import { ICOSmartContract, ICOMigrationSmartContract } from './ICO/types'; +import { TokenSmartContract, TokenMigrationSmartContract } from './Token/types'; + +import { createEscrowSmartContract } from './Escrow/contract'; +import { createICOSmartContract } from './ICO/contract'; +import { createTokenSmartContract } from './Token/contract'; + +export interface Contracts { + readonly escrow: EscrowSmartContract; + readonly ico: ICOSmartContract; + readonly token: TokenSmartContract; +} + +export interface MigrationContracts { + readonly escrow: EscrowMigrationSmartContract; + readonly ico: ICOMigrationSmartContract; + readonly token: TokenMigrationSmartContract; +} + +export const createContracts = (client: TClient): Contracts => ({ + escrow: createEscrowSmartContract(client), + ico: createICOSmartContract(client), + token: createTokenSmartContract(client), +}); diff --git a/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/index.ts b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/index.ts new file mode 100644 index 0000000000..fac12bef71 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/index.ts @@ -0,0 +1,15 @@ +/* @hash ccc1c990a504e1979ce96b8cf0e2ec6c */ +// tslint:disable +/* eslint-disable */ +export * from './contracts'; +export * from './react'; +export * from './client'; +export * from './Escrow/contract'; +export * from './Escrow/types'; +export * from './Escrow/abi'; +export * from './Token/contract'; +export * from './Token/types'; +export * from './Token/abi'; +export * from './ICO/contract'; +export * from './ICO/types'; +export * from './ICO/abi'; diff --git a/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/react.tsx b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/react.tsx new file mode 100644 index 0000000000..94d2e2e848 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/react.tsx @@ -0,0 +1,56 @@ +/* @hash 7e8bb9e00347cedef395d8e1659239ec */ +// tslint:disable +/* eslint-disable */ +import { Client, DeveloperClients, DeveloperTools } from '@neo-one/client'; +import * as React from 'react'; +import { Contracts } from './contracts'; +import { createClient, createDeveloperClients } from './client'; +import { createEscrowSmartContract } from './Escrow/contract'; +import { createTokenSmartContract } from './Token/contract'; +import { createICOSmartContract } from './ICO/contract'; + +export interface WithClients { + readonly client: TClient; + readonly developerClients: DeveloperClients; + readonly host?: string; +} +export type ContractsWithClients = Contracts & WithClients; + +const Context = React.createContext>(undefined as any); + +export type ContractsProviderProps = Partial> & { + readonly children?: React.ReactNode; +}; +export const ContractsProvider = ({ + client: clientIn, + developerClients: developerClientsIn, + host, + children, +}: ContractsProviderProps) => { + const client = clientIn === undefined ? createClient(host) : clientIn; + const developerClients = developerClientsIn === undefined ? createDeveloperClients(host) : developerClientsIn; + DeveloperTools.enable({ client, developerClients }); + + return ( + + {children} + + ); +}; + +export interface WithContractsProps { + readonly children: (contracts: ContractsWithClients) => React.ReactNode; +} +export const WithContracts = ({ children }: WithContractsProps) => ( + {children} +); + +export const useContracts = (): ContractsWithClients => React.useContext(Context); diff --git a/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/sourceMaps.ts b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/sourceMaps.ts new file mode 100644 index 0000000000..7f58eec9fa --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/sourceMaps.ts @@ -0,0 +1,51 @@ +/* @hash 5272e938f80e0a8194b830501b68fc40 */ +// tslint:disable +/* eslint-disable */ +import { SourceMaps } from '@neo-one/client'; + +let sourceMapsIn: SourceMaps = {}; + +if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') { + sourceMapsIn = { + ARW79N7gAWHytcWSkkXvwrJiR4FTyvf2f8: { + mappings: + 'AAAA;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQF;AAAA;AAAA;AAAA;AAAA;AAES;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACaA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACkCE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AAAA;AAAA;AADjB;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACmrCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFxxCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUE;AAAA;AAAA;AAVF;AAUE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACE;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAxB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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACmrCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFxxCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOE;AAAA;AAAA;AAPF;AAOE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAPF;AAWI;AAAA;AAAA;AAXJ;AAWI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAXJ;AAYI;AAAA;AAAA;AAZJ;AAYI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAZJ;AAaI;AAAA;AAAA;AAbJ;AAaI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAbJ;AAqBE;AAAA;AAAA;AArBF;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArBF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAdA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', + names: [], + sources: [ + '../neo-one/contracts/ICO.ts', + '../neo-one/contracts/Token.ts', + '../../../../../../neo-one-smart-contract/lib/index.d.ts', + ], + sourcesContent: [ + "import {\n Address,\n Blockchain,\n constant,\n Deploy,\n Fixed,\n Hash256,\n Integer,\n LinkedSmartContract,\n receive,\n SmartContract,\n} from '@neo-one/smart-contract';\nimport { Token } from './Token';\n\nexport class ICO extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'NEOβ€’ONE ICO',\n };\n public readonly amountPerNEO = 10;\n private mutableRemaining: Fixed<8> = 10_000_000_000_00000000;\n\n public constructor(\n public readonly owner: Address = Deploy.senderAddress,\n public readonly startTimeSeconds: Integer = Blockchain.currentBlockTime,\n public readonly icoDurationSeconds: Integer = 157700000,\n ) {\n super();\n if (!Address.isCaller(owner)) {\n throw new Error('Sender was not the owner.');\n }\n }\n\n @constant\n public get remaining(): Fixed<8> {\n return this.mutableRemaining;\n }\n\n @receive\n public mintTokens(): void {\n if (!this.hasStarted() || this.hasEnded()) {\n throw new Error('Invalid mintTokens');\n }\n\n const { references } = Blockchain.currentTransaction;\n if (references.length === 0) {\n throw new Error('Invalid mintTokens');\n }\n const sender = references[0].address;\n\n let amount = 0;\n // tslint:disable-next-line no-loop-statement\n for (const output of Blockchain.currentTransaction.outputs) {\n if (output.address.equals(this.address)) {\n if (!output.asset.equals(Hash256.NEO)) {\n throw new Error('Invalid mintTokens');\n }\n\n amount += output.value * this.amountPerNEO;\n }\n }\n\n if (amount > this.remaining) {\n throw new Error('Invalid mintTokens');\n }\n\n if (amount === 0) {\n throw new Error('Invalid mintTokens');\n }\n\n const token = LinkedSmartContract.for();\n if (!token.issue(sender, amount)) {\n throw new Error('Invalid mintTokens');\n }\n this.mutableRemaining -= amount;\n }\n\n private hasStarted(): boolean {\n return Blockchain.currentBlockTime >= this.startTimeSeconds;\n }\n\n private hasEnded(): boolean {\n return Blockchain.currentBlockTime > this.startTimeSeconds + this.icoDurationSeconds;\n }\n}\n", + "import {\n Address,\n constant,\n Contract,\n createEventNotifier,\n Fixed,\n ForwardValue,\n MapStorage,\n SmartContract,\n} from '@neo-one/smart-contract';\n\nconst notifyTransfer = createEventNotifier
>(\n 'transfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyApproveSendTransfer = createEventNotifier>(\n 'approveSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyRevokeSendTransfer = createEventNotifier>(\n 'revokeSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\n\ninterface TokenPayableContract {\n readonly approveReceiveTransfer: (\n from: Address,\n amount: Fixed<8>,\n asset: Address,\n // tslint:disable-next-line readonly-array\n ...args: ForwardValue[]\n ) => boolean;\n readonly onRevokeSendTransfer: (from: Address, amount: Fixed<8>, asset: Address) => void;\n}\n\nexport class Token extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'NEOβ€’ONE Token',\n };\n public readonly name = 'One';\n public readonly symbol = 'ONE';\n public readonly decimals = 8;\n private readonly balances = MapStorage.for>();\n private readonly approvedTransfers = MapStorage.for<[Address, Address], Fixed<8>>();\n private mutableSupply: Fixed<8> = 0;\n\n @constant\n public get totalSupply(): Fixed<8> {\n return this.mutableSupply;\n }\n\n @constant\n public balanceOf(address: Address): Fixed<8> {\n const balance = this.balances.get(address);\n\n return balance === undefined ? 0 : balance;\n }\n\n @constant\n public approvedTransfer(from: Address, to: Address): Fixed<8> {\n const approved = this.approvedTransfers.get([from, to]);\n\n return approved === undefined ? 0 : approved;\n }\n\n // tslint:disable-next-line readonly-array\n public transfer(from: Address, to: Address, amount: Fixed<8>, ...approveArgs: ForwardValue[]): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const fromBalance = this.balanceOf(from);\n if (fromBalance < amount) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n const reduceApproved = approved >= amount && Address.isCaller(to);\n if (!reduceApproved && !Address.isCaller(from)) {\n return false;\n }\n\n const contract = Contract.for(to);\n if (contract !== undefined && !Address.isCaller(to)) {\n const smartContract = SmartContract.for(to);\n if (!smartContract.approveReceiveTransfer(from, amount, this.address, ...approveArgs)) {\n return false;\n }\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(from, fromBalance - amount);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(from, to, amount);\n\n if (reduceApproved) {\n this.approvedTransfers.set([from, to], approved - amount);\n }\n\n return true;\n }\n\n public approveSendTransfer(from: Address, to: Address, amount: Fixed<0>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], this.approvedTransfer(from, to) + amount);\n notifyApproveSendTransfer(from, to, amount);\n\n return true;\n }\n\n public approveReceiveTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): boolean {\n return false;\n }\n\n public revokeSendTransfer(from: Address, to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n if (approved < amount) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], approved - amount);\n notifyRevokeSendTransfer(from, to, amount);\n\n const contract = Contract.for(to);\n if (contract !== undefined) {\n const smartContract = SmartContract.for(to);\n // NOTE: This should catch errors once we have stack isolation\n smartContract.onRevokeSendTransfer(from, amount, this.address);\n }\n\n return true;\n }\n\n public onRevokeSendTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): void {\n // do nothing\n }\n\n public issue(to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(undefined, to, amount);\n this.mutableSupply += amount;\n\n return true;\n }\n}\n", + "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? ReturnType extends SmartContractArg\n ? T[K]\n : never\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Buffer;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", + ], + version: 3, + }, + AVtU2izPDU8HPiw4ZCuyqAsxg6WjUa7w29: { + mappings: + 'AAAA;AAe+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwnC3B;AAAA;AAAA;ADxnC2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwnCjB;AAAA;AAAA;ADxnCiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwnCP;AAAA;AAAA;ADxnCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwnCG;AAAA;AAAA;ADxnCH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgnCzB;AAAA;AAAA;ADhnCyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgnCf;AAAA;AAAA;ADhnCe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgnCL;AAAA;AAAA;ADhnCK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgnCK;AAAA;AAAA;ADhnCL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmC1B;AAAA;AAAA;ADxmC0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmChB;AAAA;AAAA;ADxmCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmCN;AAAA;AAAA;ADxmCM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmCI;AAAA;AAAA;ADxmCJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmB5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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AAAA;AAAA;AAAA;AADvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAZnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYqE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAd;AAAA;AAAA;AAAA;AAAA;AAAlB;AAAA;AAAA;AAAA;AAAS;AAAT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAe+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASE;AAAA;AAAA;AATF;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATF;AAgBE;AAAA;AAAA;AAhBF;AAgBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAhBF;AA2BE;AAAA;AAAA;AA3BF;AA2BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA3BF;AA+BE;AAAA;AAAA;AA/BF;AA+BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/BF;AA+CE;AAAA;AAAA;AA/CF;AA+CE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/CF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASE;AAAA;AAAA;AATF;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATF;AAgBE;AAAA;AAAA;AAhBF;AAgBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAhBF;AA2BE;AAAA;AAAA;AA3BF;AA2BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA3BF;AA+BE;AAAA;AAAA;AA/BF;AA+BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/BF;AA+CE;AAAA;AAAA;AA/CF;AA+CE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/CF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', + names: [], + sources: ['../neo-one/contracts/Escrow.ts', '../../../../../../neo-one-smart-contract/lib/index.d.ts'], + sourcesContent: [ + "import {\n Address,\n constant,\n createEventNotifier,\n declareEvent,\n Fixed,\n ForwardedValue,\n MapStorage,\n SmartContract,\n} from '@neo-one/smart-contract';\n\ninterface Token {\n readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n}\n\nconst notifyBalanceAvailable = createEventNotifier>(\n 'balanceAvailable',\n 'from',\n 'to',\n 'asset',\n 'amount',\n);\n\nconst notifyBalanceClaimed = createEventNotifier>(\n 'balanceClaimed',\n 'from',\n 'to',\n 'asset',\n 'amount',\n);\n\nconst notifyBalanceRefunded = createEventNotifier>(\n 'balanceRefunded',\n 'from',\n 'to',\n 'asset',\n 'amount',\n);\n\ndeclareEvent
>('transfer', 'from', 'to', 'amount');\n\nexport class Escrow extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'Escrow',\n };\n private readonly balances = MapStorage.for<[Address, Address, Address], Fixed<8>>();\n\n @constant\n public balanceOf(from: Address, to: Address, asset: Address): Fixed<8> {\n const balance = this.balances.get([to, asset, from]);\n\n return balance === undefined ? 0 : balance;\n }\n\n public approveReceiveTransfer(from: Address, amount: Fixed<8>, asset: Address, to: ForwardedValue
): boolean {\n if (!Address.isCaller(asset)) {\n return false;\n }\n\n this.setBalance(from, to, asset, this.balanceOf(from, to, asset) + amount);\n notifyBalanceAvailable(from, to, asset, amount);\n\n return true;\n }\n\n public onRevokeSendTransfer(_from: Address, _amount: Fixed<0>, _asset: Address): void {\n // do nothing\n }\n\n public claim(from: Address, to: Address, asset: Address, amount: Fixed<8>): boolean {\n if (!Address.isCaller(to)) {\n return false;\n }\n\n const contract = SmartContract.for(asset);\n if (contract.transfer(this.address, to, amount)) {\n this.setBalance(from, to, asset, this.balanceOf(from, to, asset) - amount);\n notifyBalanceClaimed(from, to, asset, amount);\n\n return true;\n }\n\n return false;\n }\n\n public refund(from: Address, to: Address, asset: Address, amount: Fixed<8>): boolean {\n if (!Address.isCaller(from)) {\n return false;\n }\n\n const contract = SmartContract.for(asset);\n if (contract.transfer(this.address, from, amount)) {\n this.setBalance(from, to, asset, this.balanceOf(from, to, asset) - amount);\n notifyBalanceRefunded(from, to, asset, amount);\n\n return true;\n }\n\n return false;\n }\n\n private setBalance(from: Address, to: Address, asset: Address, amount: Fixed<8>): void {\n this.balances.set([to, asset, from], amount);\n }\n}\n", + "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? ReturnType extends SmartContractArg\n ? T[K]\n : never\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Buffer;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", + ], + version: 3, + }, + AWFQ5usn6UPEQo85pNxLyNuuGnSvC9uckv: { + mappings: + 'AAAA;AAWuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqnCnB;AAAA;AAAA;ADrnCmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqnCT;AAAA;AAAA;ADrnCS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqnCC;AAAA;AAAA;ADrnCD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC+mC9B;AAAA;AAAA;AD/mC8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC+mCpB;AAAA;AAAA;AD/mCoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC+mCV;AAAA;AAAA;AD/mCU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACymC7B;AAAA;AAAA;ADzmC6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACymCnB;AAAA;AAAA;ADzmCmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACymCT;AAAA;AAAA;ADzmCS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyB/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AALF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8DkE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA9DlE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACS;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAHiD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAf;AAAA;AAvCpB;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AADjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC6C;AAAA;AAAA;AAAA;AAAA;AAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAlB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAY;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAxB;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AAH2C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuCoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAvCpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuCQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAApC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAH0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMrB;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAxB+E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAjF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAX;AAAA;AAAA;AAAA;AAAf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOE;AAAA;AAAA;AAPF;AAOE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAPF;AAQE;AAAA;AAAA;AARF;AAQE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AARF;AASE;AAAA;AAAA;AATF;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATF;AAcE;AAAA;AAAA;AAdF;AAcE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAdF;AAmBE;AAAA;AAAA;AAnBF;AAmBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnBF;AA0BE;AAAA;AAAA;AA1BF;AA0BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAkCE;AAAA;AAAA;AAlCF;AAkCE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAlCF;AAsEE;AAAA;AAAA;AAtEF;AAsEE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAtEF;AAqFE;AAAA;AAAA;AArFF;AAqFE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArFF;AAyFE;AAAA;AAAA;AAzFF;AAyFE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzFF;AAoHE;AAAA;AAAA;AApHF;AAoHE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AApHF;AAwHE;AAAA;AAAA;AAxHF;AAwHE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxHF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', + names: [], + sources: ['../neo-one/contracts/Token.ts', '../../../../../../neo-one-smart-contract/lib/index.d.ts'], + sourcesContent: [ + "import {\n Address,\n constant,\n Contract,\n createEventNotifier,\n Fixed,\n ForwardValue,\n MapStorage,\n SmartContract,\n} from '@neo-one/smart-contract';\n\nconst notifyTransfer = createEventNotifier
>(\n 'transfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyApproveSendTransfer = createEventNotifier>(\n 'approveSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyRevokeSendTransfer = createEventNotifier>(\n 'revokeSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\n\ninterface TokenPayableContract {\n readonly approveReceiveTransfer: (\n from: Address,\n amount: Fixed<8>,\n asset: Address,\n // tslint:disable-next-line readonly-array\n ...args: ForwardValue[]\n ) => boolean;\n readonly onRevokeSendTransfer: (from: Address, amount: Fixed<8>, asset: Address) => void;\n}\n\nexport class Token extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'NEOβ€’ONE Token',\n };\n public readonly name = 'One';\n public readonly symbol = 'ONE';\n public readonly decimals = 8;\n private readonly balances = MapStorage.for>();\n private readonly approvedTransfers = MapStorage.for<[Address, Address], Fixed<8>>();\n private mutableSupply: Fixed<8> = 0;\n\n @constant\n public get totalSupply(): Fixed<8> {\n return this.mutableSupply;\n }\n\n @constant\n public balanceOf(address: Address): Fixed<8> {\n const balance = this.balances.get(address);\n\n return balance === undefined ? 0 : balance;\n }\n\n @constant\n public approvedTransfer(from: Address, to: Address): Fixed<8> {\n const approved = this.approvedTransfers.get([from, to]);\n\n return approved === undefined ? 0 : approved;\n }\n\n // tslint:disable-next-line readonly-array\n public transfer(from: Address, to: Address, amount: Fixed<8>, ...approveArgs: ForwardValue[]): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const fromBalance = this.balanceOf(from);\n if (fromBalance < amount) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n const reduceApproved = approved >= amount && Address.isCaller(to);\n if (!reduceApproved && !Address.isCaller(from)) {\n return false;\n }\n\n const contract = Contract.for(to);\n if (contract !== undefined && !Address.isCaller(to)) {\n const smartContract = SmartContract.for(to);\n if (!smartContract.approveReceiveTransfer(from, amount, this.address, ...approveArgs)) {\n return false;\n }\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(from, fromBalance - amount);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(from, to, amount);\n\n if (reduceApproved) {\n this.approvedTransfers.set([from, to], approved - amount);\n }\n\n return true;\n }\n\n public approveSendTransfer(from: Address, to: Address, amount: Fixed<0>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], this.approvedTransfer(from, to) + amount);\n notifyApproveSendTransfer(from, to, amount);\n\n return true;\n }\n\n public approveReceiveTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): boolean {\n return false;\n }\n\n public revokeSendTransfer(from: Address, to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n if (approved < amount) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], approved - amount);\n notifyRevokeSendTransfer(from, to, amount);\n\n const contract = Contract.for(to);\n if (contract !== undefined) {\n const smartContract = SmartContract.for(to);\n // NOTE: This should catch errors once we have stack isolation\n smartContract.onRevokeSendTransfer(from, amount, this.address);\n }\n\n return true;\n }\n\n public onRevokeSendTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): void {\n // do nothing\n }\n\n public issue(to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(undefined, to, amount);\n this.mutableSupply += amount;\n\n return true;\n }\n}\n", + "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? ReturnType extends SmartContractArg\n ? T[K]\n : never\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Buffer;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", + ], + version: 3, + }, + } as any; +} + +export const sourceMaps: SourceMaps = sourceMapsIn; diff --git a/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/test.ts b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/test.ts new file mode 100644 index 0000000000..d5961e91f2 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/codegen/test.ts @@ -0,0 +1,15 @@ +/* @hash ba4c2d02de6f6fff287d33499e4c0951 */ +// tslint:disable +/* eslint-disable */ +import { createWithContracts, TestOptions, WithContractsOptions } from '@neo-one/smart-contract-test'; +import { Contracts } from './contracts'; +import * as path from 'path'; + +export const withContracts: ( + test: (contracts: Contracts & TestOptions) => Promise, + options?: WithContractsOptions, +) => Promise = createWithContracts([ + { name: 'Escrow', filePath: path.resolve(__dirname, '../neo-one/contracts/Escrow.ts') }, + { name: 'Token', filePath: path.resolve(__dirname, '../neo-one/contracts/Token.ts') }, + { name: 'ICO', filePath: path.resolve(__dirname, '../neo-one/contracts/ICO.ts') }, +]); diff --git a/packages/neo-one-cli/src/__data__/projects/ico-neotracker/neo-one/contracts/Escrow.ts b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/neo-one/contracts/Escrow.ts new file mode 100644 index 0000000000..2bf9d578a1 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/neo-one/contracts/Escrow.ts @@ -0,0 +1,108 @@ +import { + Address, + constant, + createEventNotifier, + declareEvent, + Fixed, + ForwardedValue, + MapStorage, + SmartContract, +} from '@neo-one/smart-contract'; + +interface Token { + readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean; +} + +const notifyBalanceAvailable = createEventNotifier>( + 'balanceAvailable', + 'from', + 'to', + 'asset', + 'amount', +); + +const notifyBalanceClaimed = createEventNotifier>( + 'balanceClaimed', + 'from', + 'to', + 'asset', + 'amount', +); + +const notifyBalanceRefunded = createEventNotifier>( + 'balanceRefunded', + 'from', + 'to', + 'asset', + 'amount', +); + +declareEvent
>('transfer', 'from', 'to', 'amount'); + +export class Escrow extends SmartContract { + public readonly properties = { + codeVersion: '1.0', + author: 'dicarlo2', + email: 'alex.dicarlo@neotracker.io', + description: 'Escrow', + }; + private readonly balances = MapStorage.for<[Address, Address, Address], Fixed<8>>(); + + @constant + public balanceOf(from: Address, to: Address, asset: Address): Fixed<8> { + const balance = this.balances.get([to, asset, from]); + + return balance === undefined ? 0 : balance; + } + + public approveReceiveTransfer(from: Address, amount: Fixed<8>, asset: Address, to: ForwardedValue
): boolean { + if (!Address.isCaller(asset)) { + return false; + } + + this.setBalance(from, to, asset, this.balanceOf(from, to, asset) + amount); + notifyBalanceAvailable(from, to, asset, amount); + + return true; + } + + public onRevokeSendTransfer(_from: Address, _amount: Fixed<0>, _asset: Address): void { + // do nothing + } + + public claim(from: Address, to: Address, asset: Address, amount: Fixed<8>): boolean { + if (!Address.isCaller(to)) { + return false; + } + + const contract = SmartContract.for(asset); + if (contract.transfer(this.address, to, amount)) { + this.setBalance(from, to, asset, this.balanceOf(from, to, asset) - amount); + notifyBalanceClaimed(from, to, asset, amount); + + return true; + } + + return false; + } + + public refund(from: Address, to: Address, asset: Address, amount: Fixed<8>): boolean { + if (!Address.isCaller(from)) { + return false; + } + + const contract = SmartContract.for(asset); + if (contract.transfer(this.address, from, amount)) { + this.setBalance(from, to, asset, this.balanceOf(from, to, asset) - amount); + notifyBalanceRefunded(from, to, asset, amount); + + return true; + } + + return false; + } + + private setBalance(from: Address, to: Address, asset: Address, amount: Fixed<8>): void { + this.balances.set([to, asset, from], amount); + } +} diff --git a/packages/neo-one-cli/src/__data__/projects/ico-neotracker/neo-one/contracts/ICO.ts b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/neo-one/contracts/ICO.ts new file mode 100644 index 0000000000..7416b5d372 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/neo-one/contracts/ICO.ts @@ -0,0 +1,87 @@ +import { + Address, + Blockchain, + constant, + Deploy, + Fixed, + Hash256, + Integer, + LinkedSmartContract, + receive, + SmartContract, +} from '@neo-one/smart-contract'; +import { Token } from './Token'; + +export class ICO extends SmartContract { + public readonly properties = { + codeVersion: '1.0', + author: 'dicarlo2', + email: 'alex.dicarlo@neotracker.io', + description: 'NEOβ€’ONE ICO', + }; + public readonly amountPerNEO = 10; + private mutableRemaining: Fixed<8> = 10_000_000_000_00000000; + + public constructor( + public readonly owner: Address = Deploy.senderAddress, + public readonly startTimeSeconds: Integer = Blockchain.currentBlockTime, + public readonly icoDurationSeconds: Integer = 157700000, + ) { + super(); + if (!Address.isCaller(owner)) { + throw new Error('Sender was not the owner.'); + } + } + + @constant + public get remaining(): Fixed<8> { + return this.mutableRemaining; + } + + @receive + public mintTokens(): void { + if (!this.hasStarted() || this.hasEnded()) { + throw new Error('Invalid mintTokens'); + } + + const { references } = Blockchain.currentTransaction; + if (references.length === 0) { + throw new Error('Invalid mintTokens'); + } + const sender = references[0].address; + + let amount = 0; + // tslint:disable-next-line no-loop-statement + for (const output of Blockchain.currentTransaction.outputs) { + if (output.address.equals(this.address)) { + if (!output.asset.equals(Hash256.NEO)) { + throw new Error('Invalid mintTokens'); + } + + amount += output.value * this.amountPerNEO; + } + } + + if (amount > this.remaining) { + throw new Error('Invalid mintTokens'); + } + + if (amount === 0) { + throw new Error('Invalid mintTokens'); + } + + const token = LinkedSmartContract.for(); + if (!token.issue(sender, amount)) { + throw new Error('Invalid mintTokens'); + } + this.mutableRemaining -= amount; + } + + private hasStarted(): boolean { + return Blockchain.currentBlockTime >= this.startTimeSeconds; + } + + private hasEnded(): boolean { + return Blockchain.currentBlockTime > this.startTimeSeconds + this.icoDurationSeconds; + } +} diff --git a/packages/neo-one-cli/src/__data__/projects/ico-neotracker/neo-one/contracts/Token.ts b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/neo-one/contracts/Token.ts new file mode 100644 index 0000000000..60303e0e37 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/neo-one/contracts/Token.ts @@ -0,0 +1,174 @@ +import { + Address, + constant, + Contract, + createEventNotifier, + Fixed, + ForwardValue, + MapStorage, + SmartContract, +} from '@neo-one/smart-contract'; + +const notifyTransfer = createEventNotifier
>( + 'transfer', + 'from', + 'to', + 'amount', +); +const notifyApproveSendTransfer = createEventNotifier>( + 'approveSendTransfer', + 'from', + 'to', + 'amount', +); +const notifyRevokeSendTransfer = createEventNotifier>( + 'revokeSendTransfer', + 'from', + 'to', + 'amount', +); + +interface TokenPayableContract { + readonly approveReceiveTransfer: ( + from: Address, + amount: Fixed<8>, + asset: Address, + // tslint:disable-next-line readonly-array + ...args: ForwardValue[] + ) => boolean; + readonly onRevokeSendTransfer: (from: Address, amount: Fixed<8>, asset: Address) => void; +} + +export class Token extends SmartContract { + public readonly properties = { + codeVersion: '1.0', + author: 'dicarlo2', + email: 'alex.dicarlo@neotracker.io', + description: 'NEOβ€’ONE Token', + }; + public readonly name = 'One'; + public readonly symbol = 'ONE'; + public readonly decimals = 8; + private readonly balances = MapStorage.for>(); + private readonly approvedTransfers = MapStorage.for<[Address, Address], Fixed<8>>(); + private mutableSupply: Fixed<8> = 0; + + @constant + public get totalSupply(): Fixed<8> { + return this.mutableSupply; + } + + @constant + public balanceOf(address: Address): Fixed<8> { + const balance = this.balances.get(address); + + return balance === undefined ? 0 : balance; + } + + @constant + public approvedTransfer(from: Address, to: Address): Fixed<8> { + const approved = this.approvedTransfers.get([from, to]); + + return approved === undefined ? 0 : approved; + } + + // tslint:disable-next-line readonly-array + public transfer(from: Address, to: Address, amount: Fixed<8>, ...approveArgs: ForwardValue[]): boolean { + if (amount < 0) { + throw new Error(`Amount must be greater than 0: ${amount}`); + } + + const fromBalance = this.balanceOf(from); + if (fromBalance < amount) { + return false; + } + + const approved = this.approvedTransfer(from, to); + const reduceApproved = approved >= amount && Address.isCaller(to); + if (!reduceApproved && !Address.isCaller(from)) { + return false; + } + + const contract = Contract.for(to); + if (contract !== undefined && !Address.isCaller(to)) { + const smartContract = SmartContract.for(to); + if (!smartContract.approveReceiveTransfer(from, amount, this.address, ...approveArgs)) { + return false; + } + } + + const toBalance = this.balanceOf(to); + this.balances.set(from, fromBalance - amount); + this.balances.set(to, toBalance + amount); + notifyTransfer(from, to, amount); + + if (reduceApproved) { + this.approvedTransfers.set([from, to], approved - amount); + } + + return true; + } + + public approveSendTransfer(from: Address, to: Address, amount: Fixed<0>): boolean { + if (amount < 0) { + throw new Error(`Amount must be greater than 0: ${amount}`); + } + + if (!Address.isCaller(from)) { + return false; + } + + this.approvedTransfers.set([from, to], this.approvedTransfer(from, to) + amount); + notifyApproveSendTransfer(from, to, amount); + + return true; + } + + public approveReceiveTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): boolean { + return false; + } + + public revokeSendTransfer(from: Address, to: Address, amount: Fixed<8>): boolean { + if (amount < 0) { + throw new Error(`Amount must be greater than 0: ${amount}`); + } + + if (!Address.isCaller(from)) { + return false; + } + + const approved = this.approvedTransfer(from, to); + if (approved < amount) { + return false; + } + + this.approvedTransfers.set([from, to], approved - amount); + notifyRevokeSendTransfer(from, to, amount); + + const contract = Contract.for(to); + if (contract !== undefined) { + const smartContract = SmartContract.for(to); + // NOTE: This should catch errors once we have stack isolation + smartContract.onRevokeSendTransfer(from, amount, this.address); + } + + return true; + } + + public onRevokeSendTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): void { + // do nothing + } + + public issue(to: Address, amount: Fixed<8>): boolean { + if (amount < 0) { + throw new Error(`Amount must be greater than 0: ${amount}`); + } + + const toBalance = this.balanceOf(to); + this.balances.set(to, toBalance + amount); + notifyTransfer(undefined, to, amount); + this.mutableSupply += amount; + + return true; + } +} diff --git a/packages/neo-one-cli/src/__data__/projects/ico-neotracker/neo-one/contracts/tsconfig.json b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/neo-one/contracts/tsconfig.json new file mode 100644 index 0000000000..5ffd571d07 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/neo-one/contracts/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "commonjs", + "moduleResolution": "node", + + "noLib": true, + "typeRoots": [], + + "pretty": true, + + "noEmit": true, + "declaration": false, + + "allowSyntheticDefaultImports": true, + "resolveJsonModule": false, + "experimentalDecorators": true, + + "alwaysStrict": true, + "strict": true, + "skipLibCheck": false, + "noUnusedLocals": true, + "noImplicitReturns": true, + "allowUnusedLabels": false, + "noUnusedParameters": false, + "allowUnreachableCode": false, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true + } +} diff --git a/packages/neo-one-cli/src/__data__/projects/ico-neotracker/neo-one/migration.ts b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/neo-one/migration.ts new file mode 100644 index 0000000000..e7efb53af2 --- /dev/null +++ b/packages/neo-one-cli/src/__data__/projects/ico-neotracker/neo-one/migration.ts @@ -0,0 +1,9 @@ +// tslint:disable no-floating-promises no-default-export no-implicit-dependencies export-name +import BigNumber from 'bignumber.js'; +import { MigrationContracts } from '../codegen'; + +export default ({ token, ico, escrow }: MigrationContracts, _network: string) => { + token.deploy(); + ico.deploy(undefined, new BigNumber(1566864121), undefined); + escrow.deploy(); +}; diff --git a/packages/neo-one-cli/src/__data__/projects/ico-vue/.neo-one.config.js b/packages/neo-one-cli/src/__data__/projects/ico-vue/.neo-one.config.js index db4ff622f9..b09d505cee 100644 --- a/packages/neo-one-cli/src/__data__/projects/ico-vue/.neo-one.config.js +++ b/packages/neo-one-cli/src/__data__/projects/ico-vue/.neo-one.config.js @@ -14,6 +14,9 @@ const neotrackerPort = parseInt( ); module.exports = { + contracts: { + outDir: nodePath.join(tmpDir, 'compiled'), + }, migration: { path: nodePath.join('neo-one', 'migration.ts'), }, diff --git a/packages/neo-one-cli/src/__data__/projects/ico-vue/codegen/client.ts b/packages/neo-one-cli/src/__data__/projects/ico-vue/codegen/client.ts index 6dc2fc7e92..46fdb76eb0 100644 --- a/packages/neo-one-cli/src/__data__/projects/ico-vue/codegen/client.ts +++ b/packages/neo-one-cli/src/__data__/projects/ico-vue/codegen/client.ts @@ -1,7 +1,8 @@ -/* @hash 5acda1db24d31773c1006f32e2885ad5 */ +/* @hash 323dea192026bdc30e1e43f4ee149def */ // tslint:disable /* eslint-disable */ import { + addLocalKeysSync, Client, DapiUserAccountProvider, DeveloperClient, @@ -64,7 +65,7 @@ export const createClient = { - // do nothing - }); + addLocalKeysSync( + [ + { network: 'local', name: 'master', privateKey: 'L4qhHtwbiAMu1nrSmsTP5a3dJbxA3SNS6oheKnKd8E7KTJyCLcUv' }, + { network: 'local', name: 'alfa', privateKey: 'KyX5sPKRpAMb3XAFLUrHv7u1LxKkKFrpyJDgE4kceRX9FRJ4WRCQ' }, + { network: 'local', name: 'bravo', privateKey: 'L5LfJc2Ngsxu8ZFMvnJbYJ1QdQCstzRXmKLybsFS1aQFURkJ5CHS' }, + { network: 'local', name: 'charlie', privateKey: 'KxCH2Ei4TLqp2Qa7swz9bstQc5uREiCpvzvL9R6xLX8X5U8ZqeBj' }, + { network: 'local', name: 'delta', privateKey: 'KyVvngWhhfHiociMuwyLmGw8xTu9myKXRnvv5Fes9jDMa2Zyc6P9' }, + { network: 'local', name: 'echo', privateKey: 'L37qr7PWqWmgjUPfRC9mS78GjRxgGi4azySCsLUBMAa5hMka2JEm' }, + { network: 'local', name: 'foxtrot', privateKey: 'KwFf8gdSWxvC5Pp8AidNdF6mHqjH3CukyF3RnfwS5vzMQKLGTP13' }, + { network: 'local', name: 'golf', privateKey: 'Kyn2BN3QuHGYgkt9qJgvwzY8yH4xgTUAKwnGhvU1w8Nh3JnivrAr' }, + { network: 'local', name: 'hotel', privateKey: 'L5UXfz1xyzDkghGwistNMCV8pbpU4fg14Ez9rfo1y4KgwiadnWX3' }, + { network: 'local', name: 'india', privateKey: 'L5Yoq3X4ojx2FvZZxHbMcvT6var4LaXKHEpMYyyxw4jjhSUNJTRa' }, + { network: 'local', name: 'juliett', privateKey: 'L1DWex8PtmQJH4GYK9YAuyzmotyL6anY937LxJF54iaALrTtxsD6' }, + ], + localKeyStore, + ); } } } @@ -145,5 +103,5 @@ export const createClient = ({ - local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10100/rpc` })), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10050/rpc` })), }); diff --git a/packages/neo-one-cli/src/__data__/projects/ico-vue/codegen/contracts.ts b/packages/neo-one-cli/src/__data__/projects/ico-vue/codegen/contracts.ts index d068c176c9..647ff366bd 100644 --- a/packages/neo-one-cli/src/__data__/projects/ico-vue/codegen/contracts.ts +++ b/packages/neo-one-cli/src/__data__/projects/ico-vue/codegen/contracts.ts @@ -1,4 +1,4 @@ -/* @hash 05fd692dad792caa7b0650e950261f1f */ +/* @hash 793fa245837019b4c9e3a66341f16035 */ // tslint:disable /* eslint-disable */ import { Client } from '@neo-one/client'; @@ -16,7 +16,7 @@ export interface Contracts { readonly ico: ICOSmartContract; readonly token: TokenSmartContract; } - +// Refer to the MigrationSmartContract documentation at https://neo-one.io/docs/deployment for more information. export interface MigrationContracts { readonly escrow: EscrowMigrationSmartContract; readonly ico: ICOMigrationSmartContract; diff --git a/packages/neo-one-cli/src/__data__/projects/ico-vue/codegen/sourceMaps.ts b/packages/neo-one-cli/src/__data__/projects/ico-vue/codegen/sourceMaps.ts index d789ee6b47..fb2ef29fdc 100644 --- a/packages/neo-one-cli/src/__data__/projects/ico-vue/codegen/sourceMaps.ts +++ b/packages/neo-one-cli/src/__data__/projects/ico-vue/codegen/sourceMaps.ts @@ -1,4 +1,4 @@ -/* @hash 9559df74ef382864b0da19e61812339b */ +/* @hash 131b18f0b432f289ffa8df09b9d4b599 */ // tslint:disable /* eslint-disable */ import { SourceMaps } from '@neo-one/client'; @@ -9,17 +9,17 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') sourceMapsIn = { ARW79N7gAWHytcWSkkXvwrJiR4FTyvf2f8: { mappings: - 'AAAA;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQF;AAAA;AAAA;AAAA;AAAA;AAES;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACaA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACkCE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AAAA;AAAA;AADjB;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACirCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFtxCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUE;AAAA;AAAA;AAVF;AAUE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACE;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAxB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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACirCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFtxCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOE;AAAA;AAAA;AAPF;AAOE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAPF;AAWI;AAAA;AAAA;AAXJ;AAWI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAXJ;AAYI;AAAA;AAAA;AAZJ;AAYI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAZJ;AAaI;AAAA;AAAA;AAbJ;AAaI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAbJ;AAqBE;AAAA;AAAA;AArBF;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArBF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAdA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', + 'AAAA;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQF;AAAA;AAAA;AAAA;AAAA;AAES;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACaA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACkCE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AAAA;AAAA;AADjB;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACmrCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFxxCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUE;AAAA;AAAA;AAVF;AAUE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACE;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAxB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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACmrCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFxxCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOE;AAAA;AAAA;AAPF;AAOE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAPF;AAWI;AAAA;AAAA;AAXJ;AAWI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAXJ;AAYI;AAAA;AAAA;AAZJ;AAYI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAZJ;AAaI;AAAA;AAAA;AAbJ;AAaI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAbJ;AAqBE;AAAA;AAAA;AArBF;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArBF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAdA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', names: [], sources: [ '../neo-one/contracts/ICO.ts', '../neo-one/contracts/Token.ts', - '../../../../../../../dist/neo-one/packages/neo-one-smart-contract/index.d.ts', + '../../../../../../neo-one-smart-contract/src/index.d.ts', ], sourcesContent: [ "import {\n Address,\n Blockchain,\n constant,\n Deploy,\n Fixed,\n Hash256,\n Integer,\n LinkedSmartContract,\n receive,\n SmartContract,\n} from '@neo-one/smart-contract';\nimport { Token } from './Token';\n\nexport class ICO extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'NEOβ€’ONE ICO',\n };\n public readonly amountPerNEO = 10;\n private mutableRemaining: Fixed<8> = 10_000_000_000_00000000;\n\n public constructor(\n public readonly owner: Address = Deploy.senderAddress,\n public readonly startTimeSeconds: Integer = Blockchain.currentBlockTime,\n public readonly icoDurationSeconds: Integer = 157700000,\n ) {\n super();\n if (!Address.isCaller(owner)) {\n throw new Error('Sender was not the owner.');\n }\n }\n\n @constant\n public get remaining(): Fixed<8> {\n return this.mutableRemaining;\n }\n\n @receive\n public mintTokens(): void {\n if (!this.hasStarted() || this.hasEnded()) {\n throw new Error('Invalid mintTokens');\n }\n\n const { references } = Blockchain.currentTransaction;\n if (references.length === 0) {\n throw new Error('Invalid mintTokens');\n }\n const sender = references[0].address;\n\n let amount = 0;\n // tslint:disable-next-line no-loop-statement\n for (const output of Blockchain.currentTransaction.outputs) {\n if (output.address.equals(this.address)) {\n if (!output.asset.equals(Hash256.NEO)) {\n throw new Error('Invalid mintTokens');\n }\n\n amount += output.value * this.amountPerNEO;\n }\n }\n\n if (amount > this.remaining) {\n throw new Error('Invalid mintTokens');\n }\n\n if (amount === 0) {\n throw new Error('Invalid mintTokens');\n }\n\n const token = LinkedSmartContract.for();\n if (!token.issue(sender, amount)) {\n throw new Error('Invalid mintTokens');\n }\n this.mutableRemaining -= amount;\n }\n\n private hasStarted(): boolean {\n return Blockchain.currentBlockTime >= this.startTimeSeconds;\n }\n\n private hasEnded(): boolean {\n return Blockchain.currentBlockTime > this.startTimeSeconds + this.icoDurationSeconds;\n }\n}\n", "import {\n Address,\n constant,\n Contract,\n createEventNotifier,\n Fixed,\n ForwardValue,\n MapStorage,\n SmartContract,\n} from '@neo-one/smart-contract';\n\nconst notifyTransfer = createEventNotifier
>(\n 'transfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyApproveSendTransfer = createEventNotifier>(\n 'approveSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyRevokeSendTransfer = createEventNotifier>(\n 'revokeSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\n\ninterface TokenPayableContract {\n readonly approveReceiveTransfer: (\n from: Address,\n amount: Fixed<8>,\n asset: Address,\n // tslint:disable-next-line readonly-array\n ...args: ForwardValue[]\n ) => boolean;\n readonly onRevokeSendTransfer: (from: Address, amount: Fixed<8>, asset: Address) => void;\n}\n\nexport class Token extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'NEOβ€’ONE Token',\n };\n public readonly name = 'One';\n public readonly symbol = 'ONE';\n public readonly decimals = 8;\n private readonly balances = MapStorage.for>();\n private readonly approvedTransfers = MapStorage.for<[Address, Address], Fixed<8>>();\n private mutableSupply: Fixed<8> = 0;\n\n @constant\n public get totalSupply(): Fixed<8> {\n return this.mutableSupply;\n }\n\n @constant\n public balanceOf(address: Address): Fixed<8> {\n const balance = this.balances.get(address);\n\n return balance === undefined ? 0 : balance;\n }\n\n @constant\n public approvedTransfer(from: Address, to: Address): Fixed<8> {\n const approved = this.approvedTransfers.get([from, to]);\n\n return approved === undefined ? 0 : approved;\n }\n\n // tslint:disable-next-line readonly-array\n public transfer(from: Address, to: Address, amount: Fixed<8>, ...approveArgs: ForwardValue[]): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const fromBalance = this.balanceOf(from);\n if (fromBalance < amount) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n const reduceApproved = approved >= amount && Address.isCaller(to);\n if (!reduceApproved && !Address.isCaller(from)) {\n return false;\n }\n\n const contract = Contract.for(to);\n if (contract !== undefined && !Address.isCaller(to)) {\n const smartContract = SmartContract.for(to);\n if (!smartContract.approveReceiveTransfer(from, amount, this.address, ...approveArgs)) {\n return false;\n }\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(from, fromBalance - amount);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(from, to, amount);\n\n if (reduceApproved) {\n this.approvedTransfers.set([from, to], approved - amount);\n }\n\n return true;\n }\n\n public approveSendTransfer(from: Address, to: Address, amount: Fixed<0>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], this.approvedTransfer(from, to) + amount);\n notifyApproveSendTransfer(from, to, amount);\n\n return true;\n }\n\n public approveReceiveTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): boolean {\n return false;\n }\n\n public revokeSendTransfer(from: Address, to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n if (approved < amount) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], approved - amount);\n notifyRevokeSendTransfer(from, to, amount);\n\n const contract = Contract.for(to);\n if (contract !== undefined) {\n const smartContract = SmartContract.for(to);\n // NOTE: This should catch errors once we have stack isolation\n smartContract.onRevokeSendTransfer(from, amount, this.address);\n }\n\n return true;\n }\n\n public onRevokeSendTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): void {\n // do nothing\n }\n\n public issue(to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(undefined, to, amount);\n this.mutableSupply += amount;\n\n return true;\n }\n}\n", - "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? (ReturnType extends SmartContractArg ? T[K] : never)\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Buffer;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", + "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? ReturnType extends SmartContractArg\n ? T[K]\n : never\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Address;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Hash256;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", ], version: 3, }, @@ -27,13 +27,10 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') mappings: 'AAAA;AAe+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwnC3B;AAAA;AAAA;ADxnC2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwnCjB;AAAA;AAAA;ADxnCiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwnCP;AAAA;AAAA;ADxnCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwnCG;AAAA;AAAA;ADxnCH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgnCzB;AAAA;AAAA;ADhnCyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgnCf;AAAA;AAAA;ADhnCe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgnCL;AAAA;AAAA;ADhnCK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgnCK;AAAA;AAAA;ADhnCL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmC1B;AAAA;AAAA;ADxmC0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmChB;AAAA;AAAA;ADxmCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmCN;AAAA;AAAA;ADxmCM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmCI;AAAA;AAAA;ADxmCJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmB5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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AAAA;AAAA;AAAA;AADvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAZnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYqE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAd;AAAA;AAAA;AAAA;AAAA;AAAlB;AAAA;AAAA;AAAA;AAAS;AAAT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAe+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASE;AAAA;AAAA;AATF;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATF;AAgBE;AAAA;AAAA;AAhBF;AAgBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAhBF;AA2BE;AAAA;AAAA;AA3BF;AA2BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA3BF;AA+BE;AAAA;AAAA;AA/BF;AA+BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/BF;AA+CE;AAAA;AAAA;AA/CF;AA+CE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/CF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASE;AAAA;AAAA;AATF;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATF;AAgBE;AAAA;AAAA;AAhBF;AAgBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAhBF;AA2BE;AAAA;AAAA;AA3BF;AA2BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA3BF;AA+BE;AAAA;AAAA;AA/BF;AA+BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/BF;AA+CE;AAAA;AAAA;AA/CF;AA+CE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/CF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', names: [], - sources: [ - '../neo-one/contracts/Escrow.ts', - '../../../../../../../dist/neo-one/packages/neo-one-smart-contract/index.d.ts', - ], + sources: ['../neo-one/contracts/Escrow.ts', '../../../../../../neo-one-smart-contract/src/index.d.ts'], sourcesContent: [ "import {\n Address,\n constant,\n createEventNotifier,\n declareEvent,\n Fixed,\n ForwardedValue,\n MapStorage,\n SmartContract,\n} from '@neo-one/smart-contract';\n\ninterface Token {\n readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n}\n\nconst notifyBalanceAvailable = createEventNotifier>(\n 'balanceAvailable',\n 'from',\n 'to',\n 'asset',\n 'amount',\n);\n\nconst notifyBalanceClaimed = createEventNotifier>(\n 'balanceClaimed',\n 'from',\n 'to',\n 'asset',\n 'amount',\n);\n\nconst notifyBalanceRefunded = createEventNotifier>(\n 'balanceRefunded',\n 'from',\n 'to',\n 'asset',\n 'amount',\n);\n\ndeclareEvent
>('transfer', 'from', 'to', 'amount');\n\nexport class Escrow extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'Escrow',\n };\n private readonly balances = MapStorage.for<[Address, Address, Address], Fixed<8>>();\n\n @constant\n public balanceOf(from: Address, to: Address, asset: Address): Fixed<8> {\n const balance = this.balances.get([to, asset, from]);\n\n return balance === undefined ? 0 : balance;\n }\n\n public approveReceiveTransfer(from: Address, amount: Fixed<8>, asset: Address, to: ForwardedValue
): boolean {\n if (!Address.isCaller(asset)) {\n return false;\n }\n\n this.setBalance(from, to, asset, this.balanceOf(from, to, asset) + amount);\n notifyBalanceAvailable(from, to, asset, amount);\n\n return true;\n }\n\n public onRevokeSendTransfer(_from: Address, _amount: Fixed<0>, _asset: Address): void {\n // do nothing\n }\n\n public claim(from: Address, to: Address, asset: Address, amount: Fixed<8>): boolean {\n if (!Address.isCaller(to)) {\n return false;\n }\n\n const contract = SmartContract.for(asset);\n if (contract.transfer(this.address, to, amount)) {\n this.setBalance(from, to, asset, this.balanceOf(from, to, asset) - amount);\n notifyBalanceClaimed(from, to, asset, amount);\n\n return true;\n }\n\n return false;\n }\n\n public refund(from: Address, to: Address, asset: Address, amount: Fixed<8>): boolean {\n if (!Address.isCaller(from)) {\n return false;\n }\n\n const contract = SmartContract.for(asset);\n if (contract.transfer(this.address, from, amount)) {\n this.setBalance(from, to, asset, this.balanceOf(from, to, asset) - amount);\n notifyBalanceRefunded(from, to, asset, amount);\n\n return true;\n }\n\n return false;\n }\n\n private setBalance(from: Address, to: Address, asset: Address, amount: Fixed<8>): void {\n this.balances.set([to, asset, from], amount);\n }\n}\n", - "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? (ReturnType extends SmartContractArg ? T[K] : never)\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Buffer;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", + "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? ReturnType extends SmartContractArg\n ? T[K]\n : never\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Address;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Hash256;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", ], version: 3, }, @@ -41,13 +38,10 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') mappings: 'AAAA;AAWuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqnCnB;AAAA;AAAA;ADrnCmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqnCT;AAAA;AAAA;ADrnCS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqnCC;AAAA;AAAA;ADrnCD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC+mC9B;AAAA;AAAA;AD/mC8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC+mCpB;AAAA;AAAA;AD/mCoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC+mCV;AAAA;AAAA;AD/mCU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACymC7B;AAAA;AAAA;ADzmC6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACymCnB;AAAA;AAAA;ADzmCmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACymCT;AAAA;AAAA;ADzmCS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyB/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AALF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8DkE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA9DlE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACS;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAHiD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOpB;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAH0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMrB;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAxB+E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAjF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAX;AAAA;AAAA;AAAA;AAAf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOE;AAAA;AAAA;AAPF;AAOE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAPF;AAQE;AAAA;AAAA;AARF;AAQE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AARF;AASE;AAAA;AAAA;AATF;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATF;AAcE;AAAA;AAAA;AAdF;AAcE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAdF;AAmBE;AAAA;AAAA;AAnBF;AAmBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnBF;AA0BE;AAAA;AAAA;AA1BF;AA0BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAkCE;AAAA;AAAA;AAlCF;AAkCE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAlCF;AAsEE;AAAA;AAAA;AAtEF;AAsEE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAtEF;AAqFE;AAAA;AAAA;AArFF;AAqFE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArFF;AAyFE;AAAA;AAAA;AAzFF;AAyFE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzFF;AAoHE;AAAA;AAAA;AApHF;AAoHE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AApHF;AAwHE;AAAA;AAAA;AAxHF;AAwHE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxHF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', names: [], - sources: [ - '../neo-one/contracts/Token.ts', - '../../../../../../../dist/neo-one/packages/neo-one-smart-contract/index.d.ts', - ], + sources: ['../neo-one/contracts/Token.ts', '../../../../../../neo-one-smart-contract/src/index.d.ts'], sourcesContent: [ "import {\n Address,\n constant,\n Contract,\n createEventNotifier,\n Fixed,\n ForwardValue,\n MapStorage,\n SmartContract,\n} from '@neo-one/smart-contract';\n\nconst notifyTransfer = createEventNotifier
>(\n 'transfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyApproveSendTransfer = createEventNotifier>(\n 'approveSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyRevokeSendTransfer = createEventNotifier>(\n 'revokeSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\n\ninterface TokenPayableContract {\n readonly approveReceiveTransfer: (\n from: Address,\n amount: Fixed<8>,\n asset: Address,\n // tslint:disable-next-line readonly-array\n ...args: ForwardValue[]\n ) => boolean;\n readonly onRevokeSendTransfer: (from: Address, amount: Fixed<8>, asset: Address) => void;\n}\n\nexport class Token extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'NEOβ€’ONE Token',\n };\n public readonly name = 'One';\n public readonly symbol = 'ONE';\n public readonly decimals = 8;\n private readonly balances = MapStorage.for>();\n private readonly approvedTransfers = MapStorage.for<[Address, Address], Fixed<8>>();\n private mutableSupply: Fixed<8> = 0;\n\n @constant\n public get totalSupply(): Fixed<8> {\n return this.mutableSupply;\n }\n\n @constant\n public balanceOf(address: Address): Fixed<8> {\n const balance = this.balances.get(address);\n\n return balance === undefined ? 0 : balance;\n }\n\n @constant\n public approvedTransfer(from: Address, to: Address): Fixed<8> {\n const approved = this.approvedTransfers.get([from, to]);\n\n return approved === undefined ? 0 : approved;\n }\n\n // tslint:disable-next-line readonly-array\n public transfer(from: Address, to: Address, amount: Fixed<8>, ...approveArgs: ForwardValue[]): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const fromBalance = this.balanceOf(from);\n if (fromBalance < amount) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n const reduceApproved = approved >= amount && Address.isCaller(to);\n if (!reduceApproved && !Address.isCaller(from)) {\n return false;\n }\n\n const contract = Contract.for(to);\n if (contract !== undefined && !Address.isCaller(to)) {\n const smartContract = SmartContract.for(to);\n if (!smartContract.approveReceiveTransfer(from, amount, this.address, ...approveArgs)) {\n return false;\n }\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(from, fromBalance - amount);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(from, to, amount);\n\n if (reduceApproved) {\n this.approvedTransfers.set([from, to], approved - amount);\n }\n\n return true;\n }\n\n public approveSendTransfer(from: Address, to: Address, amount: Fixed<0>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], this.approvedTransfer(from, to) + amount);\n notifyApproveSendTransfer(from, to, amount);\n\n return true;\n }\n\n public approveReceiveTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): boolean {\n return false;\n }\n\n public revokeSendTransfer(from: Address, to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n if (approved < amount) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], approved - amount);\n notifyRevokeSendTransfer(from, to, amount);\n\n const contract = Contract.for(to);\n if (contract !== undefined) {\n const smartContract = SmartContract.for(to);\n // NOTE: This should catch errors once we have stack isolation\n smartContract.onRevokeSendTransfer(from, amount, this.address);\n }\n\n return true;\n }\n\n public onRevokeSendTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): void {\n // do nothing\n }\n\n public issue(to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(undefined, to, amount);\n this.mutableSupply += amount;\n\n return true;\n }\n}\n", - "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? (ReturnType extends SmartContractArg ? T[K] : never)\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Buffer;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", + "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? ReturnType extends SmartContractArg\n ? T[K]\n : never\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Address;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Hash256;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", ], version: 3, }, diff --git a/packages/neo-one-cli/src/__data__/projects/ico-vueJs/.neo-one.config.js b/packages/neo-one-cli/src/__data__/projects/ico-vueJs/.neo-one.config.js index 8f7f3c48b2..a530dad932 100644 --- a/packages/neo-one-cli/src/__data__/projects/ico-vueJs/.neo-one.config.js +++ b/packages/neo-one-cli/src/__data__/projects/ico-vueJs/.neo-one.config.js @@ -14,6 +14,9 @@ const neotrackerPort = parseInt( ); module.exports = { + contracts: { + outDir: nodePath.join(tmpDir, 'compiled'), + }, migration: { path: nodePath.join('neo-one', 'migration.ts'), }, diff --git a/packages/neo-one-cli/src/__data__/projects/ico-vueJs/codegen/client.js b/packages/neo-one-cli/src/__data__/projects/ico-vueJs/codegen/client.js index 3a69e752dd..741ec18061 100644 --- a/packages/neo-one-cli/src/__data__/projects/ico-vueJs/codegen/client.js +++ b/packages/neo-one-cli/src/__data__/projects/ico-vueJs/codegen/client.js @@ -1,7 +1,8 @@ -/* @hash 764f2ee223108156a8dd1bb36406f5b0 */ +/* @hash f995af2117008df4215bfb5fb468855b */ // tslint:disable /* eslint-disable */ import { + addLocalKeysSync, Client, DapiUserAccountProvider, DeveloperClient, @@ -50,7 +51,7 @@ export const createClient = (getUserAccountProvidersOrHost) => { const providers = []; if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') { - providers.push({ network: 'local', rpcURL: `http://${host}:10110/rpc` }); + providers.push({ network: 'local', rpcURL: `http://${host}:10060/rpc` }); } const provider = new NEOONEProvider(providers); const userAccountProviders = getUserAccountProviders(provider); @@ -62,65 +63,22 @@ export const createClient = (getUserAccountProvidersOrHost) => { if (localUserAccountProvider !== undefined) { const localKeyStore = localUserAccountProvider.keystore; if (localKeyStore instanceof LocalKeyStore) { - Promise.all([ - localKeyStore.addUserAccount({ - network: 'local', - name: 'master', - privateKey: 'L4qhHtwbiAMu1nrSmsTP5a3dJbxA3SNS6oheKnKd8E7KTJyCLcUv', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'alfa', - privateKey: 'KyX5sPKRpAMb3XAFLUrHv7u1LxKkKFrpyJDgE4kceRX9FRJ4WRCQ', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'bravo', - privateKey: 'L5LfJc2Ngsxu8ZFMvnJbYJ1QdQCstzRXmKLybsFS1aQFURkJ5CHS', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'charlie', - privateKey: 'KxCH2Ei4TLqp2Qa7swz9bstQc5uREiCpvzvL9R6xLX8X5U8ZqeBj', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'delta', - privateKey: 'KyVvngWhhfHiociMuwyLmGw8xTu9myKXRnvv5Fes9jDMa2Zyc6P9', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'echo', - privateKey: 'L37qr7PWqWmgjUPfRC9mS78GjRxgGi4azySCsLUBMAa5hMka2JEm', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'foxtrot', - privateKey: 'KwFf8gdSWxvC5Pp8AidNdF6mHqjH3CukyF3RnfwS5vzMQKLGTP13', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'golf', - privateKey: 'Kyn2BN3QuHGYgkt9qJgvwzY8yH4xgTUAKwnGhvU1w8Nh3JnivrAr', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'hotel', - privateKey: 'L5UXfz1xyzDkghGwistNMCV8pbpU4fg14Ez9rfo1y4KgwiadnWX3', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'india', - privateKey: 'L5Yoq3X4ojx2FvZZxHbMcvT6var4LaXKHEpMYyyxw4jjhSUNJTRa', - }), - localKeyStore.addUserAccount({ - network: 'local', - name: 'juliett', - privateKey: 'L1DWex8PtmQJH4GYK9YAuyzmotyL6anY937LxJF54iaALrTtxsD6', - }), - ]).catch(() => { - // do nothing - }); + addLocalKeysSync( + [ + { network: 'local', name: 'master', privateKey: 'L4qhHtwbiAMu1nrSmsTP5a3dJbxA3SNS6oheKnKd8E7KTJyCLcUv' }, + { network: 'local', name: 'alfa', privateKey: 'KyX5sPKRpAMb3XAFLUrHv7u1LxKkKFrpyJDgE4kceRX9FRJ4WRCQ' }, + { network: 'local', name: 'bravo', privateKey: 'L5LfJc2Ngsxu8ZFMvnJbYJ1QdQCstzRXmKLybsFS1aQFURkJ5CHS' }, + { network: 'local', name: 'charlie', privateKey: 'KxCH2Ei4TLqp2Qa7swz9bstQc5uREiCpvzvL9R6xLX8X5U8ZqeBj' }, + { network: 'local', name: 'delta', privateKey: 'KyVvngWhhfHiociMuwyLmGw8xTu9myKXRnvv5Fes9jDMa2Zyc6P9' }, + { network: 'local', name: 'echo', privateKey: 'L37qr7PWqWmgjUPfRC9mS78GjRxgGi4azySCsLUBMAa5hMka2JEm' }, + { network: 'local', name: 'foxtrot', privateKey: 'KwFf8gdSWxvC5Pp8AidNdF6mHqjH3CukyF3RnfwS5vzMQKLGTP13' }, + { network: 'local', name: 'golf', privateKey: 'Kyn2BN3QuHGYgkt9qJgvwzY8yH4xgTUAKwnGhvU1w8Nh3JnivrAr' }, + { network: 'local', name: 'hotel', privateKey: 'L5UXfz1xyzDkghGwistNMCV8pbpU4fg14Ez9rfo1y4KgwiadnWX3' }, + { network: 'local', name: 'india', privateKey: 'L5Yoq3X4ojx2FvZZxHbMcvT6var4LaXKHEpMYyyxw4jjhSUNJTRa' }, + { network: 'local', name: 'juliett', privateKey: 'L1DWex8PtmQJH4GYK9YAuyzmotyL6anY937LxJF54iaALrTtxsD6' }, + ], + localKeyStore, + ); } } } @@ -129,5 +87,5 @@ export const createClient = (getUserAccountProvidersOrHost) => { }; export const createDeveloperClients = (host = 'localhost') => ({ - local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10110/rpc` })), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10060/rpc` })), }); diff --git a/packages/neo-one-cli/src/__data__/projects/ico-vueJs/codegen/sourceMaps.js b/packages/neo-one-cli/src/__data__/projects/ico-vueJs/codegen/sourceMaps.js index 355a122e9b..63d6668903 100644 --- a/packages/neo-one-cli/src/__data__/projects/ico-vueJs/codegen/sourceMaps.js +++ b/packages/neo-one-cli/src/__data__/projects/ico-vueJs/codegen/sourceMaps.js @@ -1,4 +1,4 @@ -/* @hash 3845add30574df455694167cc9d030d8 */ +/* @hash 389a1a76bd5b1158b377fc2432e0c752 */ // tslint:disable /* eslint-disable */ let sourceMapsIn = {}; @@ -7,17 +7,17 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') sourceMapsIn = { ARW79N7gAWHytcWSkkXvwrJiR4FTyvf2f8: { mappings: - 'AAAA;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQF;AAAA;AAAA;AAAA;AAAA;AAES;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACaA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACkCE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AAAA;AAAA;AADjB;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACirCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFtxCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUE;AAAA;AAAA;AAVF;AAUE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACE;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAxB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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACirCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFtxCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOE;AAAA;AAAA;AAPF;AAOE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAPF;AAWI;AAAA;AAAA;AAXJ;AAWI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAXJ;AAYI;AAAA;AAAA;AAZJ;AAYI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAZJ;AAaI;AAAA;AAAA;AAbJ;AAaI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAbJ;AAqBE;AAAA;AAAA;AArBF;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArBF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAdA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', + 'AAAA;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQF;AAAA;AAAA;AAAA;AAAA;AAES;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACaA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACkCE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AAAA;AAAA;AADjB;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACmrCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFxxCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUE;AAAA;AAAA;AAVF;AAUE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACE;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAxB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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACmrCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFxxCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOE;AAAA;AAAA;AAPF;AAOE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAPF;AAWI;AAAA;AAAA;AAXJ;AAWI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAXJ;AAYI;AAAA;AAAA;AAZJ;AAYI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAZJ;AAaI;AAAA;AAAA;AAbJ;AAaI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAbJ;AAqBE;AAAA;AAAA;AArBF;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArBF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAdA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', names: [], sources: [ '../neo-one/contracts/ICO.ts', '../neo-one/contracts/Token.ts', - '../../../../../../../dist/neo-one/packages/neo-one-smart-contract/index.d.ts', + '../../../../../../neo-one-smart-contract/src/index.d.ts', ], sourcesContent: [ "import {\n Address,\n Blockchain,\n constant,\n Deploy,\n Fixed,\n Hash256,\n Integer,\n LinkedSmartContract,\n receive,\n SmartContract,\n} from '@neo-one/smart-contract';\nimport { Token } from './Token';\n\nexport class ICO extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'NEOβ€’ONE ICO',\n };\n public readonly amountPerNEO = 10;\n private mutableRemaining: Fixed<8> = 10_000_000_000_00000000;\n\n public constructor(\n public readonly owner: Address = Deploy.senderAddress,\n public readonly startTimeSeconds: Integer = Blockchain.currentBlockTime,\n public readonly icoDurationSeconds: Integer = 157700000,\n ) {\n super();\n if (!Address.isCaller(owner)) {\n throw new Error('Sender was not the owner.');\n }\n }\n\n @constant\n public get remaining(): Fixed<8> {\n return this.mutableRemaining;\n }\n\n @receive\n public mintTokens(): void {\n if (!this.hasStarted() || this.hasEnded()) {\n throw new Error('Invalid mintTokens');\n }\n\n const { references } = Blockchain.currentTransaction;\n if (references.length === 0) {\n throw new Error('Invalid mintTokens');\n }\n const sender = references[0].address;\n\n let amount = 0;\n // tslint:disable-next-line no-loop-statement\n for (const output of Blockchain.currentTransaction.outputs) {\n if (output.address.equals(this.address)) {\n if (!output.asset.equals(Hash256.NEO)) {\n throw new Error('Invalid mintTokens');\n }\n\n amount += output.value * this.amountPerNEO;\n }\n }\n\n if (amount > this.remaining) {\n throw new Error('Invalid mintTokens');\n }\n\n if (amount === 0) {\n throw new Error('Invalid mintTokens');\n }\n\n const token = LinkedSmartContract.for();\n if (!token.issue(sender, amount)) {\n throw new Error('Invalid mintTokens');\n }\n this.mutableRemaining -= amount;\n }\n\n private hasStarted(): boolean {\n return Blockchain.currentBlockTime >= this.startTimeSeconds;\n }\n\n private hasEnded(): boolean {\n return Blockchain.currentBlockTime > this.startTimeSeconds + this.icoDurationSeconds;\n }\n}\n", "import {\n Address,\n constant,\n Contract,\n createEventNotifier,\n Fixed,\n ForwardValue,\n MapStorage,\n SmartContract,\n} from '@neo-one/smart-contract';\n\nconst notifyTransfer = createEventNotifier
>(\n 'transfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyApproveSendTransfer = createEventNotifier>(\n 'approveSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyRevokeSendTransfer = createEventNotifier>(\n 'revokeSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\n\ninterface TokenPayableContract {\n readonly approveReceiveTransfer: (\n from: Address,\n amount: Fixed<8>,\n asset: Address,\n // tslint:disable-next-line readonly-array\n ...args: ForwardValue[]\n ) => boolean;\n readonly onRevokeSendTransfer: (from: Address, amount: Fixed<8>, asset: Address) => void;\n}\n\nexport class Token extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'NEOβ€’ONE Token',\n };\n public readonly name = 'One';\n public readonly symbol = 'ONE';\n public readonly decimals = 8;\n private readonly balances = MapStorage.for>();\n private readonly approvedTransfers = MapStorage.for<[Address, Address], Fixed<8>>();\n private mutableSupply: Fixed<8> = 0;\n\n @constant\n public get totalSupply(): Fixed<8> {\n return this.mutableSupply;\n }\n\n @constant\n public balanceOf(address: Address): Fixed<8> {\n const balance = this.balances.get(address);\n\n return balance === undefined ? 0 : balance;\n }\n\n @constant\n public approvedTransfer(from: Address, to: Address): Fixed<8> {\n const approved = this.approvedTransfers.get([from, to]);\n\n return approved === undefined ? 0 : approved;\n }\n\n // tslint:disable-next-line readonly-array\n public transfer(from: Address, to: Address, amount: Fixed<8>, ...approveArgs: ForwardValue[]): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const fromBalance = this.balanceOf(from);\n if (fromBalance < amount) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n const reduceApproved = approved >= amount && Address.isCaller(to);\n if (!reduceApproved && !Address.isCaller(from)) {\n return false;\n }\n\n const contract = Contract.for(to);\n if (contract !== undefined && !Address.isCaller(to)) {\n const smartContract = SmartContract.for(to);\n if (!smartContract.approveReceiveTransfer(from, amount, this.address, ...approveArgs)) {\n return false;\n }\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(from, fromBalance - amount);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(from, to, amount);\n\n if (reduceApproved) {\n this.approvedTransfers.set([from, to], approved - amount);\n }\n\n return true;\n }\n\n public approveSendTransfer(from: Address, to: Address, amount: Fixed<0>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], this.approvedTransfer(from, to) + amount);\n notifyApproveSendTransfer(from, to, amount);\n\n return true;\n }\n\n public approveReceiveTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): boolean {\n return false;\n }\n\n public revokeSendTransfer(from: Address, to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n if (approved < amount) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], approved - amount);\n notifyRevokeSendTransfer(from, to, amount);\n\n const contract = Contract.for(to);\n if (contract !== undefined) {\n const smartContract = SmartContract.for(to);\n // NOTE: This should catch errors once we have stack isolation\n smartContract.onRevokeSendTransfer(from, amount, this.address);\n }\n\n return true;\n }\n\n public onRevokeSendTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): void {\n // do nothing\n }\n\n public issue(to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(undefined, to, amount);\n this.mutableSupply += amount;\n\n return true;\n }\n}\n", - "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? (ReturnType extends SmartContractArg ? T[K] : never)\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Buffer;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", + "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? ReturnType extends SmartContractArg\n ? T[K]\n : never\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Address;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Hash256;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", ], version: 3, }, @@ -25,13 +25,10 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') mappings: 'AAAA;AAe+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwnC3B;AAAA;AAAA;ADxnC2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwnCjB;AAAA;AAAA;ADxnCiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwnCP;AAAA;AAAA;ADxnCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwnCG;AAAA;AAAA;ADxnCH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgnCzB;AAAA;AAAA;ADhnCyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgnCf;AAAA;AAAA;ADhnCe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgnCL;AAAA;AAAA;ADhnCK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgnCK;AAAA;AAAA;ADhnCL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmC1B;AAAA;AAAA;ADxmC0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmChB;AAAA;AAAA;ADxmCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmCN;AAAA;AAAA;ADxmCM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmCI;AAAA;AAAA;ADxmCJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmB5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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AAAA;AAAA;AAAA;AADvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAZnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYqE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAd;AAAA;AAAA;AAAA;AAAA;AAAlB;AAAA;AAAA;AAAA;AAAS;AAAT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAe+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASE;AAAA;AAAA;AATF;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATF;AAgBE;AAAA;AAAA;AAhBF;AAgBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAhBF;AA2BE;AAAA;AAAA;AA3BF;AA2BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA3BF;AA+BE;AAAA;AAAA;AA/BF;AA+BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/BF;AA+CE;AAAA;AAAA;AA/CF;AA+CE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/CF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASE;AAAA;AAAA;AATF;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATF;AAgBE;AAAA;AAAA;AAhBF;AAgBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAhBF;AA2BE;AAAA;AAAA;AA3BF;AA2BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA3BF;AA+BE;AAAA;AAAA;AA/BF;AA+BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/BF;AA+CE;AAAA;AAAA;AA/CF;AA+CE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/CF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', names: [], - sources: [ - '../neo-one/contracts/Escrow.ts', - '../../../../../../../dist/neo-one/packages/neo-one-smart-contract/index.d.ts', - ], + sources: ['../neo-one/contracts/Escrow.ts', '../../../../../../neo-one-smart-contract/src/index.d.ts'], sourcesContent: [ "import {\n Address,\n constant,\n createEventNotifier,\n declareEvent,\n Fixed,\n ForwardedValue,\n MapStorage,\n SmartContract,\n} from '@neo-one/smart-contract';\n\ninterface Token {\n readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n}\n\nconst notifyBalanceAvailable = createEventNotifier>(\n 'balanceAvailable',\n 'from',\n 'to',\n 'asset',\n 'amount',\n);\n\nconst notifyBalanceClaimed = createEventNotifier>(\n 'balanceClaimed',\n 'from',\n 'to',\n 'asset',\n 'amount',\n);\n\nconst notifyBalanceRefunded = createEventNotifier>(\n 'balanceRefunded',\n 'from',\n 'to',\n 'asset',\n 'amount',\n);\n\ndeclareEvent
>('transfer', 'from', 'to', 'amount');\n\nexport class Escrow extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'Escrow',\n };\n private readonly balances = MapStorage.for<[Address, Address, Address], Fixed<8>>();\n\n @constant\n public balanceOf(from: Address, to: Address, asset: Address): Fixed<8> {\n const balance = this.balances.get([to, asset, from]);\n\n return balance === undefined ? 0 : balance;\n }\n\n public approveReceiveTransfer(from: Address, amount: Fixed<8>, asset: Address, to: ForwardedValue
): boolean {\n if (!Address.isCaller(asset)) {\n return false;\n }\n\n this.setBalance(from, to, asset, this.balanceOf(from, to, asset) + amount);\n notifyBalanceAvailable(from, to, asset, amount);\n\n return true;\n }\n\n public onRevokeSendTransfer(_from: Address, _amount: Fixed<0>, _asset: Address): void {\n // do nothing\n }\n\n public claim(from: Address, to: Address, asset: Address, amount: Fixed<8>): boolean {\n if (!Address.isCaller(to)) {\n return false;\n }\n\n const contract = SmartContract.for(asset);\n if (contract.transfer(this.address, to, amount)) {\n this.setBalance(from, to, asset, this.balanceOf(from, to, asset) - amount);\n notifyBalanceClaimed(from, to, asset, amount);\n\n return true;\n }\n\n return false;\n }\n\n public refund(from: Address, to: Address, asset: Address, amount: Fixed<8>): boolean {\n if (!Address.isCaller(from)) {\n return false;\n }\n\n const contract = SmartContract.for(asset);\n if (contract.transfer(this.address, from, amount)) {\n this.setBalance(from, to, asset, this.balanceOf(from, to, asset) - amount);\n notifyBalanceRefunded(from, to, asset, amount);\n\n return true;\n }\n\n return false;\n }\n\n private setBalance(from: Address, to: Address, asset: Address, amount: Fixed<8>): void {\n this.balances.set([to, asset, from], amount);\n }\n}\n", - "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? (ReturnType extends SmartContractArg ? T[K] : never)\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Buffer;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", + "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? ReturnType extends SmartContractArg\n ? T[K]\n : never\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Address;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Hash256;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", ], version: 3, }, @@ -39,13 +36,10 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') mappings: 'AAAA;AAWuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqnCnB;AAAA;AAAA;ADrnCmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqnCT;AAAA;AAAA;ADrnCS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqnCC;AAAA;AAAA;ADrnCD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC+mC9B;AAAA;AAAA;AD/mC8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC+mCpB;AAAA;AAAA;AD/mCoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC+mCV;AAAA;AAAA;AD/mCU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACymC7B;AAAA;AAAA;ADzmC6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACymCnB;AAAA;AAAA;ADzmCmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACymCT;AAAA;AAAA;ADzmCS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyB/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AALF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8DkE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA9DlE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACS;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAHiD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOpB;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAH0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMrB;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAxB+E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAjF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAX;AAAA;AAAA;AAAA;AAAf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOE;AAAA;AAAA;AAPF;AAOE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAPF;AAQE;AAAA;AAAA;AARF;AAQE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AARF;AASE;AAAA;AAAA;AATF;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATF;AAcE;AAAA;AAAA;AAdF;AAcE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAdF;AAmBE;AAAA;AAAA;AAnBF;AAmBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnBF;AA0BE;AAAA;AAAA;AA1BF;AA0BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAkCE;AAAA;AAAA;AAlCF;AAkCE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAlCF;AAsEE;AAAA;AAAA;AAtEF;AAsEE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAtEF;AAqFE;AAAA;AAAA;AArFF;AAqFE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArFF;AAyFE;AAAA;AAAA;AAzFF;AAyFE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzFF;AAoHE;AAAA;AAAA;AApHF;AAoHE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AApHF;AAwHE;AAAA;AAAA;AAxHF;AAwHE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxHF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', names: [], - sources: [ - '../neo-one/contracts/Token.ts', - '../../../../../../../dist/neo-one/packages/neo-one-smart-contract/index.d.ts', - ], + sources: ['../neo-one/contracts/Token.ts', '../../../../../../neo-one-smart-contract/src/index.d.ts'], sourcesContent: [ "import {\n Address,\n constant,\n Contract,\n createEventNotifier,\n Fixed,\n ForwardValue,\n MapStorage,\n SmartContract,\n} from '@neo-one/smart-contract';\n\nconst notifyTransfer = createEventNotifier
>(\n 'transfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyApproveSendTransfer = createEventNotifier>(\n 'approveSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyRevokeSendTransfer = createEventNotifier>(\n 'revokeSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\n\ninterface TokenPayableContract {\n readonly approveReceiveTransfer: (\n from: Address,\n amount: Fixed<8>,\n asset: Address,\n // tslint:disable-next-line readonly-array\n ...args: ForwardValue[]\n ) => boolean;\n readonly onRevokeSendTransfer: (from: Address, amount: Fixed<8>, asset: Address) => void;\n}\n\nexport class Token extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'NEOβ€’ONE Token',\n };\n public readonly name = 'One';\n public readonly symbol = 'ONE';\n public readonly decimals = 8;\n private readonly balances = MapStorage.for>();\n private readonly approvedTransfers = MapStorage.for<[Address, Address], Fixed<8>>();\n private mutableSupply: Fixed<8> = 0;\n\n @constant\n public get totalSupply(): Fixed<8> {\n return this.mutableSupply;\n }\n\n @constant\n public balanceOf(address: Address): Fixed<8> {\n const balance = this.balances.get(address);\n\n return balance === undefined ? 0 : balance;\n }\n\n @constant\n public approvedTransfer(from: Address, to: Address): Fixed<8> {\n const approved = this.approvedTransfers.get([from, to]);\n\n return approved === undefined ? 0 : approved;\n }\n\n // tslint:disable-next-line readonly-array\n public transfer(from: Address, to: Address, amount: Fixed<8>, ...approveArgs: ForwardValue[]): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const fromBalance = this.balanceOf(from);\n if (fromBalance < amount) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n const reduceApproved = approved >= amount && Address.isCaller(to);\n if (!reduceApproved && !Address.isCaller(from)) {\n return false;\n }\n\n const contract = Contract.for(to);\n if (contract !== undefined && !Address.isCaller(to)) {\n const smartContract = SmartContract.for(to);\n if (!smartContract.approveReceiveTransfer(from, amount, this.address, ...approveArgs)) {\n return false;\n }\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(from, fromBalance - amount);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(from, to, amount);\n\n if (reduceApproved) {\n this.approvedTransfers.set([from, to], approved - amount);\n }\n\n return true;\n }\n\n public approveSendTransfer(from: Address, to: Address, amount: Fixed<0>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], this.approvedTransfer(from, to) + amount);\n notifyApproveSendTransfer(from, to, amount);\n\n return true;\n }\n\n public approveReceiveTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): boolean {\n return false;\n }\n\n public revokeSendTransfer(from: Address, to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n if (approved < amount) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], approved - amount);\n notifyRevokeSendTransfer(from, to, amount);\n\n const contract = Contract.for(to);\n if (contract !== undefined) {\n const smartContract = SmartContract.for(to);\n // NOTE: This should catch errors once we have stack isolation\n smartContract.onRevokeSendTransfer(from, amount, this.address);\n }\n\n return true;\n }\n\n public onRevokeSendTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): void {\n // do nothing\n }\n\n public issue(to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(undefined, to, amount);\n this.mutableSupply += amount;\n\n return true;\n }\n}\n", - "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? (ReturnType extends SmartContractArg ? T[K] : never)\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Buffer;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", + "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? ReturnType extends SmartContractArg\n ? T[K]\n : never\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Address;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Hash256;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", ], version: 3, }, diff --git a/packages/neo-one-cli/src/__data__/projects/ico/.neo-one.config.js b/packages/neo-one-cli/src/__data__/projects/ico/.neo-one.config.js index 6f4e5c7d75..a0ee7b1eff 100644 --- a/packages/neo-one-cli/src/__data__/projects/ico/.neo-one.config.js +++ b/packages/neo-one-cli/src/__data__/projects/ico/.neo-one.config.js @@ -14,6 +14,9 @@ const neotrackerPort = parseInt( ); module.exports = { + contracts: { + outDir: nodePath.join(tmpDir, 'compiled'), + }, migration: { path: nodePath.join('neo-one', 'migration.ts'), }, @@ -29,6 +32,6 @@ module.exports = { neotracker: { path: nodePath.join(tmpDir, 'neotracker'), port: neotrackerPort, - skip: false, + skip: true, }, }; diff --git a/packages/neo-one-cli/src/__data__/projects/ico/codegen/client.ts b/packages/neo-one-cli/src/__data__/projects/ico/codegen/client.ts index b02e97b140..cb404d39a9 100644 --- a/packages/neo-one-cli/src/__data__/projects/ico/codegen/client.ts +++ b/packages/neo-one-cli/src/__data__/projects/ico/codegen/client.ts @@ -1,7 +1,8 @@ -/* @hash 75addf13d49c998b009e371e02264bfe */ +/* @hash 82a49b09e90daf186eaab069a4a5a09c */ // tslint:disable /* eslint-disable */ import { + addLocalKeysSync, Client, DapiUserAccountProvider, DeveloperClient, @@ -64,7 +65,7 @@ export const createClient = { - // do nothing - }); + addLocalKeysSync( + [ + { network: 'local', name: 'master', privateKey: 'L4qhHtwbiAMu1nrSmsTP5a3dJbxA3SNS6oheKnKd8E7KTJyCLcUv' }, + { network: 'local', name: 'alfa', privateKey: 'KyX5sPKRpAMb3XAFLUrHv7u1LxKkKFrpyJDgE4kceRX9FRJ4WRCQ' }, + { network: 'local', name: 'bravo', privateKey: 'L5LfJc2Ngsxu8ZFMvnJbYJ1QdQCstzRXmKLybsFS1aQFURkJ5CHS' }, + { network: 'local', name: 'charlie', privateKey: 'KxCH2Ei4TLqp2Qa7swz9bstQc5uREiCpvzvL9R6xLX8X5U8ZqeBj' }, + { network: 'local', name: 'delta', privateKey: 'KyVvngWhhfHiociMuwyLmGw8xTu9myKXRnvv5Fes9jDMa2Zyc6P9' }, + { network: 'local', name: 'echo', privateKey: 'L37qr7PWqWmgjUPfRC9mS78GjRxgGi4azySCsLUBMAa5hMka2JEm' }, + { network: 'local', name: 'foxtrot', privateKey: 'KwFf8gdSWxvC5Pp8AidNdF6mHqjH3CukyF3RnfwS5vzMQKLGTP13' }, + { network: 'local', name: 'golf', privateKey: 'Kyn2BN3QuHGYgkt9qJgvwzY8yH4xgTUAKwnGhvU1w8Nh3JnivrAr' }, + { network: 'local', name: 'hotel', privateKey: 'L5UXfz1xyzDkghGwistNMCV8pbpU4fg14Ez9rfo1y4KgwiadnWX3' }, + { network: 'local', name: 'india', privateKey: 'L5Yoq3X4ojx2FvZZxHbMcvT6var4LaXKHEpMYyyxw4jjhSUNJTRa' }, + { network: 'local', name: 'juliett', privateKey: 'L1DWex8PtmQJH4GYK9YAuyzmotyL6anY937LxJF54iaALrTtxsD6' }, + ], + localKeyStore, + ); } } } @@ -145,5 +103,5 @@ export const createClient = ({ - local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10060/rpc` })), + local: new DeveloperClient(new NEOONEDataProvider({ network: 'local', rpcURL: `http://${host}:10000/rpc` })), }); diff --git a/packages/neo-one-cli/src/__data__/projects/ico/codegen/contracts.ts b/packages/neo-one-cli/src/__data__/projects/ico/codegen/contracts.ts index d068c176c9..647ff366bd 100644 --- a/packages/neo-one-cli/src/__data__/projects/ico/codegen/contracts.ts +++ b/packages/neo-one-cli/src/__data__/projects/ico/codegen/contracts.ts @@ -1,4 +1,4 @@ -/* @hash 05fd692dad792caa7b0650e950261f1f */ +/* @hash 793fa245837019b4c9e3a66341f16035 */ // tslint:disable /* eslint-disable */ import { Client } from '@neo-one/client'; @@ -16,7 +16,7 @@ export interface Contracts { readonly ico: ICOSmartContract; readonly token: TokenSmartContract; } - +// Refer to the MigrationSmartContract documentation at https://neo-one.io/docs/deployment for more information. export interface MigrationContracts { readonly escrow: EscrowMigrationSmartContract; readonly ico: ICOMigrationSmartContract; diff --git a/packages/neo-one-cli/src/__data__/projects/ico/codegen/sourceMaps.ts b/packages/neo-one-cli/src/__data__/projects/ico/codegen/sourceMaps.ts index d789ee6b47..fb2ef29fdc 100644 --- a/packages/neo-one-cli/src/__data__/projects/ico/codegen/sourceMaps.ts +++ b/packages/neo-one-cli/src/__data__/projects/ico/codegen/sourceMaps.ts @@ -1,4 +1,4 @@ -/* @hash 9559df74ef382864b0da19e61812339b */ +/* @hash 131b18f0b432f289ffa8df09b9d4b599 */ // tslint:disable /* eslint-disable */ import { SourceMaps } from '@neo-one/client'; @@ -9,17 +9,17 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') sourceMapsIn = { ARW79N7gAWHytcWSkkXvwrJiR4FTyvf2f8: { mappings: - 'AAAA;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQF;AAAA;AAAA;AAAA;AAAA;AAES;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACaA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACkCE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AAAA;AAAA;AADjB;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACirCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFtxCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUE;AAAA;AAAA;AAVF;AAUE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACE;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAxB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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACirCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFtxCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOE;AAAA;AAAA;AAPF;AAOE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAPF;AAWI;AAAA;AAAA;AAXJ;AAWI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAXJ;AAYI;AAAA;AAAA;AAZJ;AAYI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAZJ;AAaI;AAAA;AAAA;AAbJ;AAaI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAbJ;AAqBE;AAAA;AAAA;AArBF;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArBF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAdA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', + 'AAAA;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQF;AAAA;AAAA;AAAA;AAAA;AAES;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACaA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACkCE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AAAA;AAAA;AADjB;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACmrCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFxxCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUE;AAAA;AAAA;AAVF;AAUE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACE;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC0B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAqCP;AACS;AAAA;AAAA;AAAA;AAAA;AAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAA5B;AAAA;AAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAmB;AAAA;AAAG;AAAA;AAyC5B;AAA4B;AAAA;AAAA;AAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAxB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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACmrCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AFxxCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAZ;AAAA;AAAA;AAAA;AAAM;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACkB;AAAA;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOE;AAAA;AAAA;AAPF;AAOE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAPF;AAWI;AAAA;AAAA;AAXJ;AAWI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAXJ;AAYI;AAAA;AAAA;AAZJ;AAYI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAZJ;AAaI;AAAA;AAAA;AAbJ;AAaI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAbJ;AAqBE;AAAA;AAAA;AArBF;AAqBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArBF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAdA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', names: [], sources: [ '../neo-one/contracts/ICO.ts', '../neo-one/contracts/Token.ts', - '../../../../../../../dist/neo-one/packages/neo-one-smart-contract/index.d.ts', + '../../../../../../neo-one-smart-contract/src/index.d.ts', ], sourcesContent: [ "import {\n Address,\n Blockchain,\n constant,\n Deploy,\n Fixed,\n Hash256,\n Integer,\n LinkedSmartContract,\n receive,\n SmartContract,\n} from '@neo-one/smart-contract';\nimport { Token } from './Token';\n\nexport class ICO extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'NEOβ€’ONE ICO',\n };\n public readonly amountPerNEO = 10;\n private mutableRemaining: Fixed<8> = 10_000_000_000_00000000;\n\n public constructor(\n public readonly owner: Address = Deploy.senderAddress,\n public readonly startTimeSeconds: Integer = Blockchain.currentBlockTime,\n public readonly icoDurationSeconds: Integer = 157700000,\n ) {\n super();\n if (!Address.isCaller(owner)) {\n throw new Error('Sender was not the owner.');\n }\n }\n\n @constant\n public get remaining(): Fixed<8> {\n return this.mutableRemaining;\n }\n\n @receive\n public mintTokens(): void {\n if (!this.hasStarted() || this.hasEnded()) {\n throw new Error('Invalid mintTokens');\n }\n\n const { references } = Blockchain.currentTransaction;\n if (references.length === 0) {\n throw new Error('Invalid mintTokens');\n }\n const sender = references[0].address;\n\n let amount = 0;\n // tslint:disable-next-line no-loop-statement\n for (const output of Blockchain.currentTransaction.outputs) {\n if (output.address.equals(this.address)) {\n if (!output.asset.equals(Hash256.NEO)) {\n throw new Error('Invalid mintTokens');\n }\n\n amount += output.value * this.amountPerNEO;\n }\n }\n\n if (amount > this.remaining) {\n throw new Error('Invalid mintTokens');\n }\n\n if (amount === 0) {\n throw new Error('Invalid mintTokens');\n }\n\n const token = LinkedSmartContract.for();\n if (!token.issue(sender, amount)) {\n throw new Error('Invalid mintTokens');\n }\n this.mutableRemaining -= amount;\n }\n\n private hasStarted(): boolean {\n return Blockchain.currentBlockTime >= this.startTimeSeconds;\n }\n\n private hasEnded(): boolean {\n return Blockchain.currentBlockTime > this.startTimeSeconds + this.icoDurationSeconds;\n }\n}\n", "import {\n Address,\n constant,\n Contract,\n createEventNotifier,\n Fixed,\n ForwardValue,\n MapStorage,\n SmartContract,\n} from '@neo-one/smart-contract';\n\nconst notifyTransfer = createEventNotifier
>(\n 'transfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyApproveSendTransfer = createEventNotifier>(\n 'approveSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyRevokeSendTransfer = createEventNotifier>(\n 'revokeSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\n\ninterface TokenPayableContract {\n readonly approveReceiveTransfer: (\n from: Address,\n amount: Fixed<8>,\n asset: Address,\n // tslint:disable-next-line readonly-array\n ...args: ForwardValue[]\n ) => boolean;\n readonly onRevokeSendTransfer: (from: Address, amount: Fixed<8>, asset: Address) => void;\n}\n\nexport class Token extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'NEOβ€’ONE Token',\n };\n public readonly name = 'One';\n public readonly symbol = 'ONE';\n public readonly decimals = 8;\n private readonly balances = MapStorage.for>();\n private readonly approvedTransfers = MapStorage.for<[Address, Address], Fixed<8>>();\n private mutableSupply: Fixed<8> = 0;\n\n @constant\n public get totalSupply(): Fixed<8> {\n return this.mutableSupply;\n }\n\n @constant\n public balanceOf(address: Address): Fixed<8> {\n const balance = this.balances.get(address);\n\n return balance === undefined ? 0 : balance;\n }\n\n @constant\n public approvedTransfer(from: Address, to: Address): Fixed<8> {\n const approved = this.approvedTransfers.get([from, to]);\n\n return approved === undefined ? 0 : approved;\n }\n\n // tslint:disable-next-line readonly-array\n public transfer(from: Address, to: Address, amount: Fixed<8>, ...approveArgs: ForwardValue[]): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const fromBalance = this.balanceOf(from);\n if (fromBalance < amount) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n const reduceApproved = approved >= amount && Address.isCaller(to);\n if (!reduceApproved && !Address.isCaller(from)) {\n return false;\n }\n\n const contract = Contract.for(to);\n if (contract !== undefined && !Address.isCaller(to)) {\n const smartContract = SmartContract.for(to);\n if (!smartContract.approveReceiveTransfer(from, amount, this.address, ...approveArgs)) {\n return false;\n }\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(from, fromBalance - amount);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(from, to, amount);\n\n if (reduceApproved) {\n this.approvedTransfers.set([from, to], approved - amount);\n }\n\n return true;\n }\n\n public approveSendTransfer(from: Address, to: Address, amount: Fixed<0>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], this.approvedTransfer(from, to) + amount);\n notifyApproveSendTransfer(from, to, amount);\n\n return true;\n }\n\n public approveReceiveTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): boolean {\n return false;\n }\n\n public revokeSendTransfer(from: Address, to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n if (approved < amount) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], approved - amount);\n notifyRevokeSendTransfer(from, to, amount);\n\n const contract = Contract.for(to);\n if (contract !== undefined) {\n const smartContract = SmartContract.for(to);\n // NOTE: This should catch errors once we have stack isolation\n smartContract.onRevokeSendTransfer(from, amount, this.address);\n }\n\n return true;\n }\n\n public onRevokeSendTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): void {\n // do nothing\n }\n\n public issue(to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(undefined, to, amount);\n this.mutableSupply += amount;\n\n return true;\n }\n}\n", - "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? (ReturnType extends SmartContractArg ? T[K] : never)\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Buffer;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", + "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? ReturnType extends SmartContractArg\n ? T[K]\n : never\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Address;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Hash256;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", ], version: 3, }, @@ -27,13 +27,10 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') mappings: 'AAAA;AAe+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwnC3B;AAAA;AAAA;ADxnC2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwnCjB;AAAA;AAAA;ADxnCiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwnCP;AAAA;AAAA;ADxnCO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwnCG;AAAA;AAAA;ADxnCH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgnCzB;AAAA;AAAA;ADhnCyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgnCf;AAAA;AAAA;ADhnCe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgnCL;AAAA;AAAA;ADhnCK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACgnCK;AAAA;AAAA;ADhnCL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmC1B;AAAA;AAAA;ADxmC0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmChB;AAAA;AAAA;ADxmCgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmCN;AAAA;AAAA;ADxmCM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACwmCI;AAAA;AAAA;ADxmCJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmB5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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AAAA;AAAA;AAAA;AADvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAZnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYqE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAd;AAAA;AAAA;AAAA;AAAA;AAAlB;AAAA;AAAA;AAAA;AAAS;AAAT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxFF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAe+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASE;AAAA;AAAA;AATF;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATF;AAgBE;AAAA;AAAA;AAhBF;AAgBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAhBF;AA2BE;AAAA;AAAA;AA3BF;AA2BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA3BF;AA+BE;AAAA;AAAA;AA/BF;AA+BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/BF;AA+CE;AAAA;AAAA;AA/CF;AA+CE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/CF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASE;AAAA;AAAA;AATF;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATF;AAgBE;AAAA;AAAA;AAhBF;AAgBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAhBF;AA2BE;AAAA;AAAA;AA3BF;AA2BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA3BF;AA+BE;AAAA;AAAA;AA/BF;AA+BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/BF;AA+CE;AAAA;AAAA;AA/CF;AA+CE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/CF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', names: [], - sources: [ - '../neo-one/contracts/Escrow.ts', - '../../../../../../../dist/neo-one/packages/neo-one-smart-contract/index.d.ts', - ], + sources: ['../neo-one/contracts/Escrow.ts', '../../../../../../neo-one-smart-contract/src/index.d.ts'], sourcesContent: [ "import {\n Address,\n constant,\n createEventNotifier,\n declareEvent,\n Fixed,\n ForwardedValue,\n MapStorage,\n SmartContract,\n} from '@neo-one/smart-contract';\n\ninterface Token {\n readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n}\n\nconst notifyBalanceAvailable = createEventNotifier>(\n 'balanceAvailable',\n 'from',\n 'to',\n 'asset',\n 'amount',\n);\n\nconst notifyBalanceClaimed = createEventNotifier>(\n 'balanceClaimed',\n 'from',\n 'to',\n 'asset',\n 'amount',\n);\n\nconst notifyBalanceRefunded = createEventNotifier>(\n 'balanceRefunded',\n 'from',\n 'to',\n 'asset',\n 'amount',\n);\n\ndeclareEvent
>('transfer', 'from', 'to', 'amount');\n\nexport class Escrow extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'Escrow',\n };\n private readonly balances = MapStorage.for<[Address, Address, Address], Fixed<8>>();\n\n @constant\n public balanceOf(from: Address, to: Address, asset: Address): Fixed<8> {\n const balance = this.balances.get([to, asset, from]);\n\n return balance === undefined ? 0 : balance;\n }\n\n public approveReceiveTransfer(from: Address, amount: Fixed<8>, asset: Address, to: ForwardedValue
): boolean {\n if (!Address.isCaller(asset)) {\n return false;\n }\n\n this.setBalance(from, to, asset, this.balanceOf(from, to, asset) + amount);\n notifyBalanceAvailable(from, to, asset, amount);\n\n return true;\n }\n\n public onRevokeSendTransfer(_from: Address, _amount: Fixed<0>, _asset: Address): void {\n // do nothing\n }\n\n public claim(from: Address, to: Address, asset: Address, amount: Fixed<8>): boolean {\n if (!Address.isCaller(to)) {\n return false;\n }\n\n const contract = SmartContract.for(asset);\n if (contract.transfer(this.address, to, amount)) {\n this.setBalance(from, to, asset, this.balanceOf(from, to, asset) - amount);\n notifyBalanceClaimed(from, to, asset, amount);\n\n return true;\n }\n\n return false;\n }\n\n public refund(from: Address, to: Address, asset: Address, amount: Fixed<8>): boolean {\n if (!Address.isCaller(from)) {\n return false;\n }\n\n const contract = SmartContract.for(asset);\n if (contract.transfer(this.address, from, amount)) {\n this.setBalance(from, to, asset, this.balanceOf(from, to, asset) - amount);\n notifyBalanceRefunded(from, to, asset, amount);\n\n return true;\n }\n\n return false;\n }\n\n private setBalance(from: Address, to: Address, asset: Address, amount: Fixed<8>): void {\n this.balances.set([to, asset, from], amount);\n }\n}\n", - "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? (ReturnType extends SmartContractArg ? T[K] : never)\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Buffer;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", + "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? ReturnType extends SmartContractArg\n ? T[K]\n : never\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Address;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Hash256;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", ], version: 3, }, @@ -41,13 +38,10 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') mappings: 'AAAA;AAWuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqnCnB;AAAA;AAAA;ADrnCmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqnCT;AAAA;AAAA;ADrnCS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACqnCC;AAAA;AAAA;ADrnCD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC+mC9B;AAAA;AAAA;AD/mC8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC+mCpB;AAAA;AAAA;AD/mCoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC+mCV;AAAA;AAAA;AD/mCU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACymC7B;AAAA;AAAA;ADzmC6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACymCnB;AAAA;AAAA;ADzmCmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACymCT;AAAA;AAAA;ADzmCS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyB/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AALF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8DkE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA9DlE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACS;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAHiD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOpB;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAZgF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAlF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAjE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACS;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/FA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACE;AAAA;AAAA;AAAA;AAAA;AADF;AAAA;AAAA;AAAA;AAAA;AAEE;AAAA;AAAA;AAAA;AAAA;AAFF;AAAA;AAAA;AAAA;AAAA;AAGE;AAAA;AAAA;AAAA;AAAA;AAHF;AAAA;AAAA;AAAA;AAAA;AAKE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AALF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsHkE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAtHlE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgC;AAAA;AAAA;AAAA;AAAA;AAAhC;AAAA;AAAA;AAAA;AAAA;AAA+C;AAAA;AAAA;AAAA;AAAA;AAA/C;AAAA;AAAA;AAAA;AAAA;AAAiE;AAAA;AAAA;AAAA;AAAA;AAAjE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+GkE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/GlE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4FA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiF;AAAA;AAAA;AAAA;AAAA;AAC3E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAP;AAAA;AAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAJ;AAAgB;AAAA;AAAA;AAAA;AAAA;AACE;AAAkC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAM;AAAN;AAAlC;AAAA;AAAA;AAAA;AAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAC;AAAA;AAAA;AAAA;AAAD;AAAA;AAAJ;AACS;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAG2C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAtB;AAAA;AAxEnB;AAAA;AAAA;AAAA;AAAA;AACwB;AAAA;AAAA;AADxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACuC;AAAA;AAAA;AADvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC8D;AAAA;AAAA;AAAA;AAAA;AAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAA;AAAA;AAAA;AAA3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAa;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAT;AAAA;AAAA;AAAyB;AAAA;AAAA;AAAA;AAAA;AAAzB;AAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAApC;AAAA;AAAA;AAH4D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAD9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwEmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxEnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwEQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAT;AAAA;AAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAT;AAAA;AAAJ;AACS;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAF;AAAA;AAAA;AAAA;AAAA;AAAhD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAE8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAa;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAT;AAAA;AAAJ;AAA4B;AAAA;AAAA;AAAA;AAAA;AACoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAtH1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+GU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiD;AAAA;AAAA;AAAA;AAAA;AAAR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAnC;AAAA;AAAA;AAAA;AAAc;AAAd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAH0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMrB;AAAA;AAAA;AAAA;AAAA;AAAP;AAAA;AAAA;AAxB+E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAjF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAX;AAAA;AAAA;AAAA;AAAf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOE;AAAA;AAAA;AAPF;AAOE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAPF;AAQE;AAAA;AAAA;AARF;AAQE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AARF;AASE;AAAA;AAAA;AATF;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATF;AAcE;AAAA;AAAA;AAdF;AAcE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAdF;AAmBE;AAAA;AAAA;AAnBF;AAmBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnBF;AA0BE;AAAA;AAAA;AA1BF;AA0BE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1BF;AAkCE;AAAA;AAAA;AAlCF;AAkCE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAlCF;AAsEE;AAAA;AAAA;AAtEF;AAsEE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAtEF;AAqFE;AAAA;AAAA;AArFF;AAqFE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AArFF;AAyFE;AAAA;AAAA;AAzFF;AAyFE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzFF;AAoHE;AAAA;AAAA;AApHF;AAoHE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AApHF;AAwHE;AAAA;AAAA;AAxHF;AAwHE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxHF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA', names: [], - sources: [ - '../neo-one/contracts/Token.ts', - '../../../../../../../dist/neo-one/packages/neo-one-smart-contract/index.d.ts', - ], + sources: ['../neo-one/contracts/Token.ts', '../../../../../../neo-one-smart-contract/src/index.d.ts'], sourcesContent: [ "import {\n Address,\n constant,\n Contract,\n createEventNotifier,\n Fixed,\n ForwardValue,\n MapStorage,\n SmartContract,\n} from '@neo-one/smart-contract';\n\nconst notifyTransfer = createEventNotifier
>(\n 'transfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyApproveSendTransfer = createEventNotifier>(\n 'approveSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\nconst notifyRevokeSendTransfer = createEventNotifier>(\n 'revokeSendTransfer',\n 'from',\n 'to',\n 'amount',\n);\n\ninterface TokenPayableContract {\n readonly approveReceiveTransfer: (\n from: Address,\n amount: Fixed<8>,\n asset: Address,\n // tslint:disable-next-line readonly-array\n ...args: ForwardValue[]\n ) => boolean;\n readonly onRevokeSendTransfer: (from: Address, amount: Fixed<8>, asset: Address) => void;\n}\n\nexport class Token extends SmartContract {\n public readonly properties = {\n codeVersion: '1.0',\n author: 'dicarlo2',\n email: 'alex.dicarlo@neotracker.io',\n description: 'NEOβ€’ONE Token',\n };\n public readonly name = 'One';\n public readonly symbol = 'ONE';\n public readonly decimals = 8;\n private readonly balances = MapStorage.for>();\n private readonly approvedTransfers = MapStorage.for<[Address, Address], Fixed<8>>();\n private mutableSupply: Fixed<8> = 0;\n\n @constant\n public get totalSupply(): Fixed<8> {\n return this.mutableSupply;\n }\n\n @constant\n public balanceOf(address: Address): Fixed<8> {\n const balance = this.balances.get(address);\n\n return balance === undefined ? 0 : balance;\n }\n\n @constant\n public approvedTransfer(from: Address, to: Address): Fixed<8> {\n const approved = this.approvedTransfers.get([from, to]);\n\n return approved === undefined ? 0 : approved;\n }\n\n // tslint:disable-next-line readonly-array\n public transfer(from: Address, to: Address, amount: Fixed<8>, ...approveArgs: ForwardValue[]): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const fromBalance = this.balanceOf(from);\n if (fromBalance < amount) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n const reduceApproved = approved >= amount && Address.isCaller(to);\n if (!reduceApproved && !Address.isCaller(from)) {\n return false;\n }\n\n const contract = Contract.for(to);\n if (contract !== undefined && !Address.isCaller(to)) {\n const smartContract = SmartContract.for(to);\n if (!smartContract.approveReceiveTransfer(from, amount, this.address, ...approveArgs)) {\n return false;\n }\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(from, fromBalance - amount);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(from, to, amount);\n\n if (reduceApproved) {\n this.approvedTransfers.set([from, to], approved - amount);\n }\n\n return true;\n }\n\n public approveSendTransfer(from: Address, to: Address, amount: Fixed<0>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], this.approvedTransfer(from, to) + amount);\n notifyApproveSendTransfer(from, to, amount);\n\n return true;\n }\n\n public approveReceiveTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): boolean {\n return false;\n }\n\n public revokeSendTransfer(from: Address, to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n if (!Address.isCaller(from)) {\n return false;\n }\n\n const approved = this.approvedTransfer(from, to);\n if (approved < amount) {\n return false;\n }\n\n this.approvedTransfers.set([from, to], approved - amount);\n notifyRevokeSendTransfer(from, to, amount);\n\n const contract = Contract.for(to);\n if (contract !== undefined) {\n const smartContract = SmartContract.for(to);\n // NOTE: This should catch errors once we have stack isolation\n smartContract.onRevokeSendTransfer(from, amount, this.address);\n }\n\n return true;\n }\n\n public onRevokeSendTransfer(_from: Address, _amount: Fixed<8>, _asset: Address): void {\n // do nothing\n }\n\n public issue(to: Address, amount: Fixed<8>): boolean {\n if (amount < 0) {\n throw new Error(`Amount must be greater than 0: ${amount}`);\n }\n\n const toBalance = this.balanceOf(to);\n this.balances.set(to, toBalance + amount);\n notifyTransfer(undefined, to, amount);\n this.mutableSupply += amount;\n\n return true;\n }\n}\n", - "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? (ReturnType extends SmartContractArg ? T[K] : never)\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Buffer;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", + "// tslint:disable\n/// \n\n/**\n * Marks an interface or class as not implementable or extendable.\n *\n * Makes it an error to pass values that would otherwise match the shape of the interface.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information.\n */\ndeclare const OpaqueTagSymbol0: unique symbol;\n\n/**\n * `Buffer` that represents a NEO address.\n *\n * Stored as a script hash (Hash160) internally.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Address: AddressConstructor;\nexport interface Address extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AddressConstructor {\n /**\n * Creates an `Address` from a literal string. Accepts either a NEO address or a script hash.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n *\n * @example\n *\n * const address = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n *\n * @param value Literal string for an `Address`.\n * @returns `Address` for the specified `value`\n */\n readonly from: (value: string) => Address;\n /**\n * Verifies that the invocation was directly called AND approved by `Address`.\n *\n * Smart contracts should invoke this function before taking transferring items for `Address`es, like transferring tokens, that require the permission of the `Address`.\n *\n * @example\n *\n * if (!Address.isCaller(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` approves this invocation.\n */\n readonly isCaller: (address: Address) => boolean;\n /**\n * Verifies that the `Transaction` was signed by the `address`.\n *\n * In most cases, smart contracts should instead use `Address.isCaller`.\n *\n * @example\n *\n * if (!Address.isSender(address)) {\n * return false;\n * }\n *\n * @returns true if `Address` signed this `Transaction`\n */\n readonly isSender: (address: Address) => boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a NEO 256 bit hash.\n *\n * Examples of `Hash256` include `Block` hashes and `Transaction` hashes.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const Hash256: Hash256Constructor;\nexport interface Hash256 extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface Hash256Constructor {\n /**\n * Creates a `Hash256` from a literal string.\n *\n * @example\n *\n * const hash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n *\n * @param value Literal string for a `Hash256`.\n * @returns `Hash256` for the specified `value`\n */\n readonly from: (value: string) => Hash256;\n /**\n * `Hash256` of the NEO `Asset`.\n */\n readonly NEO: Hash256;\n /**\n * `Hash256` of the GAS `Asset`.\n */\n readonly GAS: Hash256;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Buffer` that represents a public key.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Value-Types) chapter of the main guide for more information.\n */\nexport const PublicKey: PublicKeyConstructor;\nexport interface PublicKey extends Buffer {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface PublicKeyConstructor {\n /**\n * Creates a `PublicKey` from a literal string.\n *\n * @example\n *\n * const publicKey = PublicKey.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef');\n *\n * @param value Literal string for a `PublicKey`.\n * @returns `PublicKey` for the specified `value`\n */\n readonly from: (value: string) => PublicKey;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface FixedTag {\n readonly __decimals: T;\n}\n/**\n * Integer which represents a number with the specified decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed = number | (number & FixedTag);\n/**\n * Integer that represents a number with 0 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Integer = Fixed<0>;\n/**\n * Integer that represents a number with 8 decimals.\n *\n * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Tagged-Types) chapter of the main guide for more information.\n */\nexport type Fixed8 = Fixed<8>;\n\n/**\n * `Attribute` usage flag indicates the type of the data.\n *\n * @see BufferAttributeUsage\n * @see PublicKeyAttributeUsage\n * @see AddressAttributeUsage\n * @see Hash256AttributeUsage\n */\nexport enum AttributeUsage {\n ContractHash = 0x00,\n ECDH02 = 0x02,\n ECDH03 = 0x03,\n Script = 0x20,\n Vote = 0x30,\n DescriptionUrl = 0x81,\n Description = 0x90,\n Hash1 = 0xa1,\n Hash2 = 0xa2,\n Hash3 = 0xa3,\n Hash4 = 0xa4,\n Hash5 = 0xa5,\n Hash6 = 0xa6,\n Hash7 = 0xa7,\n Hash8 = 0xa8,\n Hash9 = 0xa9,\n Hash10 = 0xaa,\n Hash11 = 0xab,\n Hash12 = 0xac,\n Hash13 = 0xad,\n Hash14 = 0xae,\n Hash15 = 0xaf,\n Remark = 0xf0,\n Remark1 = 0xf1,\n Remark2 = 0xf2,\n Remark3 = 0xf3,\n Remark4 = 0xf4,\n Remark5 = 0xf5,\n Remark6 = 0xf6,\n Remark7 = 0xf7,\n Remark8 = 0xf8,\n Remark9 = 0xf9,\n Remark10 = 0xfa,\n Remark11 = 0xfb,\n Remark12 = 0xfc,\n Remark13 = 0xfd,\n Remark14 = 0xfe,\n Remark15 = 0xff,\n}\n\n/**\n * `Attribute` usage flag indicating the data is an arbitrary `Buffer`\n *\n * @see BufferAttribute\n */\nexport type BufferAttributeUsage =\n | AttributeUsage.DescriptionUrl\n | AttributeUsage.Description\n | AttributeUsage.Remark\n | AttributeUsage.Remark1\n | AttributeUsage.Remark2\n | AttributeUsage.Remark3\n | AttributeUsage.Remark4\n | AttributeUsage.Remark5\n | AttributeUsage.Remark6\n | AttributeUsage.Remark7\n | AttributeUsage.Remark8\n | AttributeUsage.Remark9\n | AttributeUsage.Remark10\n | AttributeUsage.Remark11\n | AttributeUsage.Remark12\n | AttributeUsage.Remark13\n | AttributeUsage.Remark14\n | AttributeUsage.Remark15;\n/**\n * `Attribute` usage flag indicating the data is a `PublicKey`\n *\n * @see PublicKeyAttribute\n */\nexport type PublicKeyAttributeUsage = AttributeUsage.ECDH02 | AttributeUsage.ECDH03;\n/**\n * `Attribute` usage flag indicating the data is an `Address`\n *\n * @see AddressAttribute\n */\nexport type AddressAttributeUsage = AttributeUsage.Script;\n/**\n * `Attribute` usage flag indicating the data is a `Hash256`\n *\n * @see Hash256Attribute\n */\nexport type Hash256AttributeUsage =\n | AttributeUsage.ContractHash\n | AttributeUsage.Vote\n | AttributeUsage.Hash1\n | AttributeUsage.Hash2\n | AttributeUsage.Hash3\n | AttributeUsage.Hash4\n | AttributeUsage.Hash5\n | AttributeUsage.Hash6\n | AttributeUsage.Hash7\n | AttributeUsage.Hash8\n | AttributeUsage.Hash9\n | AttributeUsage.Hash10\n | AttributeUsage.Hash11\n | AttributeUsage.Hash12\n | AttributeUsage.Hash13\n | AttributeUsage.Hash14\n | AttributeUsage.Hash15;\n\n/**\n * Base interface for `Attribute`s\n *\n * @see Attribute\n */\nexport const AttributeBase: AttributeBaseConstructor;\nexport interface AttributeBase {\n readonly usage: AttributeUsage;\n readonly data: Buffer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AttributeBaseConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Attribute` whose data is an arbitrary `Buffer`.\n */\nexport interface BufferAttribute extends AttributeBase {\n readonly usage: BufferAttributeUsage;\n readonly data: Buffer;\n}\n/**\n * `Attribute` whose data is a `PublicKey`.\n */\nexport interface PublicKeyAttribute extends AttributeBase {\n readonly usage: PublicKeyAttributeUsage;\n readonly data: PublicKey;\n}\n/**\n * `Attribute` whose data is an `Address`.\n */\nexport interface AddressAttribute extends AttributeBase {\n readonly usage: AddressAttributeUsage;\n readonly data: Address;\n}\n/**\n * `Attribute` whose data is a `Hash256`.\n */\nexport interface Hash256Attribute extends AttributeBase {\n readonly usage: Hash256AttributeUsage;\n readonly data: Hash256;\n}\n\n/**\n * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO\n * protocol.\n */\nexport type Attribute = BufferAttribute | PublicKeyAttribute | AddressAttribute | Hash256Attribute;\n\n/**\n * `Output`s represent the destination `Address` and amount transferred of a given `Asset`.\n *\n * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`.\n */\nexport const Output: OutputConstructor;\nexport interface Output {\n /**\n * Destination `Address`.\n */\n readonly address: Address;\n /**\n * `Hash256` of the `Asset` that was transferred.\n */\n readonly asset: Hash256;\n /**\n * Amount transferred.\n */\n readonly value: Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface OutputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`.\n */\nexport const Input: InputConstructor;\nexport interface Input {\n /**\n * `Hash256` of the `Transaction` this input references.\n */\n readonly hash: Hash256;\n /**\n * `Output` index within the `Transaction` this input references.\n */\n readonly index: Integer;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface InputConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of a `Transaction`.\n */\nexport enum TransactionType {\n /**\n * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`.\n *\n * @see MinerTransaction\n */\n Miner = 0x00,\n /**\n * Issues new currency of a first-class `Asset`.\n *\n * @see IssueTransaction\n */\n Issue = 0x01,\n /**\n * Claims GAS for a set of spent `Output`s.\n *\n * @see ClaimTransaction\n */\n Claim = 0x02,\n /**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @see EnrollmentTransaction\n * @deprecated\n */\n Enrollment = 0x20,\n /**\n * Registers a new first class `Asset`\n *\n * @see RegisterTransaction\n * @deprecated Replaced by `Client#registerAsset`\n */\n Register = 0x40,\n /**\n * Transfers first class `Asset`s\n *\n * @see ContractTransaction\n */\n Contract = 0x80,\n State = 0x90,\n /**\n * Registers a new `Contract`\n *\n * @see PublishTransaction\n * @deprecated Replaced by `Client#publish`\n */\n Publish = 0xd0,\n /**\n * Runs a script in the NEO VM.\n *\n * @see InvocationTransaction\n */\n Invocation = 0xd1,\n}\n\n/**\n * Base interface for all `Transaction`s.\n */\nexport const TransactionBase: TransactionBaseConstructor;\nexport interface TransactionBase {\n /**\n * `Hash256` of this `Transaction`.\n */\n readonly hash: Hash256;\n /**\n * Type of the `Transaction`.\n *\n * @see TransactionType\n */\n readonly type: TransactionType;\n /**\n * `Attribute`s attached to the `Transaction`.\n *\n * @see Attribute\n */\n readonly attributes: Attribute[];\n /**\n * `Output`s of the `Transaction`.\n *\n * @see Output\n */\n readonly outputs: Output[];\n /**\n * `Input`s of the `Transaction`.\n *\n * @see Input\n */\n readonly inputs: Input[];\n /**\n * Corresponding `Output`s for the `Input`s of the `Transaction`.\n *\n * @see Output\n */\n readonly references: Output[];\n /**\n * `Output`s which have not been spent.\n *\n * @see Output\n */\n readonly unspentOutputs: Output[];\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface TransactionBaseConstructor {}\n\n/**\n * First `Transaction` in each `Block` which contains the `Block` rewards for the consensus node that produced the `Block`.\n */\nexport interface MinerTransaction extends TransactionBase {\n readonly type: TransactionType.Miner;\n}\n/**\n * Issues new currency of a first-class `Asset`.\n */\nexport interface IssueTransaction extends TransactionBase {\n readonly type: TransactionType.Issue;\n}\n/**\n * Claims GAS for a set of spent `Output`s.\n */\nexport interface ClaimTransaction extends TransactionBase {\n readonly type: TransactionType.Claim;\n}\n/**\n * Enrolls a new validator for a given `PublicKey`.\n *\n * @deprecated\n */\nexport interface EnrollmentTransaction extends TransactionBase {\n readonly type: TransactionType.Enrollment;\n}\n/**\n * Registers a new first class `Asset`.\n *\n * @deprecated Replaced by `Client#registerAsset`\n */\nexport interface RegisterTransaction extends TransactionBase {\n readonly type: TransactionType.Register;\n}\n/**\n * `Transaction` that transfers first class `Asset`s.\n */\nexport interface ContractTransaction extends TransactionBase {\n readonly type: TransactionType.Contract;\n}\n/**\n * Contains the state of votes.\n */\nexport interface StateTransaction extends TransactionBase {\n readonly type: TransactionType.State;\n}\n/**\n * Registers a new `Contract`\n *\n * @deprecated Replaced by `Client#publish`\n */\nexport interface PublishTransaction extends TransactionBase {\n readonly type: TransactionType.Publish;\n}\n/**\n * `Transaction` which runs a script in the NEO VM.\n */\nexport interface InvocationTransaction extends TransactionBase {\n readonly type: TransactionType.Invocation;\n /**\n * Code that was executed in NEO VM.\n */\n readonly script: Buffer;\n}\n/**\n * `Transaction`s are persisted to the blockchain and represent various functionality like transferring first class `Asset`s or executing smart contracts.\n *\n * Smart contracts are executed within an `InvocationTransaction`.\n *\n * @example\n *\n * const transactionHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const transaction = Transaction.for(transactionHash);\n * const transactionOutputs = transaction.outputs;\n *\n */\nexport const Transaction: TransactionConstructor;\nexport type Transaction =\n | MinerTransaction\n | IssueTransaction\n | ClaimTransaction\n | EnrollmentTransaction\n | RegisterTransaction\n | ContractTransaction\n | StateTransaction\n | PublishTransaction\n | InvocationTransaction;\nexport interface TransactionConstructor {\n /**\n * @returns `Transaction` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Transaction;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Balance and vote information for an `Address`.\n *\n * @example\n *\n * const address = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const account = Account.for(address);\n * const neoBalance = account.getBalance(Hash256.NEO);\n *\n */\nexport const Account: AccountConstructor;\nexport interface Account {\n /**\n * `Address` of this `Account`.\n */\n readonly address: Address;\n /**\n * Retrieve the balance for a first class `Asset` based on its `Hash256`.\n */\n readonly getBalance: (asset: Hash256) => Fixed8;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AccountConstructor {\n /**\n * @returns `Account` for the specified `address`.\n */\n readonly for: (address: Address) => Account;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Constants that specify the type of the `Asset`.\n */\nexport enum AssetType {\n Credit = 0x40,\n Duty = 0x80,\n /**\n * Reserved for the NEO `Asset`.\n */\n Governing = 0x00,\n /**\n * Reserved for the GAS `Asset`.\n */\n Utility = 0x01,\n Currency = 0x08,\n Share = 0x90,\n Invoice = 0x98,\n Token = 0x60,\n}\n\n/**\n * Attributes of a first class asset.\n *\n * Smart contract authors will typically only interact with the NEO and GAS `Asset`s.\n *\n * @example\n *\n * const asset = Asset.for(Hash256.NEO);\n * const neoAmount = asset.amount;\n *\n */\nexport const Asset: AssetConstructor;\nexport interface Asset {\n /**\n * `Hash256` of this `Asset`.\n */\n readonly hash: Hash256;\n /**\n * `AssetType` of the `Asset`\n *\n * @see AssetType\n */\n readonly type: AssetType;\n /**\n * Total possible supply of the `Asset`\n */\n readonly amount: Fixed8;\n /**\n * Amount currently available of the `Asset`\n */\n readonly available: Fixed8;\n /**\n * Precision (number of decimal places) of the `Asset`\n */\n readonly precision: Integer;\n /**\n * Owner of the `Asset`.\n */\n readonly owner: PublicKey;\n /**\n * Admin of the `Asset`.\n */\n readonly admin: Address;\n /**\n * Issuer of the `Asset`.\n */\n readonly issuer: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface AssetConstructor {\n /**\n * @returns `Asset` for the specified `hash`.\n */\n readonly for: (hash: Hash256) => Asset;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a smart contract deployed to the blockchain.\n *\n * @example\n *\n * const contractAddress = Address.from('0xcef0c0fdcfe7838eff6ff104f9cdec2922297537');\n * const contract = Contract.for(contractAddress);\n * const contractScript = contract.script;\n *\n */\nexport const Contract: ContractConstructor;\nexport interface Contract {\n /**\n * `Contract` code.\n */\n readonly script: Buffer;\n /**\n * Flag that indicates if the `Contract` supports receiving `Asset`s.\n */\n readonly payable: boolean;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ContractConstructor {\n /**\n * Returns `undefined` if a `Contract` does not exist at `address`.\n *\n * @returns `Contract` for the specified `address`.\n */\n readonly for: (address: Address) => Contract | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain. `Header` includes all information except the list of `Transaction`s.\n *\n * @example\n *\n * const blockHash = Hash256.from('0xd6572a459b95d9136b7a713c5485ca709f9efa4f08f1c25dd792672d2bd75bfb');\n * const header = Header.for(blockHash);\n *\n */\nexport const Header: HeaderConstructor;\nexport interface Header {\n /**\n * `Block` hash.\n */\n readonly hash: Hash256;\n /**\n * NEO blockchain version.\n */\n readonly version: Integer;\n /**\n * Previous `Block` hash.\n */\n readonly previousHash: Hash256;\n /**\n * `Block` index.\n */\n readonly index: Integer;\n /**\n * Root of the `Transaction` hash Merkle Tree.\n */\n readonly merkleRoot: Hash256;\n /**\n * `Block` time persisted.\n */\n readonly time: Integer;\n /**\n * Next consensus address.\n */\n readonly nextConsensus: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface HeaderConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Header` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Header;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Attributes of a `Block` persisted to the blockchain.\n *\n * @example\n *\n * const genesisBlock = Block.for(0);\n *\n */\nexport const Block: BlockConstructor;\nexport interface Block extends Header {\n /**\n * `Transaction`s contained in the `Block`.\n */\n readonly transactions: Transaction[];\n}\nexport interface BlockConstructor {\n /**\n * Accepts either the `Hash256` or the index of the `Block`.\n *\n * @returns `Block` for the specified `hashOrIndex`.\n */\n readonly for: (hashOrIndex: Hash256 | Integer) => Block;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Value that can be used as a key in `MapStorage` and a value for `SetStorage`.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableKeySingle = number | string | boolean | Buffer;\ntype SK = SerializableKeySingle;\nexport type SerializableKey = SK | [SK, SK] | [SK, SK, SK] | [SK, SK, SK, SK];\nexport interface SerializableValueArray extends ReadonlyArray {}\nexport interface SerializableValueMap extends ReadonlyMap {}\nexport interface SerializableValueSet extends ReadonlySet {}\nexport interface SerializableValueObject {\n readonly [key: string]: SerializableValue;\n}\n/**\n * Value that can be serialized for storage.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage) chapter of the main guide for more information.\n */\nexport type SerializableValue =\n | undefined\n | null\n | number\n | string\n | boolean\n | Buffer\n | SerializableValueArray\n | SerializableValueMap\n | SerializableValueSet\n | SerializableValueObject;\n\n/**\n * Persistent smart contract array storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class MySmartContract extends SmartContract {\n * private readonly pendingAddresses =\n * ArrayStorage.for
();\n *\n * public addPendingAddress(address: Address): void {\n * this.pendingAddresses.push(address);\n * }\n * }\n *\n */\nexport const ArrayStorage: ArrayStorageConstructor;\nexport interface ArrayStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Gets the length of the array. This is a number one higher than the highest element defined in an array.\n */\n readonly length: number;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: T, idx: number) => void) => void;\n /**\n * Appends new elements to storage, and returns the new length of the array.\n * @param items New elements to add.\n */\n readonly push: (...items: T[]) => number;\n /**\n * Removes the last element from an array and returns it.\n */\n readonly pop: () => T | undefined;\n /**\n * Access the value at index `n`.\n */\n [n: number]: T;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ArrayStorageConstructor {\n /**\n * Constructs a new `ArrayStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): ArrayStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKMapAtTwo = {\n (prefix: K[0]): MapStorage;\n};\ntype SKMapAtThree = {\n (prefix: K[0]): MapStorage<[K[1], K[2]], V>;\n (prefix: [K[0], K[1]]): MapStorage;\n};\ntype SKMapAtFour = {\n (prefix: K[0]): MapStorage<[K[1], K[2], K[3]], V>;\n (prefix: [K[0], K[1]]): MapStorage<[K[2], K[3]], V>;\n (prefix: [K[0], K[1], K[2]]): MapStorage;\n};\n\n/**\n * Persistent smart contract storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class Token extends SmartContract {\n * private readonly balances =\n * MapStorage.for>();\n *\n * public transfer(\n * from: Address,\n * to: Address,\n * amount: Fixed<8>,\n * ): boolean {\n * const fromBalance = this.balances.get(from);\n * const toBalance = this.balances.get(to);\n * this.balances.set(from, fromBalance - amount);\n * this.balances.set(to, toBalance + amount);\n * return true;\n * }\n * }\n *\n */\nexport const MapStorage: MapStorageConstructor;\nexport interface MapStorage extends Iterable<[K, V]> {\n readonly [Symbol.iterator]: () => IterableIterator<[K, V]>;\n /**\n * Executes a provided function once per each key/value pair in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V, key: K) => void) => void;\n /**\n * Returns a specified element from storage.\n * @param key the key of the element to return from storage.\n * @returns the element associated with the specified key or undefined if the key can't be found in storage.\n */\n readonly get: (key: K) => V | undefined;\n /**\n * Returns a boolean indicating whether an element with the specified key exists or not.\n * @param key the key of the element to test for presence in storage.\n * @returns `true` if an element with the specified key exists in storage; otherwise `false`.\n */\n readonly has: (key: K) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (key: K) => boolean;\n /**\n * Adds or updates an element with a specified key and value in storage.\n * @param key The key of the element to add to storage.\n * @param value The value of the element to add to storage.\n * @returns the `MapStorage` object.\n */\n readonly set: (key: K, value: V) => MapStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `MapStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: K extends [SK, SK]\n ? SKMapAtTwo\n : K extends [SK, SK, SK]\n ? SKMapAtThree\n : K extends [SK, SK, SK, SK]\n ? SKMapAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface MapStorageConstructor {\n /**\n * Constructs a new `MapStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): MapStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ntype SKSetAtTwo = {\n (prefix: V[0]): SetStorage;\n};\ntype SKSetAtThree = {\n (prefix: V[0]): SetStorage<[V[1], V[2]]>;\n (prefix: [V[0], V[1]]): SetStorage;\n};\ntype SKSetAtFour = {\n (prefix: V[0]): SetStorage<[V[1], V[2], V[3]]>;\n (prefix: [V[0], V[1]]): SetStorage<[V[2], V[3]]>;\n (prefix: [V[0], V[1], V[2]]): SetStorage;\n};\n\n/**\n * Persistent smart contract set storage. Only usable as a `SmartContract` property.\n *\n * See the [Properties and Storage](https://neo-one.io/docs/properties-and-storage#Structured-Storage) chapter of the main guide for more information.\n *\n * @example\n *\n * class ICO extends SmartContract {\n * private readonly whitelistedAddresses =\n * SetStorage.for
();\n *\n * public isWhitelisted(address: Address): boolean {\n * return this.whitelistedAddresses.has(address);\n * }\n * }\n *\n */\nexport const SetStorage: SetStorageConstructor;\nexport interface SetStorage extends Iterable {\n readonly [Symbol.iterator]: () => IterableIterator;\n /**\n * Executes a provided function once per each value in storage.\n * @param callback function to execute for each element.\n * @returns `undefined`\n */\n readonly forEach: (callback: (value: V) => void) => void;\n /**\n * Returns a boolean indicating whether an element with the specified value exists or not.\n * @param value the value to test for presence in storage.\n * @returns `true` if an element with the specified value exists in storage; otherwise `false`.\n */\n readonly has: (value: V) => boolean;\n /**\n * Removes the specified element from storage.\n * @returns `true` if an element in storage existed and has been removed, or `false` if the element does not exist.\n */\n readonly delete: (value: V) => boolean;\n /**\n * Adds an element with the specified value in storage.\n * @param value The value of the element to add to storage.\n * @returns the `SetStorage` object.\n */\n readonly add: (value: V) => SetStorage;\n /**\n * Returns the elements from storage with the specified prefix.\n * @param key The prefix key of desired elements from storage.\n * @returns a `SetStorage` object representing the elements associated with the specified prefix.\n */\n readonly at: V extends [SK, SK]\n ? SKSetAtTwo\n : V extends [SK, SK, SK]\n ? SKSetAtThree\n : V extends [SK, SK, SK, SK]\n ? SKSetAtFour\n : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface SetStorageConstructor {\n /**\n * Constructs a new `SetStorage` instance. Only usable as a `SmartContract` property.\n */\n for(): SetStorage;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Holds properties about the current state of the blockchain, the current `Transaction` and the current caller `Contract`.\n *\n * See the [Standard Library](https://neo-one.io/docs/standard-library#Blockchain-and-Transaction-Information) chapter of the main guide for more information.\n */\nexport interface BlockchainConstructor {\n /**\n * Time of the current `Block`.\n *\n * During execution, this is the timestamp of the `Block` that this `Transaction` will be included in.\n * During verification, this is the timestamp of the latest `Block` + 15 seconds which represents the earliest possible timestamp of the `Block` that this `Transaction` will be included in.\n */\n readonly currentBlockTime: number;\n /**\n * Index of the latest `Block` persisted to the blockchain.\n */\n readonly currentHeight: number;\n /**\n * `InvocationTransaction` this smart contract is executed in.\n */\n readonly currentTransaction: InvocationTransaction;\n /**\n * The `Address` of the smart contract that directly invoked the contract.\n *\n * Will be `undefined` if the smart contract method was not invoked by another smart contract, but instead was invoked by a user directly.\n */\n readonly currentCallerContract: Address | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n/**\n * Information about the current state of the blockchain and the current execution.\n */\nexport const Blockchain: BlockchainConstructor;\n\n/**\n * Injects values at deployment time. Can only be used for default constructor parameters.\n */\nexport const Deploy: DeployConstructor;\nexport interface DeployConstructor {\n /**\n * Use the sender `Address` for the constructor parameter.\n *\n * @example\n * import { Address, Deploy, SmartContract } from '@neo-one/smart-contract';\n *\n * class Token extends SmartContract {\n * public constructor(public readonly owner: Address = Deploy.senderAddress) {\n * super();\n * }\n * }\n */\n readonly senderAddress: Address;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\n/**\n * Creates an event notifier for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * const notifyTransfer = createEventNotifier>('transfer', 'from', 'to', 'amount');\n *\n * const from = Address.from('ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * notifyTransfer(from, to, 200);\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n arg8Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7, arg8: A8) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n arg7Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6, arg7: A7) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n arg6Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, arg6: A6) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => void;\nexport function createEventNotifier(name: string): () => void;\nexport function createEventNotifier(name: string, arg0Name: string): (arg0: A0) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n): (arg0: A0, arg1: A1) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n): (arg0: A0, arg1: A1, arg2: A2) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3) => void;\nexport function createEventNotifier(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): (arg0: A0, arg1: A1, arg2: A2, arg3: A3, arg4: A4) => void;\n\n/**\n * Declares an event for `SmartContract` notifications.\n *\n * Must be explicitly typed and contain string literals for the event name and argument names.\n *\n * See the [Events and Logs](https://neo-one.io/docs/events-and-logs) chapter of the main guide for more information.\n *\n * @example\n *\n * declareEvent>('transfer', 'from', 'to', 'amount');\n *\n * @param name Event name\n * @param argName Event argument name\n */\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n arg5Name: string,\n): void;\nexport function declareEvent(name: string): void;\nexport function declareEvent(name: string, arg0Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string): void;\nexport function declareEvent(name: string, arg0Name: string, arg1Name: string, arg2Name: string): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n): void;\nexport function declareEvent(\n name: string,\n arg0Name: string,\n arg1Name: string,\n arg2Name: string,\n arg3Name: string,\n arg4Name: string,\n): void;\n\n/**\n * An opaque type that represents a method parameter which is typically forwarded as an argument to another smart contract.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport const ForwardValue: ForwardValueConstructor;\nexport interface ForwardValue {\n readonly asString: () => string;\n readonly asStringNullable: () => string | undefined;\n readonly asNumber: () => number;\n readonly asNumberNullable: () => number | undefined;\n readonly asBoolean: () => boolean;\n readonly asBuffer: () => Buffer;\n readonly asBufferNullable: () => Buffer | undefined;\n readonly asAddress: () => Address;\n readonly asAddressNullable: () => Address | undefined;\n readonly asHash256: () => Hash256;\n readonly asHash256Nullable: () => Hash256 | undefined;\n readonly asPublicKey: () => PublicKey;\n readonly asPublicKeyNullable: () => PublicKey | undefined;\n readonly asArray: () => Array;\n readonly asArrayNullable: () => Array | undefined;\n readonly asMap: () => Map;\n readonly asMapNullable: () => Map | undefined;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport interface ForwardValueConstructor {\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\n\ninterface ForwardedValueTag {}\n/**\n * Marks a parameter or return type of a public `SmartContract` method as expecting a forwarded value.\n *\n * See the [Forward Values](https://neo-one.io/docs/forward-values) chapter of the advanced guide for more information.\n */\nexport type ForwardedValue = T | (T & ForwardedValueTag);\n\ninterface SmartContractValueArray extends Array {}\ninterface SmartContractValueReadonlyArray extends ReadonlyArray {}\ninterface SmartContractValueMap extends Map {}\ninterface SmartContractValueReadonlyMap extends ReadonlyMap {}\ninterface SmartContractValueObject {\n readonly [key: string]: SmartContractValue;\n}\ntype SmartContractValue =\n | void\n | null\n | undefined\n | number\n | Fixed\n | string\n | boolean\n | Buffer\n | Address\n | Hash256\n | PublicKey\n | SmartContractValueArray\n | SmartContractValueReadonlyArray\n | SmartContractValueMap\n | SmartContractValueReadonlyMap\n | SmartContractValueObject;\ntype SmartContractArg = SmartContractValue | ForwardValue;\ntype IsValidSmartContract = {\n [K in keyof T]: T[K] extends Function\n ? Parameters extends SmartContractArg[]\n ? ReturnType extends SmartContractArg\n ? T[K]\n : never\n : never\n : T[K] extends SmartContractValue\n ? T[K]\n : never;\n};\n\n/**\n * Object with string literals for the contract properties to be used in deployment.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\nexport interface ContractProperties {\n readonly codeVersion: string;\n readonly author: string;\n readonly email: string;\n readonly description: string;\n}\n\n/**\n * Marks a class as a `SmartContract`.\n */\nexport class SmartContract {\n /**\n * Properties used for deployment of the `SmartContract`\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Properties) chapter of the main guide for more information.\n */\n public readonly properties: ContractProperties;\n /**\n * `Address` of the `SmartContract`.\n */\n public readonly address: Address;\n /**\n * Stores `Transaction` hashes that have been processed by a method marked with `@receive`, `@send`, or `@sendUnsafe`.\n *\n * Used to enforce that a `Transaction` with native `Asset`s is only ever processed once by an appropriate `@receive`, `@send`, or `@sendUnsafe` method.\n *\n * Unprocessed transactions that sent assets to the smart contract can be refunded by using `refundAssets`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly processedTransactions: SetStorage;\n /**\n * Stores `Transaction` hashes that have been claimed by an address with a method marked with `@send`.\n *\n * The first contract output of a claimed transaction may be sent to the receiver by using `completeSend`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n protected readonly claimedTransactions: MapStorage;\n /**\n * Property primarily used internally to validate that the smart contract is deployed only once.\n */\n protected readonly deployed: true;\n /**\n * Override to validate a contract upgrade invocation. Returns `false` by default. Return `true` to indicate the upgrade may proceed.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * public constructor(private readonly owner = Deploy.senderAddress) {\n * super();\n * }\n *\n * protected approveUpgrade(): boolean {\n * return Address.isCaller(this.owner);\n * }\n * }\n */\n protected approveUpgrade(): boolean;\n /**\n * Permanently deletes the contract.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Destroy) chapter of the main guide for more information.\n */\n protected readonly destroy: () => void;\n /**\n * Method automatically added for refunding native `Asset`s.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly refundAssets: () => boolean;\n /**\n * Method automatically added for sending native `Asset`s that have been claimed by a `@send` method.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\n public readonly completeSend: () => boolean;\n /**\n * Used internally by client APIs to upgrade the contract. Control whether an invocation is allowed to upgrade the contract by overriding `approveUpgrade`.\n *\n * See the [Deployment](https://neo-one.io/docs/deployment#Upgrade) chapter of the main guide for more information.\n */\n public readonly upgrade: (\n script: Buffer,\n parameterList: Buffer,\n returnType: number,\n properties: number,\n contractName: string,\n codeVersion: string,\n author: string,\n email: string,\n description: string,\n ) => boolean;\n /**\n * Returns the singleton instance of the `SmartContract` defined by the interface `T` at `address`.\n *\n * `T` is checked for validity and `SmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * interface Token {\n * readonly transfer: (from: Address, to: Address, amount: Fixed<8>) => boolean;\n * }\n *\n * const address = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const contract = SmartContract.for(address);\n *\n */\n public static readonly for: (address: T extends IsValidSmartContract ? Address : never) => T;\n}\n\nexport interface LinkedSmartContractConstructor {\n /**\n * Returns the singleton instance of the statically linked contract `T`.\n *\n * `T` is checked for validity and `LinkedSmartContract.for` will report an error during compilation if the interface is invalid.\n *\n * See the [Calling Smart Contracts](https://neo-one.io/docs/calling-smart-contracts) chapter of the main guide for more information.\n *\n * @example\n *\n * import { Token } from './Token';\n *\n * const contract = LinkedSmartContract.for();\n * const from = Address.from('ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s');\n * const to = Address.from('AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx');\n * contract.transfer(from, to, 10);\n *\n * @returns an object representing the underlying smart contract\n */\n readonly for: () => T extends IsValidSmartContract ? T : never;\n readonly [OpaqueTagSymbol0]: unique symbol;\n}\nexport const LinkedSmartContract: LinkedSmartContractConstructor;\n\n/**\n * Types that can be hashed the various `crypto` functions.\n *\n * @see crypto\n */\nexport type Hashable = number | string | boolean | Buffer;\n/**\n * Contains various cryptography functions.\n */\nexport interface CryptoConstructor {\n /**\n * Returns a `Buffer` of the SHA1 hash of the input\n */\n readonly sha1: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the SHA256 hash of the input\n */\n readonly sha256: (value: Hashable) => Buffer;\n /**\n * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input.\n */\n readonly hash160: (value: Hashable) => Address;\n /**\n * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input.\n */\n readonly hash256: (value: Hashable) => Hash256;\n}\n/**\n * Contains various cryptography functions.\n */\nexport const crypto: CryptoConstructor;\n\n/**\n * Represents a native `Asset` transfer.\n */\nexport interface Transfer {\n /**\n * The amount transferred.\n */\n readonly amount: Fixed<8>;\n /**\n * The `Hash256` of the `Asset` transferred.\n */\n readonly asset: Hash256;\n /**\n * The desination `Address` of the transfer.\n */\n readonly to: Address;\n}\n\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Method can take the `Transfer` as the final argument.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n *\n * @example\n *\n * export class Contract extends SmartContract {\n * `@send`\n * public withdraw(arg0: Address, arg1: Fixed<8>, transfer: Transfer): boolean {\n * // Don't allow sending anything but NEO\n * if (!transfer.asset.equals(Hash256.NEO)) {\n * return false;\n * }\n * // Do some additional checks on the transfer.to and transfer.amount being sent and other arguments.\n * return true;\n * }\n * }\n *\n */\nexport function send(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies `Asset` transfers from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to approve sending the transferred `Asset`s.\n *\n * Note that unlike `@send`, `@sendUnsafe` does not use a two-phase send. Smart contract authors must implement their own logic for safely sending assets from the contract.\n *\n * May be used in combination with `@receive`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function sendUnsafe(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies receiving `Asset`s to the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to receive the transferred `Asset`s.\n *\n * May be used in combination with `@sendUnsafe`.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function receive(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method that verifies GAS claims from the `SmartContract`.\n *\n * Method must return a boolean indicating whether the `SmartContract` wishes to allow GAS to be claimed.\n *\n * May optionally take the `ClaimTransaction` this `SmartContract` is executed in as the last argument. Accessing `Blockchain.currentTransaction` will result in an error.\n *\n * See the [Native Assets](https://neo-one.io/docs/native-assets) chapter of the advanced guide for more information.\n */\nexport function claim(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n/**\n * Marks a `SmartContract` method as not modifying storage.\n *\n * See the [Methods](https://neo-one.io/docs/methods) chapter of the main guide for more information.\n */\nexport function constant(target: any, propertyKey: string, descriptor: PropertyDescriptor): void;\n", ], version: 3, }, diff --git a/packages/neo-one-cli/src/__e2e__/cmd/buildExchange.test.ts b/packages/neo-one-cli/src/__e2e__/cmd/buildExchange.test.ts new file mode 100644 index 0000000000..1ca00c6c2f --- /dev/null +++ b/packages/neo-one-cli/src/__e2e__/cmd/buildExchange.test.ts @@ -0,0 +1,333 @@ +// tslint:disable no-any +import { AddressString, Contract, privateKeyToAddress, UserAccountID } from '@neo-one/client-common'; +import { DeveloperClient, Hash256 } from '@neo-one/client-core'; +import { constants } from '@neo-one/utils'; +import BigNumber from 'bignumber.js'; +import * as nodePath from 'path'; +import { getClients, getContracts } from '../../__data__'; + +jest.setTimeout(300 * 1000); + +interface ExpectedBalances { + readonly tokenBalance: string; + readonly exchangeTokenBalance: string; + readonly tokensOnExchange: string; +} + +const TO_PRIVATE_KEY = '7d128a6d096f0c14c3a25a2b0c41cf79661bfcb4a8cc95aaaea28bde4d732344'; + +const verifyExchangeContract = (contract?: Contract): void => { + expect(contract).toBeDefined(); + if (contract === undefined) { + throw new Error('For TS'); + } + expect(contract.parameters).toEqual(['String', 'Array']); + expect(contract.returnType).toEqual('Buffer'); + expect(contract.payable).toBeFalsy(); + expect(contract.storage).toBeTruthy(); + expect(contract.dynamicInvoke).toBeTruthy(); +}; + +const mintTokens = async (ico: any, developerClient: DeveloperClient): Promise => { + const mintResult = await ico.mintTokens({ + sendTo: [ + { + amount: new BigNumber(10), + asset: Hash256.NEO, + }, + ], + }); + + const [mintReceipt] = await Promise.all([mintResult.confirmed(), developerClient.runConsensusNow()]); + if (mintReceipt.result.state === 'FAULT') { + throw new Error(mintReceipt.result.message); + } +}; + +const checkBalances = async ({ + token, + tokenAssetID, + from, + exchange, + exchangeAddress, + expected, +}: { + readonly token: any; + readonly tokenAssetID: AddressString; + readonly from: UserAccountID; + readonly exchange: any; + readonly exchangeAddress: AddressString; + readonly expected: ExpectedBalances; +}) => { + const [balanceAfterDeposit, exchangeBalanceAfterDeposit, tokensDeposited] = await Promise.all([ + token.balanceOf(from.address), + token.balanceOf(exchangeAddress), + exchange.balanceOf(from.address, tokenAssetID), + ]); + expect(balanceAfterDeposit.toString()).toEqual(expected.tokenBalance); + expect(exchangeBalanceAfterDeposit.toString()).toEqual(expected.exchangeTokenBalance); + expect(tokensDeposited.toString()).toEqual(expected.tokensOnExchange); +}; + +const depositNEP5 = async ({ + token, + tokenAssetID, + exchange, + from, + exchangeAddress, + amount, + expected, + developerClient, +}: { + readonly token: any; + readonly tokenAssetID: AddressString; + readonly exchange: any; + readonly from: UserAccountID; + readonly exchangeAddress: AddressString; + readonly amount: BigNumber; + readonly expected: ExpectedBalances; + readonly developerClient: DeveloperClient; +}) => { + const [approveDepositReceipt] = await Promise.all([ + token.approveSendTransfer.confirmed(from.address, exchangeAddress, new BigNumber(100000000).times(amount), { + from, + }), + developerClient.runConsensusNow(), + ]); + expect(approveDepositReceipt.result.value).toEqual(true); + + const [exchangeDepositReceipt] = await Promise.all([ + exchange.depositNEP5.confirmed(from.address, tokenAssetID, amount, { from }), + developerClient.runConsensusNow(), + ]); + expect(exchangeDepositReceipt.result.state).toEqual('HALT'); + expect(exchangeDepositReceipt.result.value).toEqual(undefined); + expect(exchangeDepositReceipt.events).toHaveLength(1); + + await checkBalances({ token, tokenAssetID, from, exchange, exchangeAddress, expected }); +}; + +const withdrawNEP5 = async ({ + token, + tokenAssetID, + exchange, + from, + exchangeAddress, + amount, + expected, + developerClient, +}: { + readonly token: any; + readonly tokenAssetID: AddressString; + readonly exchange: any; + readonly from: UserAccountID; + readonly exchangeAddress: AddressString; + readonly amount: BigNumber; + readonly expected: ExpectedBalances; + readonly developerClient: DeveloperClient; +}) => { + const [exchangeWithdrawalReceipt] = await Promise.all([ + exchange.withdrawNEP5.confirmed(from.address, tokenAssetID, amount, { from }), + developerClient.runConsensusNow(), + ]); + expect(exchangeWithdrawalReceipt.result.state).toEqual('HALT'); + expect(exchangeWithdrawalReceipt.result.value).toEqual(undefined); + expect(exchangeWithdrawalReceipt.events).toHaveLength(1); + + await checkBalances({ token, tokenAssetID, from, exchange, exchangeAddress, expected }); +}; + +const verifyNEP5NEP5Exchange = async ({ + token, + tokenAssetID, + coin, + coinAssetID, + exchange, + exchangeAddress, + masterAccountID, + toAccountID, + developerClient, +}: { + readonly token: any; + readonly tokenAssetID: AddressString; + readonly coin: any; + readonly coinAssetID: AddressString; + readonly exchange: any; + readonly exchangeAddress: AddressString; + readonly masterAccountID: UserAccountID; + readonly toAccountID: UserAccountID; + readonly developerClient: DeveloperClient; +}) => { + await depositNEP5({ + token, + tokenAssetID, + exchange, + from: masterAccountID, + exchangeAddress, + amount: new BigNumber(10), + expected: { tokenBalance: '90', exchangeTokenBalance: '10', tokensOnExchange: '10' }, + developerClient, + }); + + await withdrawNEP5({ + token, + tokenAssetID, + exchange, + from: masterAccountID, + exchangeAddress, + amount: new BigNumber(4), + expected: { tokenBalance: '94', exchangeTokenBalance: '6', tokensOnExchange: '6' }, + developerClient, + }); + + const coinTransferReceipt = await coin.transfer.confirmed( + masterAccountID.address, + toAccountID.address, + new BigNumber(100), + ); + expect(coinTransferReceipt.result.value).toEqual(true); + + await depositNEP5({ + token: coin, + tokenAssetID: coinAssetID, + exchange, + from: toAccountID, + exchangeAddress, + amount: new BigNumber(70), + expected: { tokenBalance: '30', exchangeTokenBalance: '70', tokensOnExchange: '70' }, + developerClient, + }); + + const [makeOfferReceipt] = await Promise.all([ + exchange.makeOffer.confirmed( + masterAccountID.address, + tokenAssetID, + new BigNumber(5), + coinAssetID, + new BigNumber(50), + tokenAssetID, + new BigNumber(1), + 'nonce1', + ), + developerClient.runConsensusNow(), + ]); + expect(makeOfferReceipt.result.state).toEqual('HALT'); + expect(makeOfferReceipt.result.value).toEqual(undefined); + const offerHash = makeOfferReceipt.events[0].parameters.offerHash; + expect(offerHash).toBeDefined(); + + const offer = await exchange.getOffer(offerHash); + expect(offer.maker).toEqual(masterAccountID.address); + expect(offer.offerAssetID).toEqual(tokenAssetID); + expect(offer.offerAmount.toString()).toEqual('5'); + expect(offer.wantAssetID).toEqual(coinAssetID); + expect(offer.wantAmount.toString()).toEqual('50'); + expect(offer.makerFeeAssetID).toEqual(tokenAssetID); + expect(offer.makerFeeAvailableAmount.toString()).toEqual('1'); + expect(offer.nonce).toEqual('nonce1'); + + const [fillOfferReceipt] = await Promise.all([ + exchange.fillOffer.confirmed( + toAccountID.address, + offerHash, + new BigNumber(3), + coinAssetID, + new BigNumber(1), + true, + new BigNumber(1), + false, + { from: toAccountID, systemFee: new BigNumber(2) }, + ), + developerClient.runConsensusNow(), + ]); + expect(fillOfferReceipt.result.state).toEqual('HALT'); + expect(fillOfferReceipt.result.value).toEqual(undefined); + + const [ + exchangeMakerTokenBalanceAfterFill, + exchangeTakerTokenBalanceAfterFill, + exchangeMakerCoinBalanceAfterFill, + exchangeTakerCoinBalanceAfterFill, + offerAfterFill, + ] = await Promise.all([ + exchange.balanceOf(masterAccountID.address, tokenAssetID), + exchange.balanceOf(toAccountID.address, tokenAssetID), + exchange.balanceOf(masterAccountID.address, coinAssetID), + exchange.balanceOf(toAccountID.address, coinAssetID), + exchange.getOffer(offerHash), + ]); + expect(exchangeMakerTokenBalanceAfterFill.toString()).toEqual('0'); + expect(exchangeTakerTokenBalanceAfterFill.toString()).toEqual('3'); + expect(exchangeMakerCoinBalanceAfterFill.toString()).toEqual('30'); + expect(exchangeTakerCoinBalanceAfterFill.toString()).toEqual('39'); + expect(offerAfterFill.maker).toEqual(masterAccountID.address); + expect(offerAfterFill.offerAssetID).toEqual(tokenAssetID); + expect(offerAfterFill.offerAmount.toString()).toEqual('2'); + expect(offerAfterFill.wantAssetID).toEqual(coinAssetID); + expect(offerAfterFill.wantAmount.toString()).toEqual('20'); + expect(offerAfterFill.makerFeeAssetID).toEqual(tokenAssetID); + expect(offerAfterFill.makerFeeAvailableAmount.toString()).toEqual('0'); + expect(offerAfterFill.nonce).toEqual('nonce1'); + + const cancelOfferReceipt = await exchange.cancelOffer.confirmed(masterAccountID.address, offerHash); + expect(cancelOfferReceipt.result.value).toEqual(undefined); + const [exchangeMakerTokenBalanceAfterCancel, offerAfterCancel] = await Promise.all([ + exchange.balanceOf(masterAccountID.address, tokenAssetID), + exchange.getOffer(offerHash), + ]); + expect(exchangeMakerTokenBalanceAfterCancel.toString()).toEqual('2'); + expect(offerAfterCancel).toEqual(undefined); +}; + +const verifyExchangeContractTesting = async (codegenPath: string) => { + // tslint:disable-next-line no-require-imports + const test = require(nodePath.resolve(codegenPath, 'test')); + await test.withContracts( + async ({ ico, token, coin, coinIco, exchange, masterAccountID, networkName, client, developerClient }: any) => { + await client.providers.memory.keystore.addUserAccount({ + network: networkName, + privateKey: TO_PRIVATE_KEY, + }); + const toAccountID = { network: networkName, address: privateKeyToAddress(TO_PRIVATE_KEY) }; + await mintTokens(ico, developerClient); + await mintTokens(coinIco, developerClient); + await Promise.all([ + client.transfer(new BigNumber(100), Hash256.GAS, toAccountID.address), + developerClient.runConsensusNow(), + ]); + + const tokenAssetID = token.definition.networks[masterAccountID.network].address; + const coinAssetID = coin.definition.networks[masterAccountID.network].address; + const exchangeAddress = exchange.definition.networks[masterAccountID.network].address; + + await verifyNEP5NEP5Exchange({ + token, + tokenAssetID, + coin, + coinAssetID, + exchange, + exchangeAddress, + masterAccountID, + toAccountID, + developerClient, + }); + }, + ); +}; + +describe('build exchange (ts, react)', () => { + it('- builds the exchange project using typescript and the react framework.', async () => { + const project = 'exchange'; + const exec = one.createExec(project); + one.addCleanup(async () => { + await exec('stop network'); + }); + await exec('build'); + + const [{ client: outerClient }, config] = await Promise.all([getClients(project), one.getProjectConfig(project)]); + const contracts = await getContracts(outerClient, constants.LOCAL_NETWORK_NAME); + + verifyExchangeContract(contracts.find((contract) => contract.name === 'Exchange')); + await verifyExchangeContractTesting(config.codegen.path); + }); +}); diff --git a/packages/neo-one-cli/src/__e2e__/cmd/compile.test.ts b/packages/neo-one-cli/src/__e2e__/cmd/compile.test.ts new file mode 100644 index 0000000000..642085e396 --- /dev/null +++ b/packages/neo-one-cli/src/__e2e__/cmd/compile.test.ts @@ -0,0 +1,181 @@ +import { args } from '@neo-one/client-core'; +import fs from 'fs-extra'; +import JSZip from 'jszip'; +import path from 'path'; + +interface CLICompileOptions { + readonly json: boolean; + readonly avm: boolean; + readonly debug: boolean; + readonly opcodes: boolean; +} + +// this is just a helper to replicate the coercing we do for the CLI command +const createOptions = (options: Partial = {}): CLICompileOptions => ({ + avm: options.avm ? options.avm : false, + json: options.json ? options.json : !options.avm, + debug: options.debug ? options.debug : false, + opcodes: options.opcodes ? options.opcodes : false, +}); + +// tslint:disable-next-line: no-any +const testDebugFile = (contents: any) => { + expect(contents.entrypoint).toBeDefined(); + expect(Array.isArray(contents.documents)).toEqual(true); + expect(Array.isArray(contents.methods)).toEqual(true); + expect(Array.isArray(contents.events)).toEqual(true); + // tslint:disable-next-line: no-any + contents.methods.forEach((method: any) => { + expect(method.name).toBeDefined(); + expect(method.id).toBeDefined(); + expect(method.range).toBeDefined(); + expect(Array.isArray(method.params)).toEqual(true); + expect(method.return).toBeDefined(); + expect(Array.isArray(method.variables)).toEqual(true); + expect(Array.isArray(method['sequence-points'])).toEqual(true); + }); + + // tslint:disable-next-line: no-any + contents.events.forEach((event: any) => { + expect(event.id).toBeDefined(); + expect(event.name).toBeDefined(); + expect(Array.isArray(event.parameters)).toBeDefined(); + }); +}; + +const testCompileProject = async (project: string, options: CLICompileOptions) => { + const command = Object.entries(options).reduce( + (acc, [flag, value]) => (value === true ? acc.concat(` --${flag} ${value}`) : acc), + 'compile', + ); + await one.createExec(project)(command); + + const { + contracts: { outDir }, + } = await one.getProjectConfig(project); + + expect(outDir).toBeDefined(); + + const getTmpPath = (file: string) => path.resolve(outDir, file); + + const outFiles = await fs.readdir(outDir); + const contractFiles = outFiles.filter((filename) => filename.endsWith('.contract.json')); + const avmABIFiles = outFiles.filter( + (filename) => filename.endsWith('.abi.json') && !filename.endsWith('.neoone.abi.json'), + ); + const neooneABIFiles = outFiles.filter((filename) => filename.endsWith('.neoone.abi.json')); + const debugFiles = outFiles.filter((filename) => filename.endsWith('.debug.json')); + const avmFiles = outFiles.filter((filename) => filename.endsWith('.avm')); + const avmDebugFiles = outFiles.filter((filename) => filename.endsWith('.avmdbgnfo')); + const opcodeFiles = outFiles.filter((filename) => filename.endsWith('.avm.txt')); + + if (!options.json) { + expect(contractFiles.length).toEqual(0); + expect(neooneABIFiles.length).toEqual(0); + } + + if (!options.avm) { + expect(avmFiles.length).toEqual(0); + expect(avmABIFiles.length).toEqual(0); + } + + if (!options.debug) { + expect(debugFiles.length).toEqual(0); + expect(avmDebugFiles.length).toEqual(0); + } + + if (!options.opcodes) { + expect(opcodeFiles.length).toEqual(0); + } + + if (options.json) { + expect(contractFiles.length).toEqual(3); + expect(neooneABIFiles.length).toEqual(3); + await Promise.all( + contractFiles.map(async (filename) => { + const contents = await fs.readJSON(getTmpPath(filename)); + expect(contents.script).toBeDefined(); + expect(contents.parameters).toBeDefined(); + expect(contents.returnType).toBeDefined(); + expect(contents.name).toBeDefined(); + + // we won't always check the avm buffer (it won't always check but will be enough) + if (options.avm) { + const avmFile = filename.replace('.contract.json', '.avm'); + const avmScript = await fs.readFile(getTmpPath(avmFile)); + expect(Buffer.from(contents.script, 'hex')).toEqual(avmScript); + } + }), + ); + + await Promise.all( + neooneABIFiles.map(async (filename) => { + const contents = await fs.readJSON(getTmpPath(filename)); + expect(() => args.assertABI(filename, contents)).not.toThrow(); + }), + ); + } + + if (options.opcodes) { + expect(opcodeFiles.length).toEqual(3); + } + + if (options.debug) { + if (options.json) { + expect(debugFiles.length).toEqual(3); + await Promise.all( + debugFiles.map(async (filename) => { + const contents = await fs.readJSON(getTmpPath(filename)); + testDebugFile(contents); + }), + ); + } + + if (options.avm) { + expect(avmDebugFiles.length).toEqual(3); + expect(avmFiles.length).toEqual(3); + await Promise.all( + avmDebugFiles.map(async (filename) => { + const rawFile = await fs.readFile(getTmpPath(filename)); + const zipped = await JSZip.loadAsync(rawFile); + const zipContents = await zipped.file(filename.replace('.avmdbgnfo', '.debug.json'))?.async('text'); + if (zipContents === undefined) { + throw new Error('contents should be defined here'); + } + + testDebugFile(JSON.parse(zipContents)); + }), + ); + } + } +}; + +describe('Compile ICO', () => { + test('compile -- no flags', async () => { + await testCompileProject('ico', createOptions()); + }); + + test('compile -- avm flag', async () => { + await testCompileProject('ico', createOptions({ avm: true })); + }); + + test('compile -- json & avm flag', async () => { + await testCompileProject('ico', createOptions({ avm: true, json: true })); + }); + + test('compile -- debug flag', async () => { + await testCompileProject('ico', createOptions({ debug: true })); + }); + + test('compile -- avm & debug flag', async () => { + await testCompileProject('ico', createOptions({ avm: true, debug: true })); + }); + + test('compile -- avm && debug && opcodes flag', async () => { + await testCompileProject('ico', createOptions({ avm: true, debug: true, opcodes: true })); + }); + + test('compile -- json & avm & debug', async () => { + await testCompileProject('ico', createOptions({ json: true, avm: true, debug: true })); + }); +}); diff --git a/packages/neo-one-cli/src/__e2e__/cmd/init.test.ts b/packages/neo-one-cli/src/__e2e__/cmd/init.test.ts new file mode 100644 index 0000000000..f26268b310 --- /dev/null +++ b/packages/neo-one-cli/src/__e2e__/cmd/init.test.ts @@ -0,0 +1,159 @@ +import fs from 'fs-extra'; +// tslint:disable-next-line: match-default-export-name +import nodePath from 'path'; + +const getPackage = (dependency: string) => ({ + name: 'test-project', + version: '0.0.0', + dependencies: { + [dependency]: '0.0.0', + }, +}); + +const getTSConfig = () => ({ + compilerOptions: { + module: 'commonjs', + noImplicitAny: true, + removeComments: true, + preserveConstEnums: true, + sourceMap: true, + }, + exclude: [], +}); + +const setupAndInitDirectory = async ({ + dependency = 'none', + js = false, +}: { + readonly dependency?: string; + readonly js?: boolean; +} = {}) => { + const { exec: execAsync, env } = one.createCLIProject('init'); + + const tmpDir = env.NEO_ONE_TMP_DIR === undefined ? process.cwd() : env.NEO_ONE_TMP_DIR; + + await fs.writeJSON(nodePath.join(tmpDir, 'package.json'), getPackage(dependency)); + if (!js) { + await fs.writeJSON(nodePath.join(tmpDir, 'tsconfig.json'), getTSConfig()); + } + + await execAsync('init'); + + await Promise.all([ + expect(fs.pathExists(nodePath.join(tmpDir, js ? '.neo-one.config.js' : '.neo-one.config.ts'))).resolves.toEqual( + true, + ), + expect(fs.pathExists(nodePath.join(tmpDir, 'neo-one', 'contracts'))).resolves.toEqual(true), + ]); + + const [neoConfig, tsConfig] = await Promise.all([ + import(nodePath.join(tmpDir, js ? '.neo-one.config.js' : '.neo-one.config.ts')), + fs.readJSON(nodePath.join(tmpDir, 'tsconfig.json')).catch(() => undefined), + ]); + + if (!js) { + expect(tsConfig.exclude).toEqual(['neo-one/contracts/*.ts']); + } + + return neoConfig; +}; + +describe('init command - no framework', () => { + it('does not set framework if not implied', async () => { + jest.resetModules(); + jest.doMock('@neo-one/cli', () => ({ defaultNetworks: [] })); + const { + default: { codegen, contracts }, + } = await setupAndInitDirectory(); + + expect(codegen).toEqual({ + path: nodePath.join('src', 'neo-one'), + framework: 'none', + browserify: false, + codesandbox: false, + language: 'typescript', + }); + + expect(contracts).toEqual({ + path: 'neo-one/contracts', + outDir: 'neo-one/compiled', + }); + }); +}); + +describe('init command - js', () => { + it('creates a .js config when no tsconfig', async () => { + await setupAndInitDirectory({ + js: true, + }); + }); +}); + +describe('init command - react', () => { + it('sets framework to react if package.json has react dependency', async () => { + const { + default: { codegen, contracts }, + } = await setupAndInitDirectory({ + dependency: 'react', + }); + + expect(codegen).toEqual({ + path: nodePath.join('src', 'neo-one'), + framework: 'react', + browserify: false, + codesandbox: false, + language: 'typescript', + }); + + expect(contracts).toEqual({ + path: 'neo-one/contracts', + outDir: 'neo-one/compiled', + }); + }); +}); + +describe('init command - vue', () => { + it('sets framework to vue if package.json has vue dependency', async () => { + const { + default: { codegen, contracts }, + } = await setupAndInitDirectory({ + dependency: 'vue', + }); + + expect(codegen).toEqual({ + path: nodePath.join('src', 'neo-one'), + framework: 'vue', + browserify: false, + codesandbox: false, + language: 'typescript', + }); + + expect(contracts).toEqual({ + path: 'neo-one/contracts', + outDir: 'neo-one/compiled', + }); + }); +}); + +describe('init command - angular', () => { + it('sets framework to angular if package.json has angular dependency', async () => { + const { + default: { codegen, contracts }, + } = await setupAndInitDirectory({ + dependency: '@angular/core', + }); + + expect(codegen).toEqual({ + path: nodePath.join('src', 'neo-one'), + framework: 'angular', + browserify: false, + codesandbox: false, + language: 'typescript', + }); + + expect(contracts).toEqual({ + path: 'neo-one/contracts', + outDir: 'neo-one/compiled', + }); + }); +}); diff --git a/packages/neo-one-cli/src/__e2e__/cmd/start/neotracker.test.ts b/packages/neo-one-cli/src/__e2e__/cmd/start/neotracker.test.ts index 8560d5965c..5ef5b8ffcd 100644 --- a/packages/neo-one-cli/src/__e2e__/cmd/start/neotracker.test.ts +++ b/packages/neo-one-cli/src/__e2e__/cmd/start/neotracker.test.ts @@ -3,9 +3,9 @@ import { isRunning } from '../../../common'; describe('start network', () => { it('starts a private network', async () => { - const execAsync = one.createExecAsync('ico'); + const execAsync = one.createExecAsync('ico-neotracker'); execAsync('start network'); - const config = await one.getProjectConfig('ico'); + const config = await one.getProjectConfig('ico-neotracker'); await one.until(async () => { const [live, ready] = await Promise.all([ @@ -17,6 +17,7 @@ describe('start network', () => { }); execAsync('start neotracker'); + await one.until(async () => { const live = await isRunning(config.neotracker.port); expect(live).toEqual(true); diff --git a/packages/neo-one-cli/src/__e2e__/cmd/stop/neotracker.test.ts b/packages/neo-one-cli/src/__e2e__/cmd/stop/neotracker.test.ts index 66f856fa26..075c669fb9 100644 --- a/packages/neo-one-cli/src/__e2e__/cmd/stop/neotracker.test.ts +++ b/packages/neo-one-cli/src/__e2e__/cmd/stop/neotracker.test.ts @@ -3,9 +3,9 @@ import { isRunning } from '../../../common'; describe('start network', () => { it('starts a private network', async () => { - const execAsync = one.createExecAsync('ico'); + const execAsync = one.createExecAsync('ico-neotracker'); execAsync('start network'); - const config = await one.getProjectConfig('ico'); + const config = await one.getProjectConfig('ico-neotracker'); await one.until(async () => { const [live, ready] = await Promise.all([ @@ -23,7 +23,7 @@ describe('start network', () => { expect(live).toEqual(true); }); - await one.createExec('ico')('stop neotracker'); + await one.createExec('ico-neotracker')('stop neotracker'); let success = false; try { success = await isRunning(config.neotracker.port); diff --git a/packages/neo-one-cli/src/bin/neo-one.ts b/packages/neo-one-cli/src/bin/neo-one.ts index 11ad2648b5..6ac443846c 100644 --- a/packages/neo-one-cli/src/bin/neo-one.ts +++ b/packages/neo-one-cli/src/bin/neo-one.ts @@ -1,11 +1,6 @@ // tslint:disable-next-line no-implicit-dependencies -import { cmd } from '@neo-one/cli'; import yargs from 'yargs'; +import * as cmd from '../cmd'; // tslint:disable-next-line no-unused-expression -cmd - .builder(yargs) - .usage(cmd.describe) - .demandCommand() - .scriptName(cmd.command) - .help('help').argv; +cmd.builder(yargs).usage(cmd.describe).demandCommand().scriptName(cmd.command).help('help').argv; diff --git a/packages/neo-one-cli/src/build/createTasks.ts b/packages/neo-one-cli/src/build/createTasks.ts index 3d7a61636e..8132e7a291 100644 --- a/packages/neo-one-cli/src/build/createTasks.ts +++ b/packages/neo-one-cli/src/build/createTasks.ts @@ -97,12 +97,9 @@ export const createTasks = (cmd: Command, config: Configuration, reset: boolean) }, }, { - title: 'Start NEO tracker instance', + title: 'Start NEO Tracker instance', task: async (_ctx, task) => { - if (config.neotracker.skip) { - task.skip('NEO tracker instance skipped.'); - } - await startNeotracker(cmd, config, reset); + config.neotracker.skip ? task.skip('NEO Tracker instance skipped.') : await startNeotracker(cmd, config, reset); }, }, ]); diff --git a/packages/neo-one-cli/src/build/startNeotracker.ts b/packages/neo-one-cli/src/build/startNeotracker.ts index 7d98f88275..4ba072b8f6 100644 --- a/packages/neo-one-cli/src/build/startNeotracker.ts +++ b/packages/neo-one-cli/src/build/startNeotracker.ts @@ -39,6 +39,6 @@ export const startNeotracker = async (cmd: Command, config: Configuration, reset } if (!ready) { - throw new Error('Neotracker is not ready.'); + throw new Error('NEO Tracker is not ready.'); } }; diff --git a/packages/neo-one-cli/src/cmd/build.ts b/packages/neo-one-cli/src/cmd/build.ts index 797fcc0b42..eb3910b7ea 100644 --- a/packages/neo-one-cli/src/cmd/build.ts +++ b/packages/neo-one-cli/src/cmd/build.ts @@ -6,10 +6,7 @@ import { start } from '../common'; export const command = 'build'; export const describe = 'Builds the project and deploys it to the local development network.'; export const builder = (yargsBuilder: typeof yargs) => - yargsBuilder - .boolean('reset') - .describe('reset', 'Reset the local project.') - .default('reset', false); + yargsBuilder.boolean('reset').describe('reset', 'Reset the local project.').default('reset', false); export const handler = (argv: Yarguments>) => { start(async (cmd, config) => { await createTasks(cmd, config, argv.reset).run(); diff --git a/packages/neo-one-cli/src/cmd/compile.ts b/packages/neo-one-cli/src/cmd/compile.ts new file mode 100644 index 0000000000..07c57d7271 --- /dev/null +++ b/packages/neo-one-cli/src/cmd/compile.ts @@ -0,0 +1,44 @@ +import { Yarguments } from '@neo-one/utils-node'; +import yargs from 'yargs'; +import { start } from '../common'; +import { createTasks } from '../compile'; + +export const command = 'compile'; +export const describe = 'Compiles a project and outputs code to a local directory.'; +export const builder = (yargsBuilder: typeof yargs) => + yargsBuilder + .string('outDir') + .describe('outDir', 'Output code directory.') + .string('path') + .describe('path', 'Contract directory.') + .boolean('json') + .describe('json', 'Output the contract with the JSON format.') + .boolean('avm') + .describe('avm', 'Output the contract with the AVM format.') + .boolean('debug') + .describe('debug', 'Output additional debug information.') + .boolean('opcodes') + .describe('opcodes', 'Output the AVM in a human readable format for debugging (requires --debug).'); + +export const handler = (argv: Yarguments>) => { + start(async (_cmd, config) => { + const configOptions = config.contracts; + const path = argv.path ? argv.path : configOptions.path; + const outDir = argv.outDir ? argv.outDir : configOptions.outDir; + const options = { + json: argv.json ? argv.json : configOptions.json, + avm: argv.avm ? argv.avm : configOptions.avm, + debug: argv.debug ? argv.debug : configOptions.debug, + opcodes: argv.opcodes ? argv.opcodes : configOptions.opcodes, + }; + if (options.opcodes && !options.debug) { + throw new Error('`opcodes` flag may only be specified alongside the `debug` flag'); + } + await createTasks(path, outDir, { + json: options.json ? options.json : !options.avm, + avm: options.avm ? options.avm : false, + debug: options.debug ? options.debug : false, + opcodes: options.opcodes ? options.opcodes : false, + }).run(); + }); +}; diff --git a/packages/neo-one-cli/src/cmd/console.ts b/packages/neo-one-cli/src/cmd/console.ts index ae0a3da899..087d7ff81a 100644 --- a/packages/neo-one-cli/src/cmd/console.ts +++ b/packages/neo-one-cli/src/cmd/console.ts @@ -6,11 +6,11 @@ import { startConsole } from '../console'; const defaultNetworks: readonly string[] = ['local']; export const command = 'console'; -export const describe = 'Starts a repl with project contracts and client APIs available.'; +export const describe = 'Starts a REPL with project contracts and client APIs available.'; export const builder = (yargsBuilder: typeof yargs) => yargsBuilder .array('networks') - .describe('networks', 'Networks to initialize before starting the repl.') + .describe('networks', 'Networks to initialize before starting the REPL.') .default('networks', defaultNetworks); export const handler = (argv: Yarguments>) => { start(async (_cmd, config) => startConsole(config, argv.networks)); diff --git a/packages/neo-one-cli/src/cmd/convert/index.ts b/packages/neo-one-cli/src/cmd/convert/index.ts index 8fc6388e62..55011c62f4 100644 --- a/packages/neo-one-cli/src/cmd/convert/index.ts +++ b/packages/neo-one-cli/src/cmd/convert/index.ts @@ -6,11 +6,6 @@ import * as scriptHash from './scriptHash'; import * as wif from './wif'; export const command = 'convert'; -export const describe = 'Convert values.'; +export const describe = 'Converts values.'; export const builder = (yargsBuilder: typeof yargs) => - yargsBuilder - .command(address) - .command(privateKey) - .command(publicKey) - .command(scriptHash) - .command(wif); + yargsBuilder.command(address).command(privateKey).command(publicKey).command(scriptHash).command(wif); diff --git a/packages/neo-one-cli/src/cmd/deploy.ts b/packages/neo-one-cli/src/cmd/deploy.ts index e9f85178b6..c67a188de3 100644 --- a/packages/neo-one-cli/src/cmd/deploy.ts +++ b/packages/neo-one-cli/src/cmd/deploy.ts @@ -6,10 +6,7 @@ import { deploy } from '../deploy'; export const command = 'deploy'; export const describe = 'Deploys the project using the migration file.'; export const builder = (yargsBuilder: typeof yargs) => - yargsBuilder - .string('network') - .describe('network', 'Network to run the migration on.') - .default('network', 'test'); + yargsBuilder.string('network').describe('network', 'Network to run the migration on.').default('network', 'test'); export const handler = (argv: Yarguments>) => { start(async (cmd, config) => { await deploy(cmd, config, argv.network); diff --git a/packages/neo-one-cli/src/cmd/index.ts b/packages/neo-one-cli/src/cmd/index.ts index fcb7a6ec83..2716f7ce97 100644 --- a/packages/neo-one-cli/src/cmd/index.ts +++ b/packages/neo-one-cli/src/cmd/index.ts @@ -1,5 +1,6 @@ import yargs from 'yargs'; import * as build from './build'; +import * as compile from './compile'; import * as consoleCmd from './console'; import * as convert from './convert'; import * as deploy from './deploy'; @@ -21,4 +22,5 @@ export const builder = (yargsBuilder: typeof yargs) => .command(consoleCmd) .command(deploy) .command(info) + .command(compile) .command(init); diff --git a/packages/neo-one-cli/src/cmd/new/index.ts b/packages/neo-one-cli/src/cmd/new/index.ts index 2d807daedb..95736f76d8 100644 --- a/packages/neo-one-cli/src/cmd/new/index.ts +++ b/packages/neo-one-cli/src/cmd/new/index.ts @@ -2,5 +2,5 @@ import yargs from 'yargs'; import * as privateKey from './privateKey'; export const command = 'new'; -export const describe = 'Create new resources.'; +export const describe = 'Creates new resources.'; export const builder = (yargsBuilder: typeof yargs) => yargsBuilder.command(privateKey); diff --git a/packages/neo-one-cli/src/cmd/start/index.ts b/packages/neo-one-cli/src/cmd/start/index.ts index 2b583d7afa..293bc3a217 100644 --- a/packages/neo-one-cli/src/cmd/start/index.ts +++ b/packages/neo-one-cli/src/cmd/start/index.ts @@ -3,5 +3,6 @@ import * as neotracker from './neotracker'; import * as network from './network'; export const command = 'start'; -export const describe = 'Start NEOβ€’ONE services.'; -export const builder = (yargsBuilder: typeof yargs) => yargsBuilder.command(network).command(neotracker); +export const describe = 'Starts NEOβ€’ONE services.'; +// TODO: neotracker command added back +export const builder = (yargsBuilder: typeof yargs) => yargsBuilder.command(network); /*.command(neotracker)*/ diff --git a/packages/neo-one-cli/src/cmd/start/neotracker.ts b/packages/neo-one-cli/src/cmd/start/neotracker.ts index 380a5851e6..b98a8b55bc 100644 --- a/packages/neo-one-cli/src/cmd/start/neotracker.ts +++ b/packages/neo-one-cli/src/cmd/start/neotracker.ts @@ -8,12 +8,9 @@ import { findKillProcess } from '../../utils'; import { writePidFile } from './writePidFile'; export const command = 'neotracker'; -export const describe = 'Start a NEO tracker instance using the project configuration.'; +export const describe = 'Start a NEO Tracker instance using the project configuration.'; export const builder = (yargsBuilder: typeof yargs) => - yargsBuilder - .boolean('reset') - .describe('reset', 'Reset the NEO tracker database.') - .default('reset', false); + yargsBuilder.boolean('reset').describe('reset', 'Reset the NEO Tracker database.').default('reset', false); export const handler = (argv: Yarguments>) => { start(async (_cmd, config) => { const running = await isRunning(config.neotracker.port); @@ -21,7 +18,7 @@ export const handler = (argv: Yarguments>) => { if (argv.reset) { await findKillProcess('neotracker', config); } else { - cliLogger.info('NEO tracker is already running'); + cliLogger.info('NEO Tracker is already running'); return undefined; } @@ -33,17 +30,28 @@ export const handler = (argv: Yarguments>) => { `${config.neotracker.port}`, '--nodeRpcUrl', `http://localhost:${config.network.port}/rpc`, - '--dbFileName', + '--db.connection.filename', nodePath.resolve(config.neotracker.path, 'db.sqlite'), ]; + + let neotrackerBinPath: string; + try { + neotrackerBinPath = require.resolve('@neotracker/core/bin'); + } catch { + throw new Error( + '@neotracker/core not found. Try adding the @neotracker/core dependency to your ' + + 'project with `yarn add @neotracker/core` or `npm install @neotracker/core`', + ); + } const proc = execa( - nodePath.resolve(require.resolve('@neotracker/core/bin'), '../', 'neotracker'), + nodePath.resolve(neotrackerBinPath, '..', 'neotracker'), argv.reset ? args.concat(['--resetDB']) : args, { cleanup: false, stdio: 'ignore', }, ); + proc.unref(); await writePidFile('neotracker', proc, config); diff --git a/packages/neo-one-cli/src/cmd/start/network.ts b/packages/neo-one-cli/src/cmd/start/network.ts index c284249f26..420440d191 100644 --- a/packages/neo-one-cli/src/cmd/start/network.ts +++ b/packages/neo-one-cli/src/cmd/start/network.ts @@ -24,8 +24,8 @@ export const handler = () => { options: { path: config.network.path, blockchain: createMain({ - address: common.uInt160ToString(crypto.privateKeyToScriptHash(privateKey)), standbyValidators: [common.ecPointToString(publicKey)], + extraCommitteeMembers: [], privateNet: true, }), node: { diff --git a/packages/neo-one-cli/src/cmd/stop/index.ts b/packages/neo-one-cli/src/cmd/stop/index.ts index 0ae748320b..48b344200c 100644 --- a/packages/neo-one-cli/src/cmd/stop/index.ts +++ b/packages/neo-one-cli/src/cmd/stop/index.ts @@ -3,5 +3,6 @@ import * as neotracker from './neotracker'; import * as network from './network'; export const command = 'stop'; -export const describe = 'Stop NEOβ€’ONE services.'; -export const builder = (yargsBuilder: typeof yargs) => yargsBuilder.command(network).command(neotracker); +export const describe = 'Stops NEOβ€’ONE services.'; +// TODO: neotracker command added back +export const builder = (yargsBuilder: typeof yargs) => yargsBuilder.command(network); /*.command(neotracker)*/ diff --git a/packages/neo-one-cli/src/cmd/stop/neotracker.ts b/packages/neo-one-cli/src/cmd/stop/neotracker.ts index 8147aab7ed..fab58f153b 100644 --- a/packages/neo-one-cli/src/cmd/stop/neotracker.ts +++ b/packages/neo-one-cli/src/cmd/stop/neotracker.ts @@ -3,7 +3,7 @@ import { start } from '../../common'; import { findKillProcess } from '../../utils'; export const command = 'neotracker'; -export const describe = 'Stops the local neotracker instance.'; +export const describe = 'Stops the local NEO Tracker instance.'; export const builder = (yargsBuilder: typeof yargs) => yargsBuilder; export const handler = () => { start(async (_cmd, config) => { diff --git a/packages/neo-one-cli/src/common/load.ts b/packages/neo-one-cli/src/common/load.ts index 7a70681391..4babafc62c 100644 --- a/packages/neo-one-cli/src/common/load.ts +++ b/packages/neo-one-cli/src/common/load.ts @@ -1,5 +1,3 @@ -import { register } from 'ts-node'; - const load = async (path: string) => { const value = await import(path); @@ -13,12 +11,4 @@ export const loadJS = async (path: string) => { return load(path); }; -export const loadTS = async (path: string) => { - register({ - compilerOptions: { - module: 'commonjs', - }, - }); - - return load(path); -}; +export const loadTS = load; diff --git a/packages/neo-one-cli/src/compile/compileContract.ts b/packages/neo-one-cli/src/compile/compileContract.ts new file mode 100644 index 0000000000..8104bc81ab --- /dev/null +++ b/packages/neo-one-cli/src/compile/compileContract.ts @@ -0,0 +1,38 @@ +import { common, crypto, scriptHashToAddress, SourceMaps } from '@neo-one/client-common'; +import { compileContract as compileContractInternal, LinkedContracts } from '@neo-one/smart-contract-compiler'; +import { createCompilerHost } from '@neo-one/smart-contract-compiler-node'; +import { DiagnosticCategory } from 'typescript'; + +export const compileContract = async ( + filePath: string, + name: string, + linked: LinkedContracts, + sourceMaps: SourceMaps, +) => { + const contract = compileContractInternal(filePath, name, createCompilerHost(), linked); + if (contract.diagnostics.some((diagnostic) => diagnostic.category === DiagnosticCategory.Error)) { + throw new Error('Compilation error.'); + } + + const address = scriptHashToAddress( + common.uInt160ToString(crypto.toScriptHash(Buffer.from(contract.contract.script, 'hex'))), + ); + + const sourceMap = await contract.sourceMap; + const nextSourceMaps = { + ...sourceMaps, + [address]: sourceMap, + }; + + return { + contract, + sourceMap, + sourceMaps: nextSourceMaps, + linked: { + ...linked, + [filePath]: { + [name]: address, + }, + }, + }; +}; diff --git a/packages/neo-one-cli/src/compile/createTasks.ts b/packages/neo-one-cli/src/compile/createTasks.ts new file mode 100644 index 0000000000..fb91d24f35 --- /dev/null +++ b/packages/neo-one-cli/src/compile/createTasks.ts @@ -0,0 +1,45 @@ +// tslint:disable no-object-mutation +import { Contracts } from '@neo-one/smart-contract-compiler'; +import Listr from 'listr'; +import { compileContract } from './compileContract'; +import { findContracts } from './findContracts'; +import { CompileWriteOptions, writeContract } from './writeContract'; + +export const createTasks = (path: string, outDir: string, options: CompileWriteOptions) => + new Listr([ + { + title: 'Find Contracts', + task: async (ctx) => { + const contracts = await findContracts(path); + + ctx.foundContracts = contracts; + }, + }, + { + title: 'Compile Contracts', + task: (ctx) => { + ctx.linked = {}; + ctx.sourceMaps = {}; + ctx.contracts = []; + + return new Listr( + (ctx.foundContracts as Contracts).map((contract) => ({ + title: `Compile ${contract.name}`, + task: async (innerCtx) => { + const { linked, sourceMaps, contract: result } = await compileContract( + contract.filePath, + contract.name, + innerCtx.linked, + innerCtx.sourceMaps, + ); + + await writeContract(contract.filePath, result, outDir, options); + + innerCtx.linked = linked; + innerCtx.sourceMaps = sourceMaps; + }, + })), + ); + }, + }, + ]); diff --git a/packages/neo-one-cli/src/compile/findContracts.ts b/packages/neo-one-cli/src/compile/findContracts.ts new file mode 100644 index 0000000000..bbff040f7a --- /dev/null +++ b/packages/neo-one-cli/src/compile/findContracts.ts @@ -0,0 +1,4 @@ +import { Contracts, scan } from '@neo-one/smart-contract-compiler'; +import { createCompilerHost } from '@neo-one/smart-contract-compiler-node'; + +export const findContracts = async (path: string): Promise => scan(path, createCompilerHost()); diff --git a/packages/neo-one-cli/src/compile/index.ts b/packages/neo-one-cli/src/compile/index.ts new file mode 100644 index 0000000000..17d07ddf00 --- /dev/null +++ b/packages/neo-one-cli/src/compile/index.ts @@ -0,0 +1 @@ +export * from './createTasks'; diff --git a/packages/neo-one-cli/src/compile/interop.ts b/packages/neo-one-cli/src/compile/interop.ts new file mode 100644 index 0000000000..362ee538b5 --- /dev/null +++ b/packages/neo-one-cli/src/compile/interop.ts @@ -0,0 +1,100 @@ +import { ContractABI } from '@neo-one/client'; +import { common, crypto } from '@neo-one/client-common'; + +const jmpABI = { + name: '@Jmp', + parameters: [ + { + name: 'operation', + type: 'String', + }, + { name: 'args', type: 'Array' }, + ], + returntype: 'ByteArray', +}; +const dispatcherABI = { + name: '@Dispatcher', + parameters: [ + { + name: 'operation', + type: 'String', + }, + { + name: 'args', + type: 'Array', + }, + ], + returntype: 'ByteArray', +}; + +const getJmpMethodDefinition = (contractName: string) => ({ + name: `${contractName},@Jmp`, + id: '0', + range: `0-2`, + params: ['operation,String', 'args,Array'], + return: '', + variables: [], + 'sequence-points': [], +}); + +const getDispatcherMethodDefinition = (contractName: string, jumpAddress: number, finalAddress: number) => ({ + name: `${contractName},@Dispatcher`, + id: '1', + range: `${jumpAddress}-${finalAddress}`, + params: ['operation,String', 'args,Array'], + return: '', + variables: [], + 'sequence-points': [], +}); + +interface NEOONEContractMetadata { + readonly name: string; + readonly description: string; + readonly codeVersion: string; + readonly author: string; + readonly email: string; + readonly storage: boolean; + readonly dynamicInvoke: boolean; + readonly payable: boolean; +} + +const convertABIMetadata = (metadata: NEOONEContractMetadata) => ({ + title: metadata.name, + description: metadata.description, + version: metadata.codeVersion, + author: metadata.author, + email: metadata.email, + 'has-storage': metadata.storage, + 'has-dynamic-invoke': metadata.dynamicInvoke, + 'is-payable': metadata.payable, +}); + +const convertABI = (abi: ContractABI, metadata: NEOONEContractMetadata, script: Buffer) => ({ + hash: common.uInt160ToHex(crypto.toScriptHash(script)), + entrypoint: '@Jmp', + functions: [ + jmpABI, + dispatcherABI, + ...abi.methods.map((func) => ({ + name: func.name, + parameters: func.parameters + ? func.parameters.map(({ name, type }) => ({ + name, + type, + })) + : [], + returntype: func.returnType, + })), + ], + events: abi.events.map((event) => ({ + name: event.name, + parameters: event.parameters.map(({ name, type }) => ({ + name, + type, + })), + returntype: 'Void', + })), + metadata: convertABIMetadata(metadata), +}); + +export { getJmpMethodDefinition, getDispatcherMethodDefinition, convertABI }; diff --git a/packages/neo-one-cli/src/compile/writeContract.ts b/packages/neo-one-cli/src/compile/writeContract.ts new file mode 100644 index 0000000000..26a45f39b6 --- /dev/null +++ b/packages/neo-one-cli/src/compile/writeContract.ts @@ -0,0 +1,166 @@ +import { disassembleByteCode } from '@neo-one/node-core'; +import { CompileContractResult } from '@neo-one/smart-contract-compiler'; +import { utils } from '@neo-one/utils'; +import fs from 'fs-extra'; +import JSZip from 'jszip'; +import _ from 'lodash'; +import path from 'path'; +import { SourceMapConsumer } from 'source-map'; +import { convertABI, getDispatcherMethodDefinition, getJmpMethodDefinition } from './interop'; + +export interface CompileWriteOptions { + readonly json: boolean; + readonly avm: boolean; + readonly debug: boolean; + readonly opcodes: boolean; +} + +const getJumpLength = (value: string): number => { + const [, unknownOp] = value.split(':'); + const [op, arg] = unknownOp.split(' '); + if (op !== 'JMP') { + throw new Error(`${unknownOp} is not a JMP call`); + } + + return Number(arg); +}; + +export const writeContract = async ( + filePath: string, + contractIn: CompileContractResult, + outDir: string, + { json: jsonFlag, avm: avmFlag, debug: debugFlag, opcodes: opcodesFlag }: CompileWriteOptions, +) => { + await fs.ensureDir(outDir); + const outputPath = path.resolve(outDir, `${contractIn.contract.name}.contract.json`); + + const { sourceMap: sourceMapPromise, debugInfo, contract, abi } = contractIn; + + const sourceMap = await sourceMapPromise; + + if (jsonFlag) { + const contractJSON = JSON.stringify(contract, undefined, 2); + await Promise.all([ + fs.writeFile(outputPath.replace('.contract.json', '.neoone.abi.json'), JSON.stringify(abi, undefined, 2)), + fs.writeFile(outputPath, contractJSON), + ]); + } + + const byteCode = Buffer.from(contract.script, 'hex'); + if (avmFlag) { + await Promise.all([ + fs.writeFile(outputPath.replace('.contract.json', '.avm'), byteCode), + fs.writeFile( + outputPath.replace('.contract.json', '.abi.json'), + JSON.stringify(convertABI(abi, contract, byteCode), undefined, 2), + ), + ]); + } + + if (debugFlag) { + if (Object.keys(debugInfo).length < 1) { + throw new Error('no method mappings were returned from compilation'); + } + + const disassembled = disassembleByteCode(byteCode); + const jmpAddress = getJumpLength(disassembled[0].value); + const endAddress = disassembled[disassembled.length - 1].pc; + + const jmpMethod = getJmpMethodDefinition(contract.name); + const dispatcherMethod = getDispatcherMethodDefinition(contract.name, jmpAddress, endAddress); + + const getMethodRanges = (consumer: SourceMapConsumer, line: number) => + consumer + .allGeneratedPositionsFor({ + source: filePath, + line, + column: undefined, + // tslint:disable-next-line: no-any column doesn't have to be defined + } as any) + .map(({ line: lineOut }) => { + if (lineOut !== null) { + return Number(disassembled[lineOut - 1].pc); + } + throw new Error('Unexpected error mapping source code'); + }) + .sort((a: number, b: number) => (a === b ? 0 : a > b ? 1 : -1)) + .filter((value) => value < jmpAddress); + + const methods = await SourceMapConsumer.with( + sourceMap, + // tslint:disable-next-line: no-null-keyword + null, + async (consumer) => + debugInfo.methods + .map(({ name, params, returnType, range: originalRange }, index) => { + const methodRange = getMethodRanges(consumer, originalRange[0] + 1); + if (methodRange.length === 0) { + return undefined; + // a few cases don't generate sourcemaps that we can process like top-level readonly storage + // throw new Error(`Error generating debug information, no map found for method: ${name}`); + } + + const range = [methodRange[0], methodRange[methodRange.length - 1]]; + const sequencePoints = _.range(originalRange[0] + 1, originalRange[1] + 1).reduce((acc, line) => { + const generatedRanges = getMethodRanges(consumer, line); + if (generatedRanges.length === 0) { + return acc; + } + + const start = generatedRanges[0]; + + return acc.concat(`${start}[0]${line}:0-${line}:0`); + }, []); + + return { + id: `${index + 2}`, + name: `${contract.name},${name}`, + range: `${range[0]}-${range[1]}`, + params, + return: returnType, + variables: [], + 'sequence-points': sequencePoints, + }; + }) + .filter(utils.notNull), + ); + + const lastID = methods.length < 1 ? 2 : Number(methods[methods.length - 1].id) + 1; + const debugJSON = { + entrypoint: '0', + documents: debugInfo.documents, + methods: [jmpMethod, dispatcherMethod, ...methods], + events: abi.events + ? abi.events.map((event, index) => ({ + id: `${lastID + index}`, + name: `${contract.name}-${event.name}`, + params: event.parameters.map((param) => `${param.name},${param.type}`), + })) + : [], + }; + + if (avmFlag) { + const zip = new JSZip(); + zip.file<'text'>(`${contract.name}.debug.json`, JSON.stringify(debugJSON, undefined, 2)); + await new Promise((resolve) => + zip + .generateNodeStream({ type: 'nodebuffer', streamFiles: true }) + .pipe(fs.createWriteStream(outputPath.replace('.contract.json', '.avmdbgnfo'))) + .on('finish', () => { + resolve(); + }), + ); + } + + if (jsonFlag) { + await fs.writeFile(outputPath.replace('.contract.json', '.debug.json'), JSON.stringify(debugJSON, undefined, 2)); + } + + if (opcodesFlag) { + await fs.writeFile( + outputPath.replace('.contract.json', '.avm.txt'), + disassembled.reduce((acc, op) => `${acc}${op.value.split(':').join(' ')}\n`, ''), + ); + } + } +}; diff --git a/packages/neo-one-cli/src/console/startConsole.ts b/packages/neo-one-cli/src/console/startConsole.ts index 6dffc23854..816e83a2fb 100644 --- a/packages/neo-one-cli/src/console/startConsole.ts +++ b/packages/neo-one-cli/src/console/startConsole.ts @@ -1,6 +1,6 @@ // tslint:disable no-console import { Configuration } from '@neo-one/cli-common'; -import { Hash256 } from '@neo-one/client-core'; +import { Hash160 } from '@neo-one/client-core'; import BigNumber from 'bignumber.js'; import repl from 'repl'; import { loadClient } from '../common'; @@ -33,7 +33,7 @@ export const startConsole = async (config: Configuration, networks: readonly str addProperty('BigNumber', BigNumber); addProperty('print', console.log.bind(console)); addProperty('printError', console.error.bind(console)); - addProperty('Hash256', Hash256); + addProperty('Hash160', Hash160); return () => { replServer.close(); diff --git a/packages/neo-one-cli/src/deploy/runMigration.ts b/packages/neo-one-cli/src/deploy/runMigration.ts index 9634e2ba7a..06da26ac80 100644 --- a/packages/neo-one-cli/src/deploy/runMigration.ts +++ b/packages/neo-one-cli/src/deploy/runMigration.ts @@ -37,7 +37,7 @@ export const runMigration = async ( let contracts: Contracts = _.fromPairs( Object.entries(nameToContract).map(([name, contract]) => [ name, - client.smartContract({ abi: contract.abi, networks: {} }), + client.smartContract({ manifest: contract.manifest, networks: {} }), ]), ); @@ -46,7 +46,7 @@ export const runMigration = async ( Object.entries(nameToContract).map(([name, contract]) => [ name, _.fromPairs( - contract.abi.functions.map((func) => [ + contract.manifest.abi.methods.map((func) => [ func.name, (...args: any[]) => { const { requiredArgs, forwardOptions, options, transfer, hash } = getParamAndOptionsResults({ @@ -125,7 +125,7 @@ export const runMigration = async ( const params = await Promise.all(action.params); const result = await client.publishAndDeploy( contract.contract, - contract.abi, + contract.manifest, params, { ...(action.options === undefined ? {} : action.options), @@ -144,7 +144,7 @@ export const runMigration = async ( contracts = { ...contracts, [action.contract]: client.smartContract({ - abi: contract.abi, + manifest: contract.manifest, networks: { [network]: { address: receipt.result.value.address, diff --git a/packages/neo-one-cli/src/index.ts b/packages/neo-one-cli/src/index.ts index ada9af4c7e..5dbdc40f82 100644 --- a/packages/neo-one-cli/src/index.ts +++ b/packages/neo-one-cli/src/index.ts @@ -5,4 +5,4 @@ import * as cmd from './cmd'; export { cmd }; -export { defaultNetworks } from '@neo-one/cli-common-node'; +export { createUserAccountProviderFunc, defaultNetworks } from '@neo-one/cli-common-node'; diff --git a/packages/neo-one-cli/src/utils/writeFile.ts b/packages/neo-one-cli/src/utils/writeFile.ts index f1ff2037ef..ae9d9e69a9 100644 --- a/packages/neo-one-cli/src/utils/writeFile.ts +++ b/packages/neo-one-cli/src/utils/writeFile.ts @@ -9,9 +9,7 @@ export const writeFile = async (filePath: string, contents?: string) => { } const exists = await fs.pathExists(filePath); - const hash = createHash('md5') - .update(contents) - .digest('hex'); + const hash = createHash('md5').update(contents).digest('hex'); if (exists) { const currentContents = await fs.readFile(filePath, 'utf8'); const match = hashRegex.exec(currentContents); diff --git a/packages/neo-one-cli/tsconfig.json b/packages/neo-one-cli/tsconfig.json new file mode 100644 index 0000000000..c8fcb75605 --- /dev/null +++ b/packages/neo-one-cli/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json", + "exclude": ["./src/__data__/projects/*/contracts/**/*.ts", "./src/__data__/projects/*/neo-one/contracts/**/*.ts"] +} diff --git a/packages/neo-one-cli/tsconfig.lint.json b/packages/neo-one-cli/tsconfig.lint.json new file mode 100644 index 0000000000..4e57edf133 --- /dev/null +++ b/packages/neo-one-cli/tsconfig.lint.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["src/__data__/projects/**/*"] +} diff --git a/packages/neo-one-client-common/.npmignore b/packages/neo-one-client-common/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-client-common/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-client-common/CHANGELOG.json b/packages/neo-one-client-common/CHANGELOG.json new file mode 100644 index 0000000000..200472c2f3 --- /dev/null +++ b/packages/neo-one-client-common/CHANGELOG.json @@ -0,0 +1,109 @@ +{ + "name": "@neo-one/client-common", + "entries": [ + { + "version": "3.0.0", + "tag": "@neo-one/client-common_v3.0.0", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "major": [ + { + "comment": "3.0.0preview3-alpha release bump" + } + ], + "none": [ + { + "comment": "3.0.0preview3.1 release bump" + }, + { + "comment": "Update elliptic dependency." + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/client-common_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Add appropriate @types dependencies." + }, + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + } + ] + } + }, + { + "version": "2.6.0", + "tag": "@neo-one/client-common_v2.6.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/client-common_v2.5.0", + "date": "Thu, 23 Apr 2020 20:37:45 GMT", + "comments": { + "minor": [ + { + "comment": "Added types to support NEODataProvider & C# node" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/client-common_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "patch": [ + { + "comment": "update dependencies" + }, + { + "comment": "update scrypt-js to 3.0.0" + } + ], + "minor": [ + { + "comment": "Migrate to Rush" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-client-common/CHANGELOG.md b/packages/neo-one-client-common/CHANGELOG.md index 33539bd8c2..7cdfe5c92c 100644 --- a/packages/neo-one-client-common/CHANGELOG.md +++ b/packages/neo-one-client-common/CHANGELOG.md @@ -1,158 +1,54 @@ -# Change Log +# Change Log - @neo-one/client-common -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-common@1.4.3...@neo-one/client-common@2.3.0) (2019-10-23) +## 3.0.0 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/client-common +### Breaking changes +- 3.0.0preview3-alpha release bump +### Updates +- 3.0.0preview3.1 release bump +- Update elliptic dependency. +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT -## [1.4.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-common@1.4.2...@neo-one/client-common@1.4.3) (2019-10-23) +### Patches -**Note:** Version bump only for package @neo-one/client-common +- Add appropriate @types dependencies. +- Upgrade TypeScript from v3.8.3 to v3.9.5 +### Updates +- bump package version for future release clarity +## 2.6.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes -## [1.4.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-common@1.4.1...@neo-one/client-common@1.4.2) (2019-09-04) +- update package release process to take better advantage of rush tooling -**Note:** Version bump only for package @neo-one/client-common +## 2.5.0 +Thu, 23 Apr 2020 20:37:45 GMT +### Minor changes +- Added types to support NEODataProvider & C# node +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT +### Minor changes -## [1.4.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-common@1.4.0...@neo-one/client-common@1.4.1) (2019-08-30) +- Migrate to Rush -**Note:** Version bump only for package @neo-one/client-common +### Patches +- update dependencies +- update scrypt-js to 3.0.0 - - - -# [1.4.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-common@1.3.0...@neo-one/client-common@1.4.0) (2019-08-22) - - -### Features - -* **monitor:** remove @neo-one/monitor. replace with opencensus, pino, and debug ([#1597](https://github.com/neo-one-suite/neo-one/issues/1597)) ([4b1a28f](https://github.com/neo-one-suite/neo-one/commit/4b1a28f)) - - - - - -# [1.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-common@1.2.1...@neo-one/client-common@1.3.0) (2019-07-29) - - -### Features - -* **client:** rewrite binary writer ([3c70708](https://github.com/neo-one-suite/neo-one/commit/3c70708)) -* **DapiUserAccountProvider:** Implement DapiUserAccountProvider for the dapi NEP ([afdd119](https://github.com/neo-one-suite/neo-one/commit/afdd119)) - - - - - -## [1.2.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-common@1.2.0...@neo-one/client-common@1.2.1) (2019-06-20) - - -### Bug Fixes - -* **@neo-one/node-vm:** Remove GetClaimReferences ([6ab91a7](https://github.com/neo-one-suite/neo-one/commit/6ab91a7)), closes [#1412](https://github.com/neo-one-suite/neo-one/issues/1412) -* **deps:** update dependency typescript to v3.5.1 ([#1365](https://github.com/neo-one-suite/neo-one/issues/1365)) ([ec89546](https://github.com/neo-one-suite/neo-one/commit/ec89546)) -* **node:** First wave of node fixes ([d50fd34](https://github.com/neo-one-suite/neo-one/commit/d50fd34)) - - - - - -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-common@1.1.2...@neo-one/client-common@1.2.0) (2019-06-04) - - -### Bug Fixes - -* **@neo-one/types:** eliminate global types from @neo-one/types ([004330d](https://github.com/neo-one-suite/neo-one/commit/004330d)) -* **deps:** update misc dependencies ([0c9bdde](https://github.com/neo-one-suite/neo-one/commit/0c9bdde)) - - -### Features - -* **client:** Add HDKeyStore ([c09b44f](https://github.com/neo-one-suite/neo-one/commit/c09b44f)) -* **client:** HDKeyStore testing ([8f925d4](https://github.com/neo-one-suite/neo-one/commit/8f925d4)) -* **RemoteUserAccountProvider:** Base implementation for RemoteUserAccountProvider + Receiver ([3c57f24](https://github.com/neo-one-suite/neo-one/commit/3c57f24)) - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-common@1.1.1...@neo-one/client-common@1.1.2) (2019-04-12) - -**Note:** Version bump only for package @neo-one/client-common - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-common@1.1.0...@neo-one/client-common@1.1.1) (2019-03-27) - - -### Bug Fixes - -* **deps:** update dependency bignumber.js to v8.1.1 ([2d6f93a](https://github.com/neo-one-suite/neo-one/commit/2d6f93a)) -* **jest:** fix a flaky crypto test - createKeyPair ([cd1e029](https://github.com/neo-one-suite/neo-one/commit/cd1e029)) - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-common@1.0.2...@neo-one/client-common@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/client-common - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-common@1.0.2-alpha.0...@neo-one/client-common@1.0.2) (2019-02-21) - -**Note:** Version bump only for package @neo-one/client-common - - - - - -## [1.0.2-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-common@1.0.1...@neo-one/client-common@1.0.2-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **@neo-one/client-common:** fix circular dependency with crypto ([e2e1751](https://github.com/neo-one-suite/neo-one/commit/e2e1751)) -* **build:** adjust several packages to allow emitting .d.ts files. ([27a2d88](https://github.com/neo-one-suite/neo-one/commit/27a2d88)) -* **deps:** update dependency @neo-one/ec-key to ^0.0.4 ([4c2f7eb](https://github.com/neo-one-suite/neo-one/commit/4c2f7eb)) -* **deps:** update dependency @types/bs58 to v4 ([1423cc5](https://github.com/neo-one-suite/neo-one/commit/1423cc5)) -* **deps:** update dependency @types/elliptic to v6.4.2 ([af313d4](https://github.com/neo-one-suite/neo-one/commit/af313d4)) -* **deps:** update dependency @types/lodash to v4.14.120 ([a76dae7](https://github.com/neo-one-suite/neo-one/commit/a76dae7)) -* **deps:** update dependency @types/scrypt-js to v2.0.2 ([792e44a](https://github.com/neo-one-suite/neo-one/commit/792e44a)) -* **deps:** update dependency hash.js to v1.1.7 ([c86b627](https://github.com/neo-one-suite/neo-one/commit/c86b627)) -* **deps:** update dependency rxjs to v6.4.0 ([e28af2a](https://github.com/neo-one-suite/neo-one/commit/e28af2a)) -* **types:** adjust 'scrypt-js' callback usage ([5dace62](https://github.com/neo-one-suite/neo-one/commit/5dace62)) - - -### Features - -* **@neo-one/client:** Add iterStorage to NEOONEDataProvider ([0797f74](https://github.com/neo-one-suite/neo-one/commit/0797f74)) -* **@neo-one/node-vm:** hash syscalls ([9c7f378](https://github.com/neo-one-suite/neo-one/commit/9c7f378)) -* **node:** record storage changes for each transaction ([22ef835](https://github.com/neo-one-suite/neo-one/commit/22ef835)) - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-common@1.0.0...@neo-one/client-common@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/client-common diff --git a/packages/neo-one-client-common/gulpfile.js b/packages/neo-one-client-common/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-client-common/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-client-common/package.json b/packages/neo-one-client-common/package.json index 4cee5eded3..6329fda88a 100644 --- a/packages/neo-one-client-common/package.json +++ b/packages/neo-one-client-common/package.json @@ -1,33 +1,45 @@ { "name": "@neo-one/client-common", - "version": "2.3.0", + "version": "3.0.0", "description": "NEOβ€’ONE client common code.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { "@neo-one/ec-key": "^0.1.0", - "@neo-one/utils": "^2.3.0", + "@neo-one/utils": "^3.0.0", + "@types/bn.js": "^4.11.5", "bignumber.js": "^9.0.0", "bn.js": "^5.0.0", "bs58": "^4.0.1", "buffer-xor": "^2.0.2", - "elliptic": "^6.5.0", + "elliptic": "^6.5.3", "hash.js": "^1.1.7", "lodash": "^4.17.15", - "rxjs": "^6.5.2", + "rxjs": "^6.5.3", "safe-stable-stringify": "^1.1.0", - "scrypt-js": "^2.0.4", + "scrypt-js": "^2.0.3", "source-map": "^0.7.3", "tslib": "^1.10.0", "wif": "^2.0.6" }, "devDependencies": { - "@types/bn.js": "^4.11.5", + "@neo-one/build-tools": "^1.0.0", "@types/bs58": "^4.0.0", "@types/buffer-xor": "^2.0.0", - "@types/elliptic": "^6.4.9", + "@types/elliptic": "^6.4.12", + "@types/jest": "^24.0.18", "@types/lodash": "^4.14.138", + "@types/node": "^12.7.7", "@types/scrypt-js": "^2.0.3", - "@types/wif": "^2.0.1" - }, - "sideEffects": false + "@types/wif": "^2.0.1", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-client-common/src/BaseScriptBuilder.ts b/packages/neo-one-client-common/src/BaseScriptBuilder.ts new file mode 100644 index 0000000000..db7d5ed0dc --- /dev/null +++ b/packages/neo-one-client-common/src/BaseScriptBuilder.ts @@ -0,0 +1,170 @@ +import { BN } from 'bn.js'; +import { common, ECPoint, UInt160, UInt256 } from './common'; +import { InvalidJumpError } from './errors'; +import { ByteBuffer, ByteCode, Op, OpCode } from './models/vm'; +import { utils } from './utils'; + +const sbyteMaxValue = 127; +const sbyteMinValue = -128; + +const isEvenOp = (op: OpCode) => Op[op] % 2 === 0; +const isOutOfBoundsOffset = (offset: number) => offset < sbyteMinValue || offset > sbyteMaxValue; + +/* BaseScriptBuilder should stay as close to the C# `neo-vm` implementation as possible */ +export class BaseScriptBuilder { + public get buffers(): readonly Buffer[] { + return this.mutableBuffers; + } + private readonly mutableBuffers: Buffer[]; + + public constructor() { + this.mutableBuffers = []; + } + + public emitOp(op: OpCode, buffer?: Buffer | undefined): this { + this.emitOpByte(Op[op], buffer); + + return this; + } + + public emitOpByte(byteCode: ByteCode, buffer?: Buffer | undefined): this { + const byteCodeBuffer = ByteBuffer[byteCode]; + this.emitRaw(byteCodeBuffer); + this.emitRaw(buffer); + + return this; + } + + public emitCall(offset: number): this { + if (isOutOfBoundsOffset(offset)) { + return this.emitOp('CALL_L', utils.toSignedBuffer(new BN(offset))); + } + + return this.emitOp('CALL', Buffer.from([offset])); + } + + public emitJump(op: OpCode, offset: number) { + if (Op[op] < Op.JMP || Op[op] > Op.JMPLE_L) { + throw new InvalidJumpError(op); + } + if (isEvenOp(op)) { + if (isOutOfBoundsOffset(offset)) { + return this.emitOpByte(Op[op] + 1, utils.toSignedBuffer(new BN(offset))); + } + + return this.emitOp(op, Buffer.from([offset])); + } + + return this.emitOp(op, utils.toSignedBuffer(new BN(offset))); + } + + public emitPush(value: Buffer): this { + if (value.length < 0x100) { + this.emitOp('PUSHDATA1'); + this.emitUInt8(value.length); + this.emitRaw(value); + } else if (value.length < 0x10000) { + this.emitOp('PUSHDATA2'); + this.emitUInt16LE(value.length); + this.emitRaw(value); + } else if (value.length < 0x100000000) { + this.emitOp('PUSHDATA4'); + this.emitUInt32LE(value.length); + this.emitRaw(value); + } else { + /* istanbul ignore next */ + throw new Error('Invalid buffer length'); + } + + return this; + } + + public emitPushInt(valueIn: number | BN): this { + const value = new BN(valueIn); + if (value.gte(utils.NEGATIVE_ONE) && value.lte(utils.SIXTEEN)) { + return this.emitOpByte(Op.PUSH0 + value.toNumber()); + } + const data = utils.toSignedBuffer(value); + if (data.length === 1) { + return this.emitOp('PUSHINT8', data); + } + if (data.length === 2) { + return this.emitOp('PUSHINT16', data); + } + if (data.length <= 4) { + return this.emitOp('PUSHINT32', value.toArrayLike(Buffer, 'le', 4)); + } + if (data.length <= 8) { + return this.emitOp('PUSHINT64', value.toArrayLike(Buffer, 'le', 8)); + } + if (data.length <= 16) { + return this.emitOp('PUSHINT128', value.toArrayLike(Buffer, 'le', 16)); + } + if (data.length <= 32) { + return this.emitOp('PUSHINT256', value.toArrayLike(Buffer, 'le', 32)); + } + throw new Error('Invalid buffer length'); + } + + public emitPushBoolean(value: boolean): this { + return this.emitOp(value ? 'PUSH1' : 'PUSH0'); + } + + public emitPushString(value: string): this { + return this.emitPush(Buffer.from(value, 'utf8')); + } + + public emitRaw(buffer?: Buffer | undefined): this { + if (buffer !== undefined) { + this.mutableBuffers.push(buffer); + } + + return this; + } + + public emitUInt8(value: number): this { + const buff = Buffer.allocUnsafe(1); + buff.writeUInt8(value, 0); + + return this.emitRaw(buff); + } + + public emitUInt16LE(value: number): this { + const buff = Buffer.allocUnsafe(2); + buff.writeUInt16LE(value, 0); + + return this.emitRaw(buff); + } + + public emitInt16LE(value: number): this { + const buff = Buffer.allocUnsafe(2); + buff.writeInt16LE(value, 0); + + return this.emitRaw(buff); + } + + public emitUInt32LE(value: number): this { + const buff = Buffer.allocUnsafe(4); + buff.writeUInt32LE(value, 0); + + return this.emitRaw(buff); + } + + public emitPushUInt160(value: UInt160): this { + return this.emitPush(common.uInt160ToBuffer(value)); + } + public emitPushUInt256(value: UInt256): this { + return this.emitPush(common.uInt256ToBuffer(value)); + } + public emitPushECPoint(ecPoint: ECPoint): this { + return this.emitPush(common.ecPointToBuffer(ecPoint)); + } + + public build(): Buffer { + return Buffer.concat(this.mutableBuffers); + } + + protected emitSysCallInternal(hash: Buffer) { + return this.emitOp('SYSCALL', hash); + } +} diff --git a/packages/neo-one-client-common/src/IOHelper.ts b/packages/neo-one-client-common/src/IOHelper.ts index 06205045b6..0b297a4ed0 100644 --- a/packages/neo-one-client-common/src/IOHelper.ts +++ b/packages/neo-one-client-common/src/IOHelper.ts @@ -66,6 +66,7 @@ export const IOHelper = { sizeOfUInt32LE, sizeOfUInt64LE, sizeOfVarBytesLE, + sizeOfVarUIntLE, sizeOfVarString, sizeOfFixedString, sizeOfArray, diff --git a/packages/neo-one-client-common/src/JSONHelper.ts b/packages/neo-one-client-common/src/JSONHelper.ts index eca12fc98b..abdfc8b812 100644 --- a/packages/neo-one-client-common/src/JSONHelper.ts +++ b/packages/neo-one-client-common/src/JSONHelper.ts @@ -18,4 +18,6 @@ export const JSONHelper = { readECPoint: (value: string): ECPoint => common.stringToECPoint(value), writeBuffer: (value: Buffer): string => value.toString('hex'), readBuffer: (value: string): Buffer => Buffer.from(value, 'hex'), + writeBase64Buffer: (value: Buffer): string => value.toString('base64'), + readBase64Buffer: (value: string): Buffer => Buffer.from(value, 'base64'), }; diff --git a/packages/neo-one-client-common/src/ScriptBuilder.ts b/packages/neo-one-client-common/src/ScriptBuilder.ts index 7088a25073..8c197bd497 100644 --- a/packages/neo-one-client-common/src/ScriptBuilder.ts +++ b/packages/neo-one-client-common/src/ScriptBuilder.ts @@ -1,17 +1,14 @@ -import { BN } from 'bn.js'; -import { BinaryWriter } from './BinaryWriter'; -import { common, ECPoint, UInt160, UInt256 } from './common'; -import { ByteBuffer, ByteCode, Op, OpCode, SysCallName } from './models/vm'; +import { BaseScriptBuilder } from './BaseScriptBuilder'; +import { common, UInt160 } from './common'; +import { getSysCallHash, SysCallName } from './models/vm'; import { scriptBuilderParamTo } from './paramUtils'; import { ScriptBuilderParam, ScriptBuilderParamToCallbacks } from './types'; -import { utils } from './utils'; -export class ScriptBuilder { - private readonly mutableBuffers: Buffer[]; +export class ScriptBuilder extends BaseScriptBuilder { private readonly pushParamCallbacks: ScriptBuilderParamToCallbacks; public constructor() { - this.mutableBuffers = []; + super(); this.pushParamCallbacks = { undefined: () => this.emitPush(Buffer.alloc(0, 0)), @@ -29,123 +26,53 @@ export class ScriptBuilder { }; } - public get buffers(): readonly Buffer[] { - return this.mutableBuffers; + public emitPushParam(param: ScriptBuilderParam): this { + return scriptBuilderParamTo(param, this.pushParamCallbacks); } - public emitPush(value: Buffer): this { - if (value.length <= Op.PUSHBYTES75) { - this.emitOpByte(value.length, value); - } else if (value.length < 0x100) { - this.emitOp('PUSHDATA1'); - this.emitUInt8(value.length); - this.emit(value); - } else if (value.length < 0x10000) { - this.emitOp('PUSHDATA2'); - this.emitUInt16LE(value.length); - this.emit(value); - } else if (value.length < 0x100000000) { - this.emitOp('PUSHDATA4'); - this.emitUInt32LE(value.length); - this.emit(value); - } else { - /* istanbul ignore next */ - throw new Error('Invalid buffer length'); + // tslint:disable-next-line readonly-array + public emitPushParams(...params: ScriptBuilderParam[]): this { + // tslint:disable-next-line no-loop-statement + for (let i = params.length - 1; i >= 0; i -= 1) { + this.emitPushParam(params[i]); } return this; } - public emitUInt8(value: number): this { - const buff = Buffer.allocUnsafe(1); - buff.writeUInt8(value, 0); - - return this.emit(buff); - } - - public emitUInt16LE(value: number): this { - const buff = Buffer.allocUnsafe(2); - buff.writeUInt16LE(value, 0); - - return this.emit(buff); - } - - public emitInt16LE(value: number): this { - const buff = Buffer.allocUnsafe(2); - buff.writeInt16LE(value, 0); - - return this.emit(buff); - } - - public emitUInt32LE(value: number): this { - const buff = Buffer.allocUnsafe(4); - buff.writeUInt32LE(value, 0); - - return this.emit(buff); - } - - public emitPushInt(valueIn: number | BN): this { - const value = new BN(valueIn); - if (value.eq(utils.NEGATIVE_ONE)) { - return this.emitOp('PUSHM1'); - } - - if (value.eq(utils.ZERO)) { - return this.emitOp('PUSH0'); - } - - if (value.gt(utils.ZERO) && value.lt(utils.SIXTEEN)) { - return this.emitOpByte(Op.PUSH1 - 1 + value.toNumber()); - } - - return this.emitPush(utils.toSignedBuffer(value)); - } + // tslint:disable-next-line readonly-array + public emitSysCall(sysCall: SysCallName, ...params: ScriptBuilderParam[]): this { + this.emitPushParams(...params); + const hash = getSysCallHash(sysCall); - public emitPushUInt160(value: UInt160): this { - return this.emitPush(common.uInt160ToBuffer(value)); + return this.emitSysCallInternal(hash); } - public emitPushUInt256(value: UInt256): this { - return this.emitPush(common.uInt256ToBuffer(value)); - } + public emitPushArray(params: readonly ScriptBuilderParam[]): this { + this.emitPushParams(...params); + this.emitPushParam(params.length); - public emitPushECPoint(ecPoint: ECPoint): this { - return this.emitPush(common.ecPointToBuffer(ecPoint)); + return params.length !== 0 ? this.emitOp('PACK') : this.emitOp('NEWARRAY'); } - public emitPushString(value: string): this { - return this.emitPush(Buffer.from(value, 'utf8')); - } + // tslint:disable-next-line readonly-array + public emitAppCallInvocation(operation: string, ...params: ScriptBuilderParam[]): this { + this.emitPushArray(params); - public emitPushBoolean(value: boolean): this { - return this.emitOp(value ? 'PUSH1' : 'PUSH0'); + return this.emitPushParam(operation); } - public emitOp(op: OpCode, buffer?: Buffer | undefined): this { - this.emitOpByte(Op[op], buffer); + public emitAppCallVerification(scriptHash: UInt160): this { + this.emitPushParam(common.uInt160ToBuffer(scriptHash)); - return this; - } - - public emitPushParam(param: ScriptBuilderParam): this { - return scriptBuilderParamTo(param, this.pushParamCallbacks); + return this.emitSysCall('System.Contract.Call'); } // tslint:disable-next-line readonly-array - public emitPushParams(...params: ScriptBuilderParam[]): this { - // tslint:disable-next-line no-loop-statement - for (let i = params.length - 1; i >= 0; i -= 1) { - this.emitPushParam(params[i]); - } - - return this; - } - - public emitPushArray(params: readonly ScriptBuilderParam[]): this { - this.emitPushParams(...params); - this.emitPushParam(params.length); + public emitAppCall(scriptHash: UInt160, operation: string, ...params: ScriptBuilderParam[]): this { + this.emitAppCallInvocation(operation, ...params); - return this.emitOp('PACK'); + return this.emitAppCallVerification(scriptHash); } public emitPushMap(params: ReadonlyMap): this { @@ -172,58 +99,9 @@ export class ScriptBuilder { return this; } - // tslint:disable-next-line readonly-array - public emitAppCallInvocation(operation: string, ...params: ScriptBuilderParam[]): this { - this.emitPushArray(params); - - return this.emitPushParam(operation); - } - - public emitAppCallVerification(scriptHash: UInt160): this { - return this.emitOp('APPCALL', common.uInt160ToBuffer(scriptHash)); - } - - // tslint:disable-next-line readonly-array - public emitAppCall(scriptHash: UInt160, operation: string, ...params: ScriptBuilderParam[]): this { - this.emitAppCallInvocation(operation, ...params); - - return this.emitAppCallVerification(scriptHash); - } - - // tslint:disable-next-line readonly-array - public emitTailCall(scriptHash: UInt160, operation: string, ...params: ScriptBuilderParam[]): this { - this.emitAppCallInvocation(operation, ...params); - - return this.emitOp('TAILCALL', common.uInt160ToBuffer(scriptHash)); - } - - // tslint:disable-next-line readonly-array - public emitSysCall(sysCall: SysCallName, ...params: ScriptBuilderParam[]): this { - this.emitPushParams(...params); - const sysCallBuffer = Buffer.from(sysCall, 'ascii'); - const writer = new BinaryWriter(); - writer.writeVarBytesLE(sysCallBuffer); - - return this.emitOp('SYSCALL', writer.toBuffer()); - } - - public emitOpByte(byteCode: ByteCode, buffer?: Buffer | undefined): this { - const byteCodeBuffer = ByteBuffer[byteCode]; - this.emit(byteCodeBuffer); - this.emit(buffer); + public emitSysCallName(sysCall: SysCallName): this { + this.emitPush(getSysCallHash(sysCall)); return this; } - - public emit(buffer?: Buffer | undefined): this { - if (buffer !== undefined) { - this.mutableBuffers.push(buffer); - } - - return this; - } - - public build(): Buffer { - return Buffer.concat(this.mutableBuffers); - } } diff --git a/packages/neo-one-client-common/src/__data__/data.ts b/packages/neo-one-client-common/src/__data__/data.ts index 91929b7752..6ae2e0ef2a 100644 --- a/packages/neo-one-client-common/src/__data__/data.ts +++ b/packages/neo-one-client-common/src/__data__/data.ts @@ -1,7 +1,7 @@ import BigNumber from 'bignumber.js'; import { BN } from 'bn.js'; import { common } from '../common'; -import { ABIParameter, ABIReturn, AssetType } from '../types'; +import { ABIParameter, ABIReturn } from '../types'; import { keys } from './keys'; const hash256s = { diff --git a/packages/neo-one-client-common/src/__tests__/NativeContract.test.ts b/packages/neo-one-client-common/src/__tests__/NativeContract.test.ts new file mode 100644 index 0000000000..ea847e093c --- /dev/null +++ b/packages/neo-one-client-common/src/__tests__/NativeContract.test.ts @@ -0,0 +1,53 @@ +import { Buffer } from 'buffer'; +import { common } from '../common'; +import { NativeContracts } from '../NativeContract'; + +const neoContractHardCoded = { + serviceName: 'Neo.Native.Tokens.NEO', + script: Buffer.from('6845c49284', 'hex'), + scriptHex: '6845c49284', + hash: common.hexToUInt160('0x43cf98eddbe047e198a3e5d57006311442a0ca15'), + scriptHash: '0x43cf98eddbe047e198a3e5d57006311442a0ca15', +}; + +const gasContractHardCoded = { + serviceName: 'Neo.Native.Tokens.GAS', + script: Buffer.from('68eb43f4f4', 'hex'), + scriptHex: '68eb43f4f4', + hash: common.hexToUInt160('0xa1760976db5fcdfab2a9930e8f6ce875b2d18225'), + scriptHash: '0xa1760976db5fcdfab2a9930e8f6ce875b2d18225', +}; + +const policyContractHardCoded = { + serviceName: 'Neo.Native.Policy', + script: Buffer.from('6875f4fa6b', 'hex'), + scriptHex: '6875f4fa6b', + hash: common.hexToUInt160('0x9c5699b260bd468e2160dd5d45dfd2686bba8b77'), + scriptHash: '0x9c5699b260bd468e2160dd5d45dfd2686bba8b77', +}; + +describe('NativeContract correct data', () => { + test('NEO', () => { + expect(NativeContracts.NEO.serviceName).toEqual(neoContractHardCoded.serviceName); + expect(NativeContracts.NEO.script).toEqual(neoContractHardCoded.script); + expect(NativeContracts.NEO.scriptHex).toEqual(neoContractHardCoded.scriptHex); + expect(NativeContracts.NEO.hash).toEqual(neoContractHardCoded.hash); + expect(NativeContracts.NEO.scriptHash).toEqual(neoContractHardCoded.scriptHash); + }); + + test('GAS', () => { + expect(NativeContracts.GAS.serviceName).toEqual(gasContractHardCoded.serviceName); + expect(NativeContracts.GAS.script).toEqual(gasContractHardCoded.script); + expect(NativeContracts.GAS.scriptHex).toEqual(gasContractHardCoded.scriptHex); + expect(NativeContracts.GAS.hash).toEqual(gasContractHardCoded.hash); + expect(NativeContracts.GAS.scriptHash).toEqual(gasContractHardCoded.scriptHash); + }); + + test('Policy', () => { + expect(NativeContracts.Policy.serviceName).toEqual(policyContractHardCoded.serviceName); + expect(NativeContracts.Policy.script).toEqual(policyContractHardCoded.script); + expect(NativeContracts.Policy.scriptHex).toEqual(policyContractHardCoded.scriptHex); + expect(NativeContracts.Policy.hash).toEqual(policyContractHardCoded.hash); + expect(NativeContracts.Policy.scriptHash).toEqual(policyContractHardCoded.scriptHash); + }); +}); diff --git a/packages/neo-one-client-common/src/__tests__/ScriptBuilder.test.ts b/packages/neo-one-client-common/src/__tests__/ScriptBuilder.test.ts index 78c0480356..dec8389728 100644 --- a/packages/neo-one-client-common/src/__tests__/ScriptBuilder.test.ts +++ b/packages/neo-one-client-common/src/__tests__/ScriptBuilder.test.ts @@ -1,9 +1,8 @@ import { BN } from 'bn.js'; -import { common } from '../common'; import { Op } from '../models/vm'; import { ScriptBuilder } from '../ScriptBuilder'; -describe('Scripter Builder Tests', () => { +describe('Script Builder Tests', () => { let builder: ScriptBuilder; beforeEach(() => { @@ -73,7 +72,7 @@ describe('Scripter Builder Tests', () => { }); test('emitPushParam - Map', () => { - const testMap = new Map([[0, 1] as const]); + const testMap = new Map([[0, 1]]); builder.emitPushParam(testMap); expect(builder.buffers).toEqual([ @@ -98,10 +97,4 @@ describe('Scripter Builder Tests', () => { Buffer.from([Op.SETITEM]), ]); }); - - test('emitTailCall', () => { - builder.emitTailCall(common.ZERO_UINT160, '+'); - - expect(builder.buffers[builder.buffers.length - 1].length).toEqual(20); - }); }); diff --git a/packages/neo-one-client-common/src/__tests__/common.test.ts b/packages/neo-one-client-common/src/__tests__/common.test.ts index 251b2c1b93..9eba22f463 100644 --- a/packages/neo-one-client-common/src/__tests__/common.test.ts +++ b/packages/neo-one-client-common/src/__tests__/common.test.ts @@ -24,6 +24,7 @@ describe('fixedFromDecimal', () => { expect(common.fixedFromDecimal(new BN(expected, 10), decimals).toString(10)).toEqual(expected); }); }); + describe('UInt160', () => { const uInt160 = common.ZERO_UINT160; const buffer160 = Buffer.from(uInt160); diff --git a/packages/neo-one-client-common/src/__tests__/contractParameters.test.ts b/packages/neo-one-client-common/src/__tests__/contractParameters.test.ts index c522814370..1b503b79b1 100644 --- a/packages/neo-one-client-common/src/__tests__/contractParameters.test.ts +++ b/packages/neo-one-client-common/src/__tests__/contractParameters.test.ts @@ -5,7 +5,9 @@ import { BufferContractParameter } from '../types'; import { utils } from '../utils'; describe('contractParameters', () => { - const undefinedValue: BufferContractParameter = { type: 'Buffer', value: '' }; + const randomName = 'random'; + + const undefinedValue: BufferContractParameter = { type: 'Buffer', value: '', name: randomName }; test('String - optional undefined', () => { const result = contractParameters.String(undefinedValue, { type: 'String', optional: true }); @@ -16,7 +18,10 @@ describe('contractParameters', () => { test('String - optional defined', () => { const value = 'foo'; - const result = contractParameters.String({ type: 'String', value }, { type: 'String', optional: true }); + const result = contractParameters.String( + { type: 'String', value, name: randomName }, + { type: 'String', optional: true }, + ); expect(result).toEqual(value); }); @@ -24,7 +29,7 @@ describe('contractParameters', () => { test('String - defined', () => { const value = 'foo'; - const result = contractParameters.String({ type: 'String', value }, { type: 'String' }); + const result = contractParameters.String({ type: 'String', value, name: randomName }, { type: 'String' }); expect(result).toEqual(value); }); @@ -33,7 +38,7 @@ describe('contractParameters', () => { const value = 'foo'; const result = contractParameters.String( - { type: 'Buffer', value: Buffer.from(value, 'utf8').toString('hex') }, + { type: 'Buffer', value: Buffer.from(value, 'utf8').toString('hex'), name: randomName }, { type: 'String' }, ); @@ -41,7 +46,7 @@ describe('contractParameters', () => { }); test('String - Invalid', () => { - const result = () => contractParameters.String({ type: 'Void' }, { type: 'String' }); + const result = () => contractParameters.String({ type: 'Void', name: randomName }, { type: 'String' }); expect(result).toThrowErrorMatchingSnapshot(); }); @@ -55,7 +60,10 @@ describe('contractParameters', () => { test('Address - optional defined', () => { const value = keys[0].address; - const result = contractParameters.Address({ type: 'Address', value }, { type: 'Address', optional: true }); + const result = contractParameters.Address( + { type: 'Address', value, name: randomName }, + { type: 'Address', optional: true }, + ); expect(result).toMatchSnapshot(); }); @@ -63,7 +71,7 @@ describe('contractParameters', () => { test('Address - defined', () => { const value = keys[0].address; - const result = contractParameters.Address({ type: 'Address', value }, { type: 'Address' }); + const result = contractParameters.Address({ type: 'Address', value, name: randomName }, { type: 'Address' }); expect(result).toMatchSnapshot(); }); @@ -71,13 +79,16 @@ describe('contractParameters', () => { test('Address - defined', () => { const value = keys[0].scriptHash; - const result = contractParameters.Address({ type: 'Buffer', value: value.toString('hex') }, { type: 'Address' }); + const result = contractParameters.Address( + { type: 'Buffer', value: value.toString('hex'), name: randomName }, + { type: 'Address' }, + ); expect(result).toMatchSnapshot(); }); test('Address - Invalid', () => { - const result = () => contractParameters.Address({ type: 'Void' }, { type: 'Address' }); + const result = () => contractParameters.Address({ type: 'Void', name: randomName }, { type: 'Address' }); expect(result).toThrowErrorMatchingSnapshot(); }); @@ -91,7 +102,10 @@ describe('contractParameters', () => { test('Hash256 - optional defined', () => { const value = data.hash256s.a; - const result = contractParameters.Hash256({ type: 'Hash256', value }, { type: 'Hash256', optional: true }); + const result = contractParameters.Hash256( + { type: 'Hash256', value, name: randomName }, + { type: 'Hash256', optional: true }, + ); expect(result).toMatchSnapshot(); }); @@ -99,7 +113,7 @@ describe('contractParameters', () => { test('Hash256 - defined', () => { const value = data.hash256s.a; - const result = contractParameters.Hash256({ type: 'Hash256', value }, { type: 'Hash256' }); + const result = contractParameters.Hash256({ type: 'Hash256', value, name: randomName }, { type: 'Hash256' }); expect(result).toMatchSnapshot(); }); @@ -108,7 +122,7 @@ describe('contractParameters', () => { const value = data.hash256s.a; const result = contractParameters.Hash256( - { type: 'Buffer', value: common.stringToUInt256(value).toString('hex') }, + { type: 'Buffer', value: common.stringToUInt256(value).toString('hex'), name: randomName }, { type: 'Hash256' }, ); @@ -116,7 +130,7 @@ describe('contractParameters', () => { }); test('Hash256 - Invalid', () => { - const result = () => contractParameters.Hash256({ type: 'Void' }, { type: 'Hash256' }); + const result = () => contractParameters.Hash256({ type: 'Void', name: randomName }, { type: 'Hash256' }); expect(result).toThrowErrorMatchingSnapshot(); }); @@ -130,7 +144,10 @@ describe('contractParameters', () => { test('PublicKey - optional defined', () => { const value = keys[0].publicKeyString; - const result = contractParameters.PublicKey({ type: 'PublicKey', value }, { type: 'PublicKey', optional: true }); + const result = contractParameters.PublicKey( + { type: 'PublicKey', value, name: randomName }, + { type: 'PublicKey', optional: true }, + ); expect(result).toMatchSnapshot(); }); @@ -138,7 +155,7 @@ describe('contractParameters', () => { test('PublicKey - defined', () => { const value = keys[0].publicKeyString; - const result = contractParameters.PublicKey({ type: 'PublicKey', value }, { type: 'PublicKey' }); + const result = contractParameters.PublicKey({ type: 'PublicKey', value, name: randomName }, { type: 'PublicKey' }); expect(result).toMatchSnapshot(); }); @@ -147,7 +164,7 @@ describe('contractParameters', () => { const value = keys[0].publicKey; const result = contractParameters.PublicKey( - { type: 'Buffer', value: value.toString('hex') }, + { type: 'Buffer', value: value.toString('hex'), name: randomName }, { type: 'PublicKey' }, ); @@ -155,7 +172,7 @@ describe('contractParameters', () => { }); test('PublicKey - Invalid', () => { - const result = () => contractParameters.PublicKey({ type: 'Void' }, { type: 'PublicKey' }); + const result = () => contractParameters.PublicKey({ type: 'Void', name: randomName }, { type: 'PublicKey' }); expect(result).toThrowErrorMatchingSnapshot(); }); @@ -170,7 +187,7 @@ describe('contractParameters', () => { const value = data.bns.a; const result = contractParameters.Integer( - { type: 'Integer', value }, + { type: 'Integer', value, name: randomName }, { type: 'Integer', optional: true, decimals: 4 }, ); @@ -180,7 +197,10 @@ describe('contractParameters', () => { test('Integer - defined', () => { const value = data.bns.a; - const result = contractParameters.Integer({ type: 'Integer', value }, { type: 'Integer', decimals: 4 }); + const result = contractParameters.Integer( + { type: 'Integer', value, name: randomName }, + { type: 'Integer', decimals: 4 }, + ); expect(result).toMatchSnapshot(); }); @@ -189,7 +209,7 @@ describe('contractParameters', () => { const value = data.bns.a; const result = contractParameters.Integer( - { type: 'Buffer', value: utils.toSignedBuffer(value).toString('hex') }, + { type: 'Buffer', value: utils.toSignedBuffer(value).toString('hex'), name: randomName }, { type: 'Integer', decimals: 4 }, ); @@ -197,7 +217,8 @@ describe('contractParameters', () => { }); test('Integer - Invalid', () => { - const result = () => contractParameters.Integer({ type: 'Void' }, { type: 'Integer', decimals: 4 }); + const result = () => + contractParameters.Integer({ type: 'Void', name: randomName }, { type: 'Integer', decimals: 4 }); expect(result).toThrowErrorMatchingSnapshot(); }); @@ -211,7 +232,10 @@ describe('contractParameters', () => { test('Boolean - optional defined', () => { const value = true; - const result = contractParameters.Boolean({ type: 'Boolean', value }, { type: 'Boolean', optional: true }); + const result = contractParameters.Boolean( + { type: 'Boolean', value, name: randomName }, + { type: 'Boolean', optional: true }, + ); expect(result).toEqual(value); }); @@ -219,7 +243,7 @@ describe('contractParameters', () => { test('Boolean - defined', () => { const value = false; - const result = contractParameters.Boolean({ type: 'Boolean', value }, { type: 'Boolean' }); + const result = contractParameters.Boolean({ type: 'Boolean', value, name: randomName }, { type: 'Boolean' }); expect(result).toEqual(value); }); @@ -228,7 +252,7 @@ describe('contractParameters', () => { const value = false; const result = contractParameters.Boolean( - { type: 'Array', value: [{ type: 'Boolean', value }] }, + { type: 'Array', value: [{ type: 'Boolean', value, name: randomName }], name: randomName }, { type: 'Boolean' }, ); @@ -244,7 +268,10 @@ describe('contractParameters', () => { test('Buffer - optional defined', () => { const value = data.buffers.a; - const result = contractParameters.Buffer({ type: 'Buffer', value }, { type: 'Buffer', optional: true }); + const result = contractParameters.Buffer( + { type: 'Buffer', value, name: randomName }, + { type: 'Buffer', optional: true }, + ); expect(result).toMatchSnapshot(); }); @@ -252,7 +279,7 @@ describe('contractParameters', () => { test('Buffer - defined', () => { const value = data.buffers.a; - const result = contractParameters.Buffer({ type: 'Buffer', value }, { type: 'Buffer' }); + const result = contractParameters.Buffer({ type: 'Buffer', value, name: randomName }, { type: 'Buffer' }); expect(result).toMatchSnapshot(); }); @@ -260,7 +287,7 @@ describe('contractParameters', () => { test('Buffer - Signature', () => { const value = data.signatures.a; - const result = contractParameters.Buffer({ type: 'Signature', value }, { type: 'Buffer' }); + const result = contractParameters.Buffer({ type: 'Signature', value, name: randomName }, { type: 'Buffer' }); expect(result).toMatchSnapshot(); }); @@ -268,7 +295,7 @@ describe('contractParameters', () => { test('Buffer - Boolean', () => { const value = true; - const result = contractParameters.Buffer({ type: 'Boolean', value }, { type: 'Buffer' }); + const result = contractParameters.Buffer({ type: 'Boolean', value, name: randomName }, { type: 'Buffer' }); expect(result).toMatchSnapshot(); }); @@ -276,7 +303,7 @@ describe('contractParameters', () => { test('Buffer - Integer', () => { const value = data.bns.a; - const result = contractParameters.Buffer({ type: 'Integer', value }, { type: 'Buffer' }); + const result = contractParameters.Buffer({ type: 'Integer', value, name: randomName }, { type: 'Buffer' }); expect(result).toMatchSnapshot(); }); @@ -284,7 +311,7 @@ describe('contractParameters', () => { test('Buffer - Address', () => { const value = keys[0].address; - const result = contractParameters.Buffer({ type: 'Address', value }, { type: 'Buffer' }); + const result = contractParameters.Buffer({ type: 'Address', value, name: randomName }, { type: 'Buffer' }); expect(result).toMatchSnapshot(); }); @@ -292,7 +319,7 @@ describe('contractParameters', () => { test('Buffer - Hash256', () => { const value = data.hash256s.a; - const result = contractParameters.Buffer({ type: 'Hash256', value }, { type: 'Buffer' }); + const result = contractParameters.Buffer({ type: 'Hash256', value, name: randomName }, { type: 'Buffer' }); expect(result).toMatchSnapshot(); }); @@ -300,7 +327,7 @@ describe('contractParameters', () => { test('Buffer - PublicKey', () => { const value = keys[0].publicKeyString; - const result = contractParameters.Buffer({ type: 'PublicKey', value }, { type: 'Buffer' }); + const result = contractParameters.Buffer({ type: 'PublicKey', value, name: randomName }, { type: 'Buffer' }); expect(result).toMatchSnapshot(); }); @@ -308,31 +335,32 @@ describe('contractParameters', () => { test('Buffer - String', () => { const value = 'foo'; - const result = contractParameters.Buffer({ type: 'String', value }, { type: 'Buffer' }); + const result = contractParameters.Buffer({ type: 'String', value, name: randomName }, { type: 'Buffer' }); expect(result).toMatchSnapshot(); }); test('Buffer - InteropInterface', () => { - const result = contractParameters.Buffer({ type: 'InteropInterface' }, { type: 'Buffer' }); + const result = contractParameters.Buffer({ type: 'InteropInterface', name: randomName }, { type: 'Buffer' }); expect(result).toMatchSnapshot(); }); test('Buffer - Void', () => { - const result = contractParameters.Buffer({ type: 'Void' }, { type: 'Buffer' }); + const result = contractParameters.Buffer({ type: 'Void', name: randomName }, { type: 'Buffer' }); expect(result).toMatchSnapshot(); }); test('Buffer - Array', () => { - const result = () => contractParameters.Buffer({ type: 'Array', value: [] }, { type: 'Buffer' }); + const result = () => contractParameters.Buffer({ type: 'Array', value: [], name: randomName }, { type: 'Buffer' }); expect(result).toThrowErrorMatchingSnapshot(); }); test('Buffer - Array optional', () => { - const result = () => contractParameters.Buffer({ type: 'Array', value: [] }, { type: 'Buffer', optional: true }); + const result = () => + contractParameters.Buffer({ type: 'Array', value: [], name: randomName }, { type: 'Buffer', optional: true }); expect(result).toThrowErrorMatchingSnapshot(); }); @@ -346,7 +374,10 @@ describe('contractParameters', () => { test('Signature - optional defined', () => { const value = data.signatures.a; - const result = contractParameters.Signature({ type: 'Signature', value }, { type: 'Signature', optional: true }); + const result = contractParameters.Signature( + { type: 'Signature', value, name: randomName }, + { type: 'Signature', optional: true }, + ); expect(result).toMatchSnapshot(); }); @@ -354,7 +385,7 @@ describe('contractParameters', () => { test('Signature - defined', () => { const value = data.signatures.a; - const result = contractParameters.Signature({ type: 'Signature', value }, { type: 'Signature' }); + const result = contractParameters.Signature({ type: 'Signature', value, name: randomName }, { type: 'Signature' }); expect(result).toMatchSnapshot(); }); @@ -362,13 +393,13 @@ describe('contractParameters', () => { test('Signature - defined', () => { const value = data.signatures.a; - const result = contractParameters.Signature({ type: 'Buffer', value }, { type: 'Signature' }); + const result = contractParameters.Signature({ type: 'Buffer', value, name: randomName }, { type: 'Signature' }); expect(result).toMatchSnapshot(); }); test('Signature - Invalid', () => { - const result = () => contractParameters.Signature({ type: 'Void' }, { type: 'Signature' }); + const result = () => contractParameters.Signature({ type: 'Void', name: randomName }, { type: 'Signature' }); expect(result).toThrowErrorMatchingSnapshot(); }); @@ -387,7 +418,7 @@ describe('contractParameters', () => { const value = [false]; const result = contractParameters.Array( - { type: 'Array', value: [{ type: 'Boolean', value: false }] }, + { type: 'Array', value: [{ type: 'Boolean', value: false, name: randomName }], name: randomName }, { type: 'Array', optional: true, value: { type: 'Boolean' } }, ); @@ -398,7 +429,7 @@ describe('contractParameters', () => { const value = [true]; const result = contractParameters.Array( - { type: 'Array', value: [{ type: 'Boolean', value: true }] }, + { type: 'Array', value: [{ type: 'Boolean', value: true, name: randomName }], name: randomName }, { type: 'Array', value: { type: 'Boolean' } }, ); @@ -406,7 +437,8 @@ describe('contractParameters', () => { }); test('Array - Invalid', () => { - const result = () => contractParameters.Array({ type: 'Void' }, { type: 'Array', value: { type: 'Boolean' } }); + const result = () => + contractParameters.Array({ type: 'Void', name: randomName }, { type: 'Array', value: { type: 'Boolean' } }); expect(result).toThrowErrorMatchingSnapshot(); }); @@ -418,13 +450,13 @@ describe('contractParameters', () => { }); test('InteropInterface - optional defined', () => { - const result = smartContractConverters.toInteropInterfaceNullable({ type: 'InteropInterface' }); + const result = smartContractConverters.toInteropInterfaceNullable({ type: 'InteropInterface', name: randomName }); expect(result).toEqual(undefined); }); test('InteropInterface - defined', () => { - const result = smartContractConverters.toInteropInterface({ type: 'InteropInterface' }); + const result = smartContractConverters.toInteropInterface({ type: 'InteropInterface', name: randomName }); expect(result).toEqual(undefined); }); @@ -436,53 +468,59 @@ describe('contractParameters', () => { }); test('Void - optional defined', () => { - const result = contractParameters.Void({ type: 'Void' }, { type: 'Void', optional: true }); + const result = contractParameters.Void({ type: 'Void', name: randomName }, { type: 'Void', optional: true }); expect(result).toEqual(undefined); }); test('Void - defined', () => { - const result = contractParameters.Void({ type: 'Void' }, { type: 'Void' }); + const result = contractParameters.Void({ type: 'Void', name: randomName }, { type: 'Void' }); expect(result).toEqual(undefined); }); }); describe('Extra Contract Parameter Coverage', () => { + const randomName = 'random'; + const stringMap = [ { - type: 'String' as const, + type: 'String', value: 'one', }, { - type: 'String' as const, + type: 'String', value: '1', }, - ] as const; + ]; const mapParam = { - type: 'Map' as const, + type: 'Map', value: [stringMap], - }; + name: randomName, + // tslint:disable-next-line: no-any + } as any; const mapABI = { - type: 'Map' as const, + type: 'Map', key: { - type: 'String' as const, + type: 'String', }, value: { - type: 'String' as const, + type: 'String', }, - }; + // tslint:disable-next-line: no-any + } as any; const objABI = { - type: 'Object' as const, + type: 'Object', properties: { one: { - type: 'String' as const, + type: 'String', }, }, - }; + // tslint:disable-next-line: no-any + } as any; test('toForwardValue', () => { expect(smartContractConverters.toForwardValue(mapParam)).toEqual(mapParam); @@ -490,7 +528,7 @@ describe('Extra Contract Parameter Coverage', () => { test('toMap function', () => { const map = smartContractConverters.toMap(mapParam, mapABI); - expect(map).toEqual(new Map([['one', '1'] as const])); + expect(map).toEqual(new Map([['one', '1']])); }); test('toObject function', () => { @@ -505,6 +543,7 @@ describe('Extra Contract Parameter Coverage', () => { smartContractConverters.toMap( { type: 'Void' as 'Void', + name: randomName, }, mapABI, ); @@ -517,6 +556,7 @@ describe('Extra Contract Parameter Coverage', () => { smartContractConverters.toObject( { type: 'Void' as 'Void', + name: randomName, }, objABI, ); diff --git a/packages/neo-one-client-common/src/__tests__/models/AssetTypeModel.test.ts b/packages/neo-one-client-common/src/__tests__/models/AssetTypeModel.test.ts deleted file mode 100644 index 49aa9e9fef..0000000000 --- a/packages/neo-one-client-common/src/__tests__/models/AssetTypeModel.test.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { - assertAssetType, - assertAssetTypeJSON, - hasFlag, - toAssetType, - toJSONAssetType, -} from '../../models/AssetTypeModel'; - -describe('Asset Type Model - Functions', () => { - const goodByte = 0x60; - const goodString = 'Token'; - - test('hasFlag', () => { - expect(hasFlag(goodByte, 0x40)).toEqual(true); - }); - test('assertAssetType', () => { - expect(assertAssetType(goodByte)).toEqual(goodByte); - }); - test('assertAssetTypeJSON', () => { - expect(assertAssetTypeJSON(goodString)).toEqual(goodString); - }); - test('toAssetType', () => { - expect(toAssetType(goodString)).toEqual(goodByte); - }); - test('toJSONAssetType', () => { - expect(toJSONAssetType(goodByte)).toEqual(goodString); - }); -}); -describe('Asset Type Model - Errors', () => { - const badByte = 20; - const badString = '20'; - - test('assertAssetType - Bad Byte', () => { - const assetThrow = () => assertAssetType(badByte); - - expect(assetThrow).toThrowError(`Expected asset type, found: ${badByte.toString(16)}`); - }); - - test('assertAssetTypeJSON - Bad String', () => { - const assetJSONThrow = () => assertAssetTypeJSON(badString); - - expect(assetJSONThrow).toThrowError(`Invalid AssetType: ${badString}`); - }); -}); diff --git a/packages/neo-one-client-common/src/__tests__/models/ContractParameterTypeModel.test.ts b/packages/neo-one-client-common/src/__tests__/models/ContractParameterTypeModel.test.ts index 4313e28df5..0edd4c82b4 100644 --- a/packages/neo-one-client-common/src/__tests__/models/ContractParameterTypeModel.test.ts +++ b/packages/neo-one-client-common/src/__tests__/models/ContractParameterTypeModel.test.ts @@ -21,8 +21,8 @@ describe('Contract Parameter Type - Functions', () => { }); describe('Contract Parameter Type - Errors', () => { - const badNum = 20; - const badString = '20'; + const badNum = 50; + const badString = '50'; test('Errors', () => { const contractParameterThrow = () => assertContractParameterType(badNum); diff --git a/packages/neo-one-client-common/src/__tests__/models/SignerModel.test.ts b/packages/neo-one-client-common/src/__tests__/models/SignerModel.test.ts new file mode 100644 index 0000000000..0053c7c5c8 --- /dev/null +++ b/packages/neo-one-client-common/src/__tests__/models/SignerModel.test.ts @@ -0,0 +1,87 @@ +import { keys } from '../../__data__'; +import { common } from '../../common'; +import { SignerAdd, SignerModel } from '../../models/SignerModel'; +import { toWitnessScope } from '../../models/WitnessScopeModel'; + +const testAccount = keys[0].scriptHash; +const testContract = keys[1].scriptHash; +const testGroup = keys[2].publicKey; + +const optionsBuilder = ({ + account = testAccount, + scopes = 'Global', + allowedContracts = [], + allowedGroups = [], +}: Partial = {}): SignerAdd => ({ + account, + scopes, + allowedContracts, + allowedGroups, +}); + +describe('Signer Model', () => { + test('SerializeWire', () => { + const cosigner = new SignerModel(optionsBuilder()); + const serialized = cosigner.serializeWire(); + expect(serialized).toEqual( + Buffer.concat([common.uInt160ToBuffer(testAccount), Buffer.from([toWitnessScope('Global')])]), + ); + }); + + test('SerializeWire - CustomContracts Scope', () => { + const contractCosigner = new SignerModel( + optionsBuilder({ + scopes: 'CustomContracts', + allowedContracts: [testContract], + }), + ); + + expect(contractCosigner.serializeWire()).toEqual( + Buffer.concat([ + common.uInt160ToBuffer(testAccount), + Buffer.from([toWitnessScope('CustomContracts')]), + Buffer.from([0x01]), + common.uInt160ToBuffer(testContract), + ]), + ); + }); + + test('SerializeWire - CustomGroups Scope', () => { + const groupCosigner = new SignerModel( + optionsBuilder({ + scopes: 'CustomGroups', + allowedGroups: [testGroup], + }), + ); + + expect(groupCosigner.serializeWire()).toEqual( + Buffer.concat([ + common.uInt160ToBuffer(testAccount), + Buffer.from([toWitnessScope('CustomGroups')]), + Buffer.from([0x01]), + testGroup, + ]), + ); + }); + + test('SerializeWire - CustomContractsAndCustomGroups Scope', () => { + const bothCosigner = new SignerModel( + optionsBuilder({ + scopes: 'CustomContractsAndCustomGroups', + allowedContracts: [testContract], + allowedGroups: [testGroup], + }), + ); + + expect(bothCosigner.serializeWire()).toEqual( + Buffer.concat([ + common.uInt160ToBuffer(testAccount), + Buffer.from([toWitnessScope('CustomContractsAndCustomGroups')]), + Buffer.from([0x01]), + common.uInt160ToBuffer(testContract), + Buffer.from([0x01]), + testGroup, + ]), + ); + }); +}); diff --git a/packages/neo-one-client-common/src/__tests__/models/StateDescriptorTypeModel.test.ts b/packages/neo-one-client-common/src/__tests__/models/StateDescriptorTypeModel.test.ts deleted file mode 100644 index dd3312eb1f..0000000000 --- a/packages/neo-one-client-common/src/__tests__/models/StateDescriptorTypeModel.test.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { assertStateDescriptorType } from '../../models'; - -describe('State Descriptor Type Model', () => { - test('Assert Function', () => { - const goodType = 0x40; - const isType = assertStateDescriptorType(goodType); - - expect(isType).toBeTruthy(); - }); - - test('Errors', () => { - const badType = 0x00; - const assertThrow = () => assertStateDescriptorType(badType); - - expect(assertThrow).toThrowError(`Expected StateDescriptorType, found: ${badType}`); - }); -}); diff --git a/packages/neo-one-client-common/src/__tests__/models/WitnessModel.test.ts b/packages/neo-one-client-common/src/__tests__/models/WitnessModel.test.ts index 90e7150688..be954a2717 100644 --- a/packages/neo-one-client-common/src/__tests__/models/WitnessModel.test.ts +++ b/packages/neo-one-client-common/src/__tests__/models/WitnessModel.test.ts @@ -4,14 +4,16 @@ import { WitnessModel } from '../../models'; const invocation = Buffer.from([0x81]); const verification = Buffer.from([0x50]); -test('Witness Model Test', () => { - const testWriter = new BinaryWriter(); - const witnessModel = new WitnessModel({ - invocation, - verification, - }); +describe('Witness Model', () => { + test('SerializeWireBase', () => { + const testWriter = new BinaryWriter(); + const witnessModel = new WitnessModel({ + invocation, + verification, + }); - witnessModel.serializeWireBase(testWriter); + witnessModel.serializeWireBase(testWriter); - expect(testWriter.toBuffer().length).toEqual(4); + expect(testWriter.toBuffer().length).toEqual(4); + }); }); diff --git a/packages/neo-one-client-common/src/__tests__/models/WitnessScopeModel.test.ts b/packages/neo-one-client-common/src/__tests__/models/WitnessScopeModel.test.ts new file mode 100644 index 0000000000..8c20f50e18 --- /dev/null +++ b/packages/neo-one-client-common/src/__tests__/models/WitnessScopeModel.test.ts @@ -0,0 +1,44 @@ +import { + assertWitnessScope, + assertWitnessScopeJSON, + toJSONWitnessScope, + toWitnessScope, + witnessScopeHasFlag, + WitnessScopeModel, +} from '../../models/WitnessScopeModel'; + +describe('Witness Scope - Functions', () => { + const goodScope = WitnessScopeModel.Global; + const goodString = 'Global'; + + test('To Witness Scope', () => { + const witnessScope = toWitnessScope(goodString); + expect(witnessScope).toEqual(goodScope); + }); + test('To JSON Witness Scope', () => { + const JSONWitnessScope = toJSONWitnessScope(goodScope); + expect(JSONWitnessScope).toEqual(goodString); + }); + test('Has Flags - Should Pass', () => { + expect(witnessScopeHasFlag('CalledByEntryAndCustomContracts', 'CalledByEntry')).toEqual(true); + expect(witnessScopeHasFlag('CalledByEntryAndCustomContracts', 'CustomContracts')).toEqual(true); + }); + test('Has Flags - Should Fail', () => { + expect(witnessScopeHasFlag('CalledByEntryAndCustomContracts', 'Global')).toEqual(false); + expect(witnessScopeHasFlag('CalledByEntryAndCustomContracts', 'CustomGroups')).toEqual(false); + }); +}); + +describe('Witness Scope - Errors', () => { + const badNum = 20; + const badString = '20'; + + test('Errors', () => { + const contractParameterThrow = () => assertWitnessScope(badNum); + expect(contractParameterThrow).toThrowError(`Expected witness scope, found: ${badNum.toString(16)}`); + }); + test('assertWitnessScopeJSON - badString', () => { + const contractParameterJSONThrow = () => assertWitnessScopeJSON(badString); + expect(contractParameterJSONThrow).toThrowError(`Invalid WitnessScope: ${badString}`); + }); +}); diff --git a/packages/neo-one-client-common/src/__tests__/models/transaction/__snapshots__/feelessTransactionModel.test.ts.snap b/packages/neo-one-client-common/src/__tests__/models/transaction/__snapshots__/feelessTransactionModel.test.ts.snap new file mode 100644 index 0000000000..1ca14c7e7e --- /dev/null +++ b/packages/neo-one-client-common/src/__tests__/models/transaction/__snapshots__/feelessTransactionModel.test.ts.snap @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Feeless Transaction Model Serialize Base - Unsigned 1`] = `"000000000000000000000000000000000000000000a0860100013775292229eccdf904f16fff8e83e7cffdc0f0ce00000101"`; diff --git a/packages/neo-one-client-common/src/__tests__/models/transaction/__snapshots__/transactionModel.test.ts.snap b/packages/neo-one-client-common/src/__tests__/models/transaction/__snapshots__/transactionModel.test.ts.snap new file mode 100644 index 0000000000..20fceaf656 --- /dev/null +++ b/packages/neo-one-client-common/src/__tests__/models/transaction/__snapshots__/transactionModel.test.ts.snap @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Transaction Model Serialize Base - Unsigned 1`] = `"000000000001000000000000000100000000000000a086010000000101"`; diff --git a/packages/neo-one-client-common/src/__tests__/models/transaction/__snapshots__/transactionModels.test.ts.snap b/packages/neo-one-client-common/src/__tests__/models/transaction/__snapshots__/transactionModels.test.ts.snap deleted file mode 100644 index 2b76387690..0000000000 --- a/packages/neo-one-client-common/src/__tests__/models/transaction/__snapshots__/transactionModels.test.ts.snap +++ /dev/null @@ -1,21 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Transaction Base Model Sign 1`] = ` -Array [ - WitnessModel { - "invocation": "40d5b43af06d224eaa838f2271f37579b7c1e264d56d1d9db2e986d897aec4bf2d2ea3516e0341c1bc504a367547a2950e48b8352de65458c16c1c10084b79d75d", - "serializeWire": [Function], - "verification": "21026ff03b949241ce1dadd43519e6960e0a85b41a69a05c328103aa2bce1594ca16ac", - }, -] -`; - -exports[`Transaction Base Model Sign w/ Signature Function 1`] = ` -Array [ - WitnessModel { - "invocation": "4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "serializeWire": [Function], - "verification": "0100ac", - }, -] -`; diff --git a/packages/neo-one-client-common/src/__tests__/models/transaction/attributes.test.ts b/packages/neo-one-client-common/src/__tests__/models/transaction/attributes.test.ts index 044c3ca8cf..6ea57266e7 100644 --- a/packages/neo-one-client-common/src/__tests__/models/transaction/attributes.test.ts +++ b/packages/neo-one-client-common/src/__tests__/models/transaction/attributes.test.ts @@ -1,43 +1,36 @@ -import _ from 'lodash'; import { BinaryWriter } from '../../../BinaryWriter'; -import { common } from '../../../common'; import { - assertAttributeUsage, - assertAttributeUsageJSON, - BufferAttributeModel, - ECPointAttributeModel, - toAttributeUsage, - toJSONAttributeUsage, - UInt160AttributeModel, - UInt256AttributeModel, + assertAttributeType, + assertAttributeTypeJSON, + HighPriorityAttributeModel, + toAttributeType, + toJSONAttributeType, } from '../../../models'; -describe('Attribute Usage Model', () => { - const goodByte = 0x00; +describe('Attribute Type Model', () => { + const goodByte = 1; - test('toAttributeUsage', () => { - expect(toAttributeUsage('ContractHash')).toEqual(0); + test('toAttributeType', () => { + expect(toAttributeType('HighPriority')).toEqual(1); }); - test('AssertAttributeUsage', () => { - expect(assertAttributeUsage(goodByte)).toEqual(goodByte); + test('AssertAttributeType', () => { + expect(assertAttributeType(goodByte)).toEqual(goodByte); }); - test('toJSONAttributeUsage', () => { - expect(toJSONAttributeUsage(goodByte)).toEqual('ContractHash'); + test('toJSONAttributeType', () => { + expect(toJSONAttributeType(goodByte)).toEqual('HighPriority'); }); - test('AssertAttributeUsage - Throw Bad Usage', () => { + test('AssertAttributeType - Throw Bad Type', () => { const badByte = 0xbb; - expect(() => assertAttributeUsage(badByte)).toThrowError( - `Expected transaction attribute usage, found: ${badByte.toString(16)}`, + expect(() => assertAttributeType(badByte)).toThrowError( + `Expected transaction type, found: ${badByte.toString(16)}`, ); }); - test('AssertAttributeUSageJSON - Throw Bad JSON', () => { - expect(() => assertAttributeUsageJSON('boop')).toThrowError( - `Expected transaction attribute usage, found: ${'boop'}`, - ); + test('AssertAttributeTypeJSON - Throw Bad JSON', () => { + expect(() => assertAttributeTypeJSON('boop')).toThrowError(`Invalid AttributeType: ${'boop'}`); }); }); @@ -48,60 +41,12 @@ const resetWriter = () => { testWriter = new BinaryWriter(); }; -describe('Buffer Attribute Model', () => { +describe('HighPrioity Attribute Type Model', () => { beforeEach(resetWriter); - const value = Buffer.from('test', 'hex'); - test('SerializeWireBase', () => { - const usage = 0x90; - const bufferModel = new BufferAttributeModel({ usage, value }); - bufferModel.serializeWireBase(testWriter); - expect(testWriter.toBuffer()[0]).toEqual(0x90); - }); - - test('SerializeWireBase - URL Model', () => { - const descriptionUrl = 0x81; - - const urlModel = new BufferAttributeModel({ usage: descriptionUrl, value }); - - urlModel.serializeWireBase(testWriter); - expect(testWriter.toBuffer()[0]).toEqual(0x81); + const highPriorityModel = new HighPriorityAttributeModel(); + highPriorityModel.serializeWireBase(testWriter); + expect(testWriter.toBuffer()[0]).toEqual(0x01); }); }); - -test('ECPoint Attribute Model', () => { - resetWriter(); - const usage = 0x02; - const ecPoint = common.asECPoint(Buffer.from(_.range(33).map(() => 0x01))); - - const ecModel = new ECPointAttributeModel({ usage, value: ecPoint }); - ecModel.serializeWireBase(testWriter); - - const result = testWriter.toBuffer(); - - expect(result[0]).toEqual(usage); - expect(result.slice(1).length).toEqual(32); -}); - -test('UInt160 Attribute Model', () => { - resetWriter(); - const usage = 0x20; - const uInt = common.asUInt160(Buffer.alloc(20, 0)); - - const uInt160Model = new UInt160AttributeModel({ usage, value: uInt }); - uInt160Model.serializeWireBase(testWriter); - - expect(testWriter.toBuffer()[0]).toEqual(usage); -}); - -test('UInt256 Attribute Model', () => { - resetWriter(); - const usage = 0xa6; - const uInt = common.asUInt256(Buffer.alloc(32, 0)); - - const uInt256Model = new UInt256AttributeModel({ usage, value: uInt }); - uInt256Model.serializeWireBase(testWriter); - - expect(testWriter.toBuffer()[0]).toEqual(usage); -}); diff --git a/packages/neo-one-client-common/src/__tests__/models/transaction/feelessTransactionModel.test.ts b/packages/neo-one-client-common/src/__tests__/models/transaction/feelessTransactionModel.test.ts new file mode 100644 index 0000000000..ca44bb3610 --- /dev/null +++ b/packages/neo-one-client-common/src/__tests__/models/transaction/feelessTransactionModel.test.ts @@ -0,0 +1,79 @@ +import { BN } from 'bn.js'; +import { keys } from '../../../__data__/keys'; +import { BinaryWriter } from '../../../BinaryWriter'; +import { common } from '../../../common'; +import { + FeelessTransactionModel, + FeelessTransactionModelAdd, + SignerModel, + transactionHelper, + WitnessScopeModel, +} from '../../../models'; + +const testSender = keys[0].scriptHash; + +const optionsBuilder = ({ + version = 0, + nonce = 0, + validUntilBlock = 100000, + attributes = [], + witnesses = [], + signers = [new SignerModel({ account: testSender, scopes: WitnessScopeModel.None })], + hash, + script = Buffer.from([0x10]), +}: Partial): FeelessTransactionModelAdd => ({ + version, + nonce, + validUntilBlock, + attributes, + witnesses, + signers, + hash, + script, +}); + +// tslint:disable-next-line:no-let +let testWriter: BinaryWriter = new BinaryWriter(); +const resetWriter = () => { + testWriter = new BinaryWriter(); +}; + +describe('Feeless Transaction Model', () => { + beforeEach(resetWriter); + const script = Buffer.from([0x01]); + + test('Serialize Base - Unsigned', () => { + const transaction = new FeelessTransactionModel({ ...optionsBuilder({ script }) }); + transaction.serializeUnsignedBase(testWriter); + expect(testWriter.toBuffer()).toMatchSnapshot(); + }); + + test('Serialize Base - With Cosigners', () => { + const signer = new SignerModel({ + account: testSender, + scopes: WitnessScopeModel.Global, + }); + + const cosignerTransaction = new FeelessTransactionModel({ + ...optionsBuilder({ + script, + signers: [signer], + }), + }); + + const serializeUnsigned = cosignerTransaction.serializeUnsigned(); + expect(serializeUnsigned).toBeDefined(); + }); + + test('Cloned with fee', () => { + const feelessTransaction = new FeelessTransactionModel({ ...optionsBuilder({ script }) }); + const fullTransaction = transactionHelper.addFees(feelessTransaction, { + systemFee: new BN(1), + networkFee: new BN(2), + }); + + console.log(feelessTransaction.hashHex); + console.log(fullTransaction.hashHex); + expect(feelessTransaction.hash).not.toEqual(fullTransaction.hash); + }); +}); diff --git a/packages/neo-one-client-common/src/__tests__/models/transaction/transactionModel.test.ts b/packages/neo-one-client-common/src/__tests__/models/transaction/transactionModel.test.ts new file mode 100644 index 0000000000..756b03544d --- /dev/null +++ b/packages/neo-one-client-common/src/__tests__/models/transaction/transactionModel.test.ts @@ -0,0 +1,87 @@ +import { BN } from 'bn.js'; +import { keys } from '../../../__data__/keys'; +import { BinaryWriter } from '../../../BinaryWriter'; +import { SignerModel, TransactionModel, TransactionModelAdd, WitnessScopeModel } from '../../../models'; + +const testSender = keys[0].scriptHash; +const testPrivKey = keys[1].privateKey; + +const optionsBuilder = ({ + version = 0, + nonce = 0, + systemFee = new BN(0), + networkFee = new BN(0), + validUntilBlock = 100000, + attributes = [], + witnesses = [], + signers = [new SignerModel({ account: testSender, scopes: WitnessScopeModel.None })], + hash, + script = Buffer.from([0x10]), +}: Partial): TransactionModelAdd => ({ + version, + nonce, + systemFee, + networkFee, + validUntilBlock, + attributes, + witnesses, + signers, + hash, + script, +}); + +// tslint:disable-next-line:no-let +let testWriter: BinaryWriter = new BinaryWriter(); +const resetWriter = () => { + testWriter = new BinaryWriter(); +}; + +describe('Transaction Model', () => { + beforeEach(resetWriter); + + const systemFee = new BN(1); + const networkFee = new BN(1); + const script = Buffer.from([0x01]); + + test('Serialize Base - Unsigned', () => { + const transaction = new TransactionModel({ ...optionsBuilder({ systemFee, networkFee, script }) }); + transaction.serializeUnsignedBase(testWriter); + expect(testWriter.toBuffer()).toMatchSnapshot(); + }); + + test('Serialize Base - With Cosigners', () => { + const signer = new SignerModel({ + account: testSender, + scopes: WitnessScopeModel.Global, + }); + + const cosignerTransaction = new TransactionModel({ + ...optionsBuilder({ + systemFee, + networkFee, + script, + signers: [signer], + }), + }); + + const serializeUnsigned = cosignerTransaction.serializeUnsigned(); + expect(serializeUnsigned).toBeDefined(); + }); + + test('Cloned Transaction', () => { + const transaction = new TransactionModel({ ...optionsBuilder({ systemFee, networkFee, script }) }); + const clonedTransaction = transaction.clone(); + + expect(JSON.stringify(transaction)).toEqual(JSON.stringify(clonedTransaction)); + }); + + test('Serialize Base - Signed', () => { + const transaction = new TransactionModel({ ...optionsBuilder({ systemFee, networkFee, script }) }); + const signedTransaction = transaction.sign(testPrivKey); + const witness = signedTransaction.witnesses[0]; + expect(witness).toBeDefined(); + const serializedUnsigned = signedTransaction.serializeUnsigned(); + const serializedSigned = signedTransaction.serializeWire(); + expect(serializedSigned).toEqual(Buffer.concat([serializedUnsigned, Buffer.from([0x01]), witness.serializeWire()])); + }); +}); diff --git a/packages/neo-one-client-common/src/__tests__/models/transaction/transactionModels.test.ts b/packages/neo-one-client-common/src/__tests__/models/transaction/transactionModels.test.ts deleted file mode 100644 index a81b7fbcdf..0000000000 --- a/packages/neo-one-client-common/src/__tests__/models/transaction/transactionModels.test.ts +++ /dev/null @@ -1,240 +0,0 @@ -import { BN } from 'bn.js'; -import _ from 'lodash'; -import { BinaryWriter } from '../../../BinaryWriter'; -import { common, UInt256 } from '../../../common'; -import { AttributeModel, WitnessModel } from '../../../models'; -import { - assertTransactionType, - ClaimTransactionModel, - InputModel, - InvocationTransactionModel, - OutputModel, -} from '../../../models/transaction'; - -interface Options { - readonly version: number; - readonly attributes: readonly AttributeModel[]; - readonly inputs: readonly InputModel[]; - readonly outputs: readonly OutputModel[]; - readonly scripts: readonly WitnessModel[]; - readonly hash?: UInt256; -} - -const optionsBuilder = ({ - version = 0, - attributes = [], - inputs = [], - outputs = [], - scripts = [], - hash, -}: Partial): Options => ({ - version, - attributes, - inputs, - outputs, - scripts, - hash, -}); - -const defaultInput = new InputModel({ hash: common.ZERO_UINT256, index: 1 }); - -// tslint:disable-next-line:no-let -let testWriter: BinaryWriter = new BinaryWriter(); - -const resetWriter = () => { - testWriter = new BinaryWriter(); -}; - -describe('Claim Transaction Model', () => { - beforeEach(resetWriter); - - const claims = [defaultInput]; - const claimModel = new ClaimTransactionModel({ ...optionsBuilder({}), claims }); - - test('Serialize Exclusive Base', () => { - claimModel.serializeExclusiveBase(testWriter); - expect(testWriter.toBuffer()).toEqual( - Buffer.concat([Buffer.from([0x01]), Buffer.from(_.range(32).map(() => 0x00)), Buffer.from([0x01, 0x00])]), - ); - }); - - test('Clone Model', () => { - const clonedModel = claimModel.clone({}); - expect(clonedModel.hash).toEqual(claimModel.hash); - expect(clonedModel.version).toEqual(clonedModel.version); - expect(clonedModel.claims).toEqual(claims); - }); - - test('Error - Bad Version', () => { - const throwVersion = () => new ClaimTransactionModel({ ...optionsBuilder({ version: 1 }), claims }); - expect(throwVersion).toThrowError(`expected version 0, found: 1`); - }); - - test('Error - Bad Claims', () => { - const throwClaims = () => new ClaimTransactionModel({ ...optionsBuilder({}), claims: [] }); - - expect(throwClaims).toThrowError('expected claims, found none.'); - }); -}); - -describe('Invocation Transaction Model', () => { - beforeEach(resetWriter); - - const gas = new BN(1); - const script = Buffer.from([0x01]); - - const invokeModel = new InvocationTransactionModel({ ...optionsBuilder({}), gas, script }); - - test('InvokeModel - Serialize Exclusive Base', () => { - invokeModel.serializeExclusiveBase(testWriter); - expect(testWriter.toBuffer()).toEqual(Buffer.concat([Buffer.from([script.length]), script])); - }); - - test('InvokeModel v1 - Serialize Exclusive Base', () => { - const versionOneModel = new InvocationTransactionModel({ ...optionsBuilder({}), version: 1, gas, script }); - versionOneModel.serializeExclusiveBase(testWriter); - expect(testWriter.toBuffer()).toEqual( - Buffer.concat([Buffer.from([script.length]), script, gas.toTwos(8 * 8).toArrayLike(Buffer, 'le', 8)]), - ); - }); - - test('Clone Model', () => { - const clonedModel = invokeModel.clone({}); - expect(JSON.stringify(invokeModel)).toEqual(JSON.stringify(clonedModel)); - }); - - test('Error - Bad Gas', () => { - const badGas = new BN(-1); - const gasThrow = () => new InvocationTransactionModel({ ...optionsBuilder({}), gas: badGas, script }); - expect(gasThrow).toThrowError(`expected valid gas, found: ${badGas.toString()}`); - }); - - test('Error - Bad Script', () => { - const badScript = Buffer.from([]); - const scriptThrow = () => new InvocationTransactionModel({ ...optionsBuilder({}), gas, script: badScript }); - expect(scriptThrow).toThrowError('expected script'); - }); - - test('Error - Bad Version', () => { - const badVersion = 2; - const versionThrow = () => - new InvocationTransactionModel({ ...optionsBuilder({}), version: badVersion, gas, script }); - expect(versionThrow).toThrowError(`expected version <= 1, found: ${badVersion}`); - }); -}); - -describe('Output Model', () => { - beforeEach(resetWriter); - - const options = { - asset: common.ZERO_UINT256, - value: new BN(1), - address: common.ZERO_UINT160, - }; - - const outputModel = new OutputModel(options); - - test('Serialize Wire Base', () => { - outputModel.serializeWireBase(testWriter); - expect(testWriter.toBuffer()).toEqual( - Buffer.concat([ - common.uInt256ToBuffer(options.asset), - Buffer.from(options.value.toTwos(8 * 8).toArrayLike(Buffer, 'le', 8)), - Buffer.from(options.address), - ]), - ); - }); - - test('Clone Model', () => { - const clonedModel = outputModel.clone({}); - expect(clonedModel.address).toEqual(outputModel.address); - expect(clonedModel.asset).toEqual(outputModel.asset); - }); -}); - -describe('Transaction Type Model', () => { - test('Assert Transaction Type', () => { - const goodByte = 0x00; - - expect(assertTransactionType(goodByte)).toEqual(goodByte); - }); - - test('Assert Transaction Type - Error Bad Byte', () => { - const badByte = 0xff; - - const typeThrow = () => assertTransactionType(badByte); - - expect(typeThrow).toThrowError(`Expected transaction type, found: ${badByte.toString(16)}`); - }); -}); - -describe('Transaction Base Model', () => { - const hashString = '0e4068fa4b68f8351bc61e5b9d9e348bdb0a1f5e4c727c263c2534bb2bd19709'; - const hash = common.hexToUInt256(hashString); - - const privateKey = common.asPrivateKey(Buffer.from(_.range(32).map(() => 0x01))); - const testSig = Buffer.from(_.range(64).map(() => 0x00)); - const testEC = common.ECPOINT_INFINITY; - - test('Default Hash', () => { - const noHashModel = new InvocationTransactionModel({ - ...optionsBuilder({ version: 1 }), - gas: new BN(1), - script: Buffer.from([0x01]), - }); - expect(common.isUInt256(noHashModel.hash)).toBeTruthy(); - }); - - test('Input Hash', () => { - const hashInModel = new InvocationTransactionModel({ - ...optionsBuilder({ version: 1, hash }), - gas: new BN(1), - script: Buffer.from([0x01]), - }); - expect(hashInModel.hash).toEqual(hash); - }); - - test('HashHex Function', () => { - const hashInModel = new InvocationTransactionModel({ - ...optionsBuilder({ version: 1, hash }), - gas: new BN(1), - script: Buffer.from([0x01]), - }); - expect(hashInModel.hashHex).toEqual(`0x${hashString}`); - }); - - test('Sign', () => { - const model = new InvocationTransactionModel({ - ...optionsBuilder({ version: 1 }), - gas: new BN(1), - script: Buffer.from([0x01]), - }); - const signedModel = model.sign(privateKey); - - expect(signedModel.scripts).toMatchSnapshot(); - }); - - test('Sign w/ Signature Function', () => { - const model = new InvocationTransactionModel({ - ...optionsBuilder({ version: 1 }), - gas: new BN(1), - script: Buffer.from([0x01]), - }); - const signedModel = model.signWithSignature(testSig, testEC); - - expect(signedModel.scripts).toMatchSnapshot(); - }); - - test('Error - Max Attributes Throws', () => { - const badAmount = 17; - const modelThrows = () => - new InvocationTransactionModel({ - // tslint:disable-next-line:no-object-literal-type-assertion - ...optionsBuilder({ version: 1, attributes: { length: badAmount } as readonly AttributeModel[] }), - gas: new BN(1), - script: Buffer.from([0x01]), - }); - - expect(modelThrows).toThrowError(`Expected less than 16 attributes, found: ${badAmount}`); - }); -}); diff --git a/packages/neo-one-client-common/src/__tests__/models/vm.test.ts b/packages/neo-one-client-common/src/__tests__/models/vm.test.ts index 8ad9455683..0c76d6a6da 100644 --- a/packages/neo-one-client-common/src/__tests__/models/vm.test.ts +++ b/packages/neo-one-client-common/src/__tests__/models/vm.test.ts @@ -6,7 +6,7 @@ describe('VM Unit Tests - Functions', () => { expect(assertByteCode(goodByte)).toEqual(goodByte); }); test('Assert SysCall', () => { - const goodSysCall = 'Neo.Storage.Put'; + const goodSysCall = 'System.Storage.Put'; expect(assertSysCall(goodSysCall)).toEqual(goodSysCall); }); test('Assert VM State', () => { diff --git a/packages/neo-one-client-common/src/common.ts b/packages/neo-one-client-common/src/common.ts index 90ef74fde9..f79cffc05e 100644 --- a/packages/neo-one-client-common/src/common.ts +++ b/packages/neo-one-client-common/src/common.ts @@ -1,6 +1,7 @@ import { makeErrorWithCode } from '@neo-one/utils'; import BigNumber from 'bignumber.js'; import { BN } from 'bn.js'; +import { Wildcard } from './models'; /* istanbul ignore next */ export const InvalidFormatError = makeErrorWithCode( @@ -8,7 +9,7 @@ export const InvalidFormatError = makeErrorWithCode( (reason?: string) => `Invalid format${reason === undefined ? '.' : `: ${reason}`}`, ); -const add0x = (value: string) => `0x${value}`; +const add0x = (value: string) => (value.startsWith('0x') ? value : `0x${value}`); const strip0x = (value: string) => (value.startsWith('0x') ? value.substring(2) : value); const reverse = (src: Buffer): Buffer => { const mutableOut = Buffer.allocUnsafe(src.length); @@ -60,6 +61,7 @@ export type UInt256Hex = string; const UINT256_BUFFER_BYTES = 32; const ZERO_UINT256 = Buffer.alloc(UINT256_BUFFER_BYTES, 0) as UInt256; +const MAX_UINT256 = Buffer.alloc(UINT256_BUFFER_BYTES, 0xff) as UInt256; const isUInt256 = (value: {}): value is UInt256 => value instanceof Buffer && value.length === UINT256_BUFFER_BYTES; @@ -205,8 +207,11 @@ const fixedToDecimal = (value: BN, decimals: number): BigNumber => { const fixed8ToDecimal = (bn: BN): BigNumber => fixedToDecimal(bn, 8); +const isWildcard = (input: unknown): input is Wildcard => input === '*'; + const NEGATIVE_SATOSHI_FIXED8 = new BN(-1); const TEN_FIXED8 = fixed8FromDecimal(10); +const TWENTY_FIXED8 = fixed8FromDecimal(20); const ONE_HUNDRED_FIXED8 = fixed8FromDecimal(100); const FOUR_HUNDRED_FIXED8 = fixed8FromDecimal(400); const FIVE_HUNDRED_FIXED8 = fixed8FromDecimal(500); @@ -215,10 +220,25 @@ const FIVE_THOUSAND_FIXED8 = fixed8FromDecimal(5000); const TEN_THOUSAND_FIXED8 = fixed8FromDecimal(10000); const ONE_HUNDRED_MILLION_FIXED8 = fixed8FromDecimal(100000000); +const nativeScriptHashes = { + GAS: '0x668e0c1f9d7b70a99dd9e06eadd4c784d641afbc', + NEO: '0xde5f57d430d3dece511cf975a8d37848cb9e0525', + Policy: '0xce06595079cd69583126dbfd1d2e25cca74cffe9', +}; + +const nativeHashes = { + GAS: hexToUInt160(nativeScriptHashes.GAS), + NEO: hexToUInt160(nativeScriptHashes.NEO), + Policy: hexToUInt160(nativeScriptHashes.Policy), +}; + export const common = { D8, - NEO_ADDRESS_VERSION: 23, + NEO_ADDRESS_VERSION: 0x35, NEO_PRIVATE_KEY_VERSION: 0x80, + GROUPING_SIZE_BYTES: 16, + MAX_CONTRACT_STRING: 252, + MAX_MANIFEST_LENGTH: 4096, ECPOINT_BUFFER_BYTES, ECPOINT_INFINITY, ECPOINT_INFINITY_BYTE, @@ -227,8 +247,10 @@ export const common = { UINT256_BUFFER_BYTES, ZERO_UINT160, ZERO_UINT256, + MAX_UINT256, NEGATIVE_SATOSHI_FIXED8, TEN_FIXED8, + TWENTY_FIXED8, ONE_HUNDRED_FIXED8, FOUR_HUNDRED_FIXED8, FIVE_HUNDRED_FIXED8, @@ -236,9 +258,9 @@ export const common = { FIVE_THOUSAND_FIXED8, TEN_THOUSAND_FIXED8, ONE_HUNDRED_MILLION_FIXED8, - NEO_ASSET_HASH: '0xc56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b', - GAS_ASSET_HASH: '0x602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7', uInt160ToBuffer, + add0x, + strip0x, asUInt160, uInt160ToHex, hexToUInt160, @@ -281,4 +303,7 @@ export const common = { fixedFromDecimal, fixedToDecimal, reverse, + isWildcard, + nativeScriptHashes, + nativeHashes, }; diff --git a/packages/neo-one-client-common/src/contractParameters.ts b/packages/neo-one-client-common/src/contractParameters.ts index 8b4ac9f009..b845915e00 100644 --- a/packages/neo-one-client-common/src/contractParameters.ts +++ b/packages/neo-one-client-common/src/contractParameters.ts @@ -1,19 +1,20 @@ -import { utils as commonUtils } from '@neo-one/utils'; +import { utils as commonUtils, JSONObject } from '@neo-one/utils'; import BigNumber from 'bignumber.js'; -import { common } from './common'; +import { common, InvalidFormatError } from './common'; import { crypto } from './crypto'; import { InvalidContractParameterError } from './errors'; import { JSONHelper } from './JSONHelper'; import { ABIReturn, - AddressABI, AddressString, + AnyABI, ArrayABI, BooleanABI, BufferABI, BufferString, ContractParameter, ForwardValueABI, + Hash160ABI, Hash256ABI, Hash256String, IntegerABI, @@ -28,10 +29,19 @@ import { VoidABI, } from './types'; import { utils } from './utils'; +import { + assertContractParameterType, + toContractParameterType, + assertContractParameterTypeJSON, + ContractParameterTypeModel, +} from './models'; const toBufferBuffer = (contractParameter: ContractParameter): Buffer => { let value; switch (contractParameter.type) { + case 'Any': + value = Buffer.from([]); // TODO: check + break; case 'Signature': value = JSONHelper.readBuffer(contractParameter.value); break; @@ -41,7 +51,7 @@ const toBufferBuffer = (contractParameter: ContractParameter): Buffer => { case 'Integer': value = utils.toSignedBuffer(contractParameter.value); break; - case 'Address': + case 'Hash160': value = common.uInt160ToBuffer( crypto.addressToScriptHash({ addressVersion: common.NEO_ADDRESS_VERSION, @@ -67,7 +77,7 @@ const toBufferBuffer = (contractParameter: ContractParameter): Buffer => { 'Signature', 'Boolean', 'Integer', - 'Address', + 'Hash160', 'Hash256', 'Buffer', 'PublicKey', @@ -113,7 +123,7 @@ const toString = (contractParameter: ContractParameter): string => { }; const toAddress = (contractParameter: ContractParameter): AddressString => { - if (contractParameter.type === 'Address') { + if (contractParameter.type === 'Hash160') { return contractParameter.value; } @@ -124,7 +134,7 @@ const toAddress = (contractParameter: ContractParameter): AddressString => { }); } - throw new InvalidContractParameterError(contractParameter, ['Address', 'Buffer']); + throw new InvalidContractParameterError(contractParameter, ['Hash160', 'Buffer']); }; const toHash256 = (contractParameter: ContractParameter): Hash256String => { @@ -200,9 +210,10 @@ const toMap = (contractParameter: ContractParameter, parameter: MapABI): Readonl const valueConverter = contractParameters[value.type] as any; return new Map( - contractParameter.value.map( - (val) => [keyConverter(val[0], key), valueConverter(val[1], value)] as const, - ), + contractParameter.value.map((val) => [ + keyConverter(val[0], key), + valueConverter(val[1], value), + ]), ); }; @@ -312,9 +323,11 @@ const toVoidNullable = wrapNullable(toVoid) as (param: ContractParameter) => und const toForwardValueNullable = wrapNullable(toForwardValue) as (param: ContractParameter) => undefined | undefined; export const contractParameters = { + // TODO: check + Any: (_contractParameter: ContractParameter, _parameter: AnyABI): Return | undefined => undefined, String: (contractParameter: ContractParameter, parameter: StringABI): Return | undefined => parameter.optional ? toStringNullable(contractParameter) : toString(contractParameter), - Address: (contractParameter: ContractParameter, parameter: AddressABI): Return | undefined => + Hash160: (contractParameter: ContractParameter, parameter: Hash160ABI): Return | undefined => parameter.optional ? toAddressNullable(contractParameter) : toAddress(contractParameter), Hash256: (contractParameter: ContractParameter, parameter: Hash256ABI): Return | undefined => parameter.optional ? toHash256Nullable(contractParameter) : toHash256(contractParameter), diff --git a/packages/neo-one-client-common/src/crypto.ts b/packages/neo-one-client-common/src/crypto.ts index 658bf22bab..fdb684dd72 100644 --- a/packages/neo-one-client-common/src/crypto.ts +++ b/packages/neo-one-client-common/src/crypto.ts @@ -37,10 +37,7 @@ const ec = () => { return ecCache; }; -const sha1 = (value: Buffer): Buffer => - createHash('sha1') - .update(value) - .digest(); +const sha1 = (value: Buffer): Buffer => createHash('sha1').update(value).digest(); const sha256 = sha256In; @@ -53,10 +50,7 @@ const hash160 = (value: Buffer): UInt160 => common.bufferToUInt160(rmd160(sha256 const hash256 = (value: Buffer): UInt256 => common.bufferToUInt256(sha256(sha256(value))); -const hmacSha512 = (key: Buffer | string, data: Buffer) => - createHmac('sha512', key) - .update(data) - .digest(); +const hmacSha512 = (key: Buffer | string, data: Buffer) => createHmac('sha512', key).update(data).digest(); const sign = ({ message, privateKey }: { readonly message: Buffer; readonly privateKey: PrivateKey }): Buffer => { const sig = ec().sign(sha256(message), common.privateKeyToBuffer(privateKey)); @@ -106,7 +100,7 @@ const verify = ({ readonly message: Buffer; readonly signature: Buffer; readonly publicKey: ECPoint; -}) => { +}): boolean => { if (signatureIn.length !== 64) { throw new InvalidSignatureError(signatureIn.length); } @@ -143,12 +137,7 @@ const verify = ({ const key = new ECKey({ crv: 'P-256', - publicKey: Buffer.from( - ec() - .keyFromPublic(publicKey) - .getPublic(false, 'hex'), - 'hex', - ), + publicKey: Buffer.from(ec().keyFromPublic(publicKey).getPublic(false, 'hex'), 'hex'), }); return (key.createVerify('SHA256').update(message) as any).verify(signature); @@ -198,6 +187,15 @@ const createPrivateKey = (): PrivateKey => common.bufferToPrivateKey(randomBytes const toScriptHash = hash160; +const getContractHash = (sender: UInt160, script: Buffer) => { + const builder = new ScriptBuilder(); + builder.emitOp('ABORT'); + builder.emitPushUInt160(sender); + builder.emitPush(script); + + return toScriptHash(builder.build()); +}; + // Takes various formats and converts to standard ECPoint const toECPoint = (publicKey: Buffer): ECPoint => toECPointFromKeyPair(ec().keyFromPublic(publicKey)); @@ -263,7 +261,8 @@ const createInvocationScript = (message: Buffer, privateKey: PrivateKey): Buffer const createVerificationScript = (publicKey: ECPoint): Buffer => { const builder = new ScriptBuilder(); builder.emitPushECPoint(publicKey); - builder.emitOp('CHECKSIG'); + builder.emitOp('PUSHNULL'); + builder.emitSysCall('Neo.Crypto.VerifyWithECDsaSecp256r1'); return builder.build(); }; @@ -279,6 +278,15 @@ const createWitnessForSignature = ( return new Witness({ verification, invocation }); }; +const createSignatureRedeemScript = (publicKey: ECPoint): Buffer => { + const builder = new ScriptBuilder(); + builder.emitPushECPoint(publicKey); + builder.emitOp('PUSHNULL'); + builder.emitSysCall('Neo.Crypto.VerifyWithECDsaSecp256r1'); + + return builder.build(); +}; + const createWitness = ( message: Buffer, privateKey: PrivateKey, @@ -322,7 +330,8 @@ const createMultiSignatureVerificationScript = (mIn: number, publicKeys: readonl builder.emitPushECPoint(ecPoint); }); builder.emitPushInt(publicKeysSorted.length); - builder.emitOp('CHECKMULTISIG'); + builder.emitOp('PUSHNULL'); + builder.emitSysCall('Neo.Crypto.CheckMultisigWithECDsaSecp256r1'); return builder.build(); }; @@ -357,9 +366,30 @@ const createMultiSignatureWitness = ( return new Witness({ verification, invocation }); }; +const createMultiSignatureRedeemScript = (mIn: number, publicKeys: readonly ECPoint[]) => { + const m = Math.floor(mIn); + if (m < 1 || m > publicKeys.length) { + throw new InvalidNumberOfKeysError(m, publicKeys.length); + } + + if (publicKeys.length > 1024) { + throw new TooManyPublicKeysError(publicKeys.length); + } + const publicKeysSorted = publicKeys.length === 1 ? publicKeys : sortKeys(publicKeys); + const builder = new ScriptBuilder(); + + builder.emitPushInt(m); + publicKeysSorted.forEach((key) => builder.emitPushECPoint(key)); + builder.emitPushInt(publicKeysSorted.length); + builder.emitOp('PUSHNULL'); + builder.emitSysCall('Neo.Crypto.CheckMultisigWithECDsaSecp256r1'); + + return builder.build(); +}; + const getConsensusAddress = (validators: readonly ECPoint[]): UInt160 => toScriptHash( - createMultiSignatureVerificationScript(Math.floor(validators.length - (validators.length - 1) / 3), validators), + createMultiSignatureRedeemScript(Math.floor(validators.length - (validators.length - 1) / 3), validators), ); const wifToPrivateKey = (wif: string, privateKeyVersion: number): PrivateKey => { @@ -535,54 +565,145 @@ const decryptNEP2 = async ({ return common.bufferToPrivateKey(privateKey); }; +const checkMultisigWithECDsaSecp256r1 = Buffer.from('138defaf', 'hex'); +const verifyECDsaSecp256r1 = Buffer.from('95440d78', 'hex'); + // tslint:disable const isMultiSigContract = (script: Buffer) => { let m = 0; let n = 0; let i = 0; - if (script.length < 37) return false; + if (script.length < 43) return false; if (script[i] > Op.PUSH16) return false; if (script[i] < Op.PUSH1 && script[i] !== 1 && script[i] !== 2) return false; switch (script[i]) { - case 1: + case Op.PUSHINT8: m = script[++i]; ++i; break; - case 2: + case Op.PUSHINT16: m = script.readUInt16LE(++i); i += 2; break; default: - m = script[i++] - 80; - break; + const b = script[i]; + if (b >= Op.PUSH1 && b <= Op.PUSH16) { + m = b - Op.PUSH0; + ++i; + break; + } + return false; } if (m < 1 || m > 1024) return false; - while (script[i] == 33) { + while (script[i] == Op.PUSHDATA1) { + if (script.length <= i + 35) return false; + if (script[++i] !== 33) return false; + // points?.push(script.slice(i + 1, i + 1 + 33)); // TODO: add "points" List from C# + i += 34; - if (script.length <= i) return false; ++n; } if (n < m || n > 1024) return false; switch (script[i]) { - case 1: + case Op.PUSHINT8: if (n != script[++i]) return false; ++i; break; - case 2: + case Op.PUSHINT16: if (script.length < i + 3 || n != script.readUInt16LE(++i)) return false; i += 2; break; default: - if (n != script[i++] - 80) return false; + const b = script[i]; + if (b >= Op.PUSH1 && b <= Op.PUSH16) { + if (n !== b - Op.PUSH0) return false; + ++i; + break; + } + return false; + } + if (script[i++] !== Op.PUSHNULL) return false; + if (script[i++] !== Op.SYSCALL) return false; + if (script.length !== i + 4) return false; + if (!script.slice(i).equals(checkMultisigWithECDsaSecp256r1)) return false; + return true; +}; +// tslint:enable + +type MultiSigResult = + | { readonly result: true; readonly m: number; readonly n: number; readonly points: readonly ECPoint[] } + | { readonly result: false }; +// tslint:disable +const isMultiSigContractWithResult = (script: Buffer): MultiSigResult => { + let m = 0; + let n = 0; + let i = 0; + let points = []; + if (script.length < 43) return { result: false }; + if (script[i] > Op.PUSH16) return { result: false }; + if (script[i] < Op.PUSH1 && script[i] !== 1 && script[i] !== 2) return { result: false }; + switch (script[i]) { + case Op.PUSHINT8: + m = script[++i]; + ++i; + break; + case Op.PUSHINT16: + m = script.readUInt16LE(++i); + i += 2; break; + default: + const b = script[i]; + if (b >= Op.PUSH1 && b <= Op.PUSH16) { + m = b - Op.PUSH0; + ++i; + break; + } + return { result: false }; + } + if (m < 1 || m > 1024) return { result: false }; + while (script[i] == Op.PUSHDATA1) { + if (script.length <= i + 35) return { result: false }; + if (script[++i] !== 33) return { result: false }; + // TODO: this will take some work to verify but look at what the C# calls + points.push(common.bufferToECPoint(script.slice(i + 1, i + 1 + 33))); + + i += 34; + ++n; } - if (script[i++] != Op.CHECKMULTISIG) return false; - if (script.length != i) return false; - return true; + if (n < m || n > 1024) return { result: false }; + switch (script[i]) { + case Op.PUSHINT8: + if (n != script[++i]) return { result: false }; + ++i; + break; + case Op.PUSHINT16: + if (script.length < i + 3 || n != script.readUInt16LE(++i)) return { result: false }; + i += 2; + break; + default: + const b = script[i]; + if (b >= Op.PUSH1 && b <= Op.PUSH16) { + if (n !== b - Op.PUSH0) return { result: false }; + ++i; + break; + } + return { result: false }; + } + if (script[i++] !== Op.PUSHNULL) return { result: false }; + if (script[i++] !== Op.SYSCALL) return { result: false }; + if (script.length !== i + 4) return { result: false }; + if (!script.slice(i).equals(checkMultisigWithECDsaSecp256r1)) return { result: false }; + return { result: true, m, n, points }; }; // tslint:enable -const isSignatureContract = (script: Buffer) => script.length === 35 && script[0] === 33 && script[34] === Op.CHECKSIG; +const isSignatureContract = (script: Buffer) => + script.length === 41 && + script[0] === Op.PUSHDATA1 && + script[1] === 33 && + script[35] === Op.PUSHNULL && + script[36] === Op.SYSCALL && + script.slice(37).equals(verifyECDsaSecp256r1); const isStandardContract = (script: Buffer) => isSignatureContract(script) || isMultiSigContract(script); @@ -723,13 +844,9 @@ const deriveChildKey = (node: HDNode, index: number, hardened: boolean): HDNode version: BIP32_VERSION.private, }; } - const parentKey = ec() - .keyFromPublic(node.publicKey) - .getPublic(); + const parentKey = ec().keyFromPublic(node.publicKey).getPublic(); - const childKey = ec() - .g.mul(shaLeft) - .add(parentKey); + const childKey = ec().g.mul(shaLeft).add(parentKey); if (childKey.isInfinity()) { return deriveChildKey(node, index + 1, false); @@ -783,6 +900,7 @@ export const crypto = { verify, privateKeyToPublicKey, toScriptHash, + getContractHash, toECPoint, createKeyPair, scriptHashToAddress, @@ -791,10 +909,12 @@ export const crypto = { createVerificationScript, createWitness, createWitnessForSignature, + createSignatureRedeemScript, getVerificationScriptHash, createMultiSignatureInvocationScript, createMultiSignatureVerificationScript, createMultiSignatureWitness, + createMultiSignatureRedeemScript, getConsensusAddress, privateKeyToWIF, wifToPrivateKey, @@ -806,6 +926,7 @@ export const crypto = { decryptNEP2, createPrivateKey, isMultiSigContract, + isMultiSigContractWithResult, isSignatureContract, isStandardContract, parseExtendedKey, diff --git a/packages/neo-one-client-common/src/errors.ts b/packages/neo-one-client-common/src/errors.ts index 64c647fee3..4fcfdbe844 100644 --- a/packages/neo-one-client-common/src/errors.ts +++ b/packages/neo-one-client-common/src/errors.ts @@ -1,5 +1,6 @@ import { makeErrorWithCode } from '@neo-one/utils'; import { common, PrivateKey } from './common'; +import { OpCode } from './models/vm'; import { ContractParameter } from './types'; /* istanbul ignore next */ @@ -64,9 +65,13 @@ export const InvalidStorageFlagsError = makeErrorWithCode( 'INVALID_STORAGE_FLAGS', (storageFlags: number) => `Expected StorageFlags, found: ${storageFlags.toString(16)}`, ); -export const InvalidStateDescriptorTypeError = makeErrorWithCode( - 'INVALID_STATE_DESCRIPTOR_TYPE', - (stateDescriptorType: number) => `Expected StateDescriptorType, found: ${stateDescriptorType.toString(16)}`, +export const InvalidVerifyResultError = makeErrorWithCode( + 'INVALID_RELAY_RESULT_REASON', + (reason: number) => `Expected VerifyResult, found: ${reason.toString(16)}`, +); +export const InvalidVerifyResultJSONError = makeErrorWithCode( + 'INVALID_RELAY_RESULT_REASON_JSON', + (value: string) => `Invalid VerifyResult: ${value}`, ); export const InvalidContractParameterTypeJSONError = makeErrorWithCode( 'INVALID_CONTRACT_PARAMETER_TYPE_JSON', @@ -76,6 +81,22 @@ export const InvalidContractParameterTypeError = makeErrorWithCode( 'INVALID_CONTRACT_PARAMETER_TYPE', (contractParameterType: number) => `Expected contract parameter type, found: ${contractParameterType.toString(16)}`, ); +export const InvalidWitnessScopeJSONError = makeErrorWithCode( + 'INVALID_WITNESS_SCOPE_JSON', + (value: string) => `Invalid WitnessScope: ${value}`, +); +export const InvalidWitnessScopeError = makeErrorWithCode( + 'INVALID_WITNESS_SCOPE', + (witnessScope: number) => `Expected witness scope, found: ${witnessScope.toString(16)}`, +); +export const InvalidAttributeTypeJSONError = makeErrorWithCode( + 'INVALID_ATTRIBUTE_TYPE', + (value: string) => `Invalid AttributeType: ${value}`, +); +export const InvalidAttributeTypeError = makeErrorWithCode( + 'INVALID_ATTRIBUTE_TYPE', + (transactionAttributeType: number) => `Expected transaction type, found: ${transactionAttributeType.toString(16)}`, +); export const InvalidAttributeUsageError = makeErrorWithCode( 'INVALID_ATTRIBUTE_USAGE', (transactionAttributeUsage: number) => @@ -97,28 +118,27 @@ export const InvalidSignaturesError = makeErrorWithCode( 'INVALID_SIGNATURES', (m: number, value: number) => `Expected ${m} unique signatures, found: ${value}.`, ); - export const InvalidBIP32VersionError = makeErrorWithCode( 'INVALID_BIP32_KEY_VERSION', (version: number, expected: number) => `Expected key-version ${expected}; got ${version}`, ); - export const InvalidBIP32ExtendedKeyError = makeErrorWithCode( 'INVALID_BIP32_EXTENDED_KEY', (key: string) => `Invalid Extended Key: ${key}`, ); - export const InvalidBIP32ChildIndexError = makeErrorWithCode( 'INVALID_BIP32_CHILD_INDEX', (index: number) => `Index must be less than ${0x80000000}; got ${index}`, ); - export const InvalidBIP32HardenedError = makeErrorWithCode( 'INVALID_BIP32_HARDENED_CALL', () => 'Cannot derive a hardened child key from a public key.', ); - export const InvalidBIP32SerializePrivateNodeError = makeErrorWithCode( 'INVALID_BIP32_PRIVATE_SERIALIZATION', () => 'Cannot serialize a private extended key from a public node.', ); +export const InvalidJumpError = makeErrorWithCode( + 'INVALID_JMP_OPCODE', + (op: OpCode) => `Expected valid JMP instruction; got ${op}`, +); diff --git a/packages/neo-one-client-common/src/index.ts b/packages/neo-one-client-common/src/index.ts index 7d6bfde192..a44456a45b 100644 --- a/packages/neo-one-client-common/src/index.ts +++ b/packages/neo-one-client-common/src/index.ts @@ -8,6 +8,8 @@ export * from './IOHelper'; export * from './JSONHelper'; export * from './models'; export * from './paramUtils'; +export * from './prices'; +export * from './BaseScriptBuilder'; export * from './ScriptBuilder'; export * from './types'; export * from './utils'; diff --git a/packages/neo-one-client-common/src/models/AccountContract.ts b/packages/neo-one-client-common/src/models/AccountContract.ts new file mode 100644 index 0000000000..2e641b5bee --- /dev/null +++ b/packages/neo-one-client-common/src/models/AccountContract.ts @@ -0,0 +1,74 @@ +import _ from 'lodash'; +import { JSONHelper } from '../JSONHelper'; +import { common, ECPoint, UInt160 } from '../common'; +import { crypto } from '../crypto'; +import { scriptHashToAddress } from '../helpers'; +import { utils } from '../utils'; +import { + ContractParameterTypeModel, + toContractParameterType, + toJSONContractParameterType, +} from './ContractParameterTypeModel'; +import { AccountContractJSON } from './types'; + +export interface AccountContractAdd { + readonly script: Buffer; + readonly parameterList: readonly ContractParameterTypeModel[]; + readonly scriptHash?: UInt160; + readonly address?: string; +} +export class AccountContract { + public static createMultiSigContract(m: number, publicKeys: readonly ECPoint[]): AccountContract { + return new AccountContract({ + script: crypto.createMultiSignatureRedeemScript(m, publicKeys), + parameterList: _.range(m).map(() => ContractParameterTypeModel.Signature), + }); + } + + public static createSignatureContract(publicKey: ECPoint): AccountContract { + return new AccountContract({ + script: crypto.createSignatureRedeemScript(publicKey), + parameterList: [ContractParameterTypeModel.Signature], + }); + } + + public static fromJSON(json: AccountContractJSON): AccountContract { + return new AccountContract({ + script: JSONHelper.readBase64Buffer(json.script), + parameterList: json.parameterlist.map(toContractParameterType), + scriptHash: JSONHelper.readUInt160(json.scripthash), + address: json.address, + }); + } + + public readonly script: Buffer; + public readonly parameterList: readonly ContractParameterTypeModel[]; + public readonly scriptHashInternal: () => UInt160; + public readonly addressInternal: () => string; + + public constructor({ script, parameterList, scriptHash: scriptHashIn, address: addressIn }: AccountContractAdd) { + this.script = script; + this.parameterList = parameterList; + this.scriptHashInternal = scriptHashIn ? () => scriptHashIn : utils.lazy(() => crypto.hash160(this.script)); + this.addressInternal = addressIn + ? () => addressIn + : utils.lazy(() => scriptHashToAddress(common.uInt160ToString(this.scriptHashInternal()))); + } + + public get scriptHash() { + return this.scriptHashInternal(); + } + + public get address() { + return this.addressInternal(); + } + + public serializeJSON(): AccountContractJSON { + return { + script: JSONHelper.writeBase64Buffer(this.script), + parameterlist: this.parameterList.map(toJSONContractParameterType), + scripthash: JSONHelper.writeUInt160(this.scriptHash), + address: this.address, + }; + } +} diff --git a/packages/neo-one-client-common/src/models/AssetTypeModel.ts b/packages/neo-one-client-common/src/models/AssetTypeModel.ts deleted file mode 100644 index 8559d2b1fb..0000000000 --- a/packages/neo-one-client-common/src/models/AssetTypeModel.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { InvalidAssetTypeError, InvalidAssetTypeJSONError } from '../errors'; -import { AssetTypeJSON } from './types'; - -export enum AssetTypeModel { - CreditFlag = 0x40, - DutyFlag = 0x80, - GoverningToken = 0x00, - UtilityToken = 0x01, - Currency = 0x08, - Share = 0x90, - Invoice = 0x98, - Token = 0x60, -} - -export const hasFlag = ( - assetType: AssetTypeModel, - flag: AssetTypeModel, - // tslint:disable-next-line -): boolean => (assetType & flag) === flag; - -const isAssetType = (assetType: number): assetType is AssetTypeModel => - // tslint:disable-next-line strict-type-predicates - AssetTypeModel[assetType] !== undefined; - -export const assertAssetType = (assetType: number): AssetTypeModel => { - if (!isAssetType(assetType)) { - throw new InvalidAssetTypeError(assetType); - } - - return assetType; -}; - -export const toJSONAssetType = (type: AssetTypeModel): AssetTypeJSON => assertAssetTypeJSON(AssetTypeModel[type]); - -const isAssetTypeJSON = (assetType: string): assetType is AssetTypeJSON => - // tslint:disable-next-line strict-type-predicates no-any - AssetTypeModel[assetType as any] !== undefined; - -export const assertAssetTypeJSON = (type: string): AssetTypeJSON => { - if (!isAssetTypeJSON(type)) { - throw new InvalidAssetTypeJSONError(type); - } - - return type; -}; - -export const toAssetType = (type: AssetTypeJSON): AssetTypeModel => AssetTypeModel[type]; diff --git a/packages/neo-one-client-common/src/models/ContractParameterTypeModel.ts b/packages/neo-one-client-common/src/models/ContractParameterTypeModel.ts index f0663112a2..d1ce830992 100644 --- a/packages/neo-one-client-common/src/models/ContractParameterTypeModel.ts +++ b/packages/neo-one-client-common/src/models/ContractParameterTypeModel.ts @@ -2,17 +2,18 @@ import { InvalidContractParameterTypeError, InvalidContractParameterTypeJSONErro import { ContractParameterTypeJSON } from './types'; export enum ContractParameterTypeModel { - Signature = 0x00, - Boolean = 0x01, - Integer = 0x02, - Hash160 = 0x03, - Hash256 = 0x04, - ByteArray = 0x05, - PublicKey = 0x06, - String = 0x07, - Array = 0x10, - Map = 0x12, - InteropInterface = 0xf0, + Any = 0x00, + Boolean = 0x10, + Integer = 0x11, + ByteArray = 0x12, + String = 0x13, + Hash160 = 0x14, + Hash256 = 0x15, + PublicKey = 0x16, + Signature = 0x17, + Array = 0x20, + Map = 0x22, + InteropInterface = 0x30, Void = 0xff, } diff --git a/packages/neo-one-client-common/src/models/Serializable.ts b/packages/neo-one-client-common/src/models/Serializable.ts index 9182f67340..3f630b998c 100644 --- a/packages/neo-one-client-common/src/models/Serializable.ts +++ b/packages/neo-one-client-common/src/models/Serializable.ts @@ -2,7 +2,7 @@ import { BinaryWriter } from '../BinaryWriter'; export type SerializeWire = () => Buffer; // tslint:disable-next-line no-unused -export interface SerializableWire { +export interface SerializableWire { readonly serializeWireBase: (writer: BinaryWriter) => void; readonly serializeWire: SerializeWire; } @@ -13,3 +13,15 @@ export const createSerializeWire = (serializeWireBase: (writer: BinaryWriter) => return writer.toBuffer(); }; + +export interface SerializableJSON { + readonly serializeJSON: () => TJSON; +} + +export const getHashData = (wire: Buffer, magic: number) => { + const writer = new BinaryWriter(); + writer.writeUInt32LE(magic); + writer.writeBytes(wire); + + return writer.toBuffer(); +}; diff --git a/packages/neo-one-client-common/src/models/SignerModel.ts b/packages/neo-one-client-common/src/models/SignerModel.ts new file mode 100644 index 0000000000..b90023b464 --- /dev/null +++ b/packages/neo-one-client-common/src/models/SignerModel.ts @@ -0,0 +1,79 @@ +import { BinaryWriter } from '../BinaryWriter'; +import { ECPoint, UInt160 } from '../common'; +import { IOHelper } from '../IOHelper'; +import { JSONHelper } from '../JSONHelper'; +import { utils } from '../utils'; +import { createSerializeWire, SerializableWire, SerializeWire } from './Serializable'; +import { SignerJSON } from './types'; +import { toJSONWitnessScope, witnessScopeHasFlag, WitnessScopeModel } from './WitnessScopeModel'; + +export interface SignerAdd { + readonly account: UInt160; + readonly scopes: WitnessScopeModel; + readonly allowedContracts?: readonly UInt160[]; + readonly allowedGroups?: readonly ECPoint[]; +} + +export const hasCustomContracts = (scopes: WitnessScopeModel) => + witnessScopeHasFlag(scopes, WitnessScopeModel.CustomContracts); +export const hasCustomGroups = (scopes: WitnessScopeModel) => + witnessScopeHasFlag(scopes, WitnessScopeModel.CustomGroups); + +// Limits the number of AllowedContracts or AllowedGroups for deserialize +export const MAX_SUB_ITEMS = 16; + +export class SignerModel implements SerializableWire { + public static readonly maxSubItems = MAX_SUB_ITEMS; + public readonly account: UInt160; + public readonly scopes: WitnessScopeModel; + public readonly allowedContracts: readonly UInt160[]; + public readonly allowedGroups: readonly ECPoint[]; + public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + + private readonly sizeInternal = utils.lazy( + () => + IOHelper.sizeOfUInt160 + + IOHelper.sizeOfUInt8 + + (hasCustomContracts(this.scopes) + ? IOHelper.sizeOfArray(this.allowedContracts, () => IOHelper.sizeOfUInt160) + : 0) + + (hasCustomGroups(this.scopes) + ? IOHelper.sizeOfArray(this.allowedGroups, (ecPoint) => IOHelper.sizeOfECPoint(ecPoint)) + : 0), + ); + + public constructor({ account, scopes, allowedContracts, allowedGroups }: SignerAdd) { + this.account = account; + this.scopes = scopes; + this.allowedContracts = allowedContracts === undefined ? [] : allowedContracts; + this.allowedGroups = allowedGroups === undefined ? [] : allowedGroups; + } + + public get size() { + return this.sizeInternal(); + } + + public serializeWireBase(writer: BinaryWriter): void { + writer.writeUInt160(this.account); + writer.writeUInt8(this.scopes); + if (witnessScopeHasFlag(this.scopes, WitnessScopeModel.CustomContracts)) { + writer.writeArray(this.allowedContracts, (contract) => writer.writeUInt160(contract)); + } + if (witnessScopeHasFlag(this.scopes, WitnessScopeModel.CustomGroups)) { + writer.writeArray(this.allowedGroups, (group) => writer.writeECPoint(group)); + } + } + + public serializeJSON(): SignerJSON { + return { + account: JSONHelper.writeUInt160(this.account), + scopes: toJSONWitnessScope(this.scopes), + allowedcontracts: hasCustomContracts(this.scopes) + ? this.allowedContracts.map((contract) => JSONHelper.writeUInt160(contract)) + : undefined, + allowedgroups: hasCustomGroups(this.scopes) + ? this.allowedGroups.map((group) => JSONHelper.writeECPoint(group)) + : undefined, + }; + } +} diff --git a/packages/neo-one-client-common/src/models/StateDescriptorTypeModel.ts b/packages/neo-one-client-common/src/models/StateDescriptorTypeModel.ts deleted file mode 100644 index 2120b41fa1..0000000000 --- a/packages/neo-one-client-common/src/models/StateDescriptorTypeModel.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { InvalidStateDescriptorTypeError } from '../errors'; - -export enum StateDescriptorTypeModel { - Account = 0x40, - Validator = 0x48, -} - -const isStateDescriptorType = (value: number): value is StateDescriptorTypeModel => - // tslint:disable-next-line strict-type-predicates - StateDescriptorTypeModel[value] !== undefined; - -export const assertStateDescriptorType = (value: number): StateDescriptorTypeModel => { - if (isStateDescriptorType(value)) { - return value; - } - throw new InvalidStateDescriptorTypeError(value); -}; diff --git a/packages/neo-one-client-common/src/models/StorageFlagsModel.ts b/packages/neo-one-client-common/src/models/StorageFlagsModel.ts index c482ca0c77..796b1630a4 100644 --- a/packages/neo-one-client-common/src/models/StorageFlagsModel.ts +++ b/packages/neo-one-client-common/src/models/StorageFlagsModel.ts @@ -9,7 +9,7 @@ export enum StorageFlagsModel { export const hasStorageFlag = ( assetType: StorageFlagsModel, flag: StorageFlagsModel, - // tslint:disable-next-line + // tslint:disable-next-line: no-bitwise ): boolean => (assetType & flag) === flag; const isStorageFlags = (storageFlags: number): storageFlags is StorageFlagsModel => diff --git a/packages/neo-one-client-common/src/models/VerifyResultModel.ts b/packages/neo-one-client-common/src/models/VerifyResultModel.ts new file mode 100644 index 0000000000..f40351a222 --- /dev/null +++ b/packages/neo-one-client-common/src/models/VerifyResultModel.ts @@ -0,0 +1,49 @@ +import { InvalidVerifyResultError, InvalidVerifyResultJSONError } from '../errors'; +import { VerifyResultJSON } from './types'; + +export enum VerifyResultModel { + Succeed, + AlreadyExists, + OutOfMemory, + UnableToVerify, + Invalid, + Expired, + InsufficientFunds, + PolicyFail, + Unknown, +} + +export const hasVerifyResult = ( + reason: VerifyResultModel, + flag: VerifyResultModel, + // tslint:disable-next-line: no-bitwise +): boolean => (reason & flag) === flag; + +export const isVerifyResult = (value: number): value is VerifyResultModel => + // tslint:disable-next-line: strict-type-predicates + VerifyResultModel[value] !== undefined; + +export const assertVerifyResult = (value: number): VerifyResultModel => { + if (!isVerifyResult(value)) { + throw new InvalidVerifyResultError(value); + } + + return value; +}; + +export const toVerifyResultJSON = (reason: VerifyResultModel): VerifyResultJSON => + assertVerifyResultJSON(VerifyResultModel[reason]); + +export const isVerifyResultJSON = (reason: string): reason is VerifyResultJSON => + // tslint:disable-next-line: strict-type-predicates no-any + VerifyResultModel[reason as any] !== undefined; + +export const assertVerifyResultJSON = (reason: string): VerifyResultJSON => { + if (!isVerifyResultJSON(reason)) { + throw new InvalidVerifyResultJSONError(reason); + } + + return reason; +}; + +export const toVerifyResult = (reason: VerifyResultJSON): VerifyResultModel => VerifyResultModel[reason]; diff --git a/packages/neo-one-client-common/src/models/WitnessModel.ts b/packages/neo-one-client-common/src/models/WitnessModel.ts index 4b70dd9f38..b8097da239 100644 --- a/packages/neo-one-client-common/src/models/WitnessModel.ts +++ b/packages/neo-one-client-common/src/models/WitnessModel.ts @@ -6,7 +6,7 @@ export interface WitnessAdd { readonly invocation: Buffer; } -export class WitnessModel implements SerializableWire { +export class WitnessModel implements SerializableWire { public readonly verification: Buffer; public readonly invocation: Buffer; public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); diff --git a/packages/neo-one-client-common/src/models/WitnessScopeModel.ts b/packages/neo-one-client-common/src/models/WitnessScopeModel.ts new file mode 100644 index 0000000000..d978ad1ecf --- /dev/null +++ b/packages/neo-one-client-common/src/models/WitnessScopeModel.ts @@ -0,0 +1,57 @@ +import { InvalidWitnessScopeError, InvalidWitnessScopeJSONError } from '../errors'; +import { WitnessScopeJSON } from './types'; + +export enum WitnessScopeModel { + None = 0x00, + CalledByEntry = 0x01, + CustomContracts = 0x10, + CustomGroups = 0x20, + Global = 0x80, + CalledByEntryAndCustomContracts = 0x11, + CalledByEntryAndCustomGroups = 0x21, + CalledByEntryAndCustomGroupsAndCustomContracts = 0x31, + CustomContractsAndCustomGroups = 0x30, +} + +export const isWitnessScope = (value: number): value is WitnessScopeModel => + // tslint:disable-next-line: strict-type-predicates + WitnessScopeModel[value] !== undefined; + +export const assertWitnessScope = (value: number): WitnessScopeModel => { + if (isWitnessScope(value)) { + return value; + } + throw new InvalidWitnessScopeError(value); +}; + +export const toJSONWitnessScope = (type: WitnessScopeModel): WitnessScopeJSON => + assertWitnessScopeJSON(WitnessScopeModel[type]); + +const isWitnessScopeJSON = (value: string): value is WitnessScopeJSON => + // tslint:disable-next-line strict-type-predicates no-any + WitnessScopeModel[value as any] !== undefined; + +export const assertWitnessScopeJSON = (value: string): WitnessScopeJSON => { + if (isWitnessScopeJSON(value)) { + return value; + } + throw new InvalidWitnessScopeJSONError(value); +}; + +export const toWitnessScope = (value: WitnessScopeJSON): WitnessScopeModel => + assertWitnessScope(WitnessScopeModel[value]); + +export const witnessScopeHasFlag = (value: WitnessScopeModel, flag: WitnessScopeModel) => { + if ( + (value === WitnessScopeModel.Global && flag !== WitnessScopeModel.Global) || + (value !== WitnessScopeModel.Global && flag === WitnessScopeModel.Global) + ) { + return false; + } + // tslint:disable-next-line: no-bitwise + if ((value & flag) === flag) { + return true; + } + + return false; +}; diff --git a/packages/neo-one-client-common/src/models/index.ts b/packages/neo-one-client-common/src/models/index.ts index 4c8f2061ec..50c880cde2 100644 --- a/packages/neo-one-client-common/src/models/index.ts +++ b/packages/neo-one-client-common/src/models/index.ts @@ -1,9 +1,13 @@ -export * from './AssetTypeModel'; +export * from './AccountContract'; export * from './ContractParameterTypeModel'; +export * from './SignerModel'; +export * from './VerifyResultModel'; export * from './Serializable'; -export * from './StateDescriptorTypeModel'; export * from './StorageFlagsModel'; export * from './WitnessModel'; +export * from './WitnessScopeModel'; export * from './transaction'; +export * from './nep5'; export * from './types'; export * from './vm'; +export * from './trigger'; diff --git a/packages/neo-one-client-common/src/models/nep5/Nep5BalanceKeyModel.ts b/packages/neo-one-client-common/src/models/nep5/Nep5BalanceKeyModel.ts new file mode 100644 index 0000000000..5d22e82247 --- /dev/null +++ b/packages/neo-one-client-common/src/models/nep5/Nep5BalanceKeyModel.ts @@ -0,0 +1,24 @@ +import { BinaryWriter } from '../../BinaryWriter'; +import { UInt160 } from '../../common'; +import { createSerializeWire, SerializableWire, SerializeWire } from '../Serializable'; + +export interface Nep5BalanceKeyModelAdd { + readonly userScriptHash: UInt160; + readonly assetScriptHash: UInt160; +} + +export class Nep5BalanceKeyModel implements SerializableWire { + public readonly userScriptHash: UInt160; + public readonly assetScriptHash: UInt160; + public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + + public constructor({ userScriptHash, assetScriptHash }: Nep5BalanceKeyModelAdd) { + this.userScriptHash = userScriptHash; + this.assetScriptHash = assetScriptHash; + } + + public serializeWireBase(writer: BinaryWriter): void { + writer.writeUInt160(this.userScriptHash); + writer.writeUInt160(this.assetScriptHash); + } +} diff --git a/packages/neo-one-client-common/src/models/nep5/Nep5BalanceModel.ts b/packages/neo-one-client-common/src/models/nep5/Nep5BalanceModel.ts new file mode 100644 index 0000000000..c177181682 --- /dev/null +++ b/packages/neo-one-client-common/src/models/nep5/Nep5BalanceModel.ts @@ -0,0 +1,23 @@ +import { BinaryWriter } from '../../BinaryWriter'; +import { createSerializeWire, SerializableWire, SerializeWire } from '../Serializable'; + +export interface Nep5BalanceModelAdd { + readonly balanceBuffer: Buffer; + readonly lastUpdatedBlock: number; +} + +export class Nep5BalanceModel implements SerializableWire { + public readonly balanceInternal: Buffer; + public readonly lastUpdatedBlock: number; + public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + + public constructor({ balanceBuffer, lastUpdatedBlock }: Nep5BalanceModelAdd) { + this.balanceInternal = balanceBuffer; + this.lastUpdatedBlock = lastUpdatedBlock; + } + + public serializeWireBase(writer: BinaryWriter): void { + writer.writeVarBytesLE(this.balanceInternal); + writer.writeUInt32LE(this.lastUpdatedBlock); + } +} diff --git a/packages/neo-one-client-common/src/models/nep5/Nep5TransferKeyModel.ts b/packages/neo-one-client-common/src/models/nep5/Nep5TransferKeyModel.ts new file mode 100644 index 0000000000..fadd3d4bd1 --- /dev/null +++ b/packages/neo-one-client-common/src/models/nep5/Nep5TransferKeyModel.ts @@ -0,0 +1,38 @@ +import { BN } from 'bn.js'; +import { BinaryWriter } from '../../BinaryWriter'; +import { UInt160 } from '../../common'; +import { createSerializeWire, SerializableWire, SerializeWire } from '../Serializable'; + +export interface Nep5TransferKeyModelAdd { + readonly userScriptHash: UInt160; + readonly timestampMS: BN; + readonly assetScriptHash: UInt160; + readonly blockTransferNotificationIndex: number; +} + +export class Nep5TransferKeyModel implements SerializableWire { + public readonly userScriptHash: UInt160; + public readonly timestampMS: BN; + public readonly assetScriptHash: UInt160; + public readonly blockTransferNotificationIndex: number; + public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + + public constructor({ + userScriptHash, + timestampMS, + assetScriptHash, + blockTransferNotificationIndex, + }: Nep5TransferKeyModelAdd) { + this.userScriptHash = userScriptHash; + this.timestampMS = timestampMS; + this.assetScriptHash = assetScriptHash; + this.blockTransferNotificationIndex = blockTransferNotificationIndex; + } + + public serializeWireBase(writer: BinaryWriter): void { + writer.writeUInt160(this.userScriptHash); + writer.writeUInt64LE(this.timestampMS); + writer.writeUInt160(this.assetScriptHash); + writer.writeUInt32LE(this.blockTransferNotificationIndex); + } +} diff --git a/packages/neo-one-client-common/src/models/nep5/Nep5TransferModel.ts b/packages/neo-one-client-common/src/models/nep5/Nep5TransferModel.ts new file mode 100644 index 0000000000..8ba02bad5c --- /dev/null +++ b/packages/neo-one-client-common/src/models/nep5/Nep5TransferModel.ts @@ -0,0 +1,32 @@ +import { BinaryWriter } from '../../BinaryWriter'; +import { UInt160, UInt256 } from '../../common'; +import { createSerializeWire, SerializableWire, SerializeWire } from '../Serializable'; + +export interface Nep5TransferModelAdd { + readonly userScriptHash: UInt160; + readonly blockIndex: number; + readonly txHash: UInt256; + readonly amountBuffer: Buffer; +} + +export class Nep5TransferModel implements SerializableWire { + public readonly userScriptHash: UInt160; + public readonly blockIndex: number; + public readonly txHash: UInt256; + public readonly amountInternal: Buffer; + public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + + public constructor({ userScriptHash, blockIndex, txHash, amountBuffer }: Nep5TransferModelAdd) { + this.userScriptHash = userScriptHash; + this.blockIndex = blockIndex; + this.txHash = txHash; + this.amountInternal = amountBuffer; + } + + public serializeWireBase(writer: BinaryWriter): void { + writer.writeUInt160(this.userScriptHash); + writer.writeUInt32LE(this.blockIndex); + writer.writeUInt256(this.txHash); + writer.writeVarBytesLE(this.amountInternal); + } +} diff --git a/packages/neo-one-client-common/src/models/nep5/index.ts b/packages/neo-one-client-common/src/models/nep5/index.ts new file mode 100644 index 0000000000..e011fa908e --- /dev/null +++ b/packages/neo-one-client-common/src/models/nep5/index.ts @@ -0,0 +1,4 @@ +export * from './Nep5BalanceModel'; +export * from './Nep5TransferModel'; +export * from './Nep5TransferKeyModel'; +export * from './Nep5BalanceKeyModel'; diff --git a/packages/neo-one-client-common/src/models/transaction/ClaimTransactionModel.ts b/packages/neo-one-client-common/src/models/transaction/ClaimTransactionModel.ts deleted file mode 100644 index eb1d158364..0000000000 --- a/packages/neo-one-client-common/src/models/transaction/ClaimTransactionModel.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { BinaryWriter } from '../../BinaryWriter'; -import { InvalidFormatError } from '../../common'; -import { WitnessModel } from '../WitnessModel'; -import { AttributeModel } from './attribute'; -import { InputModel } from './InputModel'; -import { OutputModel } from './OutputModel'; -import { TransactionBaseModel, TransactionBaseModelAdd } from './TransactionBaseModel'; -import { TransactionTypeModel } from './TransactionTypeModel'; - -export interface ClaimTransactionModelAdd< - TAttribute extends AttributeModel = AttributeModel, - TInput extends InputModel = InputModel, - TOutput extends OutputModel = OutputModel, - TWitness extends WitnessModel = WitnessModel -> extends TransactionBaseModelAdd { - readonly claims: readonly TInput[]; -} - -export class ClaimTransactionModel< - TAttribute extends AttributeModel = AttributeModel, - TInput extends InputModel = InputModel, - TOutput extends OutputModel = OutputModel, - TWitness extends WitnessModel = WitnessModel -> extends TransactionBaseModel { - public readonly claims: readonly InputModel[]; - public constructor({ - version, - attributes, - inputs, - outputs, - scripts, - hash, - claims, - }: ClaimTransactionModelAdd) { - super({ - version, - type: TransactionTypeModel.Claim, - attributes, - inputs, - outputs, - scripts, - hash, - }); - - this.claims = claims; - - if (this.version !== 0) { - throw new InvalidFormatError(`expected version 0, found: ${this.version}`); - } - - if (this.claims.length === 0) { - throw new InvalidFormatError('expected claims, found none.'); - } - } - - public clone({ - scripts = this.scripts, - attributes = this.attributes, - inputs = this.inputs, - outputs = this.outputs, - }: { - readonly scripts?: readonly WitnessModel[]; - readonly attributes?: readonly AttributeModel[]; - readonly inputs?: readonly InputModel[]; - readonly outputs?: readonly OutputModel[]; - }): this { - // tslint:disable-next-line no-any - return new (this.constructor as any)({ - version: this.version, - attributes, - inputs, - outputs, - scripts, - claims: this.claims, - }); - } - - public serializeExclusiveBase(writer: BinaryWriter): void { - writer.writeArray(this.claims, (claim) => { - claim.serializeWireBase(writer); - }); - } -} diff --git a/packages/neo-one-client-common/src/models/transaction/FeelessTransactionModel.ts b/packages/neo-one-client-common/src/models/transaction/FeelessTransactionModel.ts new file mode 100644 index 0000000000..84a64c3f07 --- /dev/null +++ b/packages/neo-one-client-common/src/models/transaction/FeelessTransactionModel.ts @@ -0,0 +1,161 @@ +import { Constructor } from '@neo-one/utils'; +import BN from 'bn.js'; +import { BinaryWriter } from '../../BinaryWriter'; +import { common, ECPoint, InvalidFormatError, PrivateKey, UInt160, UInt256, UInt256Hex } from '../../common'; +import { crypto } from '../../crypto'; +import { utils } from '../../utils'; +import { createSerializeWire, getHashData, SerializableWire, SerializeWire } from '../Serializable'; +import { SignerModel } from '../SignerModel'; +import { WitnessModel } from '../WitnessModel'; +import { AttributeModel } from './attribute'; + +export interface TransactionConsensusOptions { + readonly nonce: number; + readonly validUntilBlock: number; + readonly messageMagic: number; +} + +export interface TransactionFeesAdd { + readonly systemFee: BN; + readonly networkFee: BN; +} + +export interface FeelessTransactionModelAdd< + TAttribute extends AttributeModel = AttributeModel, + TWitness extends WitnessModel = WitnessModel, + TSigner extends SignerModel = SignerModel +> { + readonly version?: number; + readonly nonce?: number; + readonly validUntilBlock: number; + readonly attributes?: readonly TAttribute[]; + readonly signers?: readonly TSigner[]; + readonly script: Buffer; + readonly witnesses?: readonly TWitness[]; + readonly hash?: UInt256; + readonly messageMagic: number; +} + +export const MAX_TRANSACTION_ATTRIBUTES = 16; +export const MAX_TRANSACTION_SIZE = 102400; +export const MAX_VALID_UNTIL_BLOCK_INCREMENT = 5760; // 24 hours +export const DEFAULT_VERSION = 0; + +export class FeelessTransactionModel< + TAttribute extends AttributeModel = AttributeModel, + TWitness extends WitnessModel = WitnessModel, + TSigner extends SignerModel = SignerModel +> implements SerializableWire { + public static readonly VERSION: number = 0; + public static readonly maxTransactionSize = MAX_TRANSACTION_SIZE; + public static readonly maxValidBlockIncrement = MAX_VALID_UNTIL_BLOCK_INCREMENT; + public static readonly maxTransactionAttributes = MAX_TRANSACTION_ATTRIBUTES; + protected static readonly WitnessConstructor: Constructor = WitnessModel; + + public readonly version: number; + public readonly nonce: number; + public readonly validUntilBlock: number; + public readonly signers: readonly TSigner[]; + public readonly sender?: UInt160; + public readonly attributes: readonly TAttribute[]; + public readonly script: Buffer; + public readonly witnesses: readonly TWitness[]; + public readonly messageMagic: number; + + public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + public readonly serializeUnsigned: SerializeWire = createSerializeWire(this.serializeUnsignedBase.bind(this)); + private readonly hashInternal: () => UInt256; + private readonly hashHexInternal = utils.lazy(() => common.uInt256ToHex(this.hash)); + private readonly messageInternal = utils.lazy(() => getHashData(this.serializeUnsigned(), this.messageMagic)); + + public constructor({ + version, + nonce = 0, + attributes = [], + witnesses = [], + signers = [], + validUntilBlock, + script, + hash, + messageMagic, + }: FeelessTransactionModelAdd) { + this.version = version === undefined ? DEFAULT_VERSION : version; + this.nonce = nonce; + this.sender = signers[0]?.account; + this.attributes = attributes; + this.witnesses = witnesses; + this.signers = signers; + this.validUntilBlock = validUntilBlock; + this.script = script; + this.messageMagic = messageMagic; + const hashIn = hash; + this.hashInternal = hashIn === undefined ? utils.lazy(() => crypto.hash256(this.message)) : () => hashIn; + + if (this.attributes.length > MAX_TRANSACTION_ATTRIBUTES) { + throw new InvalidFormatError( + `Expected less than ${MAX_TRANSACTION_ATTRIBUTES} attributes, found: ${attributes.length}`, + ); + } + } + + public get hash(): UInt256 { + return this.hashInternal(); + } + + public get hashHex(): UInt256Hex { + return this.hashHexInternal(); + } + + public get message(): Buffer { + return this.messageInternal(); + } + + public cloneWithConsensusOptions( + options: TransactionConsensusOptions, + ): FeelessTransactionModel { + return new FeelessTransactionModel({ + version: this.version, + attributes: this.attributes, + signers: this.signers, + script: this.script, + hash: this.hash, + witnesses: this.witnesses, + nonce: options.nonce, + validUntilBlock: options.validUntilBlock, + messageMagic: this.messageMagic, + }); + } + + public sign(_key: PrivateKey): FeelessTransactionModel { + throw new Error('clone to a fee transaction before signing'); + } + + public signWithSignature( + _signature: Buffer, + _publicKey: ECPoint, + ): FeelessTransactionModel { + throw new Error('clone to a fee transaction before signing'); + } + + public serializeUnsignedBase(writer: BinaryWriter): void { + writer.writeUInt8(this.version); + writer.writeUInt32LE(this.nonce); + writer.writeUInt64LE(new BN(0)); + writer.writeUInt64LE(new BN(0)); + writer.writeUInt32LE(this.validUntilBlock); + writer.writeArray(this.signers, (signer) => { + signer.serializeWireBase(writer); + }); + writer.writeArray(this.attributes, (attribute) => { + attribute.serializeWireBase(writer); + }); + writer.writeVarBytesLE(this.script); + } + + public serializeWireBase(writer: BinaryWriter): void { + this.serializeUnsignedBase(writer); + writer.writeArray(this.witnesses, (witness) => { + witness.serializeWireBase(writer); + }); + } +} diff --git a/packages/neo-one-client-common/src/models/transaction/InputModel.ts b/packages/neo-one-client-common/src/models/transaction/InputModel.ts deleted file mode 100644 index 9f0c034171..0000000000 --- a/packages/neo-one-client-common/src/models/transaction/InputModel.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { BinaryWriter } from '../../BinaryWriter'; -import { common, UInt256 } from '../../common'; -import { IOHelper } from '../../IOHelper'; -import { createSerializeWire, SerializableWire, SerializeWire } from '../Serializable'; - -export interface InputModelAdd { - readonly hash: UInt256; - readonly index: number; -} - -const SIZE = IOHelper.sizeOfUInt256 + IOHelper.sizeOfUInt16LE; -export class InputModel implements SerializableWire { - public static readonly size: number = SIZE; - public readonly hash: UInt256; - public readonly hashHex: string; - public readonly index: number; - public readonly size: number = SIZE; - public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - - public constructor({ hash, index }: InputModelAdd) { - this.hash = hash; - this.hashHex = common.uInt256ToHex(hash); - this.index = index; - } - - public serializeWireBase(writer: BinaryWriter): void { - writer.writeUInt256(this.hash); - writer.writeUInt16LE(this.index); - } -} diff --git a/packages/neo-one-client-common/src/models/transaction/InvocationTransactionModel.ts b/packages/neo-one-client-common/src/models/transaction/InvocationTransactionModel.ts deleted file mode 100644 index 92f4cafb44..0000000000 --- a/packages/neo-one-client-common/src/models/transaction/InvocationTransactionModel.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { BN } from 'bn.js'; -import { BinaryWriter } from '../../BinaryWriter'; -import { InvalidFormatError } from '../../common'; -import { utils } from '../../utils'; -import { WitnessModel } from '../WitnessModel'; -import { AttributeModel } from './attribute'; -import { InputModel } from './InputModel'; -import { OutputModel } from './OutputModel'; -import { TransactionBaseModel, TransactionBaseModelAdd } from './TransactionBaseModel'; -import { TransactionTypeModel } from './TransactionTypeModel'; - -export interface InvocationTransactionModelAdd< - TAttribute extends AttributeModel = AttributeModel, - TInput extends InputModel = InputModel, - TOutput extends OutputModel = OutputModel, - TWitness extends WitnessModel = WitnessModel -> extends TransactionBaseModelAdd { - readonly gas: BN; - readonly script: Buffer; -} - -export class InvocationTransactionModel< - TAttribute extends AttributeModel = AttributeModel, - TInput extends InputModel = InputModel, - TOutput extends OutputModel = OutputModel, - TWitness extends WitnessModel = WitnessModel -> extends TransactionBaseModel { - public static readonly VERSION = 1; - public readonly gas: BN; - public readonly script: Buffer; - - public constructor({ - version, - attributes, - inputs, - outputs, - scripts, - hash, - gas, - script, - }: InvocationTransactionModelAdd) { - super({ - version, - type: TransactionTypeModel.Invocation, - attributes, - inputs, - outputs, - scripts, - hash, - }); - - this.gas = gas; - this.script = script; - - if (this.version > 1) { - throw new InvalidFormatError(`expected version <= 1, found: ${this.version}`); - } - - if (this.script.length === 0) { - throw new InvalidFormatError('expected script'); - } - - if (this.gas.lt(utils.ZERO)) { - throw new InvalidFormatError(`expected valid gas, found: ${this.gas.toString()}`); - } - } - - public clone({ - scripts = this.scripts, - attributes = this.attributes, - inputs = this.inputs, - outputs = this.outputs, - }: { - readonly scripts?: readonly WitnessModel[]; - readonly attributes?: readonly AttributeModel[]; - readonly inputs?: readonly InputModel[]; - readonly outputs?: readonly OutputModel[]; - }): this { - // tslint:disable-next-line no-any - return new (this.constructor as any)({ - version: this.version, - attributes, - inputs, - outputs, - scripts, - gas: this.gas, - script: this.script, - }); - } - - public serializeExclusiveBase(writer: BinaryWriter): void { - writer.writeVarBytesLE(this.script); - if (this.version >= 1) { - writer.writeFixed8(this.gas); - } - } -} diff --git a/packages/neo-one-client-common/src/models/transaction/OutputModel.ts b/packages/neo-one-client-common/src/models/transaction/OutputModel.ts deleted file mode 100644 index ede6b4f980..0000000000 --- a/packages/neo-one-client-common/src/models/transaction/OutputModel.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { BN } from 'bn.js'; -import { BinaryWriter } from '../../BinaryWriter'; -import { UInt160, UInt256 } from '../../common'; -import { IOHelper } from '../../IOHelper'; -import { createSerializeWire, SerializableWire, SerializeWire } from '../Serializable'; - -export interface OutputModelKey { - readonly hash: UInt256; - readonly index: number; -} - -export interface OutputModelAdd { - readonly asset: UInt256; - readonly value: BN; - readonly address: UInt160; -} - -const SIZE = IOHelper.sizeOfUInt256 + IOHelper.sizeOfFixed8 + IOHelper.sizeOfUInt160; -export class OutputModel implements SerializableWire { - public static readonly size: number = SIZE; - public readonly asset: UInt256; - public readonly value: BN; - public readonly address: UInt160; - public readonly size: number = SIZE; - public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - - public constructor({ asset, value, address }: OutputModelAdd) { - this.asset = asset; - this.value = value; - this.address = address; - } - - public clone({ value = this.value }: { readonly value?: BN }): OutputModel { - return new OutputModel({ - asset: this.asset, - value, - address: this.address, - }); - } - - public serializeWireBase(writer: BinaryWriter): void { - writer.writeUInt256(this.asset); - writer.writeFixed8(this.value); - writer.writeUInt160(this.address); - } -} diff --git a/packages/neo-one-client-common/src/models/transaction/TransactionBaseModel.ts b/packages/neo-one-client-common/src/models/transaction/TransactionBaseModel.ts deleted file mode 100644 index fcb57369ea..0000000000 --- a/packages/neo-one-client-common/src/models/transaction/TransactionBaseModel.ts +++ /dev/null @@ -1,150 +0,0 @@ -import { Constructor } from '@neo-one/utils'; -import { BinaryWriter } from '../../BinaryWriter'; -import { common, ECPoint, InvalidFormatError, PrivateKey, UInt256, UInt256Hex } from '../../common'; -import { crypto } from '../../crypto'; -import { utils } from '../../utils'; -import { createSerializeWire, SerializableWire, SerializeWire } from '../Serializable'; -import { WitnessModel } from '../WitnessModel'; -import { AttributeModel } from './attribute'; -import { InputModel } from './InputModel'; -import { OutputModel } from './OutputModel'; -import { TransactionTypeModel } from './TransactionTypeModel'; - -export interface TransactionBaseModelAdd< - TAttribute extends AttributeModel, - TInput extends InputModel, - TOutput extends OutputModel, - TWitness extends WitnessModel -> { - readonly version?: number; - readonly attributes?: readonly TAttribute[]; - readonly inputs?: readonly TInput[]; - readonly outputs?: readonly TOutput[]; - readonly scripts?: readonly TWitness[]; - readonly hash?: UInt256; -} - -export interface TransactionBaseModelAddWithType< - Type extends TransactionTypeModel, - TAttribute extends AttributeModel, - TInput extends InputModel, - TOutput extends OutputModel, - TWitness extends WitnessModel -> extends TransactionBaseModelAdd { - readonly type: Type; -} - -export const MAX_TRANSACTION_ATTRIBUTES = 16; - -export abstract class TransactionBaseModel< - Type extends TransactionTypeModel = TransactionTypeModel, - TAttribute extends AttributeModel = AttributeModel, - TInput extends InputModel = InputModel, - TOutput extends OutputModel = OutputModel, - TWitness extends WitnessModel = WitnessModel -> implements SerializableWire { - public static readonly VERSION: number = 0; - protected static readonly WitnessConstructor: Constructor = WitnessModel; - - public readonly type: Type; - public readonly version: number; - public readonly attributes: readonly TAttribute[]; - public readonly inputs: readonly TInput[]; - public readonly outputs: readonly TOutput[]; - public readonly scripts: readonly TWitness[]; - public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - public readonly serializeUnsigned: SerializeWire = createSerializeWire(this.serializeUnsignedBase.bind(this)); - private readonly hashInternal: () => UInt256; - private readonly hashHexInternal = utils.lazy(() => common.uInt256ToHex(this.hash)); - private readonly messageInternal = utils.lazy(() => this.serializeUnsigned()); - - public constructor({ - version, - type, - attributes = [], - inputs = [], - outputs = [], - scripts = [], - hash, - }: TransactionBaseModelAddWithType) { - // workaround: babel fails to transpile if we have - // static VERSION: number = 0; - this.version = version === undefined ? (this.constructor as typeof TransactionBaseModel).VERSION : version; - this.type = type; - this.attributes = attributes; - this.inputs = inputs; - this.outputs = outputs; - this.scripts = scripts; - const hashIn = hash; - this.hashInternal = hashIn === undefined ? utils.lazy(() => crypto.hash256(this.message)) : () => hashIn; - - if (this.attributes.length > MAX_TRANSACTION_ATTRIBUTES) { - throw new InvalidFormatError( - `Expected less than ${MAX_TRANSACTION_ATTRIBUTES} attributes, found: ${attributes.length}`, - ); - } - } - - public abstract clone(options: { - readonly scripts?: readonly TWitness[]; - readonly attributes?: readonly TAttribute[]; - readonly inputs?: readonly TInput[]; - readonly outputs?: readonly TOutput[]; - }): this; - - public get hash(): UInt256 { - return this.hashInternal(); - } - - public get hashHex(): UInt256Hex { - return this.hashHexInternal(); - } - - public get message(): Buffer { - return this.messageInternal(); - } - - public sign(key: PrivateKey): this { - return this.clone({ - scripts: this.scripts.concat([ - // tslint:disable-next-line no-any - crypto.createWitness(this.serializeUnsigned(), key, (this.constructor as any).WitnessConstructor), - ]), - }); - } - - public signWithSignature(signature: Buffer, publicKey: ECPoint): this { - return this.clone({ - scripts: this.scripts.concat([ - // tslint:disable-next-line no-any - crypto.createWitnessForSignature(signature, publicKey, (this.constructor as any).WitnessConstructor), - ]), - }); - } - - public serializeExclusiveBase(_writer: BinaryWriter): void { - // do nothing - } - - public serializeUnsignedBase(writer: BinaryWriter): void { - writer.writeUInt8(this.type); - writer.writeUInt8(this.version); - this.serializeExclusiveBase(writer); - writer.writeArray(this.attributes, (attribute) => { - attribute.serializeWireBase(writer); - }); - writer.writeArray(this.inputs, (input) => { - input.serializeWireBase(writer); - }); - writer.writeArray(this.outputs, (output) => { - output.serializeWireBase(writer); - }); - } - - public serializeWireBase(writer: BinaryWriter): void { - this.serializeUnsignedBase(writer); - writer.writeArray(this.scripts, (script) => { - script.serializeWireBase(writer); - }); - } -} diff --git a/packages/neo-one-client-common/src/models/transaction/TransactionModel.ts b/packages/neo-one-client-common/src/models/transaction/TransactionModel.ts index a0920df82f..2e60cfa238 100644 --- a/packages/neo-one-client-common/src/models/transaction/TransactionModel.ts +++ b/packages/neo-one-client-common/src/models/transaction/TransactionModel.ts @@ -1,9 +1,154 @@ -import { UInt256 } from '../../common'; -import { ClaimTransactionModel } from './ClaimTransactionModel'; -import { InvocationTransactionModel } from './InvocationTransactionModel'; +import { Constructor } from '@neo-one/utils'; +import BN from 'bn.js'; +import { BinaryWriter } from '../../BinaryWriter'; +import { ECPoint, PrivateKey, UInt160 } from '../../common'; +import { crypto } from '../../crypto'; +import { IOHelper } from '../../IOHelper'; +import { SerializableWire } from '../Serializable'; +import { SignerModel } from '../SignerModel'; +import { WitnessModel } from '../WitnessModel'; +import { AttributeModel } from './attribute'; +import { + FeelessTransactionModel, + FeelessTransactionModelAdd, + TransactionConsensusOptions, +} from './FeelessTransactionModel'; -export type TransactionModel = ClaimTransactionModel | InvocationTransactionModel; +export interface TransactionModelAdd< + TAttribute extends AttributeModel = AttributeModel, + TWitness extends WitnessModel = WitnessModel, + TSigner extends SignerModel = SignerModel +> extends FeelessTransactionModelAdd { + readonly systemFee: BN; + readonly networkFee: BN; +} + +export class TransactionModel< + TAttribute extends AttributeModel = AttributeModel, + TWitness extends WitnessModel = WitnessModel, + TSigner extends SignerModel = SignerModel + > + extends FeelessTransactionModel + implements SerializableWire { + public static readonly headerSize = + IOHelper.sizeOfUInt8 + + IOHelper.sizeOfUInt32LE + + IOHelper.sizeOfUInt64LE + + IOHelper.sizeOfUInt64LE + + IOHelper.sizeOfUInt32LE; + + protected static readonly WitnessConstructor: Constructor = WitnessModel; + + public readonly systemFee: BN; + public readonly networkFee: BN; + + public constructor({ + version, + nonce, + attributes = [], + witnesses = [], + signers = [], + validUntilBlock, + script, + hash, + systemFee, + networkFee, + messageMagic, + }: TransactionModelAdd) { + super({ + version, + nonce, + attributes, + witnesses, + signers, + validUntilBlock, + script, + hash, + messageMagic, + }); + + this.systemFee = systemFee; + this.networkFee = networkFee; + } + + public getScriptHashesForVerifying(): readonly UInt160[] { + return this.signers.map((signer) => signer.account); + } + + public clone( + options: { readonly witnesses?: readonly TWitness[] } = {}, + ): TransactionModel { + return new TransactionModel({ + version: this.version, + attributes: this.attributes, + signers: this.signers, + script: this.script, + hash: this.hash, + witnesses: options.witnesses ? options.witnesses : this.witnesses, + systemFee: this.systemFee, + networkFee: this.networkFee, + nonce: this.nonce, + validUntilBlock: this.validUntilBlock, + messageMagic: this.messageMagic, + }); + } + + public cloneWithConsensusOptions( + options: TransactionConsensusOptions, + ): TransactionModel { + // tslint:disable-next-line: no-any + return new TransactionModel({ + version: this.version, + attributes: this.attributes, + signers: this.signers, + script: this.script, + hash: this.hash, + witnesses: this.witnesses, + systemFee: this.systemFee, + networkFee: this.networkFee, + nonce: options.nonce, + validUntilBlock: options.validUntilBlock, + messageMagic: this.messageMagic, + }); + } + + public sign(key: PrivateKey): TransactionModel { + return this.clone({ + witnesses: this.witnesses.concat([ + // tslint:disable-next-line no-any + crypto.createWitness(this.serializeUnsigned(), key, (this.constructor as any).WitnessConstructor), + ]), + }); + } + + public signWithSignature(signature: Buffer, publicKey: ECPoint): TransactionModel { + return this.clone({ + witnesses: this.witnesses.concat([ + // tslint:disable-next-line no-any + crypto.createWitnessForSignature(signature, publicKey, (this.constructor as any).WitnessConstructor), + ]), + }); + } + + public serializeUnsignedBase(writer: BinaryWriter): void { + writer.writeUInt8(this.version); + writer.writeUInt32LE(this.nonce); + writer.writeUInt64LE(this.systemFee); + writer.writeUInt64LE(this.networkFee); + writer.writeUInt32LE(this.validUntilBlock); + writer.writeArray(this.signers, (signer) => { + signer.serializeWireBase(writer); + }); + writer.writeArray(this.attributes, (attribute) => { + attribute.serializeWireBase(writer); + }); + writer.writeVarBytesLE(this.script); + } -export interface TransactionModelKey { - readonly hash: UInt256; + public serializeWireBase(writer: BinaryWriter): void { + this.serializeUnsignedBase(writer); + writer.writeArray(this.witnesses, (witness) => { + witness.serializeWireBase(writer); + }); + } } diff --git a/packages/neo-one-client-common/src/models/transaction/TransactionStateModel.ts b/packages/neo-one-client-common/src/models/transaction/TransactionStateModel.ts new file mode 100644 index 0000000000..236ac9d7a0 --- /dev/null +++ b/packages/neo-one-client-common/src/models/transaction/TransactionStateModel.ts @@ -0,0 +1,30 @@ +import { BinaryWriter } from '../../BinaryWriter'; +import { createSerializeWire, SerializableWire } from '../Serializable'; +import { VMState } from '../vm'; +import { TransactionModel } from './TransactionModel'; + +export interface TransactionStateModelAdd { + readonly blockIndex: number; + readonly state: VMState; + readonly transaction: TTransactionModel; +} + +export class TransactionStateModel + implements SerializableWire { + public readonly blockIndex: number; + public readonly state: VMState; + public readonly transaction: TTransactionModel; + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + + public constructor(options: TransactionStateModelAdd) { + this.blockIndex = options.blockIndex; + this.state = options.state; + this.transaction = options.transaction; + } + + public serializeWireBase(writer: BinaryWriter) { + writer.writeUInt32LE(this.blockIndex); + writer.writeUInt8(this.state); + this.transaction.serializeWireBase(writer); + } +} diff --git a/packages/neo-one-client-common/src/models/transaction/TransactionTypeModel.ts b/packages/neo-one-client-common/src/models/transaction/TransactionTypeModel.ts deleted file mode 100644 index 2d92fe979a..0000000000 --- a/packages/neo-one-client-common/src/models/transaction/TransactionTypeModel.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { InvalidTransactionTypeError } from '../../errors'; - -export enum TransactionTypeModel { - Miner = 0x00, - Issue = 0x01, - Claim = 0x02, - Enrollment = 0x20, - Register = 0x40, - Contract = 0x80, - State = 0x90, - Publish = 0xd0, - Invocation = 0xd1, -} - -const isTransactionType = (value: number): value is TransactionTypeModel => - // tslint:disable-next-line strict-type-predicates - TransactionTypeModel[value] !== undefined; - -export const assertTransactionType = (value: number): TransactionTypeModel => { - if (isTransactionType(value)) { - return value; - } - - throw new InvalidTransactionTypeError(value); -}; diff --git a/packages/neo-one-client-common/src/models/transaction/attribute/AttributeBaseModel.ts b/packages/neo-one-client-common/src/models/transaction/attribute/AttributeBaseModel.ts index 55d8ca09b6..a069d17ec1 100644 --- a/packages/neo-one-client-common/src/models/transaction/attribute/AttributeBaseModel.ts +++ b/packages/neo-one-client-common/src/models/transaction/attribute/AttributeBaseModel.ts @@ -1,15 +1,27 @@ import { BinaryWriter } from '../../../BinaryWriter'; +import { IOHelper } from '../../../IOHelper'; import { createSerializeWire, SerializableWire, SerializeWire } from '../../Serializable'; -import { AttributeModel } from './AttributeModel'; -import { AttributeUsageModel } from './AttributeUsageModel'; +import { AttributeTypeModel } from './AttributeTypeModel'; -export abstract class AttributeBaseModel - implements SerializableWire { - public abstract readonly usage: Usage; - public abstract readonly value: Value; +export abstract class AttributeBaseModel implements SerializableWire { + public abstract readonly type: AttributeTypeModel; + public abstract readonly allowMultiple: boolean; public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); public serializeWireBase(writer: BinaryWriter): void { - writer.writeUInt8(this.usage); + writer.writeUInt8(this.type); + this.serializeWithoutTypeBase(writer); + } + + protected serializeWithoutTypeBase(_writer: BinaryWriter): void { + // do nothing + } + + public get size() { + return IOHelper.sizeOfUInt8 + this.sizeExclusive(); + } + + protected sizeExclusive(): number { + return 0; } } diff --git a/packages/neo-one-client-common/src/models/transaction/attribute/AttributeModel.ts b/packages/neo-one-client-common/src/models/transaction/attribute/AttributeModel.ts index 3f15a0c3de..c3e007ac6f 100644 --- a/packages/neo-one-client-common/src/models/transaction/attribute/AttributeModel.ts +++ b/packages/neo-one-client-common/src/models/transaction/attribute/AttributeModel.ts @@ -1,10 +1,3 @@ -import { BufferAttributeModel } from './BufferAttributeModel'; -import { ECPointAttributeModel } from './ECPointAttributeModel'; -import { UInt160AttributeModel } from './UInt160AttributeModel'; -import { UInt256AttributeModel } from './UInt256AttributeModel'; +import { HighPriorityAttributeModel } from './HighPriorityAttributeModel'; -export type AttributeModel = - | BufferAttributeModel - | ECPointAttributeModel - | UInt160AttributeModel - | UInt256AttributeModel; +export type AttributeModel = HighPriorityAttributeModel; diff --git a/packages/neo-one-client-common/src/models/transaction/attribute/AttributeTypeModel.ts b/packages/neo-one-client-common/src/models/transaction/attribute/AttributeTypeModel.ts new file mode 100644 index 0000000000..2e267729f8 --- /dev/null +++ b/packages/neo-one-client-common/src/models/transaction/attribute/AttributeTypeModel.ts @@ -0,0 +1,36 @@ +import { InvalidAttributeTypeError, InvalidAttributeTypeJSONError } from '../../../errors'; +import { AttributeTypeJSON } from '../../types'; + +export enum AttributeTypeModel { + HighPriority = 1, +} + +const isAttributeType = (value: number): value is AttributeTypeModel => + // tslint:disable-next-line strict-type-predicates + AttributeTypeModel[value] !== undefined; + +export const assertAttributeType = (value: number): AttributeTypeModel => { + if (isAttributeType(value)) { + return value; + } + + throw new InvalidAttributeTypeError(value); +}; + +export const toJSONAttributeType = (type: AttributeTypeModel): AttributeTypeJSON => + assertAttributeTypeJSON(AttributeTypeModel[type]); + +export const isAttributeTypeJSON = (type: string): type is AttributeTypeJSON => + // tslint:disable-next-line strict-type-predicates no-any + AttributeTypeModel[type as any] !== undefined; + +export const assertAttributeTypeJSON = (type: string): AttributeTypeJSON => { + if (isAttributeTypeJSON(type)) { + return type; + } + + throw new InvalidAttributeTypeJSONError(type); +}; + +export const toAttributeType = (type: AttributeTypeJSON): AttributeTypeModel => + assertAttributeType(AttributeTypeModel[type]); diff --git a/packages/neo-one-client-common/src/models/transaction/attribute/AttributeUsageModel.ts b/packages/neo-one-client-common/src/models/transaction/attribute/AttributeUsageModel.ts deleted file mode 100644 index 6c0bdcbd1a..0000000000 --- a/packages/neo-one-client-common/src/models/transaction/attribute/AttributeUsageModel.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { InvalidAttributeUsageError, InvalidAttributeUsageJSONError } from '../../../errors'; -import { AttributeUsageJSON } from '../../types'; - -export enum AttributeUsageModel { - ContractHash = 0x00, - ECDH02 = 0x02, - ECDH03 = 0x03, - Script = 0x20, - Vote = 0x30, - DescriptionUrl = 0x81, - Description = 0x90, - Hash1 = 0xa1, - Hash2 = 0xa2, - Hash3 = 0xa3, - Hash4 = 0xa4, - Hash5 = 0xa5, - Hash6 = 0xa6, - Hash7 = 0xa7, - Hash8 = 0xa8, - Hash9 = 0xa9, - Hash10 = 0xaa, - Hash11 = 0xab, - Hash12 = 0xac, - Hash13 = 0xad, - Hash14 = 0xae, - Hash15 = 0xaf, - Remark = 0xf0, - Remark1 = 0xf1, - Remark2 = 0xf2, - Remark3 = 0xf3, - Remark4 = 0xf4, - Remark5 = 0xf5, - Remark6 = 0xf6, - Remark7 = 0xf7, - Remark8 = 0xf8, - Remark9 = 0xf9, - Remark10 = 0xfa, - Remark11 = 0xfb, - Remark12 = 0xfc, - Remark13 = 0xfd, - Remark14 = 0xfe, - Remark15 = 0xff, -} - -const isAttributeUsage = (value: number): value is AttributeUsageModel => - // tslint:disable-next-line strict-type-predicates - AttributeUsageModel[value] !== undefined; - -export const assertAttributeUsage = (value: number): AttributeUsageModel => { - if (isAttributeUsage(value)) { - return value; - } - - throw new InvalidAttributeUsageError(value); -}; - -export const toJSONAttributeUsage = (usage: AttributeUsageModel): AttributeUsageJSON => - assertAttributeUsageJSON(AttributeUsageModel[usage]); - -export const isAttributeUsageJSON = (usage: string): usage is AttributeUsageJSON => - // tslint:disable-next-line strict-type-predicates no-any - AttributeUsageModel[usage as any] !== undefined; - -export const assertAttributeUsageJSON = (usage: string): AttributeUsageJSON => { - if (isAttributeUsageJSON(usage)) { - return usage; - } - - throw new InvalidAttributeUsageJSONError(usage); -}; - -export const toAttributeUsage = (usage: AttributeUsageJSON): AttributeUsageModel => - assertAttributeUsage(AttributeUsageModel[usage]); diff --git a/packages/neo-one-client-common/src/models/transaction/attribute/BufferAttributeModel.ts b/packages/neo-one-client-common/src/models/transaction/attribute/BufferAttributeModel.ts deleted file mode 100644 index f52a261c23..0000000000 --- a/packages/neo-one-client-common/src/models/transaction/attribute/BufferAttributeModel.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { BinaryWriter } from '../../../BinaryWriter'; -import { AttributeBaseModel } from './AttributeBaseModel'; -import { AttributeUsageModel } from './AttributeUsageModel'; - -export type BufferAttributeUsageModel = - | 0x81 - | 0x90 - | 0xf0 - | 0xf1 - | 0xf2 - | 0xf3 - | 0xf4 - | 0xf5 - | 0xf6 - | 0xf7 - | 0xf8 - | 0xf9 - | 0xfa - | 0xfb - | 0xfc - | 0xfd - | 0xfe - | 0xff; - -export interface BufferAttributeModelAdd { - readonly usage: BufferAttributeUsageModel; - readonly value: Buffer; -} - -export class BufferAttributeModel extends AttributeBaseModel { - public readonly usage: BufferAttributeUsageModel; - public readonly value: Buffer; - - public constructor({ usage, value }: BufferAttributeModelAdd) { - super(); - this.usage = usage; - this.value = value; - } - - public serializeWireBase(writer: BinaryWriter): void { - super.serializeWireBase(writer); - if (this.usage === AttributeUsageModel.DescriptionUrl) { - writer.writeUInt8(this.value.length); - writer.writeBytes(this.value); - } else { - writer.writeVarBytesLE(this.value); - } - } -} diff --git a/packages/neo-one-client-common/src/models/transaction/attribute/ECPointAttributeModel.ts b/packages/neo-one-client-common/src/models/transaction/attribute/ECPointAttributeModel.ts deleted file mode 100644 index 92c6b15515..0000000000 --- a/packages/neo-one-client-common/src/models/transaction/attribute/ECPointAttributeModel.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { BinaryWriter } from '../../../BinaryWriter'; -import { common, ECPoint } from '../../../common'; -import { AttributeBaseModel } from './AttributeBaseModel'; - -export type ECPointAttributeUsageModel = 0x02 | 0x03; - -export interface ECPointAttributeModelAdd { - readonly usage: ECPointAttributeUsageModel; - readonly value: ECPoint; -} - -export class ECPointAttributeModel extends AttributeBaseModel { - public readonly usage: ECPointAttributeUsageModel; - public readonly value: ECPoint; - - public constructor({ usage, value }: ECPointAttributeModelAdd) { - super(); - this.usage = usage; - this.value = value; - } - - public serializeWireBase(writer: BinaryWriter): void { - super.serializeWireBase(writer); - writer.writeBytes(common.ecPointToBuffer(this.value).slice(1)); - } -} diff --git a/packages/neo-one-client-common/src/models/transaction/attribute/HighPriorityAttributeModel.ts b/packages/neo-one-client-common/src/models/transaction/attribute/HighPriorityAttributeModel.ts new file mode 100644 index 0000000000..042bd45111 --- /dev/null +++ b/packages/neo-one-client-common/src/models/transaction/attribute/HighPriorityAttributeModel.ts @@ -0,0 +1,7 @@ +import { AttributeBaseModel } from './AttributeBaseModel'; +import { AttributeTypeModel } from './AttributeTypeModel'; + +export class HighPriorityAttributeModel extends AttributeBaseModel { + public readonly type = AttributeTypeModel.HighPriority; + public readonly allowMultiple = false; +} diff --git a/packages/neo-one-client-common/src/models/transaction/attribute/UInt160AttributeModel.ts b/packages/neo-one-client-common/src/models/transaction/attribute/UInt160AttributeModel.ts deleted file mode 100644 index b5d8e4bd30..0000000000 --- a/packages/neo-one-client-common/src/models/transaction/attribute/UInt160AttributeModel.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { BinaryWriter } from '../../../BinaryWriter'; -import { UInt160 } from '../../../common'; -import { AttributeBaseModel } from './AttributeBaseModel'; - -export type UInt160AttributeUsageModel = 0x20; - -export interface UInt160AttributeModelAdd { - readonly usage: UInt160AttributeUsageModel; - readonly value: UInt160; -} - -export class UInt160AttributeModel extends AttributeBaseModel { - public readonly usage: UInt160AttributeUsageModel; - public readonly value: UInt160; - - public constructor({ usage, value }: UInt160AttributeModelAdd) { - super(); - this.usage = usage; - this.value = value; - } - - public serializeWireBase(writer: BinaryWriter): void { - super.serializeWireBase(writer); - writer.writeUInt160(this.value); - } -} diff --git a/packages/neo-one-client-common/src/models/transaction/attribute/UInt256AttributeModel.ts b/packages/neo-one-client-common/src/models/transaction/attribute/UInt256AttributeModel.ts deleted file mode 100644 index e259b7b5f6..0000000000 --- a/packages/neo-one-client-common/src/models/transaction/attribute/UInt256AttributeModel.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { BinaryWriter } from '../../../BinaryWriter'; -import { UInt256 } from '../../../common'; -import { AttributeBaseModel } from './AttributeBaseModel'; - -export type UInt256AttributeUsageModel = - | 0x00 - | 0x30 - | 0xa1 - | 0xa2 - | 0xa3 - | 0xa4 - | 0xa5 - | 0xa6 - | 0xa7 - | 0xa8 - | 0xa9 - | 0xaa - | 0xab - | 0xac - | 0xad - | 0xae - | 0xaf; - -export interface UInt256AttributeModelAdd { - readonly usage: UInt256AttributeUsageModel; - readonly value: UInt256; -} - -export class UInt256AttributeModel extends AttributeBaseModel { - public readonly usage: UInt256AttributeUsageModel; - public readonly value: UInt256; - - public constructor({ usage, value }: UInt256AttributeModelAdd) { - super(); - this.usage = usage; - this.value = value; - } - - public serializeWireBase(writer: BinaryWriter): void { - super.serializeWireBase(writer); - writer.writeUInt256(this.value); - } -} diff --git a/packages/neo-one-client-common/src/models/transaction/attribute/index.ts b/packages/neo-one-client-common/src/models/transaction/attribute/index.ts index ea450c93ac..09d44f1986 100644 --- a/packages/neo-one-client-common/src/models/transaction/attribute/index.ts +++ b/packages/neo-one-client-common/src/models/transaction/attribute/index.ts @@ -1,7 +1,4 @@ export * from './AttributeBaseModel'; export * from './AttributeModel'; -export * from './AttributeUsageModel'; -export * from './BufferAttributeModel'; -export * from './ECPointAttributeModel'; -export * from './UInt160AttributeModel'; -export * from './UInt256AttributeModel'; +export * from './AttributeTypeModel'; +export * from './HighPriorityAttributeModel'; diff --git a/packages/neo-one-client-common/src/models/transaction/helper.ts b/packages/neo-one-client-common/src/models/transaction/helper.ts new file mode 100644 index 0000000000..187c7627e0 --- /dev/null +++ b/packages/neo-one-client-common/src/models/transaction/helper.ts @@ -0,0 +1,20 @@ +import { FeelessTransactionModel, TransactionFeesAdd } from './FeelessTransactionModel'; +import { TransactionModel } from './TransactionModel'; + +const addFees = (tx: FeelessTransactionModel, fees: TransactionFeesAdd): TransactionModel => + new TransactionModel({ + version: tx.version, + attributes: tx.attributes, + signers: tx.signers, + script: tx.script, + witnesses: tx.witnesses, + nonce: tx.nonce, + validUntilBlock: tx.validUntilBlock, + messageMagic: tx.messageMagic, + systemFee: fees.systemFee, + networkFee: fees.networkFee, + }); + +export const helper = { + addFees, +}; diff --git a/packages/neo-one-client-common/src/models/transaction/index.ts b/packages/neo-one-client-common/src/models/transaction/index.ts index f0c12f9a1e..63ef66c832 100644 --- a/packages/neo-one-client-common/src/models/transaction/index.ts +++ b/packages/neo-one-client-common/src/models/transaction/index.ts @@ -1,8 +1,5 @@ export * from './attribute'; -export * from './ClaimTransactionModel'; -export * from './InputModel'; -export * from './InvocationTransactionModel'; -export * from './OutputModel'; -export * from './TransactionBaseModel'; +export * from './FeelessTransactionModel'; export * from './TransactionModel'; -export * from './TransactionTypeModel'; +export * from './TransactionStateModel'; +export { helper as transactionHelper } from './helper'; diff --git a/packages/neo-one-client-common/src/models/trigger.ts b/packages/neo-one-client-common/src/models/trigger.ts new file mode 100644 index 0000000000..fd8a6b923f --- /dev/null +++ b/packages/neo-one-client-common/src/models/trigger.ts @@ -0,0 +1,38 @@ +import { InvalidFormatError } from '../common'; + +export enum TriggerType { + OnPersist = 0x01, + PostPersist = 0x02, + Verification = 0x20, + Application = 0x40, + System = OnPersist | PostPersist, + All = OnPersist | PostPersist | Verification | Application, +} + +export type TriggerTypeJSON = keyof typeof TriggerType; + +// tslint:disable-next-line: strict-type-predicates no-any +export const isTriggerTypeJSON = (type: string): type is TriggerTypeJSON => TriggerType[type as any] !== undefined; + +export const assertTriggerTypeJSON = (type: string): TriggerTypeJSON => { + if (isTriggerTypeJSON(type)) { + return type; + } + + throw new InvalidFormatError(); +}; + +export const toTriggerTypeJSON = (type: TriggerType) => assertTriggerTypeJSON(TriggerType[type]); + +// tslint:disable-next-line: strict-type-predicates +export const isTriggerType = (type: number): type is TriggerType => TriggerType[type] !== undefined; + +export const assertTriggerType = (type: number): TriggerType => { + if (isTriggerType(type)) { + return type; + } + + throw new InvalidFormatError(); +}; + +export const triggerTypeFromJSON = (json: TriggerTypeJSON) => assertTriggerType(TriggerType[json]); diff --git a/packages/neo-one-client-common/src/models/types.ts b/packages/neo-one-client-common/src/models/types.ts index fff5999d14..9d6085cf31 100644 --- a/packages/neo-one-client-common/src/models/types.ts +++ b/packages/neo-one-client-common/src/models/types.ts @@ -1,79 +1,84 @@ -import { AssetTypeModel } from './AssetTypeModel'; +import { JSONObject } from '@neo-one/utils'; +import { UInt256Hex } from '../common'; +import { UserAccount } from '../types'; import { ContractParameterTypeModel } from './ContractParameterTypeModel'; -import { StateDescriptorTypeModel } from './StateDescriptorTypeModel'; import { StorageFlagsModel } from './StorageFlagsModel'; -import { AttributeUsageModel } from './transaction'; -import { VMState } from './vm'; +import { AttributeTypeModel } from './transaction/attribute/AttributeTypeModel'; +import { TriggerType, TriggerTypeJSON } from './trigger'; +import { VerifyResultModel } from './VerifyResultModel'; +import { VMState, VMStateJSON } from './vm'; +import { WitnessScopeModel } from './WitnessScopeModel'; + +export interface ContractParameterDefinitionJSON { + readonly type: keyof typeof ContractParameterTypeModel; + readonly name: string; +} -export interface AccountJSON { - readonly version: number; - readonly script_hash: string; - readonly frozen: boolean; - readonly votes: readonly string[]; - readonly balances: ReadonlyArray<{ readonly asset: string; readonly value: string }>; - readonly unspent: readonly InputJSON[]; - readonly unclaimed: readonly InputJSON[]; +export interface AnyContractParameterJSON extends ContractParameterDefinitionJSON { + readonly type: 'Any'; + readonly value: undefined; } -export interface ArrayContractParameterJSON { +export interface ArrayContractParameterJSON extends ContractParameterDefinitionJSON { readonly type: 'Array'; readonly value: readonly ContractParameterJSON[]; } -export interface BooleanContractParameterJSON { +export interface BooleanContractParameterJSON extends ContractParameterDefinitionJSON { readonly type: 'Boolean'; readonly value: boolean; } -export interface ByteArrayContractParameterJSON { +export interface ByteArrayContractParameterJSON extends ContractParameterDefinitionJSON { readonly type: 'ByteArray'; readonly value: string; } -export interface Hash160ContractParameterJSON { +export interface Hash160ContractParameterJSON extends ContractParameterDefinitionJSON { readonly type: 'Hash160'; readonly value: string; } -export interface Hash256ContractParameterJSON { +export interface Hash256ContractParameterJSON extends ContractParameterDefinitionJSON { readonly type: 'Hash256'; readonly value: string; } -export interface IntegerContractParameterJSON { +export interface IntegerContractParameterJSON extends ContractParameterDefinitionJSON { readonly type: 'Integer'; readonly value: string; } -export interface InteropInterfaceContractParameterJSON { +export interface InteropInterfaceContractParameterJSON extends ContractParameterDefinitionJSON { readonly type: 'InteropInterface'; } -export interface MapContractParameterJSON { +export interface MapContractParameterJSON extends ContractParameterDefinitionJSON { readonly type: 'Map'; readonly value: ReadonlyArray; } -export interface PublicKeyContractParameterJSON { +export interface PublicKeyContractParameterJSON extends ContractParameterDefinitionJSON { readonly type: 'PublicKey'; readonly value: string; } -export interface SignatureContractParameterJSON { +export interface SignatureContractParameterJSON extends ContractParameterDefinitionJSON { readonly type: 'Signature'; readonly value: string; } -export interface StringContractParameterJSON { +export interface StringContractParameterJSON extends ContractParameterDefinitionJSON { readonly type: 'String'; readonly value: string; } -export interface VoidContractParameterJSON { +export interface VoidContractParameterJSON extends ContractParameterDefinitionJSON { readonly type: 'Void'; } export type ContractParameterJSON = + | AnyContractParameterJSON | SignatureContractParameterJSON | BooleanContractParameterJSON | IntegerContractParameterJSON @@ -89,22 +94,45 @@ export type ContractParameterJSON = export type ContractParameterTypeJSON = keyof typeof ContractParameterTypeModel; -export interface InvocationResultErrorJSON { - readonly state: VMState.Fault; +export type WitnessScopeJSON = keyof typeof WitnessScopeModel; + +export interface TransactionResultErrorJSON { + readonly state: 'FAULT'; readonly gas_consumed: string; readonly gas_cost: string; readonly stack: readonly ContractParameterJSON[]; + readonly script: string; readonly message: string; } -export interface InvocationResultSuccessJSON { - readonly state: VMState.Halt; +export interface TransactionResultSuccessJSON { + readonly state: 'HALT'; readonly gas_consumed: string; - readonly gas_cost: string; + readonly gas_cost: string; // TODO: not sure if this is redundant or not + readonly stack: readonly ContractParameterJSON[]; + readonly script: string; +} + +export type InvocationResultJSON = TransactionResultSuccessJSON | TransactionResultErrorJSON; + +export interface RawInvocationResultErrorJSON { + readonly script: string; + readonly state: 'FAULT'; + readonly gasconsumed: string; + readonly stack: string; + readonly notifications: readonly NotificationJSON[]; + readonly logs: readonly LogJSON[]; +} + +export interface RawInvocationResultSuccessJSON { + readonly script: string; + readonly state: 'HALT'; + readonly gasconsumed: string; readonly stack: readonly ContractParameterJSON[]; + readonly notifications: readonly NotificationJSON[]; } -export type InvocationResultJSON = InvocationResultSuccessJSON | InvocationResultErrorJSON; +export type RawInvocationResultJSON = RawInvocationResultSuccessJSON | RawInvocationResultErrorJSON; export interface StorageChangeAddJSON { readonly type: 'Add'; @@ -161,28 +189,25 @@ export interface WitnessJSON { readonly verification: string; } -export interface AttributeJSON { - readonly usage: AttributeUsageJSON; - readonly data: string; +export interface SignerJSON { + readonly account: string; + readonly scopes: WitnessScopeJSON; + readonly allowedcontracts?: readonly string[]; + readonly allowedgroups?: readonly string[]; } -export type AttributeUsageJSON = keyof typeof AttributeUsageModel; - -export interface InputJSON { - readonly txid: string; - readonly vout: number; +export interface AttributeJSON { + readonly type: AttributeTypeJSON; } -export interface OutputJSON { - readonly n: number; - readonly asset: string; - readonly value: string; - readonly address: string; -} +export type AttributeTypeJSON = keyof typeof AttributeTypeModel; + +export type VerifyResultJSON = keyof typeof VerifyResultModel; +// TODO: what extra invocation data are we going to include now? export interface InvocationDataJSON { readonly result: InvocationResultJSON; - readonly asset?: AssetJSON; + // readonly asset?: AssetJSON; readonly contracts: readonly ContractJSON[]; readonly deletedContractHashes: readonly string[]; readonly migratedContractHashes: ReadonlyArray; @@ -191,169 +216,278 @@ export interface InvocationDataJSON { readonly storageChanges: readonly StorageChangeJSON[]; } -export interface TransactionBaseJSON { - readonly txid: string; - readonly size: number; - readonly version: number; - readonly attributes: readonly AttributeJSON[]; - readonly vin: readonly InputJSON[]; - readonly vout: readonly OutputJSON[]; - readonly scripts: readonly WitnessJSON[]; - readonly sys_fee: string; - readonly net_fee: string; - readonly data: - | { - readonly blockHash: string; - readonly blockIndex: number; - readonly transactionIndex: number; - readonly globalIndex: string; - } - | undefined; +export interface UnclaimedGASJSON { + readonly unclaimed: string; + readonly address: string; } -export interface ClaimTransactionJSON extends TransactionBaseJSON { - readonly type: 'ClaimTransaction'; - readonly claims: readonly InputJSON[]; +export interface StackItemJSONBase { + readonly type: StackItemJSON['type']; } -export interface ContractTransactionJSON extends TransactionBaseJSON { - readonly type: 'ContractTransaction'; +export interface AnyStackItemJSON extends StackItemJSONBase { + readonly type: 'Any'; + readonly value: undefined; } -export interface EnrollmentTransactionJSON extends TransactionBaseJSON { - readonly type: 'EnrollmentTransaction'; - readonly pubkey: string; +export interface PointerStackItemJSON extends StackItemJSONBase { + readonly type: 'Pointer'; + readonly value: number; } -export interface IssueTransactionJSON extends TransactionBaseJSON { - readonly type: 'IssueTransaction'; +export interface BooleanStackItemJSON extends StackItemJSONBase { + readonly type: 'Boolean'; + readonly value: boolean; } -export interface MinerTransactionJSON extends TransactionBaseJSON { - readonly type: 'MinerTransaction'; - readonly nonce: number; +export interface IntegerStackItemJSON extends StackItemJSONBase { + readonly type: 'Integer'; + readonly value: string; +} + +export interface ByteStringStackItemJSON extends StackItemJSONBase { + readonly type: 'ByteString'; + readonly value: string; } -export interface PublishTransactionJSON extends TransactionBaseJSON { - readonly type: 'PublishTransaction'; - readonly contract: ContractJSON; +export interface BufferStackItemJSON extends StackItemJSONBase { + readonly type: 'Buffer'; + readonly value: string; } -export interface RegisterTransactionJSON extends TransactionBaseJSON { - readonly type: 'RegisterTransaction'; - readonly asset: { - readonly type: AssetTypeJSON; - readonly name: AssetNameJSON; - readonly amount: string; - readonly precision: number; - readonly owner: string; - readonly admin: string; - }; +export interface ArrayStackItemJSON extends StackItemJSONBase { + readonly type: 'Array'; + readonly value: readonly StackItemJSON[]; } -export interface StateDescriptorJSON { - readonly type: StateDescriptorTypeJSON; - readonly key: string; - readonly field: string; - readonly value: string; +export interface MapStackItemJSON extends StackItemJSONBase { + readonly type: 'Map'; + readonly value: ReadonlyArray<{ readonly key: PrimitiveStackItemJSON; readonly value: StackItemJSON }>; } -export type StateDescriptorTypeJSON = keyof typeof StateDescriptorTypeModel; +export type PrimitiveStackItemJSON = BooleanStackItemJSON | IntegerStackItemJSON | ByteStringStackItemJSON; + +export type StackItemJSON = + | AnyStackItemJSON + | PointerStackItemJSON + | PrimitiveStackItemJSON + | BufferStackItemJSON + | ArrayStackItemJSON + | MapStackItemJSON; -export interface StateTransactionJSON extends TransactionBaseJSON { - readonly type: 'StateTransaction'; - readonly descriptors: readonly StateDescriptorJSON[]; +export interface ExecutionResultJSON { + readonly trigger: keyof typeof TriggerType; + readonly contract: string; + readonly vmstate: keyof typeof VMState; + readonly gas_consumed: string; + readonly stack: readonly StackItemJSON[]; + readonly notifications: readonly NotificationActionJSON[]; +} + +export interface ApplicationLogJSON { + readonly txid?: string; + readonly trigger: TriggerTypeJSON; + readonly vmstate: VMStateJSON; + readonly gasconsumed: string; + readonly stack: readonly StackItemJSON[] | string; + readonly notifications: readonly NotificationJSON[]; } -export interface InvocationTransactionJSON extends TransactionBaseJSON { - readonly type: 'InvocationTransaction'; +export interface AccountContractJSON { readonly script: string; - readonly gas: string; - readonly invocationData?: InvocationDataJSON | undefined; + readonly parameterlist: readonly ContractParameterTypeJSON[]; + readonly scripthash: string; + readonly address: string; +} + +export interface TransactionJSON { + readonly hash: string; + readonly size: number; + readonly version: number; + readonly nonce: number; + readonly sender?: string; + readonly sysfee: string; + readonly netfee: string; + readonly validuntilblock: number; + readonly attributes: readonly AttributeJSON[]; + readonly signers: readonly SignerJSON[]; + readonly script: string; + readonly witnesses: readonly WitnessJSON[]; + readonly receipt?: TransactionReceiptJSON; +} + +// Just for Neo returns, don't think we need it for anything +export interface VerboseTransactionJSON extends TransactionJSON { + readonly blockhash: UInt256Hex; + readonly confirmations: number; + readonly blocktime: number; + readonly vmstate: VMStateJSON; } -export type TransactionJSON = - | MinerTransactionJSON - | IssueTransactionJSON - | ClaimTransactionJSON - | EnrollmentTransactionJSON - | RegisterTransactionJSON - | ContractTransactionJSON - | PublishTransactionJSON - | StateTransactionJSON - | InvocationTransactionJSON; +export interface TransactionWithInvocationDataJSON extends TransactionJSON { + readonly script: string; + readonly gas: string; +} export interface TransactionReceiptJSON { readonly blockIndex: number; readonly blockHash: string; - readonly transactionIndex: number; readonly globalIndex: string; + readonly transactionIndex: number; + readonly blockTime: string; + readonly confirmations: number; + readonly transactionHash: string; } -export type AssetNameJSON = string | ReadonlyArray<{ readonly lang: string; readonly name: string }>; +export type Wildcard = '*'; +export type WildcardContainerJSON = readonly TJSON[] | Wildcard; -export interface AssetJSON { - readonly version: number; - readonly id: string; - readonly type: AssetTypeJSON; - readonly name: AssetNameJSON; - readonly amount: string; - readonly available: string; - readonly precision: number; - readonly owner: string; - readonly admin: string; - readonly issuer: string; - readonly expiration: number; - readonly frozen: boolean; +export interface ContractMethodDescriptorJSON { + readonly name: string; + readonly parameters: readonly ContractParameterDefinitionJSON[]; + readonly offset: number; + readonly returntype: ContractParameterTypeJSON; + readonly safe: boolean; +} + +export interface ContractEventDescriptorJSON { + readonly name: string; + readonly parameters: readonly ContractParameterDefinitionJSON[]; +} + +export interface ContractABIJSON { + readonly hash: string; + readonly methods: readonly ContractMethodDescriptorJSON[]; + readonly events: readonly ContractEventDescriptorJSON[]; +} + +export interface ContractGroupJSON { + readonly publicKey: string; + readonly signature: string; +} + +export type ContractPermissionDescriptorJSON = string; + +export interface ContractPermissionJSON { + readonly contract: ContractPermissionDescriptorJSON; + readonly methods: WildcardContainerJSON; +} + +export interface ContractManifestJSON { + readonly abi: ContractABIJSON; + readonly groups: readonly ContractGroupJSON[]; + readonly permissions: readonly ContractPermissionJSON[]; + readonly trusts: WildcardContainerJSON; + readonly supportedstandards: readonly string[]; + readonly extra?: JSONObject; } -export type AssetTypeJSON = keyof typeof AssetTypeModel; +export interface ContractParameterDefinitionJSON { + readonly name: string; + readonly type: ContractParameterTypeJSON; +} export interface ContractJSON { - readonly version: number; + readonly id: number; + readonly updatecounter: number; readonly hash: string; readonly script: string; - readonly parameters: readonly ContractParameterTypeJSON[]; - readonly returntype: ContractParameterTypeJSON; - readonly name: string; - readonly code_version: string; - readonly author: string; - readonly email: string; - readonly description: string; - readonly properties: { - readonly storage: boolean; - readonly dynamic_invoke: boolean; - readonly payable: boolean; - }; + readonly manifest: ContractManifestJSON; +} + +export interface Nep5TransfersJSON { + readonly address: string; + readonly received: readonly Nep5TransferJSON[]; + readonly sent: readonly Nep5TransferJSON[]; +} + +export interface Nep5BalancesJSON { + readonly address: string; + readonly balance: readonly Nep5BalanceJSON[]; +} + +export interface Nep5BalanceJSON { + readonly assethash: string; + readonly amount: string; + readonly lastupdatedblock: number; +} + +export interface Nep5TransferJSON { + readonly timestamp: number; + readonly assethash: string; + readonly transferaddress: string; + readonly amount: string; + readonly blockindex: number; + readonly transfernotifyindex: number; + readonly txhash: string; } export interface BlockBaseJSON { readonly version: number; - readonly hash: string; readonly previousblockhash: string; readonly merkleroot: string; readonly time: number; readonly index: number; - readonly nonce: string; readonly nextconsensus: string; - readonly script: WitnessJSON; + readonly nextblockhash?: string; + readonly witnesses: readonly WitnessJSON[]; + readonly hash: string; readonly size: number; - readonly confirmations: number; + readonly confirmations?: number; +} + +export interface ConsensusDataJSON { + readonly primary: number; + readonly nonce: string; } export interface HeaderJSON extends BlockBaseJSON {} export interface BlockJSON extends BlockBaseJSON { readonly tx: readonly TransactionJSON[]; + readonly consensusdata?: ConsensusDataJSON; } -export interface NetworkSettingsJSON { - readonly issueGASFee: string; +export interface TrimmedBlockJSON extends BlockBaseJSON { + readonly consensusdata?: ConsensusDataJSON; + readonly hashes: readonly string[]; } +export interface NetworkSettingsJSON { + readonly blockcount: number; + readonly decrementinterval: number; + readonly generationamount: readonly number[]; + readonly privatekeyversion: number; + readonly standbyvalidators: readonly string[]; + readonly messagemagic: number; + readonly addressversion: number; + readonly standbycommittee: readonly string[]; + readonly committeememberscount: number; + readonly validatorscount: number; + readonly millisecondsperblock: number; + readonly memorypoolmaxtransactions: number; +} + +// export interface CallReceiptJSON { +// readonly result: InvocationResultJSON; +// readonly actions: readonly ActionJSON[]; +// } + +export interface NotificationJSON { + readonly scripthash: string; + readonly eventname: string; + readonly state: readonly StackItemJSON[] | string; +} + +export interface LogJSON { + readonly message: string; +} export interface CallReceiptJSON { - readonly result: InvocationResultJSON; - readonly actions: readonly ActionJSON[]; + readonly script: string; + readonly state: keyof typeof VMState; + readonly gasconsumed: string; + readonly stack: readonly StackItemJSON[] | string; + readonly notifications: readonly NotificationJSON[]; } export interface VerifyScriptResultJSON { @@ -369,12 +503,38 @@ export interface VerifyTransactionResultJSON { export interface RelayTransactionResultJSON { readonly transaction: TransactionJSON; - readonly verifyResult?: VerifyTransactionResultJSON; + // TODO: reimplement the longform verify transaction result + readonly verifyResult?: VerifyResultJSON; +} + +export interface SendRawTransactionResultJSON { + readonly hash: string; } export interface ValidatorJSON { - readonly version: number; - readonly publicKey: string; - readonly registered: boolean; + readonly active: boolean; + readonly publickey: string; readonly votes: string; } + +export interface PluginJSON { + readonly name: string; + readonly version: string; + readonly interfaces: readonly string[]; +} + +export interface VersionJSON { + readonly tcpport: number; + readonly wsport: number; + readonly nonce: number; + readonly useragent: string; +} + +export interface VerificationCostJSON { + readonly fee: string; + readonly size: number; +} + +export interface UserAccountJSON extends Omit { + readonly contract: AccountContractJSON; +} diff --git a/packages/neo-one-client-common/src/models/vm.ts b/packages/neo-one-client-common/src/models/vm.ts index 24c5eb8c6b..a318c74b94 100644 --- a/packages/neo-one-client-common/src/models/vm.ts +++ b/packages/neo-one-client-common/src/models/vm.ts @@ -1,195 +1,193 @@ import { createHash } from 'crypto'; import _ from 'lodash'; +import { InvalidFormatError } from '../common'; import { InvalidSysCallError, InvalidVMByteCodeError, InvalidVMStateError } from '../errors'; export enum Op { - PUSH0 = 0x0, - PUSHBYTES1 = 0x1, - PUSHBYTES2 = 0x2, - PUSHBYTES3 = 0x3, - PUSHBYTES4 = 0x4, - PUSHBYTES5 = 0x5, - PUSHBYTES6 = 0x6, - PUSHBYTES7 = 0x7, - PUSHBYTES8 = 0x8, - PUSHBYTES9 = 0x9, - PUSHBYTES10 = 0xa, - PUSHBYTES11 = 0xb, - PUSHBYTES12 = 0xc, - PUSHBYTES13 = 0xd, - PUSHBYTES14 = 0xe, - PUSHBYTES15 = 0xf, - PUSHBYTES16 = 0x10, - PUSHBYTES17 = 0x11, - PUSHBYTES18 = 0x12, - PUSHBYTES19 = 0x13, - PUSHBYTES20 = 0x14, - PUSHBYTES21 = 0x15, - PUSHBYTES22 = 0x16, - PUSHBYTES23 = 0x17, - PUSHBYTES24 = 0x18, - PUSHBYTES25 = 0x19, - PUSHBYTES26 = 0x1a, - PUSHBYTES27 = 0x1b, - PUSHBYTES28 = 0x1c, - PUSHBYTES29 = 0x1d, - PUSHBYTES30 = 0x1e, - PUSHBYTES31 = 0x1f, - PUSHBYTES32 = 0x20, - PUSHBYTES33 = 0x21, - PUSHBYTES34 = 0x22, - PUSHBYTES35 = 0x23, - PUSHBYTES36 = 0x24, - PUSHBYTES37 = 0x25, - PUSHBYTES38 = 0x26, - PUSHBYTES39 = 0x27, - PUSHBYTES40 = 0x28, - PUSHBYTES41 = 0x29, - PUSHBYTES42 = 0x2a, - PUSHBYTES43 = 0x2b, - PUSHBYTES44 = 0x2c, - PUSHBYTES45 = 0x2d, - PUSHBYTES46 = 0x2e, - PUSHBYTES47 = 0x2f, - PUSHBYTES48 = 0x30, - PUSHBYTES49 = 0x31, - PUSHBYTES50 = 0x32, - PUSHBYTES51 = 0x33, - PUSHBYTES52 = 0x34, - PUSHBYTES53 = 0x35, - PUSHBYTES54 = 0x36, - PUSHBYTES55 = 0x37, - PUSHBYTES56 = 0x38, - PUSHBYTES57 = 0x39, - PUSHBYTES58 = 0x3a, - PUSHBYTES59 = 0x3b, - PUSHBYTES60 = 0x3c, - PUSHBYTES61 = 0x3d, - PUSHBYTES62 = 0x3e, - PUSHBYTES63 = 0x3f, - PUSHBYTES64 = 0x40, - PUSHBYTES65 = 0x41, - PUSHBYTES66 = 0x42, - PUSHBYTES67 = 0x43, - PUSHBYTES68 = 0x44, - PUSHBYTES69 = 0x45, - PUSHBYTES70 = 0x46, - PUSHBYTES71 = 0x47, - PUSHBYTES72 = 0x48, - PUSHBYTES73 = 0x49, - PUSHBYTES74 = 0x4a, - PUSHBYTES75 = 0x4b, - PUSHDATA1 = 0x4c, - PUSHDATA2 = 0x4d, - PUSHDATA4 = 0x4e, - PUSHM1 = 0x4f, - PUSH1 = 0x51, - PUSH2 = 0x52, - PUSH3 = 0x53, - PUSH4 = 0x54, - PUSH5 = 0x55, - PUSH6 = 0x56, - PUSH7 = 0x57, - PUSH8 = 0x58, - PUSH9 = 0x59, - PUSH10 = 0x5a, - PUSH11 = 0x5b, - PUSH12 = 0x5c, - PUSH13 = 0x5d, - PUSH14 = 0x5e, - PUSH15 = 0x5f, - PUSH16 = 0x60, - NOP = 0x61, - JMP = 0x62, - JMPIF = 0x63, - JMPIFNOT = 0x64, - CALL = 0x65, - RET = 0x66, - APPCALL = 0x67, - SYSCALL = 0x68, - TAILCALL = 0x69, - DUPFROMALTSTACK = 0x6a, - TOALTSTACK = 0x6b, - FROMALTSTACK = 0x6c, - XDROP = 0x6d, - XSWAP = 0x72, - XTUCK = 0x73, - DEPTH = 0x74, - DROP = 0x75, - DUP = 0x76, - NIP = 0x77, - OVER = 0x78, - PICK = 0x79, - ROLL = 0x7a, - ROT = 0x7b, - SWAP = 0x7c, - TUCK = 0x7d, - CAT = 0x7e, - SUBSTR = 0x7f, - LEFT = 0x80, - RIGHT = 0x81, - SIZE = 0x82, - INVERT = 0x83, - AND = 0x84, - OR = 0x85, - XOR = 0x86, - EQUAL = 0x87, - OP_EQUALVERIFY = 0x88, - OP_RESERVED1 = 0x89, - OP_RESERVED2 = 0x8a, - INC = 0x8b, - DEC = 0x8c, - SIGN = 0x8d, - NEGATE = 0x8f, - ABS = 0x90, - NOT = 0x91, - NZ = 0x92, - ADD = 0x93, - SUB = 0x94, - MUL = 0x95, - DIV = 0x96, - MOD = 0x97, - SHL = 0x98, - SHR = 0x99, - BOOLAND = 0x9a, - BOOLOR = 0x9b, - NUMEQUAL = 0x9c, - NUMNOTEQUAL = 0x9e, - LT = 0x9f, - GT = 0xa0, - LTE = 0xa1, - GTE = 0xa2, - MIN = 0xa3, - MAX = 0xa4, - WITHIN = 0xa5, - SHA1 = 0xa7, - SHA256 = 0xa8, - HASH160 = 0xa9, - HASH256 = 0xaa, - CHECKSIG = 0xac, - VERIFY = 0xad, - CHECKMULTISIG = 0xae, - ARRAYSIZE = 0xc0, - PACK = 0xc1, - UNPACK = 0xc2, - PICKITEM = 0xc3, - SETITEM = 0xc4, - NEWARRAY = 0xc5, + PUSHINT8 = 0x00, + PUSHINT16 = 0x01, + PUSHINT32 = 0x02, + PUSHINT64 = 0x03, + PUSHINT128 = 0x04, + PUSHINT256 = 0x05, + PUSHA = 0x0a, + PUSHNULL = 0x0b, + PUSHDATA1 = 0x0c, + PUSHDATA2 = 0x0d, + PUSHDATA4 = 0x0e, + PUSHM1 = 0x0f, + PUSH0 = 0x10, + PUSH1 = 0x11, + PUSH2 = 0x12, + PUSH3 = 0x13, + PUSH4 = 0x14, + PUSH5 = 0x15, + PUSH6 = 0x16, + PUSH7 = 0x17, + PUSH8 = 0x18, + PUSH9 = 0x19, + PUSH10 = 0x1a, + PUSH11 = 0x1b, + PUSH12 = 0x1c, + PUSH13 = 0x1d, + PUSH14 = 0x1e, + PUSH15 = 0x1f, + PUSH16 = 0x20, + NOP = 0x21, + JMP = 0x22, + JMP_L = 0x23, + JMPIF = 0x24, + JMPIF_L = 0x25, + JMPIFNOT = 0x26, + JMPIFNOT_L = 0x27, + JMPEQ = 0x28, + JMPEQ_L = 0x29, + JMPNE = 0x2a, + JMPNE_L = 0x2b, + JMPGT = 0x2c, + JMPGT_L = 0x2d, + JMPGE = 0x2e, + JMPGE_L = 0x2f, + JMPLT = 0x30, + JMPLT_L = 0x31, + JMPLE = 0x32, + JMPLE_L = 0x33, + CALL = 0x34, + CALL_L = 0x35, + CALLA = 0x36, + ABORT = 0x37, + ASSERT = 0x38, + THROW = 0x3a, + TRY = 0x3b, + TRY_L = 0x3c, + ENDTRY = 0x3d, + ENDTRY_L = 0x3e, + ENDFINALLY = 0x3f, + RET = 0x40, + SYSCALL = 0x41, + DEPTH = 0x43, + DROP = 0x45, + NIP = 0x46, + XDROP = 0x48, + CLEAR = 0x49, + DUP = 0x4a, + OVER = 0x4b, + PICK = 0x4d, + TUCK = 0x4e, + SWAP = 0x50, + ROT = 0x51, + ROLL = 0x52, + REVERSE3 = 0x53, + REVERSE4 = 0x54, + REVERSEN = 0x55, + INITSSLOT = 0x56, + INITSLOT = 0x57, + LDSFLD0 = 0x58, + LDSFLD1 = 0x59, + LDSFLD2 = 0x5a, + LDSFLD3 = 0x5b, + LDSFLD4 = 0x5c, + LDSFLD5 = 0x5d, + LDSFLD6 = 0x5e, + LDSFLD = 0x5f, + STSFLD0 = 0x60, + STSFLD1 = 0x61, + STSFLD2 = 0x62, + STSFLD3 = 0x63, + STSFLD4 = 0x64, + STSFLD5 = 0x65, + STSFLD6 = 0x66, + STSFLD = 0x67, + LDLOC0 = 0x68, + LDLOC1 = 0x69, + LDLOC2 = 0x6a, + LDLOC3 = 0x6b, + LDLOC4 = 0x6c, + LDLOC5 = 0x6d, + LDLOC6 = 0x6e, + LDLOC = 0x6f, + STLOC0 = 0x70, + STLOC1 = 0x71, + STLOC2 = 0x72, + STLOC3 = 0x73, + STLOC4 = 0x74, + STLOC5 = 0x75, + STLOC6 = 0x76, + STLOC = 0x77, + LDARG0 = 0x78, + LDARG1 = 0x79, + LDARG2 = 0x7a, + LDARG3 = 0x7b, + LDARG4 = 0x7c, + LDARG5 = 0x7d, + LDARG6 = 0x7e, + LDARG = 0x7f, + STARG0 = 0x80, + STARG1 = 0x81, + STARG2 = 0x82, + STARG3 = 0x83, + STARG4 = 0x84, + STARG5 = 0x85, + STARG6 = 0x86, + STARG = 0x87, + NEWBUFFER = 0x88, + MEMCPY = 0x89, + CAT = 0x8b, + SUBSTR = 0x8c, + LEFT = 0x8d, + RIGHT = 0x8e, + INVERT = 0x90, + AND = 0x91, + OR = 0x92, + XOR = 0x93, + EQUAL = 0x97, + NOTEQUAL = 0x98, + SIGN = 0x99, + ABS = 0x9a, + NEGATE = 0x9b, + INC = 0x9c, + DEC = 0x9d, + ADD = 0x9e, + SUB = 0x9f, + MUL = 0xa0, + DIV = 0xa1, + MOD = 0xa2, + SHL = 0xa8, + SHR = 0xa9, + NOT = 0xaa, + BOOLAND = 0xab, + BOOLOR = 0xac, + NZ = 0xb1, + NUMEQUAL = 0xb3, + NUMNOTEQUAL = 0xb4, + LT = 0xb5, + LE = 0xb6, + GT = 0xb7, + GE = 0xb8, + MIN = 0xb9, + MAX = 0xba, + WITHIN = 0xbb, + PACK = 0xc0, + UNPACK = 0xc1, + NEWARRAY0 = 0xc2, + NEWARRAY = 0xc3, + NEWARRAY_T = 0xc4, + NEWSTRUCT0 = 0xc5, NEWSTRUCT = 0xc6, - NEWMAP = 0xc7, - APPEND = 0xc8, - REVERSE = 0xc9, - REMOVE = 0xca, + NEWMAP = 0xc8, + SIZE = 0xca, HASKEY = 0xcb, KEYS = 0xcc, VALUES = 0xcd, - CALL_I = 0xe0, - CALL_E = 0xe1, - CALL_ED = 0xe2, - CALL_ET = 0xe3, - CALL_EDT = 0xe4, - THROW = 0xf0, - THROWIFNOT = 0xf1, + PICKITEM = 0xce, + APPEND = 0xcf, + SETITEM = 0xd0, + REVERSEITEMS = 0xd1, + REMOVE = 0xd2, + CLEARITEMS = 0xd3, + ISNULL = 0xd8, + ISTYPE = 0xd9, + CONVERT = 0xdb, } export type OpCode = keyof typeof Op; @@ -217,94 +215,69 @@ export const assertByteCode = (value: number): ByteCode => { }; export enum SysCall { + 'System.Binary.Serialize' = 'System.Binary.Serialize', + 'System.Binary.Deserialize' = 'System.Binary.Deserialize', + 'System.Binary.Base64Encode' = 'System.Binary.Base64Encode', + 'System.Binary.Base64Decode' = 'System.Binary.Base64Decode', + 'System.Blockchain.GetHeight' = 'System.Blockchain.GetHeight', + 'System.Blockchain.GetBlock' = 'System.Blockchain.GetBlock', + 'System.Blockchain.GetTransaction' = 'System.Blockchain.GetTransaction', + 'System.Blockchain.GetTransactionHeight' = 'System.Blockchain.GetTransactionHeight', + 'System.Blockchain.GetTransactionFromBlock' = 'System.Blockchain.GetTransactionFromBlock', + 'System.Callback.Create' = 'System.Callback.Create', + 'System.Callback.CreateFromMethod' = 'System.Callback.CreateFromMethod', + 'System.Callback.CreateFromSyscall' = 'System.Callback.CreateFromSyscall', + 'System.Callback.Invoke' = 'System.Callback.Invoke', + 'System.Contract.Call' = 'System.Contract.Call', + 'System.Contract.CallEx' = 'System.Contract.CallEx', + 'System.Contract.CallNative' = 'System.Contract.CallNative', + 'System.Contract.IsStandard' = 'System.Contract.IsStandard', + 'System.Contract.GetCallFlags' = 'System.Contract.GetCallFlags', + 'System.Contract.NativeOnPersist' = 'System.Contract.NativeOnPersist', + 'System.Contract.NativePostPersist' = 'System.Contract.NativePostPersist', + 'System.Contract.CreateStandardAccount' = 'System.Contract.CreateStandardAccount', + 'Neo.Crypto.RIPEMD160' = 'Neo.Crypto.RIPEMD160', + 'Neo.Crypto.SHA256' = 'Neo.Crypto.SHA256', + 'Neo.Crypto.VerifyWithECDsaSecp256r1' = 'Neo.Crypto.VerifyWithECDsaSecp256r1', + 'Neo.Crypto.VerifyWithECDsaSecp256k1' = 'Neo.Crypto.VerifyWithECDsaSecp256k1', + 'Neo.Crypto.CheckMultisigWithECDsaSecp256r1' = 'Neo.Crypto.CheckMultisigWithECDsaSecp256r1', + 'Neo.Crypto.CheckMultisigWithECDsaSecp256k1' = 'Neo.Crypto.CheckMultisigWithECDsaSecp256k1', + 'System.Enumerator.Create' = 'System.Enumerator.Create', + 'System.Enumerator.Next' = 'System.Enumerator.Next', + 'System.Enumerator.Value' = 'System.Enumerator.Value', + 'System.Enumerator.Concat' = 'System.Enumerator.Concat', + 'System.Iterator.Create' = 'System.Iterator.Create', + 'System.Iterator.Key' = 'System.Iterator.Key', + 'System.Iterator.Keys' = 'System.Iterator.Keys', + 'System.Iterator.Values' = 'System.Iterator.Values', + 'System.Iterator.Concat' = 'System.Iterator.Concat', + 'System.Json.Serialize' = 'System.Json.Serialize', + 'System.Json.Deserialize' = 'System.Json.Deserialize', 'System.Runtime.Platform' = 'System.Runtime.Platform', - 'Neo.Runtime.GetTrigger' = 'Neo.Runtime.GetTrigger', - 'Neo.Runtime.CheckWitness' = 'Neo.Runtime.CheckWitness', - 'Neo.Runtime.Notify' = 'Neo.Runtime.Notify', - 'Neo.Runtime.Log' = 'Neo.Runtime.Log', - 'Neo.Runtime.GetTime' = 'Neo.Runtime.GetTime', - 'Neo.Runtime.Serialize' = 'Neo.Runtime.Serialize', - 'Neo.Runtime.Deserialize' = 'Neo.Runtime.Deserialize', - 'Neo.Blockchain.GetHeight' = 'Neo.Blockchain.GetHeight', - 'Neo.Blockchain.GetHeader' = 'Neo.Blockchain.GetHeader', - 'Neo.Blockchain.GetBlock' = 'Neo.Blockchain.GetBlock', - 'Neo.Blockchain.GetTransaction' = 'Neo.Blockchain.GetTransaction', - 'Neo.Blockchain.GetTransactionHeight' = 'Neo.Blockchain.GetTransactionHeight', - 'Neo.Blockchain.GetAccount' = 'Neo.Blockchain.GetAccount', - 'Neo.Blockchain.GetValidators' = 'Neo.Blockchain.GetValidators', - 'Neo.Blockchain.GetAsset' = 'Neo.Blockchain.GetAsset', - 'Neo.Blockchain.GetContract' = 'Neo.Blockchain.GetContract', - 'Neo.Header.GetHash' = 'Neo.Header.GetHash', - 'Neo.Header.GetIndex' = 'Neo.Header.GetIndex', - 'Neo.Header.GetVersion' = 'Neo.Header.GetVersion', - 'Neo.Header.GetPrevHash' = 'Neo.Header.GetPrevHash', - 'Neo.Header.GetMerkleRoot' = 'Neo.Header.GetMerkleRoot', - 'Neo.Header.GetTimestamp' = 'Neo.Header.GetTimestamp', - 'Neo.Header.GetConsensusData' = 'Neo.Header.GetConsensusData', - 'Neo.Header.GetNextConsensus' = 'Neo.Header.GetNextConsensus', - 'Neo.Block.GetTransactionCount' = 'Neo.Block.GetTransactionCount', - 'Neo.Block.GetTransactions' = 'Neo.Block.GetTransactions', - 'Neo.Block.GetTransaction' = 'Neo.Block.GetTransaction', - 'Neo.Transaction.GetHash' = 'Neo.Transaction.GetHash', - 'Neo.Transaction.GetType' = 'Neo.Transaction.GetType', - 'Neo.Transaction.GetAttributes' = 'Neo.Transaction.GetAttributes', - 'Neo.Transaction.GetInputs' = 'Neo.Transaction.GetInputs', - 'Neo.Transaction.GetOutputs' = 'Neo.Transaction.GetOutputs', - 'Neo.Transaction.GetReferences' = 'Neo.Transaction.GetReferences', - 'Neo.Transaction.GetUnspentCoins' = 'Neo.Transaction.GetUnspentCoins', - 'Neo.Transaction.GetWitnesses' = 'Neo.Transaction.GetWitnesses', - 'Neo.InvocationTransaction.GetScript' = 'Neo.InvocationTransaction.GetScript', - 'Neo.Attribute.GetUsage' = 'Neo.Attribute.GetUsage', - 'Neo.Attribute.GetData' = 'Neo.Attribute.GetData', - 'Neo.Input.GetHash' = 'Neo.Input.GetHash', - 'Neo.Input.GetIndex' = 'Neo.Input.GetIndex', - 'Neo.Output.GetAssetId' = 'Neo.Output.GetAssetId', - 'Neo.Output.GetValue' = 'Neo.Output.GetValue', - 'Neo.Output.GetScriptHash' = 'Neo.Output.GetScriptHash', - 'Neo.Account.GetScriptHash' = 'Neo.Account.GetScriptHash', - 'Neo.Account.GetVotes' = 'Neo.Account.GetVotes', - 'Neo.Account.GetBalance' = 'Neo.Account.GetBalance', - 'Neo.Account.IsStandard' = 'Neo.Account.IsStandard', - 'Neo.Asset.GetAssetId' = 'Neo.Asset.GetAssetId', - 'Neo.Asset.GetAssetType' = 'Neo.Asset.GetAssetType', - 'Neo.Asset.GetAmount' = 'Neo.Asset.GetAmount', - 'Neo.Asset.GetAvailable' = 'Neo.Asset.GetAvailable', - 'Neo.Asset.GetPrecision' = 'Neo.Asset.GetPrecision', - 'Neo.Asset.GetOwner' = 'Neo.Asset.GetOwner', - 'Neo.Asset.GetAdmin' = 'Neo.Asset.GetAdmin', - 'Neo.Asset.GetIssuer' = 'Neo.Asset.GetIssuer', - 'Neo.Contract.GetScript' = 'Neo.Contract.GetScript', - 'Neo.Contract.IsPayable' = 'Neo.Contract.IsPayable', - 'Neo.Storage.GetContext' = 'Neo.Storage.GetContext', - 'Neo.Storage.GetReadOnlyContext' = 'Neo.Storage.GetReadOnlyContext', - 'Neo.Storage.Get' = 'Neo.Storage.Get', - 'Neo.Storage.Find' = 'Neo.Storage.Find', - 'Neo.StorageContext.AsReadOnly' = 'Neo.StorageContext.AsReadOnly', - 'Neo.Enumerator.Create' = 'Neo.Enumerator.Create', - 'Neo.Iterator.Create' = 'Neo.Iterator.Create', - 'Neo.Enumerator.Next' = 'Neo.Enumerator.Next', - 'Neo.Iterator.Key' = 'Neo.Iterator.Key', - 'Neo.Enumerator.Value' = 'Neo.Enumerator.Value', - 'Neo.Enumerator.Concat' = 'Neo.Enumerator.Concat', - 'Neo.Iterator.Concat' = 'Neo.Iterator.Concat', - 'Neo.Iterator.Keys' = 'Neo.Iterator.Keys', - 'Neo.Iterator.Values' = 'Neo.Iterator.Values', - 'Neo.Account.SetVotes' = 'Neo.Account.SetVotes', - 'Neo.Validator.Register' = 'Neo.Validator.Register', - 'Neo.Asset.Create' = 'Neo.Asset.Create', - 'Neo.Asset.Renew' = 'Neo.Asset.Renew', - 'Neo.Contract.Create' = 'Neo.Contract.Create', - 'Neo.Contract.Migrate' = 'Neo.Contract.Migrate', - 'Neo.Contract.GetStorageContext' = 'Neo.Contract.GetStorageContext', - 'Neo.Contract.Destroy' = 'Neo.Contract.Destroy', - 'Neo.Storage.Put' = 'Neo.Storage.Put', - 'Neo.Storage.PutEx' = 'Neo.Storage.PutEx', - 'Neo.Storage.Delete' = 'Neo.Storage.Delete', - 'Neo.Witness.GetVerificationScript' = 'Neo.Witness.GetVerificationScript', - 'System.ExecutionEngine.GetScriptContainer' = 'System.ExecutionEngine.GetScriptContainer', - 'System.ExecutionEngine.GetExecutingScriptHash' = 'System.ExecutionEngine.GetExecutingScriptHash', - 'System.ExecutionEngine.GetCallingScriptHash' = 'System.ExecutionEngine.GetCallingScriptHash', - 'System.ExecutionEngine.GetEntryScriptHash' = 'System.ExecutionEngine.GetEntryScriptHash', + 'System.Runtime.GetTrigger' = 'System.Runtime.GetTrigger', + 'System.Runtime.GetTime' = 'System.Runtime.GetTime', + 'System.Runtime.GetScriptContainer' = 'System.Runtime.GetScriptContainer', + 'System.Runtime.GetExecutingScriptHash' = 'System.Runtime.GetExecutingScriptHash', + 'System.Runtime.GetCallingScriptHash' = 'System.Runtime.GetCallingScriptHash', + 'System.Runtime.GetEntryScriptHash' = 'System.Runtime.GetEntryScriptHash', + 'System.Runtime.CheckWitness' = 'System.Runtime.CheckWitness', + 'System.Runtime.GetInvocationCounter' = 'System.Runtime.GetInvocationCounter', + 'System.Runtime.Log' = 'System.Runtime.Log', + 'System.Runtime.Notify' = 'System.Runtime.Notify', + 'System.Runtime.GetNotifications' = 'System.Runtime.GetNotifications', + 'System.Runtime.GasLeft' = 'System.Runtime.GasLeft', + 'System.Storage.GetContext' = 'System.Storage.GetContext', + 'System.Storage.GetReadOnlyContext' = 'System.Storage.GetReadOnlyContext', + 'System.Storage.AsReadOnly' = 'System.Storage.AsReadOnly', + 'System.Storage.Get' = 'System.Storage.Get', + 'System.Storage.Find' = 'System.Storage.Find', + 'System.Storage.Put' = 'System.Storage.Put', + 'System.Storage.PutEx' = 'System.Storage.PutEx', + 'System.Storage.Delete' = 'System.Storage.Delete', + 'System.Binary.Base58Encode' = 'System.Binary.Base58Encode', + 'System.Binary.Base58Decode' = 'System.Binary.Base58Decode', + 'System.Binary.Itoa' = 'System.Binary.Itoa', + 'System.Binary.Atoi' = 'System.Binary.Atoi', } export type SysCallName = keyof typeof SysCall; @@ -320,13 +293,33 @@ export const assertSysCall = (value: string): SysCall => { throw new InvalidSysCallError(value); }; +/** + * if we do this with less lines TS will complain about the return type; + * we could still look into another form of storing these syscalls, should test + * how much hashing actually affects performance before committing to changes + */ +const mutableHashCache: Record = {}; +export const getSysCallHash = (sysCall: SysCallName) => { + const maybeHash = mutableHashCache[sysCall]; + if (maybeHash === undefined) { + const hash = sha256(Buffer.from(sysCall, 'ascii')).slice(0, 4); + mutableHashCache[sysCall] = hash; + + return hash; + } + + return maybeHash; +}; + export enum VMState { - None = 0x00, - Halt = 0x01, - Fault = 0x02, - Break = 0x04, + NONE = 0x00, + HALT = 0x01, + FAULT = 0x02, + BREAK = 0x04, } +export type VMStateJSON = keyof typeof VMState; + const isVMState = (state: number): state is VMState => // tslint:disable-next-line strict-type-predicates VMState[state] !== undefined; @@ -338,12 +331,22 @@ export const assertVMState = (state: number): VMState => { throw new InvalidVMStateError(state); }; +// tslint:disable-next-line: strict-type-predicates no-any +export const isVMStateJSON = (state: string): state is VMStateJSON => VMState[state as any] !== undefined; + +export const assertVMStateJSON = (state: string): VMStateJSON => { + if (isVMStateJSON(state)) { + return state; + } + + throw new InvalidFormatError(); +}; + +export const toVMStateJSON = (state: VMState) => assertVMStateJSON(VMState[state]); + export type SysCallHash = number & { readonly __uint256: undefined }; -export const sha256 = (value: Buffer): Buffer => - createHash('sha256') - .update(value) - .digest(); +export const sha256 = (value: Buffer): Buffer => createHash('sha256').update(value).digest(); // @ts-ignore const mutableCache: { [K in SysCall]: SysCallHash } = {}; diff --git a/packages/neo-one-client-common/src/prices.ts b/packages/neo-one-client-common/src/prices.ts new file mode 100644 index 0000000000..4c4c94f3c7 --- /dev/null +++ b/packages/neo-one-client-common/src/prices.ts @@ -0,0 +1,201 @@ +import BigNumber from 'bignumber.js'; +import { Op } from './models'; + +export const ECDsaVerifyPrice = new BigNumber(1000000); + +const opCodePrices: Record = { + [Op.PUSHINT8]: new BigNumber(30), + [Op.PUSHINT16]: new BigNumber(30), + [Op.PUSHINT32]: new BigNumber(30), + [Op.PUSHINT64]: new BigNumber(30), + [Op.PUSHINT128]: new BigNumber(120), + [Op.PUSHINT256]: new BigNumber(120), + [Op.PUSHA]: new BigNumber(120), + [Op.PUSHNULL]: new BigNumber(30), + [Op.PUSHDATA1]: new BigNumber(180), + [Op.PUSHDATA2]: new BigNumber(13000), + [Op.PUSHDATA4]: new BigNumber(110000), + [Op.PUSHM1]: new BigNumber(30), + [Op.PUSH0]: new BigNumber(30), + [Op.PUSH1]: new BigNumber(30), + [Op.PUSH2]: new BigNumber(30), + [Op.PUSH3]: new BigNumber(30), + [Op.PUSH4]: new BigNumber(30), + [Op.PUSH5]: new BigNumber(30), + [Op.PUSH6]: new BigNumber(30), + [Op.PUSH7]: new BigNumber(30), + [Op.PUSH8]: new BigNumber(30), + [Op.PUSH9]: new BigNumber(30), + [Op.PUSH10]: new BigNumber(30), + [Op.PUSH11]: new BigNumber(30), + [Op.PUSH12]: new BigNumber(30), + [Op.PUSH13]: new BigNumber(30), + [Op.PUSH14]: new BigNumber(30), + [Op.PUSH15]: new BigNumber(30), + [Op.PUSH16]: new BigNumber(30), + [Op.NOP]: new BigNumber(30), + [Op.JMP]: new BigNumber(70), + [Op.JMP_L]: new BigNumber(70), + [Op.JMPIF]: new BigNumber(70), + [Op.JMPIF_L]: new BigNumber(70), + [Op.JMPIFNOT]: new BigNumber(70), + [Op.JMPIFNOT_L]: new BigNumber(70), + [Op.JMPEQ]: new BigNumber(70), + [Op.JMPEQ_L]: new BigNumber(70), + [Op.JMPNE]: new BigNumber(70), + [Op.JMPNE_L]: new BigNumber(70), + [Op.JMPGT]: new BigNumber(70), + [Op.JMPGT_L]: new BigNumber(70), + [Op.JMPGE]: new BigNumber(70), + [Op.JMPGE_L]: new BigNumber(70), + [Op.JMPLT]: new BigNumber(70), + [Op.JMPLT_L]: new BigNumber(70), + [Op.JMPLE]: new BigNumber(70), + [Op.JMPLE_L]: new BigNumber(70), + [Op.CALL]: new BigNumber(22000), + [Op.CALL_L]: new BigNumber(22000), + [Op.CALLA]: new BigNumber(22000), + [Op.ABORT]: new BigNumber(30), + [Op.ASSERT]: new BigNumber(30), + [Op.THROW]: new BigNumber(22000), + [Op.TRY]: new BigNumber(100), + [Op.TRY_L]: new BigNumber(100), + [Op.ENDTRY]: new BigNumber(100), + [Op.ENDTRY_L]: new BigNumber(100), + [Op.ENDFINALLY]: new BigNumber(100), + [Op.RET]: new BigNumber(0), + [Op.SYSCALL]: new BigNumber(0), + [Op.DEPTH]: new BigNumber(60), + [Op.DROP]: new BigNumber(60), + [Op.NIP]: new BigNumber(60), + [Op.XDROP]: new BigNumber(400), + [Op.CLEAR]: new BigNumber(400), + [Op.DUP]: new BigNumber(60), + [Op.OVER]: new BigNumber(60), + [Op.PICK]: new BigNumber(60), + [Op.TUCK]: new BigNumber(60), + [Op.SWAP]: new BigNumber(60), + [Op.ROT]: new BigNumber(60), + [Op.ROLL]: new BigNumber(400), + [Op.REVERSE3]: new BigNumber(60), + [Op.REVERSE4]: new BigNumber(60), + [Op.REVERSEN]: new BigNumber(400), + [Op.INITSSLOT]: new BigNumber(400), + [Op.INITSLOT]: new BigNumber(1600), + [Op.LDSFLD0]: new BigNumber(60), + [Op.LDSFLD1]: new BigNumber(60), + [Op.LDSFLD2]: new BigNumber(60), + [Op.LDSFLD3]: new BigNumber(60), + [Op.LDSFLD4]: new BigNumber(60), + [Op.LDSFLD5]: new BigNumber(60), + [Op.LDSFLD6]: new BigNumber(60), + [Op.LDSFLD]: new BigNumber(60), + [Op.STSFLD0]: new BigNumber(60), + [Op.STSFLD1]: new BigNumber(60), + [Op.STSFLD2]: new BigNumber(60), + [Op.STSFLD3]: new BigNumber(60), + [Op.STSFLD4]: new BigNumber(60), + [Op.STSFLD5]: new BigNumber(60), + [Op.STSFLD6]: new BigNumber(60), + [Op.STSFLD]: new BigNumber(60), + [Op.LDLOC0]: new BigNumber(60), + [Op.LDLOC1]: new BigNumber(60), + [Op.LDLOC2]: new BigNumber(60), + [Op.LDLOC3]: new BigNumber(60), + [Op.LDLOC4]: new BigNumber(60), + [Op.LDLOC5]: new BigNumber(60), + [Op.LDLOC6]: new BigNumber(60), + [Op.LDLOC]: new BigNumber(60), + [Op.STLOC0]: new BigNumber(60), + [Op.STLOC1]: new BigNumber(60), + [Op.STLOC2]: new BigNumber(60), + [Op.STLOC3]: new BigNumber(60), + [Op.STLOC4]: new BigNumber(60), + [Op.STLOC5]: new BigNumber(60), + [Op.STLOC6]: new BigNumber(60), + [Op.STLOC]: new BigNumber(60), + [Op.LDARG0]: new BigNumber(60), + [Op.LDARG1]: new BigNumber(60), + [Op.LDARG2]: new BigNumber(60), + [Op.LDARG3]: new BigNumber(60), + [Op.LDARG4]: new BigNumber(60), + [Op.LDARG5]: new BigNumber(60), + [Op.LDARG6]: new BigNumber(60), + [Op.LDARG]: new BigNumber(60), + [Op.STARG0]: new BigNumber(60), + [Op.STARG1]: new BigNumber(60), + [Op.STARG2]: new BigNumber(60), + [Op.STARG3]: new BigNumber(60), + [Op.STARG4]: new BigNumber(60), + [Op.STARG5]: new BigNumber(60), + [Op.STARG6]: new BigNumber(60), + [Op.STARG]: new BigNumber(60), + [Op.NEWBUFFER]: new BigNumber(80000), + [Op.MEMCPY]: new BigNumber(80000), + [Op.CAT]: new BigNumber(80000), + [Op.SUBSTR]: new BigNumber(80000), + [Op.LEFT]: new BigNumber(80000), + [Op.RIGHT]: new BigNumber(80000), + [Op.INVERT]: new BigNumber(100), + [Op.AND]: new BigNumber(200), + [Op.OR]: new BigNumber(200), + [Op.XOR]: new BigNumber(200), + [Op.EQUAL]: new BigNumber(1000), + [Op.NOTEQUAL]: new BigNumber(1000), + [Op.SIGN]: new BigNumber(100), + [Op.ABS]: new BigNumber(100), + [Op.NEGATE]: new BigNumber(100), + [Op.INC]: new BigNumber(100), + [Op.DEC]: new BigNumber(100), + [Op.ADD]: new BigNumber(200), + [Op.SUB]: new BigNumber(200), + [Op.MUL]: new BigNumber(300), + [Op.DIV]: new BigNumber(300), + [Op.MOD]: new BigNumber(300), + [Op.SHL]: new BigNumber(300), + [Op.SHR]: new BigNumber(300), + [Op.NOT]: new BigNumber(100), + [Op.BOOLAND]: new BigNumber(200), + [Op.BOOLOR]: new BigNumber(200), + [Op.NZ]: new BigNumber(100), + [Op.NUMEQUAL]: new BigNumber(200), + [Op.NUMNOTEQUAL]: new BigNumber(200), + [Op.LT]: new BigNumber(200), + [Op.LE]: new BigNumber(200), + [Op.GT]: new BigNumber(200), + [Op.GE]: new BigNumber(200), + [Op.MIN]: new BigNumber(200), + [Op.MAX]: new BigNumber(200), + [Op.WITHIN]: new BigNumber(200), + [Op.PACK]: new BigNumber(15000), + [Op.UNPACK]: new BigNumber(15000), + [Op.NEWARRAY0]: new BigNumber(400), + [Op.NEWARRAY]: new BigNumber(15000), + [Op.NEWARRAY_T]: new BigNumber(15000), + [Op.NEWSTRUCT0]: new BigNumber(400), + [Op.NEWSTRUCT]: new BigNumber(15000), + [Op.NEWMAP]: new BigNumber(200), + [Op.SIZE]: new BigNumber(150), + [Op.HASKEY]: new BigNumber(270000), + [Op.KEYS]: new BigNumber(500), + [Op.VALUES]: new BigNumber(270000), + [Op.PICKITEM]: new BigNumber(270000), + [Op.APPEND]: new BigNumber(270000), + [Op.SETITEM]: new BigNumber(270000), + [Op.REVERSEITEMS]: new BigNumber(270000), + [Op.REMOVE]: new BigNumber(500), + [Op.CLEARITEMS]: new BigNumber(400), + [Op.ISNULL]: new BigNumber(60), + [Op.ISTYPE]: new BigNumber(60), + [Op.CONVERT]: new BigNumber(80000), +}; + +// tslint:disable-next-line: export-name +export const getOpCodePrice = (value: Op): BigNumber => { + const fee = opCodePrices[value]; + if (fee === undefined) { + throw new Error(`unknown Opcode: ${value}`); + } + + return fee; +}; diff --git a/packages/neo-one-client-common/src/types.ts b/packages/neo-one-client-common/src/types.ts index 36dbaa3e5a..0d5f787018 100644 --- a/packages/neo-one-client-common/src/types.ts +++ b/packages/neo-one-client-common/src/types.ts @@ -1,10 +1,21 @@ // tslint:disable deprecation no-any -import { OmitStrict } from '@neo-one/utils'; +import { JSONObject, OmitStrict } from '@neo-one/utils'; import BigNumber from 'bignumber.js'; import { BN } from 'bn.js'; import { Observable } from 'rxjs'; import { RawSourceMap } from 'source-map'; -import { ECPoint, UInt160, UInt256 } from './common'; +import { ECPoint, UInt160, UInt160Hex, UInt256 } from './common'; +import { + AccountContract, + AttributeTypeModel, + NotificationJSON, + StackItemJSON, + TriggerTypeJSON, + VerifyResultModel, + VMState, + VMStateJSON, + Wildcard, +} from './models'; /** * Base58 encoded string that represents a NEO address. @@ -56,211 +67,92 @@ export type SignatureString = string; * Implementation defined string for selecting the network to use. `'main'` refers to the NEO MainNet and `'test'` refers to the NEO TestNet. `'local'` is typically used to indicate a local development network. */ export type NetworkType = 'main' | 'test' | string; - -/** - * `Attribute` usage flag indicating the data is an arbitrary `Buffer` - * - * @see BufferAttribute - */ -export type BufferAttributeUsage = - | 'DescriptionUrl' - | 'Description' - | 'Remark' - | 'Remark1' - | 'Remark2' - | 'Remark3' - | 'Remark4' - | 'Remark5' - | 'Remark6' - | 'Remark7' - | 'Remark8' - | 'Remark9' - | 'Remark10' - | 'Remark11' - | 'Remark12' - | 'Remark13' - | 'Remark14' - | 'Remark15'; -/** - * `Attribute` usage flag indicating the data is a `PublicKey` - * - * @see PublicKeyAttribute - */ -export type PublicKeyAttributeUsage = 'ECDH02' | 'ECDH03'; -/** - * `Attribute` usage flag indicating the data is an `Address` - * - * @see AddressAttribute - */ -export type AddressAttributeUsage = 'Script'; -/** - * `Attribute` usage flag indicating the data is a `Hash256` - * - * @see Hash256Attribute - */ -export type Hash256AttributeUsage = - | 'ContractHash' - | 'Vote' - | 'Hash1' - | 'Hash2' - | 'Hash3' - | 'Hash4' - | 'Hash5' - | 'Hash6' - | 'Hash7' - | 'Hash8' - | 'Hash9' - | 'Hash10' - | 'Hash11' - | 'Hash12' - | 'Hash13' - | 'Hash14' - | 'Hash15'; - -/** - * `Attribute` usage flag indicates the type of the data. - * - * @see BufferAttributeUsage - * @see PublicKeyAttributeUsage - * @see AddressAttributeUsage - * @see Hash256AttributeUsage - */ -export type AttributeUsage = - | BufferAttributeUsage - | AddressAttributeUsage - | PublicKeyAttributeUsage - | Hash256AttributeUsage; - /** * Base interface for `Attribute`s * * @see Attribute */ export interface AttributeBase { - /** - * `usage` distinguishes the various `Attribute` types. - */ - readonly usage: AttributeUsage; + readonly type: AttributeTypeModel; } /** - * `Attribute` whose data is an arbitrary `BufferString`. + * `Attribute` whose transaction is "high priority". */ -export interface BufferAttribute extends AttributeBase { - /** - * `usage` distinguishes `BufferAttribute` from other `Attribute` object types. - */ - readonly usage: BufferAttributeUsage; +export interface HighPriorityAttribute extends AttributeBase { /** - * Hex encoded data of the `Attribute`. + * `type` specifies the `Attribute` type */ - readonly data: BufferString; + readonly type: AttributeTypeModel.HighPriority; } /** - * `Attribute` whose data is a `PublicKeyString`. + * `Attribute`s are used to store additional data on `Transaction`s. */ -export interface PublicKeyAttribute extends AttributeBase { - /** - * `usage` distinguishes `PublicKeyAttribute` from other `Attribute` object types. - */ - readonly usage: PublicKeyAttributeUsage; - /** - * Public key as a string of the `Attribute`. - */ - readonly data: PublicKeyString; -} -/** - * `Attribute` whose data is a `Hash256`. - */ -export interface Hash256Attribute extends AttributeBase { - /** - * `usage` distinguishes `Hash256Attribute` from other `Attribute` object types. - */ - readonly usage: Hash256AttributeUsage; - /** - * NEO `Hash256` as a string of the `Attribute`. - */ - readonly data: Hash256String; -} +export type Attribute = HighPriorityAttribute; + +export type WitnessScope = + | 'None' + | 'CalledByEntry' + | 'CustomContracts' + | 'CustomGroups' + | 'Global' + | 'CalledByEntryAndCustomContracts' + | 'CalledByEntryAndCustomGroups' + | 'CalledByEntryAndCustomGroupsAndCustomContracts' + | 'CustomContractsAndCustomGroups'; + /** - * `Attribute` whose data is an `AddressString`. + * `Witness` is just that, a 'witness' to the transaction, meaning they have approved the transaction. Can vary from a simple signature of the transaction for a given `Address`' private key or a 'witness' being a smart contract and the way it's verified is by executing the smart contract code. */ -export interface AddressAttribute extends AttributeBase { +export interface Witness { /** - * `usage` distinguishes `AddressAttribute` from other `Attribute` object types. + * Sets up the stack for the `verification` script. */ - readonly usage: AddressAttributeUsage; + readonly invocation: BufferString; /** - * NEO `Address` as a string of the `Attribute`. + * A script that should leave either a `true` value on the stack if the `Witness` is valid, or `false` otherwise. */ - readonly data: AddressString; + readonly verification: BufferString; } -/** - * `Attribute`s are used to store additional data on `Transaction`s. Most `Attribute`s are used to store arbitrary data, whereas some, like `AddressAttribute`, have specific uses in the NEO - * protocol. - */ -export type Attribute = BufferAttribute | PublicKeyAttribute | Hash256Attribute | AddressAttribute; /** - * `Input`s are a reference to an `Output` of a `Transaction` that has been persisted to the blockchain. The sum of the `value`s of the referenced `Output`s is the total amount transferred in the `Transaction`. + * TODO: document this */ -export interface Input { +export interface Signer { /** - * Hash of the `Transaction` this input references. + * Hash160 Address of the `Signer`. */ - readonly hash: Hash256String; + readonly account: AddressString; /** - * `Output` index within the `Transaction` this input references. + * Scope of the witness. */ - readonly index: number; -} - -/** - * Both the `Output` and it's reference as an `Input`. - */ -export interface InputOutput extends Input, Output {} - -/** - * `Output`s represent the destination `Address` and amount transferred of a given `Asset`. - * - * The sum of the unspent `Output`s of an `Address` represent the total balance of the `Address`. - */ -export interface Output { + readonly scopes: WitnessScope; /** - * Hash of the `Asset` that was transferred. + * Array of contracts this address can verify;. */ - readonly asset: Hash256String; + readonly allowedContracts?: readonly AddressString[]; /** - * Amount transferred. + * Array of contract groups that this address can verify. */ - readonly value: BigNumber; - /** - * Destination `Address`. - */ - readonly address: AddressString; + readonly allowedGroups?: readonly PublicKeyString[]; } /** - * `Witness` is just that, a 'witness' to the transaction, meaning they have approved the transaction. Can vary from a simple signature of the transaction for a given `Address`' private key or a 'witness' being a smart contract and the way it's verified is by executing the smart contract code. + * Interface for `Transaction`s + * TODO: should some of these be optional now? */ -export interface Witness { +export interface Transaction { /** - * Sets up the stack for the `verification` script. + * NEO protocol version. */ - readonly invocation: BufferString; + readonly version: number; /** - * A script that should leave either a `true` value on the stack if the `Witness` is valid, or `false` otherwise. + * Unique number in order to ensure the hash for this contract is unique. */ - readonly verification: BufferString; -} - -/** - * Base interface for all `Transaction`s - */ -export interface TransactionBase { + readonly nonce: number; /** - * NEO protocol version. + * `Hash160` of the transaction sender. */ - readonly version: number; + readonly sender?: AddressString; /** * `Hash256` of this `Transaction`. */ @@ -270,21 +162,13 @@ export interface TransactionBase { */ readonly size: number; /** - * `Attribute`s attached to the `Transaction`. - */ - readonly attributes: readonly Attribute[]; - /** - * `Input`s of the `Transaction`. - */ - readonly inputs: readonly Input[]; - /** - * `Output`s of the `Transaction`. + * Block expiration time. */ - readonly outputs: readonly Output[]; + readonly validUntilBlock: number; /** - * `Witness`es to the `Transaction`, i.e. the `Address`es that have signed the `Transasction`. + * `Attribute`s attached to the `Transaction`. */ - readonly scripts: readonly Witness[]; + readonly attributes: readonly Attribute[]; /** * GAS execution fee for the transaction. */ @@ -293,231 +177,46 @@ export interface TransactionBase { * GAS network priority fee for the transaction. */ readonly networkFee: BigNumber; -} - -/** - * Common propreties for all `ConfirmedTransaction`s. - */ -export interface ConfirmedTransactionBase { /** - * 'Receipt' of the confirmed transaction on the blockchain. This contains properties like the block the `Transaction` was included in. + * Scope where the `Witness`es are valid. */ - readonly receipt: TransactionReceipt; -} - -/** - * Claims GAS for a set of spent `Output`s. - */ -export interface ClaimTransaction extends TransactionBase { - /** - * `type` distinguishes `ClaimTransaction` from other `Transaction` object types. - */ - readonly type: 'ClaimTransaction'; + readonly signers: readonly Signer[]; /** - * The spent outputs that this `ClaimTransaction` is claiming `GAS` for. - */ - readonly claims: readonly Input[]; -} - -/** - * Confirmed variant of `ClaimTransaction` - */ -export interface ConfirmedClaimTransaction extends ClaimTransaction, ConfirmedTransactionBase {} - -/** - * Transfers first class `Asset`s - */ -export interface ContractTransaction extends TransactionBase { - /** - * `type` distinguishes `ContractTransaction` from other `Transaction` object types. - */ - readonly type: 'ContractTransaction'; -} - -/** - * Confirmed variant of `ContractTransaction` - */ -export interface ConfirmedContractTransaction extends ContractTransaction, ConfirmedTransactionBase {} - -/** - * Enrolls a new validator for a given `PublicKey`. - * - * @deprecated - */ -export interface EnrollmentTransaction extends TransactionBase { - /** - * `type` distinguishes `Enrollmentransaction` from other `Transaction` object types. - */ - readonly type: 'EnrollmentTransaction'; - /** - * The public key that is being enrolled as a validator. - */ - readonly publicKey: PublicKeyString; -} - -/** - * Confirmed variant of `EnrollmentTransaction` - */ -export interface ConfirmedEnrollmentTransaction extends EnrollmentTransaction, ConfirmedTransactionBase {} - -/** - * Issues new currency of a first-class `Asset`. - */ -export interface IssueTransaction extends TransactionBase { - /** - * `type` distinguishes `IssueTransaction` from other `Transaction` object types. - */ - readonly type: 'IssueTransaction'; -} - -/** - * Confirmed variant of `IssueTransaction` - */ -export interface ConfirmedIssueTransaction extends IssueTransaction, ConfirmedTransactionBase {} - -/** - * Runs a script in the NEO VM. - */ -export interface InvocationTransaction extends TransactionBase { - /** - * `type` distinguishes `InvocationTransaction` from other `Transaction` object types. - */ - readonly type: 'InvocationTransaction'; - /** - * Script to execute in the NEO VM. + * Contract script of the `Transaction`. */ readonly script: BufferString; /** - * GAS that has been attached to be used for the `systemFee` of the `Transaction`. All attached GAS will be consumed by this operation, regardless of if execution fails or provides too much GAS. + * `Witness`es to the `Transaction`, i.e. the `Address`es that have signed the `Transaction`. */ - readonly gas: BigNumber; + readonly witnesses: readonly Witness[]; } -/** - * Confirmed variant of `InvocationTransaction` - */ -export interface ConfirmedInvocationTransaction extends InvocationTransaction, ConfirmedTransactionBase { - /** - * Additional raw data that is typically processed by an `ABI` for the client APIs. - */ - readonly invocationData: RawInvocationData; +// For Neo node returns +export interface VerboseTransaction extends Transaction { + readonly blockHash: UInt256; + readonly confirmations: number; + readonly blockTime: BigNumber; + readonly state: VMState; } /** - * First `Transaction` in each block which contains the `Block` rewards for the consensus node that produced the `Block`. - */ -export interface MinerTransaction extends TransactionBase { - /** - * `type` distinguishes `MinerTransaction` from other `Transaction` object types. - */ - readonly type: 'MinerTransaction'; - /** - * Unique number in order to ensure the hash for this transaction is unique. - */ - readonly nonce: number; -} - -/** - * Confirmed variant of `MinerTransaction` - */ -export interface ConfirmedMinerTransaction extends MinerTransaction, ConfirmedTransactionBase {} - -/** - * Registers a new `Contract` - * - * @deprecated Replaced by `Client#publish` - */ -export interface PublishTransaction extends TransactionBase { - /** - * `type` distinguishes `PublishTransaction` from other `Transaction` object types. - */ - readonly type: 'PublishTransaction'; - /** - * `Contract` to publish. - */ - readonly contract: Contract; -} - -/** - * Confirmed variant of `PublishTransaction` - */ -export interface ConfirmedPublishTransaction extends PublishTransaction, ConfirmedTransactionBase {} - -/** - * Registers a new first class `Asset` - * - * @deprecated Replaced by `Client#registerAsset` - */ -export interface RegisterTransaction extends TransactionBase { - /** - * `type` distinguishes `RegisterTransaction` from other `Transaction` object types. - */ - readonly type: 'RegisterTransaction'; - /** - * `Asset` information to register. - */ - readonly asset: Pick; -} - -/** - * Confirmed variant of `RegisterTransaction` - */ -export interface ConfirmedRegisterTransaction extends RegisterTransaction, ConfirmedTransactionBase {} - -/** - * Used for voting. Full support coming soon. + * `Transaction` that has been confirmed on the blockchain. Includes all of the same properties as a `Transaction` as well as the `TransactionReceipt` of the confirmation. */ -export interface StateTransaction extends TransactionBase { +export interface ConfirmedTransaction extends Transaction { /** - * `type` distinguishes `StateTransaction` from other `Transaction` object types. + * 'Receipt' of the confirmed transaction on the blockchain. This contains properties like the block the `Transaction` was included in. */ - readonly type: 'StateTransaction'; + readonly receipt?: TransactionReceipt; } -/** - * Confirmed variant of `StateTransaction` - */ -export interface ConfirmedStateTransaction extends StateTransaction, ConfirmedTransactionBase {} - -/** - * `Transaction`s are relayed to the blockchain and contain information that is to be permanently stored on the blockchain. They may contain `Input`s and `Output`s corresponding to transfers of native `Asset`s. Each `Transaction` type serves a particular purpose, see the documentation for each for more information. - */ -export type Transaction = - | MinerTransaction - | IssueTransaction - | ClaimTransaction - | EnrollmentTransaction - | RegisterTransaction - | ContractTransaction - | PublishTransaction - | StateTransaction - | InvocationTransaction; -/** - * `Transaction` that has been confirmed on the blockchain. Includes all of the same properties as a `Transaction` as well as the `TransactionReceipt` of the confirmation. - */ -export type ConfirmedTransaction = - | ConfirmedMinerTransaction - | ConfirmedIssueTransaction - | ConfirmedClaimTransaction - | ConfirmedEnrollmentTransaction - | ConfirmedRegisterTransaction - | ConfirmedContractTransaction - | ConfirmedPublishTransaction - | ConfirmedStateTransaction - | ConfirmedInvocationTransaction; - /** * All of the properties of a `Block` except the `Transaction`s themselves. */ export interface Header { /** - * NEO blockchain version + * NEO blockchain version. */ readonly version: number; - /** - * `Block` hash - */ - readonly hash: Hash256String; /** * Previous `Block` hash. */ @@ -527,36 +226,63 @@ export interface Header { */ readonly merkleRoot: Hash256String; /** - * `Block` time persisted + * `Block` time persisted. */ - readonly time: number; + readonly time: BigNumber; /** - * `Block` index + * `Block` index. */ readonly index: number; - /** - * Unique number to ensure the block hash is always unique. - */ - readonly nonce: string; /** * Next consensus address. */ readonly nextConsensus: AddressString; + /** + * `Witness`es to the `Block`'s validity. + */ + readonly witnesses: readonly Witness[]; + /** + * `Block` hash. + */ + readonly hash: Hash256String; /** * 'Witness' to the `Block`'s validity. */ - readonly script: Witness; + readonly witness: Witness; /** * Size in bytes of the `Block`. */ readonly size: number; } +export interface HeaderVerbose extends Header { + readonly confirmations: number; + readonly nextblockhash: Hash256String; +} + +/** + * TODO: document + */ +export interface ConsensusData { + /** + * TODO: document + */ + readonly primaryIndex: number; + /** + * Unique number in order to ensure the hash for this `ConsensusData` is unique. + */ + readonly nonce: BufferString; +} + export interface Block extends Header { /** * `Transaction`s contained in the `Block`. */ readonly transactions: readonly ConfirmedTransaction[]; + /** + * `Transaction`s contained in the `Block`. + */ + readonly consensusData?: ConsensusData; } /** @@ -571,14 +297,26 @@ export interface TransactionReceipt { * `Block` hash of the `Transaction` for this receipt. */ readonly blockHash: Hash256String; + /** + * `Block` time of the `Transaction` for this receipt. + */ + readonly blockTime: string; /** * Transaction index of the `Transaction` within the `Block` for this receipt. */ readonly transactionIndex: number; + /** + * Hash of the `Transaction` within the `Block` for this receipt. + */ + readonly transactionHash: Hash256String; /** * Ordered globally unique index of the transaction. */ readonly globalIndex: BigNumber; + /** + * Number of `Block`s which have confirmed this transaction. + */ + readonly confirmations: number; } /** @@ -604,7 +342,7 @@ export interface TransactionResult< /** * Common `InvocationResult` and `RawInvocationResult` properties. */ -export interface RawInvocationResultBase { +export interface RawTransactionResultBase { /** * GAS consumed by the operation. This is the total GAS consumed after the free GAS is subtracted. */ @@ -613,28 +351,32 @@ export interface RawInvocationResultBase { * The total GAS cost before subtracting the free GAS. */ readonly gasCost: BigNumber; + /** + * Script run by the invocation. + */ + readonly script: BufferString; } /** - * Result of a successful invocation. + * Result of a successful transaction. */ -export interface InvocationResultSuccess extends RawInvocationResultBase { +export interface TransactionResultSuccess extends RawTransactionResultBase { /** - * Indicates a successful invocation. + * Indicates a successful transaction. */ readonly state: 'HALT'; /** - * The return value of the invocation. + * The return value of the transaction. */ readonly value: TValue; } /** - * Result of a failed invocation. + * Result of a failed transaction. */ -export interface InvocationResultError extends RawInvocationResultBase { +export interface TransactionResultError extends RawTransactionResultBase { /** - * Indicates a failed invocation. + * Indicates a failed transaction. */ readonly state: 'FAULT'; /** @@ -644,9 +386,9 @@ export interface InvocationResultError extends RawInvocationResultBase { } /** - * Either a successful or error result, `InvocationResultSuccess` and `InvocationResultError`, respectively. + * Either a successful or error result, `TransactionResultSuccess` and `TransactionResultError`, respectively. */ -export type InvocationResult = InvocationResultSuccess | InvocationResultError; +export type InvocationResult = TransactionResultSuccess | TransactionResultError; /** * The receipt for a smart contract method invocation. @@ -680,9 +422,9 @@ export interface Transfer { */ readonly amount: BigNumber; /** - * `Hash256` in string format of the native `Asset` to transfer. + * `Hash160` in string format of the address of the `Contract` to call to make the transfer. */ - readonly asset: Hash256String; + readonly asset: AddressString; /** * Destination address. */ @@ -719,6 +461,10 @@ export interface UserAccount { * The public key for the address. */ readonly publicKey: PublicKeyString; + /** + * The signature redemption contract of the account. + */ + readonly contract: AccountContract; } /** @@ -784,14 +530,11 @@ export interface UserAccountProvider { /** * Transfers native assets. */ - readonly transfer: ( - transfers: readonly Transfer[], - options?: TransactionOptions, - ) => Promise>; + readonly transfer: (transfers: readonly Transfer[], options?: TransactionOptions) => Promise; /** * Claim all claimable GAS. */ - readonly claim: (options?: TransactionOptions) => Promise>; + readonly claim: (options?: TransactionOptions) => Promise; /** * Invoke the specified `method` with the given `params` on `contract`. * @@ -809,7 +552,7 @@ export interface UserAccountProvider { verify: boolean, options?: InvokeSendUnsafeReceiveTransactionOptions, sourceMaps?: SourceMaps, - ) => Promise>; + ) => Promise>; /** * Relays a transaction that is the first step of a two-step send process. The `Transfer`'s `to` property represents the ultimate destination of the funds, but this transaction will be constructed such that those funds are marked for transfer, not actually transferred. * @@ -823,7 +566,7 @@ export interface UserAccountProvider { transfer: Transfer, options?: TransactionOptions, sourceMaps?: SourceMaps, - ) => Promise>; + ) => Promise>; /** * Relays a transaction that is the second step of a two-step send process. The `hash` is the transaction hash of the first step in the process and is used to determine the amount to transfer to the `from` address. * @@ -837,7 +580,7 @@ export interface UserAccountProvider { hash: Hash256String, options?: TransactionOptions, sourceMaps?: SourceMaps, - ) => Promise>; + ) => Promise>; /** * Refunds native assets that were not processed by the contract. The `hash` is the transaction hash that should be refunded and is used to construct the transfers for this transaction. * @@ -851,7 +594,7 @@ export interface UserAccountProvider { hash: Hash256String, options?: TransactionOptions, sourceMaps?: SourceMaps, - ) => Promise>; + ) => Promise>; /** * Claims GAS. Currently only supports claiming all unclaimed GAS to the contract address. * @@ -864,7 +607,7 @@ export interface UserAccountProvider { paramsZipped: ReadonlyArray, options?: TransactionOptions, sourceMaps?: SourceMaps, - ) => Promise>; + ) => Promise; /** * Invokes the constant `method` on `contract` with `params` on `network`. */ @@ -893,7 +636,7 @@ export interface PrivateNetworkSettings { /** * Time until the next block starts to be produced. */ - readonly secondsPerBlock: number; + readonly millisecondsPerBlock: number; } /** @@ -929,7 +672,7 @@ export interface DeveloperProvider { */ readonly reset: () => Promise; /** - * Fetch the NEO tracker URL for the project. + * Fetch the NEO Tracker URL for the project. */ readonly getNEOTrackerURL: () => Promise; /** @@ -939,7 +682,7 @@ export interface DeveloperProvider { } /** - * An `Account` represents the balances of NEO, GAS an other native assets at a given `Address`. + * An `Account` represents the balances of NEO, GAS an other NEP5 assets at a given `Address`. */ export interface Account { /** @@ -947,7 +690,7 @@ export interface Account { */ readonly address: AddressString; /** - * A mapping from a `Hash256String` of a native `Asset` to the value of the held by the `address` for this `Account`. + * A mapping from an `AddressString` of a contract to the value of the held by the `address` for this `Account`. */ readonly balances: { /** @@ -1037,9 +780,9 @@ export interface SmartContractDefinition { */ readonly networks: SmartContractNetworksDefinition; /** - * `ABI` of the smart contract + * `Manifest` of the smart contract */ - readonly abi: ABI; + readonly manifest: ContractManifestClient; /** * `SourceMaps` associated with the smart contract. */ @@ -1108,7 +851,7 @@ export interface TransactionOptions { /** * An optional network fee to include with the transaction. */ - networkFee?: BigNumber; + maxNetworkFee?: BigNumber; /** * A maximum system fee to include with the transaction. Note that this is a maximum, the client APIs will automatically calculate and add a system fee to the transaction up to the value specified here. * @@ -1116,7 +859,13 @@ export interface TransactionOptions { * * A `systemFee` of `-1`, i.e. `new BigNumber(-1)` indicates no limit on the fee. This is typically used only during development. */ - systemFee?: BigNumber; + maxSystemFee?: BigNumber; + /** + * The maximum number of blocks from the current block this transaction should stay valid until. Defaults to `TransactionModel.maxValidBlockIncrement - 1`. + * + * Useful for when there is high traffic on the network and automatic re-sending of transactions takes place but you want more control. + */ + validBlockCount?: number; // tslint:enable readonly-keyword } @@ -1127,7 +876,7 @@ export interface ForwardOptions = Event> { /** * Additional events that may be emitted due to forwarding arguments to another smart contract method. */ - readonly events?: readonly ABIEvent[]; + readonly events?: readonly ContractEventDescriptorClient[]; readonly __tag?: TEvent; } @@ -1188,17 +937,28 @@ export interface ABIReturnBase { readonly forwardedValue?: boolean; } +/** + * `Any` return type. + * + * @see ABIReturn + */ +export interface AnyABIReturn extends ABIReturnBase { + /** + * `type` differentiates the `AnyABIReturn` object from other `ABIReturn` objects. + */ + readonly type: 'Any'; +} /** * `Address` return type. * * @see ABIReturn * @see AddressString */ -export interface AddressABIReturn extends ABIReturnBase { +export interface Hash160ABIReturn extends ABIReturnBase { /** - * `type` differentiates the `AddressABIReturn` object from other `ABIReturn` objects. + * `type` differentiates the `Hash160ABIReturn` object from other `ABIReturn` objects. */ - readonly type: 'Address'; + readonly type: 'Hash160'; } /** * `Array` return type. @@ -1384,14 +1144,21 @@ export interface ABIParameterBase { readonly rest?: boolean; } +/** + * `Any` parameter type. + * + * @see ABIParameter + * @see AnyABIReturn + */ +export interface AnyABIParameter extends ABIParameterBase, AnyABIReturn {} /** * `Address` parameter type. * * @see ABIParameter - * @see AddressABIReturn + * @see Hash160ABIReturn * @see AddressString */ -export interface AddressABIParameter extends ABIParameterBase, AddressABIReturn {} +export interface Hash160ABIParameter extends ABIParameterBase, Hash160ABIReturn {} /** * `Array` parameter type. * @@ -1486,9 +1253,10 @@ export interface VoidABIParameter extends ABIParameterBase, VoidABIReturn {} * Return type specification of a function in the `ABI` of a smart contract. */ export type ABIReturn = + | AnyABIReturn | SignatureABIReturn | BooleanABIReturn - | AddressABIReturn + | Hash160ABIReturn | Hash256ABIReturn | BufferABIReturn | PublicKeyABIReturn @@ -1503,9 +1271,10 @@ export type ABIReturn = * Parameter specification of a function or event in the `ABI` of a smart contract. */ export type ABIParameter = + | AnyABIParameter | SignatureABIParameter | BooleanABIParameter - | AddressABIParameter + | Hash160ABIParameter | Hash256ABIParameter | BufferABIParameter | PublicKeyABIParameter @@ -1517,12 +1286,13 @@ export type ABIParameter = | IntegerABIParameter | ForwardValueABIParameter; +export type AnyABI = AnyABIParameter | AnyABIReturn; export type ArrayABI = ArrayABIParameter | ArrayABIReturn; export type MapABI = MapABIParameter | MapABIReturn; export type ObjectABI = ObjectABIParameter | ObjectABIReturn; export type SignatureABI = SignatureABIParameter | SignatureABIReturn; export type BooleanABI = BooleanABIParameter | BooleanABIReturn; -export type AddressABI = AddressABIParameter | AddressABIReturn; +export type Hash160ABI = Hash160ABIParameter | Hash160ABIReturn; export type Hash256ABI = Hash256ABIParameter | Hash256ABIReturn; export type BufferABI = BufferABIParameter | BufferABIReturn; export type PublicKeyABI = PublicKeyABIParameter | PublicKeyABIReturn; @@ -1532,21 +1302,33 @@ export type IntegerABI = IntegerABIParameter | IntegerABIReturn; export type ForwardValueABI = ForwardValueABIParameter | ForwardValueABIReturn; /** - * Function specification in the `ABI` of a smart contract. + * Method specification in the `ABI` of a smart contract generated by the NEOβ€’ONE compiler and + * for use in Client APIs. `ContractMethodDescriptClient` provides extra information for use in + * the NEOβ€’ONE Client. */ -export interface ABIFunction { +export interface ContractMethodDescriptorClient { /** - * Name of the function + * Name of the method. */ readonly name: string; /** - * Parameters of the function. + * Parameters of the method. + * TODO: describe */ readonly parameters?: readonly ABIParameter[]; /** - * Return type of the function. + * Return type of the method. + * TODO: describe */ readonly returnType: ABIReturn; + /** + * flags this as a safe method callable by any source. + */ + readonly safe: boolean; + /** + * TODO: fill out description here + */ + readonly offset: number; /** * `true` if the function is constant or read-only. */ @@ -1578,33 +1360,209 @@ export interface ABIFunction { } /** - * Event specification in the `ABI` of a smart contract. + * Method specification in the `ABI` of a smart contract. + */ +export interface ContractMethodDescriptor { + /** + * Name of the method. + */ + readonly name: string; + /** + * Parameters of the method. + */ + readonly parameters?: readonly ContractParameterDefinition[]; + /** + * Return type of the method. + */ + readonly returnType: ContractParameterType; + /** + * TODO: fill out description here + */ + readonly offset: number; +} + +/** + * Event specification in the `ABI` of a smart contract generated by the NEOβ€’ONE compiler + * for use with NEOβ€’ONE Client APIs. + * TODO: describe */ -export interface ABIEvent { +export interface ContractEventDescriptorClient { /** * Name of the event. */ readonly name: string; /** * Parameters of the event. + * TODO: describe */ readonly parameters: readonly ABIParameter[]; } /** + * Event specification in the `ABI` of a smart contract. + */ +export interface ContractEventDescriptor { + /** + * Name of the event. + */ + readonly name: string; + /** + * Parameters of the event. + */ + readonly parameters: readonly ContractParameterDefinition[]; +} + +/** + * TODO: describe * Full specification of the functions and events of a smart contract. Used by the client APIs to generate the smart contract interface. * * See the [Smart Contract APIs](https://neo-one.io/docs/smart-contract-apis) chapter of the main guide for more information. */ -export interface ABI { +export interface ContractABIClient { /** - * Specification of the smart contract functions. + * Script hash of the contract. */ - readonly functions: readonly ABIFunction[]; + readonly hash: UInt160Hex; /** + * TODO: describe + * Specification of the smart contract methods. + */ + readonly methods: readonly ContractMethodDescriptorClient[]; + /** + * TODO: describe * Specification of the smart contract events. */ - readonly events?: readonly ABIEvent[]; + readonly events: readonly ContractEventDescriptorClient[]; +} + +/** + * Full specification of the functions and events of a smart contract. Used by the client APIs to generate the smart contract interface. + * + * See the [Smart Contract APIs](https://neo-one.io/docs/smart-contract-apis) chapter of the main guide for more information. + */ +export interface ContractABI { + /** + * Script hash of the contract. + */ + readonly hash: UInt160Hex; + /** + * Specification of the smart contract methods. + */ + readonly methods: readonly ContractMethodDescriptor[]; + /** + * Specification of the smart contract events. + */ + readonly events: readonly ContractEventDescriptor[]; +} + +/** + * A ContractGroup represents a set of mutually trusted contracts. A contract will allow any contract in the same + * group to invoke it, and the user interface will not give any warnings. A group is identified by a public key + * and must be accompanied by a signature for the contract hash to prove the contract is included in the group. + */ +export interface ContractGroup { + /** + * The public key identifying the group. + */ + readonly publicKey: PublicKeyString; + /** + * Signature of the contract hash. + */ + readonly signature: BufferString; +} + +export type WildcardContainer = readonly T[] | Wildcard; + +/** + * Describes the contract to be invoked. Can be a contract hash, the public key of a group, or a wildcard. + * If it specifies a contract hash, then that contract will be invoked. If it specifies the public key of a group, + * then any contract in that group will be invoked. If it specifies a wildcard, then any contract will be invoked. + */ +export type ContractPermissionDescriptor = UInt160Hex | PublicKeyString | Wildcard; + +/** + * Describes which contracts may be invoked and which methods are called. + */ +export interface ContractPermission { + /** + * Indicates the contract to be invoked. Can be either a contract hash, the public key of a group, or a wildcard. + */ + readonly contract: ContractPermissionDescriptor; + /** + * An array containing a set of methods to be called. If it is a wildcard then any method can be called. + * If a contract invokes a contract or method that is not declared in the manifest at runtime, the invocation will fail. + */ + readonly methods: WildcardContainer; +} + +/** + * A manifest explicitly declares the permissions a Contract will use. Once deployed, + * it will be limited by its declared list of permissions. `ContractManifestClient` + * specifically contains extra contract information for use in the NEOβ€’ONE Client + */ +export interface ContractManifestClient { + /** + * The `Contract`'s hash. + */ + readonly hash: UInt160Hex; + /** + * Set of mutually trusted contracts. + */ + readonly groups: readonly ContractGroup[]; + /** + * The Neo Enhancement Proposals (NEPs) and other standards that this smart contract supports. + */ + readonly supportedStandards: readonly string[]; + /** + * TODO: description + * Full specification of the functions and events of a smart contract. Used by the Client APIs + * to generate the smart contract interface. + */ + readonly abi: ContractABIClient; + /** + * Describes which contracts may be invoked and which methods are called. + */ + readonly permissions: readonly ContractPermission[]; + /** + * The trusts field is an array containing a set of contract hashes or group of public keys. + */ + readonly trusts: WildcardContainer; + /** + * Custom user-defined JSON object. + */ + readonly extra?: JSONObject; +} + +/** + * A manifest explicitly declares the permissions a Contract will use. Once deployed, + * it will be limited by its declared list of permissions. + */ +export interface ContractManifest { + /** + * Set of mutually trusted contracts. + */ + readonly groups: readonly ContractGroup[]; + /** + * The Neo Enhancement Proposals (NEPs) and other standards that this smart contract supports. + */ + readonly supportedStandards: readonly string[]; + /** + * Full specification of the functions and events of a smart contract. Used by the Client APIs + * to generate the smart contract interface. + */ + readonly abi: ContractABI; + /** + * Describes which contracts may be invoked and which methods are called. + */ + readonly permissions: readonly ContractPermission[]; + /** + * The trusts field is an array containing a set of contract hashes or group of public keys. + */ + readonly trusts: WildcardContainer; + /** + * Custom user-defined JSON object. + */ + readonly extra?: JSONObject; } declare const OpaqueTagSymbol: unique symbol; @@ -1711,140 +1669,66 @@ export type Return = | ReturnObject | ContractParameter; -/** - * Constants that describe the type of `Asset`. - * - * The two most important ones are `'Governing'` and `'Utility'` which are reserved for NEO and GAS respectively. - */ -export type AssetType = 'Credit' | 'Duty' | 'Governing' | 'Utility' | 'Currency' | 'Share' | 'Invoice' | 'Token'; - -/** - * Attributes of a first class asset. - * - * Users will typically only interact with the NEO and GAS `Asset`s. - * - * @example - * - * const asset = readClient.getAsset(Hash256.NEO); - * const neoAmount = asset.amount; - * - */ -export interface Asset { - /** - * `Hash256String` of this `Asset`. - */ - readonly hash: Hash256String; - /** - * Type of the `Asset` - * - * @see AssetType - */ - readonly type: AssetType; - /** - * User configurable name of the `Asset` - */ - readonly name: string; - /** - * Total possible supply of the `Asset` - */ - readonly amount: BigNumber; - /** - * Amount currently available of the `Asset` - */ - readonly available: BigNumber; - /** - * Precision (number of decimal places) of the `Asset` - */ - readonly precision: number; - /** - * Owner of the `Asset`. - */ - readonly owner: PublicKeyString; - /** - * Admin of the `Asset`. - */ - readonly admin: AddressString; - /** - * Issuer of the `Asset`. - */ - readonly issuer: AddressString; - /** - * Unix timestamp of when the `Asset` must be renewed by or it expires. - */ - readonly expiration: number; - /** - * `true` if no transfers are allowed with the `Asset`. - */ - readonly frozen: boolean; -} - /** * Attributes of a deployed smart contract. */ export interface Contract { /** - * NEO protocol version. + * The `Contract`s ID. */ - readonly version: number; - /** - * `AddressString` of this `Contract`. - */ - readonly address: AddressString; + readonly id: number; /** * `Contract` code. */ readonly script: BufferString; /** - * Expected parameters of this `Contract` + * The `Contract`'s script hash. */ - readonly parameters: readonly ContractParameterType[]; + readonly hash: UInt160Hex; /** - * Return type of this `Contract` + * The `Contract`'s manifest. */ - readonly returnType: ContractParameterType; + readonly manifest: ContractManifest; +} + +/* BEGIN LOW-LEVEL API */ + +/** + * Describes the details of a contract parameter. + */ +export interface ContractParameterDefinition { /** - * Name of this `Contract`. For informational purposes only. + * The type of the contract parameter. See `ContractParameterType` for information on possible contract parameter types. */ + readonly type: ContractParameter['type']; + // /** + // * The name of the contract parameter. + // */ readonly name: string; +} + +/** + * Invocation stack item for an `Any`. + * + * @see ContractParameter + */ +export interface AnyContractParameter extends ContractParameterDefinition { /** - * Version of this `Contract`. For informational purposes only. - */ - readonly codeVersion: string; - /** - * Author of this `Contract`. For informational purposes only. - */ - readonly author: string; - /** - * Email of this `Contract`. For informational purposes only. - */ - readonly email: string; - /** - * Description of this `Contract`. For informational purposes only. - */ - readonly description: string; - /** - * `true` if this `Contract` can use storage. - */ - readonly storage: boolean; - /** - * `true` if this `Contract` can make dynamic invocations. + * `type` distinguishes `AnyContractParemeter` from other `ContractParameter` object types. */ - readonly dynamicInvoke: boolean; + readonly type: 'Any'; /** - * `true` if this `Contract` accepts first-class `Asset`s and/or tokens. + * Value is not defined. */ - readonly payable: boolean; + readonly value: undefined; } - -/* BEGIN LOW-LEVEL API */ - /** * Invocation stack item for a `Signature`. * * @see ContractParameter * @see SignatureString */ -export interface SignatureContractParameter { +export interface SignatureContractParameter extends ContractParameterDefinition { /** * `type` distinguishes `SignatureContractParameter` from other `ContractParameter` object types. */ @@ -1860,7 +1744,7 @@ export interface SignatureContractParameter { * * @see ContractParameter */ -export interface BooleanContractParameter { +export interface BooleanContractParameter extends ContractParameterDefinition { /** * `type` distinguishes `BooleanContractParameter` from other `ContractParameter` object types. */ @@ -1879,7 +1763,7 @@ export interface BooleanContractParameter { * * @see ContractParameter */ -export interface IntegerContractParameter { +export interface IntegerContractParameter extends ContractParameterDefinition { /** * `type` distinguishes `IntegerContractParameter` from other `ContractParameter` object types. */ @@ -1891,16 +1775,16 @@ export interface IntegerContractParameter { } /** - * Invocation stack item for an `Address`. + * Invocation stack item for a `Hash160`. * * @see ContractParameter - * @see AddressString + * @see UInt160 */ -export interface AddressContractParameter { +export interface Hash160ContractParameter extends ContractParameterDefinition { /** - * `type` distinguishes `AddressContractParameter` from other `ContractParameter` object types. + * `type` distinguishes `Hash160ContractParameter` from other `ContractParameter` object types. */ - readonly type: 'Address'; + readonly type: 'Hash160'; /** * NEO address in base58 encoded string format. */ @@ -1913,7 +1797,7 @@ export interface AddressContractParameter { * @see ContractParameter * @see Hash256String */ -export interface Hash256ContractParameter { +export interface Hash256ContractParameter extends ContractParameterDefinition { /** * `type` distinguishes `Hash256ContractParameter` from other `ContractParameter` object types. */ @@ -1930,7 +1814,7 @@ export interface Hash256ContractParameter { * @see ContractParameter * @see BufferString */ -export interface BufferContractParameter { +export interface BufferContractParameter extends ContractParameterDefinition { /** * `type` distinguishes `BufferContractParameter` from other `ContractParameter` object types. */ @@ -1947,7 +1831,7 @@ export interface BufferContractParameter { * @see ContractParameter * @see PublicKeyString */ -export interface PublicKeyContractParameter { +export interface PublicKeyContractParameter extends ContractParameterDefinition { /** * `type` distinguishes `PublicKeyContractParameter` from other `ContractParameter` object types. */ @@ -1963,7 +1847,7 @@ export interface PublicKeyContractParameter { * * @see ContractParameter */ -export interface StringContractParameter { +export interface StringContractParameter extends ContractParameterDefinition { /** * `type` distinguishes `StringContractParameter` from other `ContractParameter` object types. */ @@ -1979,7 +1863,7 @@ export interface StringContractParameter { * * @see ContractParameter */ -export interface ArrayContractParameter { +export interface ArrayContractParameter extends ContractParameterDefinition { /** * `type` distinguishes `ArrayContractParameter` from other `ContractParameter` object types. */ @@ -1995,7 +1879,7 @@ export interface ArrayContractParameter { * * @see ContractParameter */ -export interface MapContractParameter { +export interface MapContractParameter extends ContractParameterDefinition { /** * `type` distinguishes `MapContractParameter` from other `ContractParameter` object types. */ @@ -2013,7 +1897,7 @@ export interface MapContractParameter { * * @see ContractParameter */ -export interface InteropInterfaceContractParameter { +export interface InteropInterfaceContractParameter extends ContractParameterDefinition { /** * `type` distinguishes `InteropInterfaceContractParameter` from other `ContractParameter` object types. */ @@ -2025,7 +1909,7 @@ export interface InteropInterfaceContractParameter { * * @see ContractParameter */ -export interface VoidContractParameter { +export interface VoidContractParameter extends ContractParameterDefinition { /** * `type` distinguishes `VoidContractParameter` from other `ContractParameter` object types. */ @@ -2038,10 +1922,11 @@ export interface VoidContractParameter { * Low-level API for advanced usage only. */ export type ContractParameter = + | AnyContractParameter | SignatureContractParameter | BooleanContractParameter | IntegerContractParameter - | AddressContractParameter + | Hash160ContractParameter | Hash256ContractParameter | BufferContractParameter | PublicKeyContractParameter @@ -2053,6 +1938,8 @@ export type ContractParameter = /** * All of the possible `type`s that a `ContractParameter` may have. + * Can be either: `Any`, `Boolean`, `Integer`, `ByteArray`, `String`, `Hash160`, `Hash256`, `PublicKey`, `Signature`, + * `Array`, `Map`, `InteropInterface`, or `Void`. */ export type ContractParameterType = ContractParameter['type']; @@ -2061,7 +1948,7 @@ export type ContractParameterType = ContractParameter['type']; * * Low-level API for advanced usage only. */ -export interface RawInvocationResultSuccess extends RawInvocationResultBase { +export interface RawTransactionResultSuccess extends RawTransactionResultBase { /** * Indicates a successful invocation. */ @@ -2077,7 +1964,7 @@ export interface RawInvocationResultSuccess extends RawInvocationResultBase { * * Low-level API for advanced usage only. */ -export interface RawInvocationResultError extends RawInvocationResultBase { +export interface RawTransactionResultError extends RawTransactionResultBase { /** * Indicates a failed invocation. */ @@ -2097,7 +1984,7 @@ export interface RawInvocationResultError extends RawInvocationResultBase { * * Low-level API for advanced usage only. */ -export type RawInvocationResult = RawInvocationResultSuccess | RawInvocationResultError; +export type RawInvocationResult = RawTransactionResultSuccess | RawTransactionResultError; /** * Base properties of `Event`s and `Log`s as well as their raw counterparts, `RawNotification` and `RawLog`, respectively. @@ -2249,8 +2136,81 @@ export type RawStorageChange = RawStorageChangeAdd | RawStorageChangeModify | Ra * Low-level API for advanced usage only. */ export interface RawCallReceipt { - readonly result: RawInvocationResult; - readonly actions: readonly RawAction[]; + readonly state: keyof typeof VMState; + readonly script: Buffer; + readonly gasConsumed: BigNumber; + readonly stack: readonly RawStackItem[] | string; + readonly notifications: readonly NewRawNotification[]; +} + +/** + * Raw stack item. + * + * Low-level API for advanced usage only. + */ +export type RawStackItem = + | RawAnyStackItem + | RawPointerStackItem + | RawPrimitiveStackItem + | RawBufferStackItem + | RawArrayStackItem + | RawMapStackItem; + +export type RawPrimitiveStackItem = RawBooleanStackItem | RawIntegerStackItem | RawByteStringStackItem; + +export interface RawStackItemBase { + readonly type: RawStackItem['type']; +} + +export interface RawAnyStackItem extends RawStackItemBase { + readonly type: 'Any'; + readonly value: undefined; +} + +export interface RawPointerStackItem extends RawStackItemBase { + readonly type: 'Pointer'; + readonly value: number; +} + +export interface RawBooleanStackItem extends RawStackItemBase { + readonly type: 'Boolean'; + readonly value: boolean; +} + +export interface RawIntegerStackItem extends RawStackItemBase { + readonly type: 'Integer'; + readonly value: BigNumber; +} + +export interface RawByteStringStackItem extends RawStackItemBase { + readonly type: 'ByteString'; + readonly value: string; +} + +export interface RawBufferStackItem extends RawStackItemBase { + readonly type: 'Buffer'; + readonly value: Buffer; +} + +export interface RawArrayStackItem extends RawStackItemBase { + readonly type: 'Array'; + readonly value: readonly RawStackItem[]; +} + +export interface RawMapStackItem extends RawStackItemBase { + readonly type: 'Map'; + readonly value: ReadonlyArray; +} + +/** + * Raw notification from VM execution. + * + * Low-level API for advanced usage only. + */ +export interface NewRawNotification { + readonly scriptHash: UInt160; + readonly eventName: string; + readonly state: readonly RawStackItem[] | string; } /** @@ -2334,17 +2294,13 @@ export interface RelayTransactionResult { /** * Verification result. */ - readonly verifyResult?: VerifyTransactionResult; + readonly verifyResult?: VerifyResultModel; } /** * Additional raw data that is typically processed by an `ABI` for the client APIs. */ export interface RawInvocationData { - /** - * `Asset` created by the invocation. - */ - readonly asset?: Asset; /** * `Contract`s created by the invocation. */ @@ -2371,6 +2327,36 @@ export interface RawInvocationData { readonly storageChanges: readonly RawStorageChange[]; } +/** + * Additional raw data that is typically used for the client APIs. + */ +export interface RawApplicationLogData { + /** + * The `Transaction`'s ID. + */ + readonly txId?: string; + /** + * The `Transaction`'s trigger type. + */ + readonly trigger: TriggerTypeJSON; + /** + * The `Transaction` script's resultant VM state. + */ + readonly vmState: VMStateJSON; + /** + * The GAS consumed by the `Transaction`'s script execution. + */ + readonly gasConsumed: BigNumber; + /** + * The resulting stack from `Transaction`'s script execution or the error that resulted. + */ + readonly stack: string | readonly RawStackItem[]; + /** + * The `Notification`s that came from the `Transaction`'s script execution. + */ + readonly notifications: readonly NewRawNotification[]; +} + export interface ParamJSONArray extends ReadonlyArray {} /** * JSON format of `Param`s that are added as an `Attribute` tag. @@ -2389,7 +2375,18 @@ export type ParamJSON = * Constant settings used to initialize the client APIs. */ export interface NetworkSettings { - readonly issueGASFee: BigNumber; + readonly blockCount: number; + readonly decrementInterval: number; + readonly generationAmount: readonly number[]; + readonly privateKeyVersion: number; + readonly standbyvalidators: readonly string[]; + readonly messageMagic: number; + readonly addressVersion: number; + readonly standbyCommittee: readonly string[]; + readonly committeeMemberscount: number; + readonly validatorsCount: number; + readonly millisecondsPerBlock: number; + readonly memoryPoolMaxTransactions: number; } /** diff --git a/packages/neo-one-client-common/src/utils.ts b/packages/neo-one-client-common/src/utils.ts index 69cc57ff19..1eb9e7716b 100644 --- a/packages/neo-one-client-common/src/utils.ts +++ b/packages/neo-one-client-common/src/utils.ts @@ -53,7 +53,20 @@ function lazy(getValue: () => Value): () => Value { }; } +function lazyInput(getValue: (input: Input) => Value): (input: Input) => Value { + let value: Value | undefined; + + return (input) => { + if (value === undefined) { + value = getValue(input); + } + + return value; + }; +} + const randomUInt = (): number => Math.floor(Math.random() * UINT_MAX_NUMBER); +const randomUShort = (): number => Math.floor(Math.random() * USHORT_MAX_NUMBER); export const utils = { FD: new BN(0xfd), @@ -79,9 +92,12 @@ export const utils = { SIXTEEN: new BN(16), ZERO_BIG_NUMBER: new BigNumber(0), NEGATIVE_ONE_BIG_NUMBER: new BigNumber(-1), + TEN_BIG_NUMBER: new BigNumber(10), toSignedBuffer, fromSignedBuffer, bigNumberToBN, lazy, + lazyInput, randomUInt, + randomUShort, }; diff --git a/packages/neo-one-client-common/tsconfig.json b/packages/neo-one-client-common/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-client-common/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-client-core/.npmignore b/packages/neo-one-client-core/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-client-core/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-client-core/CHANGELOG.json b/packages/neo-one-client-core/CHANGELOG.json new file mode 100644 index 0000000000..e5d4d413db --- /dev/null +++ b/packages/neo-one-client-core/CHANGELOG.json @@ -0,0 +1,135 @@ +{ + "name": "@neo-one/client-core", + "entries": [ + { + "version": "3.0.0", + "tag": "@neo-one/client-core_v3.0.0", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "major": [ + { + "comment": "3.0.0preview3-alpha release bump" + } + ], + "none": [ + { + "comment": "3.0.0preview3.1 release bump" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/client-core_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "fix #1997" + }, + { + "comment": "Add appropriate @types dependencies." + }, + { + "comment": "fixup utxo invocation transactions" + }, + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + } + ] + } + }, + { + "version": "2.6.0", + "tag": "@neo-one/client-core_v2.6.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "remove opencensus metrics temporarily" + }, + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/client-core_v2.5.0", + "date": "Thu, 23 Apr 2020 20:37:45 GMT", + "comments": { + "minor": [ + { + "comment": "Add NEODataProvider to support C# node. Add NEOProvider to support NEODataProvider. Moved common code to DataProviderBase & ProviderBase." + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/client-core_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "patch": [ + { + "comment": "update dependencies" + } + ], + "minor": [ + { + "comment": "Migrate to Rush" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-client-core/CHANGELOG.md b/packages/neo-one-client-core/CHANGELOG.md index 77493a5f4c..55bd47430c 100644 --- a/packages/neo-one-client-core/CHANGELOG.md +++ b/packages/neo-one-client-core/CHANGELOG.md @@ -1,198 +1,55 @@ -# Change Log +# Change Log - @neo-one/client-core -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-core@1.4.6...@neo-one/client-core@2.3.0) (2019-10-23) +## 3.0.0 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/client-core +### Breaking changes +- 3.0.0preview3-alpha release bump +### Updates +- 3.0.0preview3.1 release bump +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT -## [1.4.6](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-core@1.4.5...@neo-one/client-core@1.4.6) (2019-10-23) +### Patches -**Note:** Version bump only for package @neo-one/client-core +- fix #1997 +- Add appropriate @types dependencies. +- fixup utxo invocation transactions +- Upgrade TypeScript from v3.8.3 to v3.9.5 +### Updates +- bump package version for future release clarity +## 2.6.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes -## [1.4.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-core@1.4.4...@neo-one/client-core@1.4.5) (2019-10-23) +- remove opencensus metrics temporarily +- update package release process to take better advantage of rush tooling -**Note:** Version bump only for package @neo-one/client-core +## 2.5.0 +Thu, 23 Apr 2020 20:37:45 GMT +### Minor changes +- Add NEODataProvider to support C# node. Add NEOProvider to support NEODataProvider. Moved common code to DataProviderBase & ProviderBase. +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT +### Minor changes -## [1.4.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-core@1.4.3...@neo-one/client-core@1.4.4) (2019-09-04) +- Migrate to Rush -**Note:** Version bump only for package @neo-one/client-core +### Patches +- update dependencies - - - -## [1.4.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-core@1.4.2...@neo-one/client-core@1.4.3) (2019-08-31) - -**Note:** Version bump only for package @neo-one/client-core - - - - - -## [1.4.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-core@1.4.1...@neo-one/client-core@1.4.2) (2019-08-30) - -**Note:** Version bump only for package @neo-one/client-core - - - - - -## [1.4.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-core@1.4.0...@neo-one/client-core@1.4.1) (2019-08-23) - - -### Bug Fixes - -* **core:** fix arg assertions in client smart contract APIs ([98e4e22](https://github.com/neo-one-suite/neo-one/commit/98e4e22)) - - - - - -# [1.4.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-core@1.3.0...@neo-one/client-core@1.4.0) (2019-08-22) - - -### Bug Fixes - -* **cypress:** update cypress tests and website ([4337441](https://github.com/neo-one-suite/neo-one/commit/4337441)) - - -### Features - -* **monitor:** remove @neo-one/monitor. replace with opencensus, pino, and debug ([#1597](https://github.com/neo-one-suite/neo-one/issues/1597)) ([4b1a28f](https://github.com/neo-one-suite/neo-one/commit/4b1a28f)) - - - - - -# [1.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-core@1.2.1...@neo-one/client-core@1.3.0) (2019-07-29) - - -### Features - -* **DapiUserAccountProvider:** Implement DapiUserAccountProvider for the dapi NEP ([afdd119](https://github.com/neo-one-suite/neo-one/commit/afdd119)) - - - - - -## [1.2.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-core@1.2.0...@neo-one/client-core@1.2.1) (2019-06-20) - - -### Bug Fixes - -* **deps:** update dependency typescript to v3.5.1 ([#1365](https://github.com/neo-one-suite/neo-one/issues/1365)) ([ec89546](https://github.com/neo-one-suite/neo-one/commit/ec89546)) - - - - - -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-core@1.1.2...@neo-one/client-core@1.2.0) (2019-06-04) - - -### Bug Fixes - -* **@neo-one/types:** eliminate global types from @neo-one/types ([004330d](https://github.com/neo-one-suite/neo-one/commit/004330d)) -* **deps:** update misc dependencies ([0c9bdde](https://github.com/neo-one-suite/neo-one/commit/0c9bdde)) -* **rpc:** Re-enable RateLimit middleware by default ([3160174](https://github.com/neo-one-suite/neo-one/commit/3160174)) - - -### Features - -* **client:** Add HDKeyStore ([c09b44f](https://github.com/neo-one-suite/neo-one/commit/c09b44f)) -* **client:** HDKeyStore testing ([8f925d4](https://github.com/neo-one-suite/neo-one/commit/8f925d4)) -* **RemoteUserAccountProvider:** Base implementation for RemoteUserAccountProvider + Receiver ([3c57f24](https://github.com/neo-one-suite/neo-one/commit/3c57f24)) - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-core@1.1.1...@neo-one/client-core@1.1.2) (2019-04-12) - -**Note:** Version bump only for package @neo-one/client-core - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-core@1.1.0...@neo-one/client-core@1.1.1) (2019-03-27) - - -### Bug Fixes - -* **deps:** update dependency @reactivex/ix-es2015-cjs to v2.5.2 ([bb4047b](https://github.com/neo-one-suite/neo-one/commit/bb4047b)) -* **deps:** update dependency bignumber.js to v8.1.1 ([2d6f93a](https://github.com/neo-one-suite/neo-one/commit/2d6f93a)) -* **jest:** remove unnecessary 'async' flags from test ([0aff798](https://github.com/neo-one-suite/neo-one/commit/0aff798)) - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-core@1.0.3...@neo-one/client-core@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/client-core - - - - - -## [1.0.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-core@1.0.3-alpha.0...@neo-one/client-core@1.0.3) (2019-02-21) - -**Note:** Version bump only for package @neo-one/client-core - - - - - -## [1.0.3-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-core@1.0.2...@neo-one/client-core@1.0.3-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **@neo-one/client:** Fix smart contract action types to use TEvent ([db4739a](https://github.com/neo-one-suite/neo-one/commit/db4739a)) -* **build:** adjust several packages to allow emitting .d.ts files. ([27a2d88](https://github.com/neo-one-suite/neo-one/commit/27a2d88)) -* **deps:** update dependency @reactivex/ix-es2015-cjs and @reactivex/ix-esnext-esm to v2.5.1 ([b16cb09](https://github.com/neo-one-suite/neo-one/commit/b16cb09)) -* **deps:** update dependency @types/lodash to v4.14.120 ([a76dae7](https://github.com/neo-one-suite/neo-one/commit/a76dae7)) -* **deps:** update dependency cross-fetch to v3 ([6344be7](https://github.com/neo-one-suite/neo-one/commit/6344be7)) -* **deps:** update dependency cross-fetch to v3.0.1 ([e7ed336](https://github.com/neo-one-suite/neo-one/commit/e7ed336)) -* **deps:** update dependency rxjs to v6.4.0 ([e28af2a](https://github.com/neo-one-suite/neo-one/commit/e28af2a)) -* **reactivex:** downgrade and pin reactivex dependencies ([a9ee114](https://github.com/neo-one-suite/neo-one/commit/a9ee114)) - - -### Features - -* **@neo-one/client:** Add iterStorage to NEOONEDataProvider ([0797f74](https://github.com/neo-one-suite/neo-one/commit/0797f74)) -* **browser compatibility:** Generate a browser-compatible bundle for client & client full packages. ([11c812b](https://github.com/neo-one-suite/neo-one/commit/11c812b)) -* **node:** record storage changes for each transaction ([22ef835](https://github.com/neo-one-suite/neo-one/commit/22ef835)) - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-core@1.0.1...@neo-one/client-core@1.0.2) (2018-11-13) - -**Note:** Version bump only for package @neo-one/client-core - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-core@1.0.0...@neo-one/client-core@1.0.1) (2018-11-13) - - -### Bug Fixes - -* **@neo-one/client:** Ponyfill AbortController ([cae3f72](https://github.com/neo-one-suite/neo-one/commit/cae3f72)) diff --git a/packages/neo-one-client-core/gulpfile.js b/packages/neo-one-client-core/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-client-core/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-client-core/package.json b/packages/neo-one-client-core/package.json index 9eee790000..75bff8eda1 100644 --- a/packages/neo-one-client-core/package.json +++ b/packages/neo-one-client-core/package.json @@ -1,29 +1,42 @@ { "name": "@neo-one/client-core", - "version": "2.3.0", + "version": "3.0.0", "description": "NEOβ€’ONE client core types implementation.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.3.0", - "@neo-one/client-switch": "^2.3.0", - "@neo-one/utils": "^2.3.0", + "@neo-one/client-common": "^3.0.0", + "@neo-one/client-switch": "^3.0.0", + "@neo-one/utils": "^3.0.0", "@reactivex/ix-es2015-cjs": "^2.5.3", + "@reactivex/ix-esnext-esm": "^2.5.3", + "@types/bn.js": "^4.11.5", + "@types/tapable": "^1.0.4", "bignumber.js": "^9.0.0", "bn.js": "^5.0.0", "cross-fetch": "^3.0.4", - "dataloader": "^1.4.0", + "dataloader": "^2.0.0", "debug": "^4.1.1", "lodash": "^4.17.15", - "rxjs": "^6.5.2", + "rxjs": "^6.5.3", "safe-stable-stringify": "^1.1.0", + "synchronized-promise": "^0.3.1", "tapable": "^1.1.3", "tslib": "^1.10.0" }, "devDependencies": { - "@types/bn.js": "^4.11.5", + "@neo-one/build-tools": "^1.0.0", "@types/debug": "^4.1.5", + "@types/jest": "^24.0.18", "@types/lodash": "^4.14.138", - "@types/tapable": "^1.0.4" - }, - "sideEffects": false + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-client-core/src/Client.ts b/packages/neo-one-client-core/src/Client.ts index 94defdaee2..d83b65228f 100644 --- a/packages/neo-one-client-core/src/Client.ts +++ b/packages/neo-one-client-core/src/Client.ts @@ -4,10 +4,8 @@ import { Account, AddressString, Block, - ClaimTransaction, GetOptions, Hash256String, - InvocationTransaction, InvokeSendUnsafeReceiveTransactionOptions, IterOptions, NetworkType, @@ -437,16 +435,14 @@ export class Client< * * Accepts either a single transfer or an array of transfer objects. * - * Note that we use an `InvocationTransaction` for transfers in order to reduce the overall bundle size since they can be used equivalently to `ContractTransaction`s. - * - * @returns `Promise>`. + * @returns `Promise>`. */ public async transfer( amount: BigNumber, - asset: Hash256String, + asset: AddressString, to: AddressString, options?: TransactionOptions, - ): Promise>; + ): Promise; public async transfer(transfers: readonly Transfer[], options?: TransactionOptions): Promise; public async transfer(...argsIn: any[]): Promise { const { transfers, options } = this.getTransfersOptions(argsIn); @@ -458,7 +454,7 @@ export class Client< /** * Claim all available unclaimed `GAS` for the currently selected account (or the specified `from` `UserAccountID`). */ - public async claim(optionsIn?: TransactionOptions): Promise> { + public async claim(optionsIn?: TransactionOptions): Promise { const options = args.assertTransactionOptions('options', optionsIn); await this.applyBeforeRelayHook(options); @@ -487,15 +483,7 @@ export class Client< return AsyncIterableX.from(provider.iterBlocks(network, options)).pipe( flatMap(async (block) => { - const actions = _.flatten( - block.transactions.map((transaction) => { - if (transaction.type === 'InvocationTransaction') { - return [...transaction.invocationData.actions]; - } - - return []; - }), - ); + const actions = _.flatten(block.transactions.map((transaction) => [...transaction.invocationData.actions])); return AsyncIterableX.of(...actions); }), @@ -513,7 +501,7 @@ export class Client< verify: boolean, optionsIn?: InvokeSendUnsafeReceiveTransactionOptions, sourceMaps: SourceMaps = {}, - ): Promise> { + ): Promise> { args.assertAddress('contract', contract); args.assertString('method', method); args.assertArray('params', params).forEach((param) => args.assertNullableScriptBuilderParam('params.param', param)); @@ -543,7 +531,7 @@ export class Client< transfer: Transfer, optionsIn?: TransactionOptions, sourceMaps: SourceMaps = {}, - ): Promise> { + ): Promise> { args.assertAddress('contract', contract); args.assertString('method', method); args.assertArray('params', params).forEach((param) => args.assertNullableScriptBuilderParam('params.param', param)); @@ -572,7 +560,7 @@ export class Client< hash: Hash256String, optionsIn?: TransactionOptions, sourceMaps: SourceMaps = {}, - ): Promise> { + ): Promise> { args.assertAddress('contract', contract); args.assertString('method', method); args.assertArray('params', params).forEach((param) => args.assertNullableScriptBuilderParam('params.param', param)); @@ -601,7 +589,7 @@ export class Client< hash: Hash256String, optionsIn?: TransactionOptions, sourceMaps: SourceMaps = {}, - ): Promise> { + ): Promise> { args.assertAddress('contract', contract); args.assertString('method', method); args.assertArray('params', params).forEach((param) => args.assertNullableScriptBuilderParam('params.param', param)); @@ -629,7 +617,7 @@ export class Client< paramsZipped: ReadonlyArray, optionsIn?: TransactionOptions, sourceMaps: SourceMaps = {}, - ): Promise> { + ): Promise { args.assertAddress('contract', contract); args.assertString('method', method); args.assertArray('params', params).forEach((param) => args.assertNullableScriptBuilderParam('params.param', param)); @@ -657,12 +645,12 @@ export class Client< ): Promise { try { args.assertString('network', network); - args.assertAddress('contract', contract); + const contractHash = args.tryGetUInt160Hex('contract', contract); args.assertString('method', method); args .assertArray('params', params) .forEach((param) => args.assertNullableScriptBuilderParam('params.param', param)); - const receipt = await this.getNetworkProvider(network).call(network, contract, method, params); + const receipt = await this.getNetworkProvider(network).call(network, contractHash, method, params); await this.hooks.afterCall.promise(receipt); return receipt; diff --git a/packages/neo-one-client-core/src/DeveloperClient.ts b/packages/neo-one-client-core/src/DeveloperClient.ts index 3495d786a0..8b818141eb 100644 --- a/packages/neo-one-client-core/src/DeveloperClient.ts +++ b/packages/neo-one-client-core/src/DeveloperClient.ts @@ -60,7 +60,7 @@ export class DeveloperClient { } /** - * Fetch the NEO tracker URL for the project. + * Fetch the NEO Tracker URL for the project. */ public async getNEOTrackerURL(): Promise { return this.developerProvider.getNEOTrackerURL(); diff --git a/packages/neo-one-client-core/src/Hash160.ts b/packages/neo-one-client-core/src/Hash160.ts new file mode 100644 index 0000000000..52a1044af3 --- /dev/null +++ b/packages/neo-one-client-core/src/Hash160.ts @@ -0,0 +1,19 @@ +import { common, scriptHashToAddress } from '@neo-one/client-common'; + +/** + * Common `AddressString`s. + */ +export const Hash160 = { + /** + * `AddressString` of the native NEO conract. + */ + NEO: scriptHashToAddress(common.nativeScriptHashes.NEO), + /** + * `AddressString` of the native GAS conract. + */ + GAS: scriptHashToAddress(common.nativeScriptHashes.GAS), + /** + * `AddressString` of the native Policy conract. + */ + Policy: scriptHashToAddress(common.nativeScriptHashes.Policy), +}; diff --git a/packages/neo-one-client-core/src/Hash256.ts b/packages/neo-one-client-core/src/Hash256.ts deleted file mode 100644 index 53a41dd25c..0000000000 --- a/packages/neo-one-client-core/src/Hash256.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { common } from '@neo-one/client-common'; - -/** - * Common `Hash256String`s. - */ -export const Hash256 = { - /** - * `Hash256String` of the NEO `Asset`. - */ - NEO: common.NEO_ASSET_HASH, - /** - * `Hash256String` of the GAS `Asset`. - */ - GAS: common.GAS_ASSET_HASH, -}; diff --git a/packages/neo-one-client-core/src/__data__/data.ts b/packages/neo-one-client-core/src/__data__/data.ts index 194aa2454a..f40dc148f6 100644 --- a/packages/neo-one-client-core/src/__data__/data.ts +++ b/packages/neo-one-client-core/src/__data__/data.ts @@ -1,7 +1,7 @@ -import { ABIParameter, ABIReturn, AssetType } from '@neo-one/client-common'; +import { ABIParameter, ABIReturn } from '@neo-one/client-common'; import BigNumber from 'bignumber.js'; import { BN } from 'bn.js'; -import { Hash256 } from '../Hash256'; +import { Hash160 } from '../Hash160'; import { keys } from './keys'; const hash256s = { @@ -88,25 +88,7 @@ const numbers = { b: 8, }; -const createValidAssetRegister = (type: AssetType) => ({ - type, - name: 'Foo', - amount: bigNumbers.a, - precision: numbers.b, - owner: keys[0].publicKeyString, - admin: keys[0].address, - issuer: keys[1].address, -}); - const assetRegisters = { - credit: createValidAssetRegister('Credit'), - duty: createValidAssetRegister('Duty'), - governing: createValidAssetRegister('Governing'), - utility: createValidAssetRegister('Utility'), - currency: createValidAssetRegister('Currency'), - share: createValidAssetRegister('Share'), - invoice: createValidAssetRegister('Invoice'), - token: createValidAssetRegister('Token'), validScriptHash: { type: 'Token', name: 'Foo', @@ -253,7 +235,7 @@ const simpleParameterType = (paramType: ABIParameter) => ({ const abi = { returnSignature: simpleReturnType({ type: 'Signature' }), returnBoolean: simpleReturnType({ type: 'Boolean' }), - returnAddress: simpleReturnType({ type: 'Address' }), + returnHash160: simpleReturnType({ type: 'Hash160' }), returnHash256: simpleReturnType({ type: 'Hash256' }), returnBuffer: simpleReturnType({ type: 'Buffer' }), returnPublicKey: simpleReturnType({ type: 'PublicKey' }), @@ -263,7 +245,7 @@ const abi = { returnInteger: simpleReturnType({ type: 'Integer', decimals: 8 }), paramSignature: simpleParameterType({ type: 'Signature', name: 'foo' }), paramBoolean: simpleParameterType({ type: 'Boolean', name: 'foo' }), - paramAddress: simpleParameterType({ type: 'Address', name: 'foo' }), + paramHash160: simpleParameterType({ type: 'Hash160', name: 'foo' }), paramHash256: simpleParameterType({ type: 'Hash256', name: 'foo' }), paramBuffer: simpleParameterType({ type: 'Buffer', name: 'foo' }), paramPublicKey: simpleParameterType({ type: 'PublicKey', name: 'foo' }), @@ -330,23 +312,23 @@ const smartContractNetworksDefinition = { const smartContractDefinition = { valid: { networks: smartContractNetworksDefinition.valid, - abi: abi.paramAddress, + abi: abi.paramHash160, }, invalid: 'Foo', invalidNetworks: { networks: smartContractNetworksDefinition.invalid, - abi: abi.paramAddress, + abi: abi.paramHash160, }, invalidNetwork: { networks: smartContractNetworksDefinition.invalidNetwork, - abi: abi.paramAddress, + abi: abi.paramHash160, }, }; const readSmartContractDefinition = { valid: { address: keys[0].address, - abi: abi.paramAddress, + abi: abi.paramHash160, }, invalid: 'Foo', }; @@ -362,7 +344,7 @@ const transfer = { a: { to: keys[0].address, amount: bigNumbers.a, - asset: Hash256.NEO, + asset: Hash160.NEO, }, }; @@ -376,7 +358,7 @@ const serializedTransaction = { }; const timestamps = { - past: 1534365211, + past: new BigNumber(1534365211), }; const invokeSendUnsafeReceiveTransactionOptions = { diff --git a/packages/neo-one-client-core/src/__data__/factory.ts b/packages/neo-one-client-core/src/__data__/factory.ts index f2a8accf91..c4c77fdf70 100644 --- a/packages/neo-one-client-core/src/__data__/factory.ts +++ b/packages/neo-one-client-core/src/__data__/factory.ts @@ -1,198 +1,122 @@ // tslint:disable deprecation import { - ABI, - ABIEvent, - ABIFunction, - Account, - AccountJSON, ActionBaseJSON, - AddressABIParameter, - AddressAttribute, - AddressContractParameter, + AnyContractParameterJSON, ArrayContractParameterJSON, - Asset, - AssetJSON, AttributeJSON, Block, BlockJSON, BooleanContractParameter, BooleanContractParameterJSON, - BufferAttribute, ByteArrayContractParameterJSON, CallReceiptJSON, - ClaimTransaction, - ClaimTransactionJSON, - ConfirmedClaimTransaction, - ConfirmedContractTransaction, - ConfirmedEnrollmentTransaction, - ConfirmedInvocationTransaction, - ConfirmedIssueTransaction, - ConfirmedMinerTransaction, - ConfirmedPublishTransaction, - ConfirmedRegisterTransaction, - ConfirmedStateTransaction, - ConfirmedTransactionBase, + common, + ConfirmedTransaction, Contract, + ContractABI, + ContractABIJSON, ContractJSON, - ContractTransaction, - ContractTransactionJSON, - EnrollmentTransaction, - EnrollmentTransactionJSON, + ContractManifestJSON, ForwardValue, + Hash160ABIParameter, + Hash160ContractParameter, Hash160ContractParameterJSON, - Hash256Attribute, Hash256ContractParameterJSON, Header, HeaderJSON, - Input, - InputJSON, - InputOutput, IntegerABIParameter, IntegerABIReturn, IntegerContractParameter, IntegerContractParameterJSON, InteropInterfaceContractParameterJSON, InvocationDataJSON, - InvocationResultError, - InvocationResultErrorJSON, - InvocationResultSuccess, - InvocationResultSuccessJSON, - InvocationTransaction, - InvocationTransactionJSON, - IssueTransaction, - IssueTransactionJSON, LogActionJSON, MapContractParameterJSON, - MinerTransaction, - MinerTransactionJSON, NetworkSettings, NetworkSettingsJSON, NotificationActionJSON, - Output, - OutputJSON, Peer, - PublicKeyAttribute, PublicKeyContractParameterJSON, - PublishTransaction, - PublishTransactionJSON, RawActionBase, RawCallReceipt, RawInvocationData, - RawInvocationResultError, - RawInvocationResultSuccess, + RawInvocationResultErrorJSON, + RawInvocationResultSuccessJSON, RawInvokeReceipt, RawLog, RawNotification, - RegisterTransaction, - RegisterTransactionJSON, + RawTransactionResultError, + RawTransactionResultSuccess, SignatureContractParameterJSON, SmartContractDefinition, - StateTransaction, - StateTransactionJSON, StorageItemJSON, StringABIParameter, StringABIReturn, StringContractParameter, StringContractParameterJSON, - TransactionBase, - TransactionBaseJSON, + Transaction, + TransactionJSON, + TransactionModel, + TransactionModelAdd, TransactionReceipt, TransactionResult, + TransactionResultError, + TransactionResultErrorJSON, + TransactionResultSuccess, + TransactionResultSuccessJSON, + TransactionWithInvocationDataJSON, Transfer, UserAccount, UserAccountID, VerifyScriptResultJSON, VerifyTransactionResultJSON, - VMState, VoidContractParameterJSON, Witness, WitnessJSON, } from '@neo-one/client-common'; import BigNumber from 'bignumber.js'; import { BN } from 'bn.js'; -import { Hash256 } from '../Hash256'; +import { ContractEventDescriptor, ContractMethodDescriptor } from '../../../neo-one-node-core/src/manifest'; +import { Hash160 } from '../Hash160'; import * as nep5 from '../nep5'; import { LockedWallet, UnlockedWallet } from '../user'; import { data } from './data'; import { keys } from './keys'; -const createInputJSON = (options: Partial = {}): InputJSON => ({ - txid: data.hash256s.a, - vout: 2, - ...options, -}); - -const createAccountJSON = (options: Partial = {}): AccountJSON => ({ - version: 0, - script_hash: keys[0].scriptHashString, - frozen: false, - votes: [keys[0].publicKeyString], - balances: [ - { asset: Hash256.NEO, value: data.bigNumbers.a.toString(10) }, - { asset: Hash256.GAS, value: data.bigNumbers.b.toString(10) }, - ], - unspent: [ - createInputJSON(), - { - txid: data.hash256s.b, - vout: 0, - }, - ], - unclaimed: [ - { - txid: data.hash256s.c, - vout: 3, - }, - { - txid: data.hash256s.d, - vout: 0, - }, - ], - ...options, -}); - -const createOutputJSON = (options: Partial = {}): OutputJSON => ({ - n: 0, - asset: Hash256.NEO, - value: data.bigNumbers.a.toString(10), - address: keys[0].address, - ...options, -}); +const createContractABIJSON = (options: Partial = {}): ContractABIJSON => ({ + hash: keys[0].scriptHashString, + methods: [], // TODO + events: [], // TODO + ...options, + // parameters: ['Hash160', 'ByteArray'], + // returntype: 'ByteArray', +}); + +const createManifestJSON = (options: Partial = {}): ContractManifestJSON => { + const { abi, ...optionsIn } = options; + + return { + hash: keys[0].scriptHashString, + hashHex: keys[0].scriptHashString, + abi: createContractABIJSON(abi), + groups: [], // TODO + permissions: [], // TODO + trusts: '*', + supportedStandards: [], // TODO + ...optionsIn, + }; +}; -const createAssetJSON = (options: Partial = {}): AssetJSON => ({ - version: 0, - id: data.hash256s.c, - type: 'Token', - name: 'TheToken', - amount: '100000000', - available: '10000000', - precision: 8, - owner: keys[0].publicKeyString, - admin: keys[0].address, - issuer: keys[1].address, - expiration: 1534418216, - frozen: false, - ...options, -}); +const createContractJSON = (options: Partial = {}): ContractJSON => { + const { manifest, ...optionsIn } = options; -const createContractJSON = (options: Partial = {}): ContractJSON => ({ - version: 0, - hash: keys[0].scriptHashString, - script: data.buffers.b, - parameters: ['Hash160', 'ByteArray'], - returntype: 'ByteArray', - name: 'MyContract', - code_version: '1.0', - author: 'dicarlo2', - email: 'alex.dicarlo@neotracker.io', - description: 'Hello World', - properties: { - storage: true, - dynamic_invoke: false, - payable: true, - }, - ...options, -}); + return { + id: 0, + script: data.buffers.b, + manifest: createManifestJSON(manifest), + ...optionsIn, + }; +}; const createActionBaseJSON = (options: Partial = {}): ActionBaseJSON => ({ version: 0, @@ -215,27 +139,8 @@ const createLogActionJSON = (options: Partial = {}): LogActionJSO ...options, }); -const createUInt160AttributeJSON = (options: Partial = {}): AttributeJSON => ({ - usage: 'Script', - data: keys[0].scriptHashString, - ...options, -}); - -const createUInt256AttributeJSON = (options: Partial = {}): AttributeJSON => ({ - usage: 'Hash1', - data: data.hash256s.b, - ...options, -}); - -const createBufferAttributeJSON = (options: Partial = {}): AttributeJSON => ({ - usage: 'Description', - data: data.buffers.a, - ...options, -}); - -const createECPointAttributeJSON = (options: Partial = {}): AttributeJSON => ({ - usage: 'ECDH02', - data: keys[0].publicKeyString, +const createHighPriorityAttributeJSON = (options: Partial = {}): AttributeJSON => ({ + type: 'HighPriority', ...options, }); @@ -245,148 +150,129 @@ const createWitnessJSON = (options: Partial = {}): WitnessJSON => ( ...options, }); -const createTransactionBaseJSON = (options: Partial = {}): TransactionBaseJSON => ({ - txid: data.hash256s.a, +const createTransactionJSON = (options: Partial = {}): TransactionJSON => ({ + hash: data.hash256s.a, size: 256, version: 0, - attributes: [ - createUInt160AttributeJSON(), - createUInt256AttributeJSON(), - createBufferAttributeJSON(), - createECPointAttributeJSON(), - ], - vin: [createInputJSON()], - vout: [createOutputJSON()], - scripts: [createWitnessJSON()], - sys_fee: '10', - net_fee: '5', + attributes: [createHighPriorityAttributeJSON()], + script: data.buffers.a, + sysfee: '10', + netfee: '5', + nonce: 10, // TODO + sender: '', // TODO + validuntilblock: 1000, // TODO + signers: [], // TODO + witnesses: [], // TODO data: { blockHash: data.hash256s.b, blockIndex: 5, + blockTime: 0, // TODO + confirmations: 0, // TODO + transactionHash: '', // TODO transactionIndex: 10, globalIndex: '25', }, ...options, }); +const createTransactionWithInvocationDataJSON = ( + options: Partial = {}, +): TransactionWithInvocationDataJSON => ({ + // TODO: get options into invocationData and createTransactionJSON() + ...createTransactionJSON(), + script: Buffer.from(data.buffers.a, 'hex').toString('hex'), + gas: '0', // TODO + invocationData: createInvocationDataJSON(), + ...options, +}); + const createIntegerContractParameterJSON = ( options: Partial = {}, ): IntegerContractParameterJSON => ({ + name: 'param', type: 'Integer', value: '20', ...options, }); -const createInvocationResultSuccessJSON = ( - options: Partial = {}, -): InvocationResultSuccessJSON => ({ - state: VMState.Halt, +const createTransactionResultSuccessJSON = ( + options: Partial = {}, +): TransactionResultSuccessJSON => ({ + script: '', // TODO + state: 'HALT', gas_consumed: '20', - gas_cost: '10', + gas_cost: '20', stack: [createIntegerContractParameterJSON()], ...options, }); -const createInvocationResultErrorJSON = ( - options: Partial = {}, -): InvocationResultErrorJSON => ({ - state: VMState.Fault, +const createTransactionResultErrorJSON = ( + options: Partial = {}, +): TransactionResultErrorJSON => ({ + script: '', // TODO + state: 'FAULT', gas_consumed: '20', - gas_cost: '10', + gas_cost: '20', stack: [createIntegerContractParameterJSON()], message: 'failure', ...options, }); -const createInvocationDataJSON = (options: Partial = {}): InvocationDataJSON => ({ - result: createInvocationResultSuccessJSON(), - asset: createAssetJSON(), - contracts: [createContractJSON()], - deletedContractHashes: [keys[2].scriptHashString], - migratedContractHashes: [[keys[0].scriptHashString, keys[1].scriptHashString] as const], - voteUpdates: [], - actions: [createNotificationActionJSON(), createLogActionJSON()], - storageChanges: [], - ...options, -}); - -const createClaimTransactionJSON = (options: Partial = {}): ClaimTransactionJSON => ({ - ...createTransactionBaseJSON(), - type: 'ClaimTransaction', - claims: [createInputJSON()], - ...options, -}); - -const createContractTransactionJSON = (options: Partial = {}): ContractTransactionJSON => ({ - ...createTransactionBaseJSON(), - type: 'ContractTransaction', - ...options, -}); - -const createEnrollmentTransactionJSON = ( - options: Partial = {}, -): EnrollmentTransactionJSON => ({ - ...createTransactionBaseJSON(), - type: 'EnrollmentTransaction', - pubkey: keys[0].publicKeyString, - ...options, -}); - -const createIssueTransactionJSON = (options: Partial = {}): IssueTransactionJSON => ({ - ...createTransactionBaseJSON(), - type: 'IssueTransaction', - ...options, -}); - -const createPublishTransactionJSON = (options: Partial = {}): PublishTransactionJSON => ({ - ...createTransactionBaseJSON(), - type: 'PublishTransaction', - contract: createContractJSON(), +const createRawInvocationResultSuccessJSON = ( + options: Partial = {}, +): RawInvocationResultSuccessJSON => ({ + state: 'HALT', + gas_consumed: '20', + stack: [createIntegerContractParameterJSON()], ...options, }); -const createRegisterTransactionJSON = (options: Partial = {}): RegisterTransactionJSON => ({ - ...createTransactionBaseJSON(), - type: 'RegisterTransaction', - asset: createAssetJSON(), +const createRawInvocationResultErrorJSON = ( + options: Partial = {}, +): RawInvocationResultErrorJSON => ({ + state: 'FAULT', + gas_consumed: '20', + stack: [createIntegerContractParameterJSON()], ...options, }); -const createStateTransactionJSON = (options: Partial = {}): StateTransactionJSON => ({ - ...createTransactionBaseJSON(), - type: 'StateTransaction', - descriptors: [], +const createInvocationDataJSON = (options: Partial = {}): InvocationDataJSON => ({ + result: createTransactionResultSuccessJSON(), + contracts: [createContractJSON()], + deletedContractHashes: [keys[2].scriptHashString], + migratedContractHashes: [[keys[0].scriptHashString, keys[1].scriptHashString]], + voteUpdates: [], + actions: [createNotificationActionJSON(), createLogActionJSON()], + storageChanges: [], ...options, }); -const createInvocationTransactionJSON = ( - options: Partial = {}, -): InvocationTransactionJSON => ({ - ...createTransactionBaseJSON(), - type: 'InvocationTransaction', - script: data.buffers.a, - gas: '10', - invocationData: createInvocationDataJSON(), - ...options, -}); +const createTransactionModel = (options: Partial = {}): TransactionModel => { + const invocation = createTransactionWithInvocationDataJSON(); -const createMinerTransactionJSON = (options: Partial = {}): MinerTransactionJSON => ({ - ...createTransactionBaseJSON(), - type: 'MinerTransaction', - nonce: 1234, - ...options, -}); + return new TransactionModel({ + script: Buffer.from(invocation.script, 'hex'), + version: invocation.version, + attributes: [], + systemFee: new BN(0), // TODO + hash: common.hexToUInt256(invocation.hash), + ...options, + }); +}; const createTransactionReceipt = (options: Partial = {}): TransactionReceipt => ({ blockHash: data.hash256s.a, blockIndex: 0, transactionIndex: 3, + transactionHash: '', // TODO + blockTime: 0, // TODO + confirmations: 10, // TODO globalIndex: new BigNumber(4), ...options, }); const createCallReceiptJSON = (options: Partial = {}): CallReceiptJSON => ({ - result: createInvocationResultSuccessJSON(), + result: createTransactionResultSuccessJSON(), actions: [createNotificationActionJSON(), createLogActionJSON()], ...options, }); @@ -410,29 +296,17 @@ const createHeaderJSON = (options: Partial = {}): HeaderJSON => ({ hash: data.hash256s.a, previousblockhash: data.hash256s.b, merkleroot: data.hash256s.c, - time: data.timestamps.past, + time: data.timestamps.past.toString(), index: 10, - nonce: '1234', nextconsensus: keys[0].address, - script: createWitnessJSON(), + witnesses: [createWitnessJSON()], size: 256, - confirmations: 10, ...options, }); const createBlockJSON = (options: Partial = {}): BlockJSON => ({ ...createHeaderJSON(), - tx: [ - createMinerTransactionJSON(), - createClaimTransactionJSON(), - createContractTransactionJSON(), - createEnrollmentTransactionJSON(), - createInvocationTransactionJSON(), - createIssueTransactionJSON(), - createPublishTransactionJSON(), - createRegisterTransactionJSON(), - createStateTransactionJSON(), - ], + tx: [createTransactionWithInvocationDataJSON()], ...options, }); @@ -455,9 +329,17 @@ const createStorageItemJSON = (options: Partial = {}): StorageI ...options, }); +const createAnyContractParameterJSON = (options: Partial = {}): AnyContractParameterJSON => ({ + name: 'param', + type: 'Any', + value: undefined, + ...options, +}); + const createArrayContractParameterJSON = ( options: Partial = {}, ): ArrayContractParameterJSON => ({ + name: 'param', type: 'Array', value: [createBooleanContractParameterJSON()], ...options, @@ -466,6 +348,7 @@ const createArrayContractParameterJSON = ( const createBooleanContractParameterJSON = ( options: Partial = {}, ): BooleanContractParameterJSON => ({ + name: 'param', type: 'Boolean', value: true, ...options, @@ -474,6 +357,7 @@ const createBooleanContractParameterJSON = ( const createByteArrayContractParameterJSON = ( options: Partial = {}, ): ByteArrayContractParameterJSON => ({ + name: 'param', type: 'ByteArray', value: Buffer.alloc(1, 0xff).toString(), ...options, @@ -482,6 +366,7 @@ const createByteArrayContractParameterJSON = ( const createHash160ContractParameterJSON = ( options: Partial = {}, ): Hash160ContractParameterJSON => ({ + name: 'param', type: 'Hash160', value: keys[0].scriptHashString, ...options, @@ -490,6 +375,7 @@ const createHash160ContractParameterJSON = ( const createHash256ContractParameterJSON = ( options: Partial = {}, ): Hash256ContractParameterJSON => ({ + name: 'param', type: 'Hash256', value: data.hash256s.a, ...options, @@ -497,18 +383,21 @@ const createHash256ContractParameterJSON = ( const createInteropInterfaceContractParameterJSON = (options: Partial = {}) => ({ type: 'InteropInterface' as 'InteropInterface', + name: 'param', ...options, }); const createMapContractParameterJSON = (options: Partial = {}): MapContractParameterJSON => ({ + name: 'param', type: 'Map', - value: [[createIntegerContractParameterJSON(), createBooleanContractParameterJSON()] as const], + value: [[createIntegerContractParameterJSON(), createBooleanContractParameterJSON()]], ...options, }); const createPublicKeyContractParameterJSON = ( options: Partial = {}, ): PublicKeyContractParameterJSON => ({ + name: 'param', type: 'PublicKey', value: keys[0].publicKeyString, ...options, @@ -517,6 +406,7 @@ const createPublicKeyContractParameterJSON = ( const createSignatureContractParameterJSON = ( options: Partial = {}, ): SignatureContractParameterJSON => ({ + name: 'param', type: 'Signature', value: data.signatures.a, ...options, @@ -525,6 +415,7 @@ const createSignatureContractParameterJSON = ( const createStringContractParameterJSON = ( options: Partial = {}, ): StringContractParameterJSON => ({ + name: 'param', type: 'String', value: 'test', ...options, @@ -533,44 +424,11 @@ const createStringContractParameterJSON = ( const createVoidContractParameterJSON = ( options: Partial = {}, ): VoidContractParameterJSON => ({ + name: 'param', type: 'Void', ...options, }); -const createInput = (options: Partial = {}): Input => ({ - hash: data.hash256s.a, - index: 0, - ...options, -}); - -const createOutput = (options: Partial = {}): Output => ({ - asset: Hash256.NEO, - value: data.bigNumbers.a, - address: keys[0].address, - ...options, -}); - -const createInputOutput = (options: Partial = {}): InputOutput => ({ - ...createInput(), - ...createOutput(), - ...options, -}); - -const createAsset = (options: Partial = {}): Asset => ({ - hash: data.hash256s.c, - type: 'Token', - name: 'TheToken', - amount: new BigNumber('100000000'), - available: new BigNumber('10000000'), - precision: 8, - owner: keys[0].publicKeyString, - admin: keys[0].address, - issuer: keys[1].address, - expiration: 1534418216, - frozen: false, - ...options, -}); - const createContract = (options: Partial = {}): Contract => ({ version: 0, address: keys[0].address, @@ -611,8 +469,8 @@ const createRawTransferNotification = (options: Partial = {}): createRawNotification({ args: [ createStringContractParameter({ value: 'transfer' }), - createAddressContractParameter({ value: keys[0].address }), - createAddressContractParameter({ value: keys[1].address }), + createHash160ContractParameter({ value: keys[0].address }), + createHash160ContractParameter({ value: keys[1].address }), createIntegerContractParameter({ value: data.bns.b }), ], ...options, @@ -625,74 +483,59 @@ const createRawLog = (options: Partial = {}): RawLog => ({ ...options, }); -const createAddressAttribute = (options: Partial = {}): AddressAttribute => ({ - usage: 'Script', - data: keys[0].address, - ...options, -}); - -const createHash256Attribute = (options: Partial = {}): Hash256Attribute => ({ - usage: 'Hash1', - data: data.hash256s.b, - ...options, -}); - -const createBufferAttribute = (options: Partial = {}): BufferAttribute => ({ - usage: 'Description', - data: data.buffers.a, - ...options, -}); - -const createPublicKeyAttribute = (options: Partial = {}): PublicKeyAttribute => ({ - usage: 'ECDH02', - data: keys[0].publicKeyString, - ...options, -}); - const createWitness = (options: Partial = {}): Witness => ({ invocation: data.buffers.a, verification: data.buffers.b, ...options, }); -const createTransactionBase = (options: Partial = {}): TransactionBase => ({ +const createTransaction = (options: Partial = {}): Transaction => ({ hash: data.hash256s.a, size: 256, version: 0, - attributes: [createAddressAttribute(), createHash256Attribute(), createBufferAttribute(), createPublicKeyAttribute()], - inputs: [createInput()], - outputs: [createOutput()], - scripts: [createWitness()], + nonce: 0, + validUntilBlock: 0, + signers: [], + attributes: [], + witnesses: [createWitness()], systemFee: new BigNumber('10'), networkFee: new BigNumber('5'), + script: data.buffers.a, ...options, }); -const createAddressContractParameter = (options: Partial = {}): AddressContractParameter => ({ - type: 'Address', +const createHash160ContractParameter = (options: Partial = {}): Hash160ContractParameter => ({ + name: 'param', + type: 'Hash160', value: keys[0].address, ...options, }); const createStringContractParameter = (options: Partial = {}): StringContractParameter => ({ + name: 'param', type: 'String', value: 'transfer', ...options, }); const createIntegerContractParameter = (options: Partial = {}): IntegerContractParameter => ({ + name: 'param', type: 'Integer', value: new BN(20), ...options, }); const createBooleanContractParameter = (options: Partial = {}): BooleanContractParameter => ({ + name: 'param', type: 'Boolean', value: true, ...options, }); -const createRawInvocationResultError = (options: Partial = {}): RawInvocationResultError => ({ +const createRawInvocationResultError = ( + options: Partial = {}, +): RawTransactionResultError => ({ + script: '', // TODO state: 'FAULT', gasConsumed: new BigNumber('10'), gasCost: new BigNumber('20'), @@ -702,8 +545,9 @@ const createRawInvocationResultError = (options: Partial = {}, -): RawInvocationResultSuccess => ({ + options: Partial = {}, +): RawTransactionResultSuccess => ({ + script: '', // TODO state: 'HALT', gasConsumed: new BigNumber('10'), gasCost: new BigNumber('20'), @@ -711,7 +555,8 @@ const createRawInvocationResultSuccess = ( ...options, }); -const createInvocationResultError = (options: Partial = {}): InvocationResultError => ({ +const createInvocationResultError = (options: Partial = {}): TransactionResultError => ({ + script: '', // TODO state: 'FAULT', gasConsumed: new BigNumber('20'), gasCost: new BigNumber('10'), @@ -720,8 +565,9 @@ const createInvocationResultError = (options: Partial = { }); const createInvocationResultSuccess = ( - options: Partial> = {}, -): InvocationResultSuccess => ({ + options: Partial> = {}, +): TransactionResultSuccess => ({ + script: '', // TODO state: 'HALT', gasConsumed: new BigNumber('20'), gasCost: new BigNumber('10'), @@ -731,16 +577,15 @@ const createInvocationResultSuccess = ( const createRawInvocationData = (options: Partial = {}): RawInvocationData => ({ result: createRawInvocationResultSuccess(), - asset: createAsset(), contracts: [createContract()], deletedContractAddresses: [keys[2].address], - migratedContractAddresses: [[keys[0].address, keys[1].address] as const], + migratedContractAddresses: [[keys[0].address, keys[1].address]], actions: [createRawNotification(), createRawLog()], storageChanges: [], ...options, }); -const createConfirmedTransactionBase = (options: Partial = {}): ConfirmedTransactionBase => ({ +const createConfirmedTransactionBase = (options: Partial = {}): ConfirmedTransaction => ({ receipt: { blockHash: data.hash256s.a, blockIndex: 10, @@ -750,140 +595,13 @@ const createConfirmedTransactionBase = (options: Partial = {}): ClaimTransaction => ({ - ...createTransactionBase(), - type: 'ClaimTransaction', - claims: [createInput()], - ...options, -}); - -const createContractTransaction = (options: Partial = {}): ContractTransaction => ({ - ...createTransactionBase(), - type: 'ContractTransaction', - ...options, -}); - -const createEnrollmentTransaction = (options: Partial = {}): EnrollmentTransaction => ({ - ...createTransactionBase(), - type: 'EnrollmentTransaction', - publicKey: keys[0].publicKeyString, - ...options, -}); - -const createIssueTransaction = (options: Partial = {}): IssueTransaction => ({ - ...createTransactionBase(), - type: 'IssueTransaction', - ...options, -}); - -const createPublishTransaction = (options: Partial = {}): PublishTransaction => ({ - ...createTransactionBase(), - type: 'PublishTransaction', - contract: createContract(), - ...options, -}); - -const createRegisterTransaction = (options: Partial = {}): RegisterTransaction => ({ - ...createTransactionBase(), - type: 'RegisterTransaction', - asset: createAsset(), - ...options, -}); - -const createStateTransaction = (options: Partial = {}): StateTransaction => ({ - ...createTransactionBase(), - type: 'StateTransaction', - ...options, -}); - -const createInvocationTransaction = (options: Partial = {}): InvocationTransaction => ({ - ...createTransactionBase(), - type: 'InvocationTransaction', - script: data.buffers.a, - gas: new BigNumber('10'), - ...options, -}); - -const createMinerTransaction = (options: Partial = {}): MinerTransaction => ({ - ...createTransactionBase(), - type: 'MinerTransaction', - nonce: 1234, - ...options, -}); - -const createConfirmedMinerTransaction = ( - options: Partial = {}, -): ConfirmedMinerTransaction => ({ - ...createMinerTransaction(), - ...createConfirmedTransactionBase(), - ...options, -}); - -const createConfirmedClaimTransaction = ( - options: Partial = {}, -): ConfirmedClaimTransaction => ({ - ...createClaimTransaction(), - ...createConfirmedTransactionBase(), - ...options, -}); - -const createConfirmedContractTransaction = ( - options: Partial = {}, -): ConfirmedContractTransaction => ({ - ...createContractTransaction(), - ...createConfirmedTransactionBase(), - ...options, -}); - -const createConfirmedEnrollmentTransaction = ( - options: Partial = {}, -): ConfirmedEnrollmentTransaction => ({ - ...createEnrollmentTransaction(), - ...createConfirmedTransactionBase(), - ...options, -}); - -const createConfirmedInvocationTransaction = ( - options: Partial = {}, -): ConfirmedInvocationTransaction => ({ - ...createInvocationTransaction(), +const createConfirmedTransaction = (options: Partial = {}): ConfirmedTransaction => ({ + ...createTransaction(), ...createConfirmedTransactionBase(), invocationData: createRawInvocationData(), ...options, }); -const createConfirmedIssueTransaction = ( - options: Partial = {}, -): ConfirmedIssueTransaction => ({ - ...createIssueTransaction(), - ...createConfirmedTransactionBase(), - ...options, -}); - -const createConfirmedPublishTransaction = ( - options: Partial = {}, -): ConfirmedPublishTransaction => ({ - ...createPublishTransaction(), - ...createConfirmedTransactionBase(), - ...options, -}); - -const createConfirmedRegisterTransaction = ( - options: Partial = {}, -): ConfirmedRegisterTransaction => ({ - ...createRegisterTransaction(), - ...createConfirmedTransactionBase(), - ...options, -}); - -const createConfirmedStateTransaction = ( - options: Partial = {}, -): ConfirmedStateTransaction => ({ - ...createStateTransaction(), - ...createConfirmedTransactionBase(), - ...options, -}); - const createRawCallReceipt = (options: Partial = {}): RawCallReceipt => ({ result: createRawInvocationResultSuccess(), actions: [createRawNotification(), createRawLog()], @@ -954,12 +672,12 @@ const createOtherWallet = (options: Partial = {}): UnlockedWalle const createTransfer = (options: Partial = {}): Transfer => ({ to: keys[0].address, amount: data.bigNumbers.a, - asset: Hash256.NEO, + asset: Hash160.NEO, ...options, }); -const createAddressABIParameter = (options: Partial = {}): AddressABIParameter => ({ - type: 'Address', +const createHash160ABIParameter = (options: Partial = {}): Hash160ABIParameter => ({ + type: 'Hash160', name: 'from', ...options, }); @@ -971,18 +689,20 @@ const createIntegerABIParameter = (options: Partial = {}): ...options, }); -const createDeployABIFunction = (options: Partial = {}): ABIFunction => ({ +const createDeployContractMethodDescriptor = ( + options: Partial = {}, +): ContractMethodDescriptor => ({ name: 'deploy', parameters: [], returnType: { type: 'Boolean' }, ...options, }); -const createABIEvent = (options: Partial = {}): ABIEvent => ({ +const createABIEvent = (options: Partial = {}): ContractEventDescriptor => ({ name: 'transfer', parameters: [ - createAddressABIParameter({ name: 'from' }), - createAddressABIParameter({ name: 'to' }), + createHash160ABIParameter({ name: 'from' }), + createHash160ABIParameter({ name: 'to' }), createIntegerABIParameter({ name: 'amount' }), ], ...options, @@ -1003,7 +723,7 @@ const createStringABIParameter = (options: Partial = {}): St ...options, }); -const createABI = (options: Partial = {}): ABI => ({ +const createABI = (options: Partial = {}): ContractABI => ({ ...nep5.abi(8), ...options, }); @@ -1017,7 +737,7 @@ const createForwardValue = (options: Partial = {}): ForwardValue = ...options, } as ForwardValue); -const createABIFunction = (options: Partial = {}): ABIFunction => ({ +const createContractMethodDescriptor = (options: Partial = {}): ContractMethodDescriptor => ({ name: 'foo', parameters: [], returnType: { type: 'Boolean' }, @@ -1036,25 +756,16 @@ const createSmartContractDefinition = (options: Partial address: keys[0].address, }, }, - abi: createABI(), + manifest: createContractManifest(), ...options, }); const createTransactionResult = (options: Partial = {}): TransactionResult => ({ - transaction: createContractTransaction(), + transaction: createTransaction(), confirmed: jest.fn(async () => createTransactionReceipt()), ...options, }); -const createAccount = (options: Partial = {}): Account => ({ - address: keys[0].address, - balances: { - [Hash256.NEO]: data.bigNumbers.a, - [Hash256.GAS]: data.bigNumbers.b, - }, - ...options, -}); - const createHeader = (options: Partial
= {}): Header => ({ version: 0, hash: data.hash256s.a, @@ -1062,35 +773,22 @@ const createHeader = (options: Partial
= {}): Header => ({ merkleRoot: data.hash256s.c, time: data.timestamps.past, index: 10, - nonce: '1234', nextConsensus: keys[0].address, - script: createWitnessJSON(), size: 256, + witnesses: [createWitness()], + witness: createWitness(), ...options, }); const createBlock = (options: Partial = {}): Block => ({ ...createHeader(), - transactions: [ - createConfirmedMinerTransaction(), - createConfirmedClaimTransaction(), - createConfirmedContractTransaction(), - createConfirmedEnrollmentTransaction(), - createConfirmedInvocationTransaction(), - createConfirmedIssueTransaction(), - createConfirmedPublishTransaction(), - createConfirmedRegisterTransaction(), - createConfirmedStateTransaction(), - ], + transactions: [createConfirmedTransaction()], ...options, }); export const factory = { - createAccountJSON, - createAssetJSON, createContractJSON, - createInputJSON, - createOutputJSON, + createAnyContractParameterJSON, createIntegerContractParameterJSON, createArrayContractParameterJSON, createBooleanContractParameterJSON, @@ -1104,9 +802,10 @@ export const factory = { createStringContractParameterJSON, createVoidContractParameterJSON, createInvocationDataJSON, - createInvocationResultSuccessJSON, - createInvocationResultErrorJSON, - createInvocationTransactionJSON, + createTransactionResultSuccessJSON, + createTransactionResultErrorJSON, + createTransactionJSON, + createTransactionWithInvocationDataJSON, createTransactionReceipt, createCallReceiptJSON, createLogActionJSON, @@ -1116,43 +815,29 @@ export const factory = { createPeerJSON, createNetworkSettingsJSON, createStorageItemJSON, - createAsset, createContract, - createInput, - createOutput, createRawInvocationData, - createInvocationTransaction, - createConfirmedInvocationTransaction, + createTransactionModel, + createTransaction, + createConfirmedTransaction, createInvocationResultSuccess, createInvocationResultError, - createMinerTransaction, - createConfirmedMinerTransaction, - createInputOutput, createRawCallReceipt, createNetworkSettings, - createBufferAttribute, - createAddressAttribute, - createHash256Attribute, - createPublicKeyAttribute, createWitness, createLockedWallet, createUnlockedWallet, createOtherWallet, createTransfer, - createContractTransaction, - createClaimTransaction, - createRegisterTransaction, - createDeployABIFunction, - createPublishTransaction, + createDeployContractMethodDescriptor, createRawInvocationResultError, createRawInvocationResultSuccess, - createIssueTransaction, createRawLog, createRawNotification, createABIEvent, - createABIFunction, + createContractMethodDescriptor, createForwardValue, - createAddressContractParameter, + createHash160ContractParameter, createIntegerContractParameter, createStringContractParameter, createStringABIReturn, @@ -1166,8 +851,7 @@ export const factory = { createUserAccount, createUserAccountID, createTransactionResult, - createEnrollmentTransaction, - createStateTransaction, - createAccount, createBlock, + createRawInvocationResultSuccessJSON, + createRawInvocationResultErrorJSON, }; diff --git a/packages/neo-one-client-core/src/__data__/index.ts b/packages/neo-one-client-core/src/__data__/index.ts index 8a9f3de727..38ffc0efb2 100644 --- a/packages/neo-one-client-core/src/__data__/index.ts +++ b/packages/neo-one-client-core/src/__data__/index.ts @@ -2,3 +2,4 @@ export * from './keys'; export * from './data'; export * from './factory'; export * from './HD'; +export * from './verifyDataProvider'; diff --git a/packages/neo-one-client-core/src/__data__/verifyDataProvider.ts b/packages/neo-one-client-core/src/__data__/verifyDataProvider.ts new file mode 100644 index 0000000000..5e805e8de9 --- /dev/null +++ b/packages/neo-one-client-core/src/__data__/verifyDataProvider.ts @@ -0,0 +1,167 @@ +import { + ActionJSON, + CallReceiptJSON, + common, + ConfirmedTransaction, + Contract, + ContractABI, + ContractABIJSON, + ContractGroup, + ContractGroupJSON, + ContractJSON, + ContractManifest, + ContractManifestJSON, + ContractPermission, + ContractPermissionDescriptor, + ContractPermissionDescriptorJSON, + ContractPermissionJSON, + InvocationResultJSON, + RawAction, + RawCallReceipt, + RawInvocationResult, + RawInvocationResultJSON, + scriptHashToAddress, + Transaction, + TransactionJSON, +} from '@neo-one/client-common'; + +const verifyInvocationResultSuccess = ( + invocationResult: RawInvocationResult, + invocationResultJSON: InvocationResultJSON | RawInvocationResultJSON, +) => { + if (invocationResult.state !== 'HALT' || invocationResultJSON.state !== 'HALT') { + throw new Error('For TS'); + } + expect(invocationResult.gasConsumed.toString(10)).toEqual(invocationResultJSON.gas_consumed); + const firstStack = invocationResult.stack[0]; + const firstStackJSON = invocationResultJSON.stack[0]; + if (firstStack.type !== 'Integer' || firstStackJSON.type !== 'Integer') { + throw new Error('For TS'); + } + expect(firstStack.value.toString(10)).toEqual(firstStackJSON.value); +}; + +const verifyDefaultActions = ( + actions: readonly RawAction[], + actionsJSON: readonly ActionJSON[], + blockIndex: number, + blockHash: string, + index: number, + txid: string, +) => { + expect(actions.length).toEqual(actionsJSON.length); + const verifyAction = (actionResult: RawAction, action: ActionJSON, idx: number) => { + expect(actionResult.type).toEqual(action.type); + expect(actionResult.version).toEqual(action.version); + expect(actionResult.blockIndex).toEqual(blockIndex); + expect(actionResult.blockHash).toEqual(blockHash); + expect(actionResult.transactionIndex).toEqual(index); + expect(actionResult.transactionHash).toEqual(txid); + expect(actionResult.index).toEqual(idx); + expect(actionResult.globalIndex.toString(10)).toEqual(action.index); + expect(actionResult.address).toEqual(scriptHashToAddress(action.scriptHash)); + }; + verifyAction(actions[0], actionsJSON[0], 0); + verifyAction(actions[1], actionsJSON[1], 1); +}; + +const verifyAbi = (abi: ContractABI, abiJSON: ContractABIJSON) => { + // TODO + // expect(abi.returnType).toEqual(returnType); +}; + +const verifyContractPermissionDescriptor = ( + desc: ContractPermissionDescriptor, + descJSON: ContractPermissionDescriptorJSON, +) => { + expect(desc.isHash).toEqual(descJSON.isHash); + expect(desc.isGroup).toEqual(descJSON.isGroup); + expect(desc.isWildcard).toEqual(descJSON.isWildcard); + // TODO: hashOrGroup +}; + +const verifyPermission = (permission: ContractPermission, permissionJSON: ContractPermissionJSON) => { + verifyContractPermissionDescriptor(permission.contract, permissionJSON.contract); + expect(permission.methods).toEqual(permissionJSON.methods); +}; + +const verifyGroup = (group: ContractGroup, groupJSON: ContractGroupJSON) => { + expect(group.publicKey).toEqual(common.stringToECPoint(groupJSON.publicKey)); + // TODO: check signature + expect(group.signature).toEqual(Buffer.from(groupJSON.signature, 'hex')); +}; + +const verifyManifest = (manifest: ContractManifest, manifestJSON: ContractManifestJSON) => { + // TODO: hash + expect(manifest.hash).toEqual(scriptHashToAddress(manifestJSON.hash)); + // TODO: hashHex + expect(manifest.trusts).toEqual(manifestJSON.trusts); + expect(manifest.supportedStandards).toEqual(manifestJSON.supportedStandards); + expect(manifest.extra).toEqual(manifestJSON.extra); + verifyAbi(manifest.abi, manifestJSON.abi); + expect(manifest.permissions.length).toEqual(manifestJSON.permissions.length); + manifest.permissions.forEach((perm, idx) => { + verifyPermission(perm, manifestJSON.permissions[idx]); + }); + expect(manifest.groups.length).toEqual(manifestJSON.groups.length); + manifest.groups.forEach((group, idx) => { + verifyGroup(group, manifestJSON.groups[idx]); + }); +}; + +const verifyContract = (contract: Contract, contractJSON: ContractJSON, returnType = 'Buffer') => { + expect(contract.id).toEqual(contractJSON.id); + expect(contract.script).toEqual(contractJSON.script); + verifyManifest(contract.manifest, contractJSON.manifest); +}; + +const verifyTransaction = (transaction: Transaction, transactionJSON: TransactionJSON) => { + expect(transaction.hash).toEqual(transactionJSON.hash); + expect(transaction.size).toEqual(transactionJSON.size); + expect(transaction.version).toEqual(transactionJSON.version); + expect(transaction.nonce).toEqual(transactionJSON.nonce); + expect(transaction.sender).toEqual(transactionJSON.sender); + expect(transaction.systemFee.toString(10)).toEqual(transactionJSON.sysfee); + expect(transaction.networkFee.toString(10)).toEqual(transactionJSON.netfee); + expect(transaction.validUntilBlock).toEqual(transactionJSON.validuntilblock); + expect(transaction.attributes.length).toEqual(transactionJSON.attributes.length); + expect(transaction.attributes).toEqual(transactionJSON.attributes); + expect(transaction.signers.length).toEqual(transactionJSON.signers.length); + // TODO: signers + expect(transaction.script).toEqual(transactionJSON.script); + // TODO: check script and witnesses + expect(transaction.witnesses).toEqual(transactionJSON.witnesses); + // TODO: expect(transaction.data).toEqual(transactionJSON.data); +}; + +const verifyConfirmedTransaction = (transaction: ConfirmedTransaction, transactionJSON: TransactionJSON) => { + if (transactionJSON.data === undefined) { + throw new Error('For TS'); + } + + expect(transaction.receipt.blockHash).toEqual(transactionJSON.data.blockHash); + expect(transaction.receipt.blockIndex).toEqual(transactionJSON.data.blockIndex); + expect(transaction.receipt.transactionIndex).toEqual(transactionJSON.data.transactionIndex); + expect(transaction.receipt.globalIndex.toString(10)).toEqual(transactionJSON.data.globalIndex); +}; + +const verifyCallReceipt = (receipt: RawCallReceipt, receiptJSON: CallReceiptJSON) => { + verifyInvocationResultSuccess(receipt.result, receiptJSON.result); + verifyDefaultActions( + receipt.actions, + receiptJSON.actions, + 0, + '0x​​​​​0000000000000000000000000000000000000000000000000000000000000000​​​​​', + 0, + '0x​​​​​0000000000000000000000000000000000000000000000000000000000000000​​​​​', + ); +}; + +export const verifyDataProvider = { + verifyInvocationResultSuccess, + verifyDefaultActions, + verifyContract, + verifyTransaction, + verifyConfirmedTransaction, + verifyCallReceipt, +}; diff --git a/packages/neo-one-client-core/src/__other_tests__/RemoteUserAccountProvider.test.ts b/packages/neo-one-client-core/src/__other_tests__/RemoteUserAccountProvider.test.ts index c9e1c5af46..119b385060 100644 --- a/packages/neo-one-client-core/src/__other_tests__/RemoteUserAccountProvider.test.ts +++ b/packages/neo-one-client-core/src/__other_tests__/RemoteUserAccountProvider.test.ts @@ -5,7 +5,7 @@ import { map, take } from 'rxjs/operators'; // tslint:disable-next-line no-implicit-dependencies import { MessageChannel } from 'worker_threads'; import { data, factory, keys } from '../__data__'; -import { Hash256 } from '../Hash256'; +import { Hash160 } from '../Hash160'; import { connectRemoteUserAccountProvider, RemoteUserAccountProvider } from '../user'; describe('RemoteUserAccountProvider', () => { @@ -23,34 +23,32 @@ describe('RemoteUserAccountProvider', () => { Buffer.from('abc123', 'hex'), true, [data.bns.b, data.numbers.b], - new Map([[data.bns.a, data.numbers.b] as const]), + new Map([[data.bns.a, data.numbers.b]]), { key: false }, undefined, ]; const allParamsZipped = [ - ['undefined', undefined] as const, - ['bignumber', data.bigNumbers.a] as const, - ['buffer', data.buffers.a] as const, - ['address', unlockedWallet.userAccount.id.address] as const, - ['hash256', data.hash256s.a] as const, - ['publicKey', keys[0].publicKeyString] as const, - ['boolean', true] as const, - ['array', [['undefined', undefined], ['bignumber', data.bigNumbers.a]]] as const, - ['map', new Map([[data.bns.a, data.numbers.b] as const])] as const, - ['object', { key: false }] as const, + ['undefined', undefined], + ['bignumber', data.bigNumbers.a], + ['buffer', data.buffers.a], + ['address', unlockedWallet.userAccount.id.address], + ['hash256', data.hash256s.a], + ['publicKey', keys[0].publicKeyString], + ['boolean', true], [ - 'forward', - { name: 'forwardValue', converted: Buffer.alloc(20, 7), param: unlockedWallet.userAccount.id.address }, - ] as const, + 'array', + [ + ['undefined', undefined], + ['bignumber', data.bigNumbers.a], + ], + ], + ['map', new Map([[data.bns.a, data.numbers.b]])], + ['object', { key: false }], + ['forward', { name: 'forwardValue', converted: Buffer.alloc(20, 7), param: unlockedWallet.userAccount.id.address }], ] as ReadonlyArray; const transactionOptions = { from: unlockedWallet1.userAccount.id, - attributes: [ - factory.createAddressAttribute(), - factory.createBufferAttribute(), - factory.createPublicKeyAttribute(), - factory.createHash256Attribute(), - ], + attributes: [], networkFee: data.bigNumbers.a, systemFee: data.bigNumbers.b, }; @@ -220,7 +218,7 @@ describe('RemoteUserAccountProvider', () => { transfer.mockImplementation(async () => transactionResult); const result = await remoteUserAccountProvider.transfer( - [{ amount: data.bigNumbers.a, asset: Hash256.NEO, to: keys[0].address }], + [{ amount: data.bigNumbers.a, asset: Hash160.NEO, to: keys[0].address }], { from: unlockedWallet1.userAccount.id, }, @@ -257,8 +255,8 @@ describe('RemoteUserAccountProvider', () => { allParamsZipped, true, { - sendFrom: [{ amount: data.bigNumbers.a, asset: Hash256.NEO, to: keys[0].address }], - sendTo: [{ amount: data.bigNumbers.a, asset: Hash256.NEO }], + sendFrom: [{ amount: data.bigNumbers.a, asset: Hash160.NEO, to: keys[0].address }], + sendTo: [{ amount: data.bigNumbers.a, asset: Hash160.NEO }], }, sourceMap, ); @@ -282,7 +280,7 @@ describe('RemoteUserAccountProvider', () => { allParamsZipped, { amount: data.bigNumbers.a, - asset: Hash256.NEO, + asset: Hash160.NEO, to: keys[0].address, }, transactionOptions, @@ -306,7 +304,7 @@ describe('RemoteUserAccountProvider', () => { 'deploy', allScriptBuilderParams, allParamsZipped, - Hash256.NEO, + Hash160.NEO, transactionOptions, ); @@ -326,7 +324,7 @@ describe('RemoteUserAccountProvider', () => { 'deploy', allScriptBuilderParams, allParamsZipped, - Hash256.NEO, + Hash160.NEO, transactionOptions, sourceMap, ); diff --git a/packages/neo-one-client-core/src/__tests__/Client.test.ts b/packages/neo-one-client-core/src/__tests__/Client.test.ts index c78edce3f8..35ad16e3e8 100644 --- a/packages/neo-one-client-core/src/__tests__/Client.test.ts +++ b/packages/neo-one-client-core/src/__tests__/Client.test.ts @@ -116,9 +116,9 @@ describe('Client Tests', () => { test('iterActionsRaw - undefined on provider', async () => { const actions = [factory.createRawNotification(), factory.createRawLog()]; const invocationData = factory.createRawInvocationData({ actions }); - const invocationTransaction = factory.createConfirmedInvocationTransaction({ invocationData }); + const invocationTransaction = factory.createConfirmedTransaction({ invocationData }); const block = factory.createBlock({ - transactions: [invocationTransaction, factory.createConfirmedMinerTransaction()], + transactions: [invocationTransaction, factory.createConfirmedTransaction()], }); providerOne.iterActionsRaw = undefined; providerOne.iterBlocks = jest.fn(() => AsyncIterableX.from(of(block))); diff --git a/packages/neo-one-client-core/src/__tests__/__snapshots__/args.test.ts.snap b/packages/neo-one-client-core/src/__tests__/__snapshots__/args.test.ts.snap index ddc0acfd0b..8749f0b838 100644 --- a/packages/neo-one-client-core/src/__tests__/__snapshots__/args.test.ts.snap +++ b/packages/neo-one-client-core/src/__tests__/__snapshots__/args.test.ts.snap @@ -36,6 +36,14 @@ exports[`arg assertions assertAttribute - non object 1`] = `"Expected Attribute exports[`arg assertions assertAttribute - undefined 1`] = `"Expected Attribute for value, found undefined"`; +exports[`arg assertions assertBN - BigNumber 1`] = `"Expected string for value, found 10"`; + +exports[`arg assertions assertBN - non BN 1`] = `"Expected string for value, found 0"`; + +exports[`arg assertions assertBN - undefined 1`] = `"Expected string for value, found undefined"`; + +exports[`arg assertions assertBN - undefined 2`] = `"Expected string for value, found undefined"`; + exports[`arg assertions assertBigNumber - non BigNumber 1`] = `"Expected BigNumber for value, found 0"`; exports[`arg assertions assertBigNumber - undefined 1`] = `"Expected BigNumber for value, found undefined"`; diff --git a/packages/neo-one-client-core/src/__tests__/args.test.ts b/packages/neo-one-client-core/src/__tests__/args.test.ts index add9b5f5ee..08c136c89d 100644 --- a/packages/neo-one-client-core/src/__tests__/args.test.ts +++ b/packages/neo-one-client-core/src/__tests__/args.test.ts @@ -139,6 +139,29 @@ describe('arg assertions', () => { expect(() => args.assertBigNumber('value', value)).toThrowErrorMatchingSnapshot(); }); + test('assertBN - BN', () => { + const value = data.bns.a; + expect(args.assertBN('value', value)).toEqual(value); + }); + + test('assertBN - undefined', () => { + const value = undefined; + + expect(() => args.assertPublicKey('value', value)).toThrowErrorMatchingSnapshot(); + }); + + test('assertBN - non BN', () => { + const value = 0; + + expect(() => args.assertPublicKey('value', value)).toThrowErrorMatchingSnapshot(); + }); + + test('assertBN - BigNumber', () => { + const value = data.bigNumbers.a; + + expect(() => args.assertPublicKey('value', value)).toThrowErrorMatchingSnapshot(); + }); + test('assertBoolean - boolean', () => { const value = true; @@ -247,178 +270,178 @@ describe('arg assertions', () => { expect(() => args.assertNullableArray('value', value)).toThrowErrorMatchingSnapshot(); }); - test('assertABI - returnSignature', () => { + test('assertContractABI - returnSignature', () => { const value = data.abi.returnSignature; - expect(args.assertABI('value', value)).toEqual(value); + expect(args.assertContractABI('value', value)).toEqual(value); }); - test('assertABI - returnBoolean', () => { + test('assertContractABI - returnBoolean', () => { const value = data.abi.returnBoolean; - expect(args.assertABI('value', value)).toEqual(value); + expect(args.assertContractABI('value', value)).toEqual(value); }); - test('assertABI - returnAddress', () => { - const value = data.abi.returnAddress; + test('assertContractABI - returnHash160', () => { + const value = data.abi.returnHash160; - expect(args.assertABI('value', value)).toEqual(value); + expect(args.assertContractABI('value', value)).toEqual(value); }); - test('assertABI - returnHash256', () => { + test('assertContractABI - returnHash256', () => { const value = data.abi.returnHash256; - expect(args.assertABI('value', value)).toEqual(value); + expect(args.assertContractABI('value', value)).toEqual(value); }); - test('assertABI - returnBuffer', () => { + test('assertContractABI - returnBuffer', () => { const value = data.abi.returnBuffer; - expect(args.assertABI('value', value)).toEqual(value); + expect(args.assertContractABI('value', value)).toEqual(value); }); - test('assertABI - returnPublicKey', () => { + test('assertContractABI - returnPublicKey', () => { const value = data.abi.returnPublicKey; - expect(args.assertABI('value', value)).toEqual(value); + expect(args.assertContractABI('value', value)).toEqual(value); }); - test('assertABI - returnString', () => { + test('assertContractABI - returnString', () => { const value = data.abi.returnString; - expect(args.assertABI('value', value)).toEqual(value); + expect(args.assertContractABI('value', value)).toEqual(value); }); - test('assertABI - returnArray', () => { + test('assertContractABI - returnArray', () => { const value = data.abi.returnArray; - expect(args.assertABI('value', value)).toEqual(value); + expect(args.assertContractABI('value', value)).toEqual(value); }); - test('assertABI - returnVoid', () => { + test('assertContractABI - returnVoid', () => { const value = data.abi.returnVoid; - expect(args.assertABI('value', value)).toEqual(value); + expect(args.assertContractABI('value', value)).toEqual(value); }); - test('assertABI - returnInteger', () => { + test('assertContractABI - returnInteger', () => { const value = data.abi.returnInteger; - expect(args.assertABI('value', value)).toEqual(value); + expect(args.assertContractABI('value', value)).toEqual(value); }); - test('assertABI - paramSignature', () => { + test('assertContractABI - paramSignature', () => { const value = data.abi.paramSignature; - expect(args.assertABI('value', value)).toEqual(value); + expect(args.assertContractABI('value', value)).toEqual(value); }); - test('assertABI - paramBoolean', () => { + test('assertContractABI - paramBoolean', () => { const value = data.abi.paramBoolean; - expect(args.assertABI('value', value)).toEqual(value); + expect(args.assertContractABI('value', value)).toEqual(value); }); - test('assertABI - paramAddress', () => { - const value = data.abi.paramAddress; + test('assertContractABI - paramHash160', () => { + const value = data.abi.paramHash160; - expect(args.assertABI('value', value)).toEqual(value); + expect(args.assertContractABI('value', value)).toEqual(value); }); - test('assertABI - paramHash256', () => { + test('assertContractABI - paramHash256', () => { const value = data.abi.paramHash256; - expect(args.assertABI('value', value)).toEqual(value); + expect(args.assertContractABI('value', value)).toEqual(value); }); - test('assertABI - paramBuffer', () => { + test('assertContractABI - paramBuffer', () => { const value = data.abi.paramBuffer; - expect(args.assertABI('value', value)).toEqual(value); + expect(args.assertContractABI('value', value)).toEqual(value); }); - test('assertABI - paramPublicKey', () => { + test('assertContractABI - paramPublicKey', () => { const value = data.abi.paramPublicKey; - expect(args.assertABI('value', value)).toEqual(value); + expect(args.assertContractABI('value', value)).toEqual(value); }); - test('assertABI - paramString', () => { + test('assertContractABI - paramString', () => { const value = data.abi.paramString; - expect(args.assertABI('value', value)).toEqual(value); + expect(args.assertContractABI('value', value)).toEqual(value); }); - test('assertABI - paramArray', () => { + test('assertContractABI - paramArray', () => { const value = data.abi.paramArray; - expect(args.assertABI('value', value)).toEqual(value); + expect(args.assertContractABI('value', value)).toEqual(value); }); - test('assertABI - paramVoid', () => { + test('assertContractABI - paramVoid', () => { const value = data.abi.paramVoid; - expect(args.assertABI('value', value)).toEqual(value); + expect(args.assertContractABI('value', value)).toEqual(value); }); - test('assertABI - paramInteger', () => { + test('assertContractABI - paramInteger', () => { const value = data.abi.paramInteger; - expect(args.assertABI('value', value)).toEqual(value); + expect(args.assertContractABI('value', value)).toEqual(value); }); - test('assertABI - undefined', () => { + test('assertContractABI - undefined', () => { const value = undefined; - expect(() => args.assertABI('value', value)).toThrowErrorMatchingSnapshot(); + expect(() => args.assertContractABI('value', value)).toThrowErrorMatchingSnapshot(); }); - test('assertABI - non object', () => { + test('assertContractABI - non object', () => { const value = true; - expect(() => args.assertABI('value', value)).toThrowErrorMatchingSnapshot(); + expect(() => args.assertContractABI('value', value)).toThrowErrorMatchingSnapshot(); }); - test('assertABI - invalidType', () => { + test('assertContractABI - invalidType', () => { const value = data.abi.invalidType; - expect(() => args.assertABI('value', value)).toThrowErrorMatchingSnapshot(); + expect(() => args.assertContractABI('value', value)).toThrowErrorMatchingSnapshot(); }); - test('assertABI - invalidReturnType', () => { + test('assertContractABI - invalidReturnType', () => { const value = data.abi.invalidReturnType; - expect(() => args.assertABI('value', value)).toThrowErrorMatchingSnapshot(); + expect(() => args.assertContractABI('value', value)).toThrowErrorMatchingSnapshot(); }); - test('assertABI - invalidParameterType', () => { + test('assertContractABI - invalidParameterType', () => { const value = data.abi.invalidParameterType; - expect(() => args.assertABI('value', value)).toThrowErrorMatchingSnapshot(); + expect(() => args.assertContractABI('value', value)).toThrowErrorMatchingSnapshot(); }); - test('assertABI - invalidFunction', () => { + test('assertContractABI - invalidFunction', () => { const value = data.abi.invalidFunction; - expect(() => args.assertABI('value', value)).toThrowErrorMatchingSnapshot(); + expect(() => args.assertContractABI('value', value)).toThrowErrorMatchingSnapshot(); }); - test('assertABI - invalidFunctions', () => { + test('assertContractABI - invalidFunctions', () => { const value = data.abi.invalidFunctions; - expect(() => args.assertABI('value', value)).toThrowErrorMatchingSnapshot(); + expect(() => args.assertContractABI('value', value)).toThrowErrorMatchingSnapshot(); }); - test('assertABI - invalidEvent', () => { + test('assertContractABI - invalidEvent', () => { const value = data.abi.invalidEvent; - expect(() => args.assertABI('value', value)).toThrowErrorMatchingSnapshot(); + expect(() => args.assertContractABI('value', value)).toThrowErrorMatchingSnapshot(); }); - test('assertABI - invalidEvents', () => { + test('assertContractABI - invalidEvents', () => { const value = data.abi.invalidEvents; - expect(() => args.assertABI('value', value)).toThrowErrorMatchingSnapshot(); + expect(() => args.assertContractABI('value', value)).toThrowErrorMatchingSnapshot(); }); test('assertSmartContractDefinition - valid', () => { @@ -797,4 +820,178 @@ describe('arg assertions', () => { expect(() => args.assertNullableIterOptions('value', value)).toThrowErrorMatchingSnapshot(); }); + + test('assertContractABIClient - returnSignature', () => { + const value = data.abi.returnSignature; + + expect(args.assertContractABIClient('value', value)).toEqual(value); + }); + + test('assertContractABIClient - returnBoolean', () => { + const value = data.abi.returnBoolean; + + expect(args.assertContractABIClient('value', value)).toEqual(value); + }); + + test('assertContractABIClient - returnAddress', () => { + const value = data.abi.returnAddress; + + expect(args.assertContractABIClient('value', value)).toEqual(value); + }); + + test('assertContractABIClient - returnHash256', () => { + const value = data.abi.returnHash256; + + expect(args.assertContractABIClient('value', value)).toEqual(value); + }); + + test('assertContractABIClient - returnBuffer', () => { + const value = data.abi.returnBuffer; + + expect(args.assertContractABIClient('value', value)).toEqual(value); + }); + + test('assertContractABIClient - returnPublicKey', () => { + const value = data.abi.returnPublicKey; + + expect(args.assertContractABIClient('value', value)).toEqual(value); + }); + + test('assertContractABIClient - returnString', () => { + const value = data.abi.returnString; + + expect(args.assertContractABIClient('value', value)).toEqual(value); + }); + + test('assertContractABIClient - returnArray', () => { + const value = data.abi.returnArray; + + expect(args.assertContractABIClient('value', value)).toEqual(value); + }); + + test('assertContractABIClient - returnVoid', () => { + const value = data.abi.returnVoid; + + expect(args.assertContractABIClient('value', value)).toEqual(value); + }); + + test('assertContractABIClient - returnInteger', () => { + const value = data.abi.returnInteger; + + expect(args.assertContractABIClient('value', value)).toEqual(value); + }); + + test('assertContractABIClient - paramSignature', () => { + const value = data.abi.paramSignature; + + expect(args.assertContractABIClient('value', value)).toEqual(value); + }); + + test('assertContractABIClient - paramBoolean', () => { + const value = data.abi.paramBoolean; + + expect(args.assertContractABIClient('value', value)).toEqual(value); + }); + + test('assertContractABIClient - paramAddress', () => { + const value = data.abi.paramAddress; + + expect(args.assertContractABIClient('value', value)).toEqual(value); + }); + + test('assertContractABIClient - paramHash256', () => { + const value = data.abi.paramHash256; + + expect(args.assertContractABIClient('value', value)).toEqual(value); + }); + + test('assertContractABIClient - paramBuffer', () => { + const value = data.abi.paramBuffer; + + expect(args.assertContractABIClient('value', value)).toEqual(value); + }); + + test('assertContractABIClient - paramPublicKey', () => { + const value = data.abi.paramPublicKey; + + expect(args.assertContractABIClient('value', value)).toEqual(value); + }); + + test('assertContractABIClient - paramString', () => { + const value = data.abi.paramString; + + expect(args.assertContractABIClient('value', value)).toEqual(value); + }); + + test('assertContractABIClient - paramArray', () => { + const value = data.abi.paramArray; + + expect(args.assertContractABIClient('value', value)).toEqual(value); + }); + + test('assertContractABIClient - paramVoid', () => { + const value = data.abi.paramVoid; + + expect(args.assertContractABIClient('value', value)).toEqual(value); + }); + + test('assertContractABIClient - paramInteger', () => { + const value = data.abi.paramInteger; + + expect(args.assertContractABIClient('value', value)).toEqual(value); + }); + + test('assertContractABIClient - undefined', () => { + const value = undefined; + + expect(() => args.assertContractABIClient('value', value)).toThrowErrorMatchingSnapshot(); + }); + + test('assertContractABIClient - non object', () => { + const value = true; + + expect(() => args.assertContractABIClient('value', value)).toThrowErrorMatchingSnapshot(); + }); + + test('assertContractABIClient - invalidType', () => { + const value = data.abi.invalidType; + + expect(() => args.assertContractABIClient('value', value)).toThrowErrorMatchingSnapshot(); + }); + + test('assertContractABIClient - invalidReturnType', () => { + const value = data.abi.invalidReturnType; + + expect(() => args.assertContractABIClient('value', value)).toThrowErrorMatchingSnapshot(); + }); + + test('assertContractABIClient - invalidParameterType', () => { + const value = data.abi.invalidParameterType; + + expect(() => args.assertContractABIClient('value', value)).toThrowErrorMatchingSnapshot(); + }); + + test('assertContractABIClient - invalidFunction', () => { + const value = data.abi.invalidFunction; + + expect(() => args.assertContractABIClient('value', value)).toThrowErrorMatchingSnapshot(); + }); + + test('assertContractABIClient - invalidFunctions', () => { + const value = data.abi.invalidFunctions; + + expect(() => args.assertContractABIClient('value', value)).toThrowErrorMatchingSnapshot(); + }); + + test('assertContractABIClient - invalidEvent', () => { + const value = data.abi.invalidEvent; + + expect(() => args.assertContractABIClient('value', value)).toThrowErrorMatchingSnapshot(); + }); + + test('assertContractABIClient - invalidEvents', () => { + const value = data.abi.invalidEvents; + + expect(() => args.assertContractABIClient('value', value)).toThrowErrorMatchingSnapshot(); + }); }); diff --git a/packages/neo-one-client-core/src/__tests__/provider/JSONRPCClient.test.ts b/packages/neo-one-client-core/src/__tests__/provider/JSONRPCClient.test.ts index 182bd3f8cc..ca52b6414d 100644 --- a/packages/neo-one-client-core/src/__tests__/provider/JSONRPCClient.test.ts +++ b/packages/neo-one-client-core/src/__tests__/provider/JSONRPCClient.test.ts @@ -17,26 +17,6 @@ describe('JSONRPCClient', () => { mockRequest.mockReset(); }); - test('getAccount', async () => { - const value = factory.createAccountJSON(); - mockRequest.mockImplementationOnce(async () => Promise.resolve(value)); - - const result = await client.getAccount(keys[0].address); - - expect(result).toEqual(value); - expect(mockRequest.mock.calls).toMatchSnapshot(); - }); - - test('getAsset', async () => { - const value = factory.createAssetJSON(); - mockRequest.mockImplementationOnce(async () => Promise.resolve(value)); - - const result = await client.getAsset(data.hash256s.a); - - expect(result).toEqual(value); - expect(mockRequest.mock.calls).toMatchSnapshot(); - }); - test('getSettings', async () => { const settings = { secondsPerBlock: 15 }; mockRequest.mockImplementationOnce(async () => Promise.resolve(settings)); @@ -108,7 +88,7 @@ describe('JSONRPCClient', () => { }); test('getTransaction', async () => { - const value = factory.createInvocationTransactionJSON(); + const value = factory.createTransactionJSON(); mockRequest.mockImplementationOnce(async () => Promise.resolve(value)); const result = await client.getTransaction(data.hash256s.a); @@ -117,38 +97,28 @@ describe('JSONRPCClient', () => { expect(mockRequest.mock.calls).toMatchSnapshot(); }); - test('getUnspentOutput - defined', async () => { - const value = factory.createOutputJSON(); - mockRequest.mockImplementationOnce(async () => Promise.resolve(value)); - - const result = await client.getUnspentOutput(factory.createInputJSON()); - - expect(result).toEqual(value); - expect(mockRequest.mock.calls).toMatchSnapshot(); - }); - - test('getUnspentOutput - undefined', async () => { - const value = undefined; + test('testInvokeRaw', async () => { + const value = factory.createTransactionResultSuccessJSON(); mockRequest.mockImplementationOnce(async () => Promise.resolve(value)); - const result = await client.getUnspentOutput(factory.createInputJSON()); + const result = await client.testInvokeRaw(data.buffers.a); expect(result).toEqual(value); expect(mockRequest.mock.calls).toMatchSnapshot(); }); - test('testInvokeRaw', async () => { - const value = factory.createInvocationResultSuccessJSON(); + test('sendRawTransaction', async () => { + const value = true; mockRequest.mockImplementationOnce(async () => Promise.resolve(value)); - const result = await client.testInvokeRaw(data.buffers.a); + const result = await client.sendRawTransaction(data.buffers.a); expect(result).toEqual(value); expect(mockRequest.mock.calls).toMatchSnapshot(); }); test('relayTransaction', async () => { - const value = factory.createInvocationTransactionJSON(); + const value = factory.createTransactionJSON(); mockRequest.mockImplementationOnce(async () => Promise.resolve(value)); const result = await client.relayTransaction(data.buffers.a); @@ -178,23 +148,14 @@ describe('JSONRPCClient', () => { expect(mockRequest.mock.calls).toMatchSnapshot(); }); - test('getOutput', async () => { - const value = factory.createOutputJSON(); + test('getunclaimedgas', async () => { + const value = { unclaimed: data.bigNumbers.a.toString(10), address: keys[0].address }; mockRequest.mockImplementationOnce(async () => Promise.resolve(value)); - const result = await client.getOutput(factory.createInputJSON()); + const result = await client.getUnclaimedGas(keys[0].address); - expect(result).toEqual(value); - expect(mockRequest.mock.calls).toMatchSnapshot(); - }); - - test('getClaimAmount', async () => { - const value = data.bigNumbers.a.toString(10); - mockRequest.mockImplementationOnce(async () => Promise.resolve(value)); - - const result = await client.getClaimAmount(factory.createInputJSON()); - - expect(result.toString(10)).toEqual(value); + expect(result.unclaimed).toEqual(value); + expect(result.address).toEqual(keys[0].address); expect(mockRequest.mock.calls).toMatchSnapshot(); }); @@ -258,6 +219,16 @@ describe('JSONRPCClient', () => { expect(mockRequest.mock.calls).toMatchSnapshot(); }); + test('getTransactionHeight', async () => { + const value = 5000000; + mockRequest.mockImplementationOnce(async () => Promise.resolve(value)); + + const result = await client.getTransactionHeight(data.hash256s.a); + + expect(result).toEqual(value); + expect(mockRequest.mock.calls).toMatchSnapshot(); + }); + test('runConsensusNow', async () => { mockRequest.mockImplementationOnce(async () => Promise.resolve()); diff --git a/packages/neo-one-client-core/src/__tests__/provider/NEOONEDataProvider.test.ts b/packages/neo-one-client-core/src/__tests__/provider/NEOONEDataProvider.test.ts index b024462fe7..048c20ad14 100644 --- a/packages/neo-one-client-core/src/__tests__/provider/NEOONEDataProvider.test.ts +++ b/packages/neo-one-client-core/src/__tests__/provider/NEOONEDataProvider.test.ts @@ -1,58 +1,18 @@ // tslint:disable no-object-mutation import { - ActionJSON, - AddressString, - Asset, - AssetJSON, - AssetNameJSON, - AssetType, - AssetTypeJSON, - CallReceiptJSON, common, - ConfirmedTransaction, - Contract, - ContractJSON, - InvocationResultJSON, - Output, - OutputJSON, - PublicKeyString, - RawAction, - RawCallReceipt, - RawInvocationResult, + ContractParameterTypeJSON, scriptHashToAddress, StorageItem, StorageItemJSON, - Transaction, - TransactionJSON, - VMState, } from '@neo-one/client-common'; import { Modifiable } from '@neo-one/utils'; import { toArray } from '@reactivex/ix-es2015-cjs/asynciterable/toarray'; -import BigNumber from 'bignumber.js'; -import { data, factory, keys } from '../../__data__'; -import { Hash256 } from '../../Hash256'; +import { data, factory, keys, verifyDataProvider as verify } from '../../__data__'; import { convertAction, JSONRPCClient, JSONRPCHTTPProvider, NEOONEDataProvider } from '../../provider'; jest.mock('../../provider/JSONRPCClient'); -interface AssetBase { - readonly type: AssetType; - readonly name: string; - readonly amount: BigNumber; - readonly precision: number; - readonly owner: PublicKeyString; - readonly admin: AddressString; -} - -interface AssetBaseJSON { - readonly type: AssetTypeJSON; - readonly name: AssetNameJSON; - readonly amount: string; - readonly precision: number; - readonly owner: string; - readonly admin: string; -} - describe('NEOONEDataProvider', () => { const network = 'local'; const rpcURL = 'https://neotracker.io/rpc'; @@ -65,209 +25,6 @@ describe('NEOONEDataProvider', () => { client = (provider as any).mutableClient; }); - const verifyInvocationResultSuccess = ( - invocationResult: RawInvocationResult, - invocationResultJSON: InvocationResultJSON, - ) => { - if (invocationResult.state !== 'HALT' || invocationResultJSON.state !== VMState.Halt) { - throw new Error('For TS'); - } - expect(invocationResult.gasConsumed.toString(10)).toEqual(invocationResultJSON.gas_consumed); - expect(invocationResult.gasCost.toString(10)).toEqual(invocationResultJSON.gas_cost); - const firstStack = invocationResult.stack[0]; - const firstStackJSON = invocationResultJSON.stack[0]; - if (firstStack.type !== 'Integer' || firstStackJSON.type !== 'Integer') { - throw new Error('For TS'); - } - expect(firstStack.value.toString(10)).toEqual(firstStackJSON.value); - }; - - const verifyDefaultActions = ( - actions: readonly RawAction[], - actionsJSON: readonly ActionJSON[], - blockIndex: number, - blockHash: string, - index: number, - txid: string, - ) => { - expect(actions.length).toEqual(actionsJSON.length); - const verifyAction = (actionResult: RawAction, action: ActionJSON, idx: number) => { - expect(actionResult.type).toEqual(action.type); - expect(actionResult.version).toEqual(action.version); - expect(actionResult.blockIndex).toEqual(blockIndex); - expect(actionResult.blockHash).toEqual(blockHash); - expect(actionResult.transactionIndex).toEqual(index); - expect(actionResult.transactionHash).toEqual(txid); - expect(actionResult.index).toEqual(idx); - expect(actionResult.globalIndex.toString(10)).toEqual(action.index); - expect(actionResult.address).toEqual(scriptHashToAddress(action.scriptHash)); - }; - verifyAction(actions[0], actionsJSON[0], 0); - verifyAction(actions[1], actionsJSON[1], 1); - }; - - const verifyAssetBase = ( - asset: AssetBase, - assetJSON: AssetBaseJSON, - toAssetType: string = assetJSON.type, - name = assetJSON.name, - ) => { - expect(asset.type).toEqual(toAssetType); - expect(asset.name).toEqual(name); - expect(asset.amount.toString(10)).toEqual(assetJSON.amount); - expect(asset.precision).toEqual(assetJSON.precision); - expect(asset.owner).toEqual(assetJSON.owner); - expect(asset.admin).toEqual(assetJSON.admin); - }; - - const verifyAsset = ( - asset: Asset, - assetJSON: AssetJSON, - toAssetType: string = assetJSON.type, - name = assetJSON.name, - ) => { - verifyAssetBase(asset, assetJSON, toAssetType, name); - expect(asset.hash).toEqual(assetJSON.id); - expect(asset.available.toString(10)).toEqual(assetJSON.available); - expect(asset.issuer).toEqual(assetJSON.issuer); - expect(asset.expiration).toEqual(assetJSON.expiration); - expect(asset.frozen).toEqual(assetJSON.frozen); - }; - - const verifyContract = (contract: Contract, contractJSON: ContractJSON, returnType = 'Buffer') => { - expect(contract.version).toEqual(contractJSON.version); - expect(contract.address).toEqual(scriptHashToAddress(contractJSON.hash)); - expect(contract.script).toEqual(contractJSON.script); - expect(contract.parameters).toEqual(['Address', 'Buffer']); - expect(contract.returnType).toEqual(returnType); - expect(contract.name).toEqual(contractJSON.name); - expect(contract.codeVersion).toEqual(contractJSON.code_version); - expect(contract.author).toEqual(contractJSON.author); - expect(contract.email).toEqual(contractJSON.email); - expect(contract.description).toEqual(contractJSON.description); - expect(contract.storage).toEqual(contractJSON.properties.storage); - expect(contract.dynamicInvoke).toEqual(contractJSON.properties.dynamic_invoke); - expect(contract.payable).toEqual(contractJSON.properties.payable); - }; - - const verifyOutput = (output: Output, outputJSON: OutputJSON) => { - expect(output.asset).toEqual(outputJSON.asset); - expect(output.value.toString(10)).toEqual(outputJSON.value); - expect(output.address).toEqual(outputJSON.address); - }; - - const verifyTransactionBase = (transaction: Transaction, transactionJSON: TransactionJSON) => { - expect(transaction.hash).toEqual(transactionJSON.txid); - expect(transaction.size).toEqual(transactionJSON.size); - expect(transaction.version).toEqual(transactionJSON.version); - expect(transaction.attributes.length).toEqual(transactionJSON.attributes.length); - expect(transaction.attributes[0].usage).toEqual(transactionJSON.attributes[0].usage); - expect(transaction.attributes[0].data).toEqual(scriptHashToAddress(transactionJSON.attributes[0].data)); - expect(transaction.attributes[1].usage).toEqual(transactionJSON.attributes[1].usage); - expect(transaction.attributes[1].data).toEqual(transactionJSON.attributes[1].data); - expect(transaction.attributes[2].usage).toEqual(transactionJSON.attributes[2].usage); - expect(transaction.attributes[2].data).toEqual(transactionJSON.attributes[2].data); - expect(transaction.attributes[3].usage).toEqual(transactionJSON.attributes[3].usage); - expect(transaction.attributes[3].data).toEqual(transactionJSON.attributes[3].data); - expect(transaction.inputs.length).toEqual(transactionJSON.vin.length); - expect(transaction.inputs[0].hash).toEqual(transactionJSON.vin[0].txid); - expect(transaction.inputs[0].index).toEqual(transactionJSON.vin[0].vout); - expect(transaction.outputs.length).toEqual(transactionJSON.vout.length); - verifyOutput(transaction.outputs[0], transactionJSON.vout[0]); - expect(transaction.scripts).toEqual(transactionJSON.scripts); - expect(transaction.systemFee.toString(10)).toEqual(transactionJSON.sys_fee); - expect(transaction.networkFee.toString(10)).toEqual(transactionJSON.net_fee); - }; - - const verifyClaimTransaction = (transaction: Transaction, transactionJSON: TransactionJSON) => { - verifyTransactionBase(transaction, transactionJSON); - if (transaction.type !== 'ClaimTransaction' || transactionJSON.type !== 'ClaimTransaction') { - throw new Error('For TS'); - } - expect(transaction.claims.length).toEqual(transactionJSON.claims.length); - expect(transaction.claims[0].hash).toEqual(transactionJSON.claims[0].txid); - expect(transaction.claims[0].index).toEqual(transactionJSON.claims[0].vout); - }; - - const verifyContractTransaction = (transaction: Transaction, transactionJSON: TransactionJSON) => { - verifyTransactionBase(transaction, transactionJSON); - expect(transaction.type).toEqual('ContractTransaction'); - }; - - const verifyEnrollmentTransaction = (transaction: Transaction, transactionJSON: TransactionJSON) => { - verifyTransactionBase(transaction, transactionJSON); - if (transaction.type !== 'EnrollmentTransaction' || transactionJSON.type !== 'EnrollmentTransaction') { - throw new Error('For TS'); - } - expect(transaction.publicKey).toEqual(transactionJSON.pubkey); - }; - - const verifyInvocationTransaction = (transaction: Transaction, transactionJSON: TransactionJSON) => { - verifyTransactionBase(transaction, transactionJSON); - if (transaction.type !== 'InvocationTransaction' || transactionJSON.type !== 'InvocationTransaction') { - throw new Error('For TS'); - } - expect(transaction.script).toEqual(transactionJSON.script); - expect(transaction.gas.toString(10)).toEqual(transactionJSON.gas); - }; - - const verifyIssueTransaction = (transaction: Transaction, transactionJSON: TransactionJSON) => { - verifyTransactionBase(transaction, transactionJSON); - expect(transaction.type).toEqual('IssueTransaction'); - }; - - const verifyMinerTransaction = (transaction: Transaction, transactionJSON: TransactionJSON) => { - verifyTransactionBase(transaction, transactionJSON); - if (transaction.type !== 'MinerTransaction' || transactionJSON.type !== 'MinerTransaction') { - throw new Error('For TS'); - } - expect(transaction.nonce).toEqual(transactionJSON.nonce); - }; - - const verifyPublishTransaction = (transaction: Transaction, transactionJSON: TransactionJSON) => { - verifyTransactionBase(transaction, transactionJSON); - if (transaction.type !== 'PublishTransaction' || transactionJSON.type !== 'PublishTransaction') { - throw new Error('For TS'); - } - verifyContract(transaction.contract, transactionJSON.contract); - }; - - const verifyRegisterTransaction = (transaction: Transaction, transactionJSON: TransactionJSON) => { - verifyTransactionBase(transaction, transactionJSON); - if (transaction.type !== 'RegisterTransaction' || transactionJSON.type !== 'RegisterTransaction') { - throw new Error('For TS'); - } - verifyAssetBase(transaction.asset, transactionJSON.asset); - }; - - const verifyStateTransaction = (transaction: Transaction, transactionJSON: TransactionJSON) => { - verifyTransactionBase(transaction, transactionJSON); - expect(transaction.type).toEqual('StateTransaction'); - }; - - const verifyConfirmedTransaction = (transaction: ConfirmedTransaction, transactionJSON: TransactionJSON) => { - if (transactionJSON.data === undefined) { - throw new Error('For TS'); - } - - expect(transaction.receipt.blockHash).toEqual(transactionJSON.data.blockHash); - expect(transaction.receipt.blockIndex).toEqual(transactionJSON.data.blockIndex); - expect(transaction.receipt.transactionIndex).toEqual(transactionJSON.data.transactionIndex); - expect(transaction.receipt.globalIndex.toString(10)).toEqual(transactionJSON.data.globalIndex); - }; - - const verifyCallReceipt = (receipt: RawCallReceipt, receiptJSON: CallReceiptJSON) => { - verifyInvocationResultSuccess(receipt.result, receiptJSON.result); - verifyDefaultActions( - receipt.actions, - receiptJSON.actions, - 0, - '0x​​​​​0000000000000000000000000000000000000000000000000000000000000000​​​​​', - 0, - '0x​​​​​0000000000000000000000000000000000000000000000000000000000000000​​​​​', - ); - }; - test('setRPCURL', () => { const currentClient = client; @@ -278,52 +35,30 @@ describe('NEOONEDataProvider', () => { }); test('getUnclaimed', async () => { - const accountJSON = factory.createAccountJSON(); - client.getAccount = jest.fn(async () => Promise.resolve(accountJSON)); - client.getClaimAmount = jest.fn(async () => Promise.resolve(data.bigNumbers.a)); - - const result = await provider.getUnclaimed(keys[0].address); - - expect(result.amount).toEqual(data.bigNumbers.a.times(accountJSON.unclaimed.length)); - expect(result.unclaimed[0].hash).toEqual(accountJSON.unclaimed[0].txid); - expect(result.unclaimed[0].index).toEqual(accountJSON.unclaimed[0].vout); - expect(result.unclaimed[1].hash).toEqual(accountJSON.unclaimed[1].txid); - expect(result.unclaimed[1].index).toEqual(accountJSON.unclaimed[1].vout); - }); - - test('getUnspent', async () => { - const accountJSON = factory.createAccountJSON(); - const outputJSON = factory.createOutputJSON(); - client.getAccount = jest.fn(async () => Promise.resolve(accountJSON)); - client.getUnspentOutput = jest.fn(async (input) => - input.vout === accountJSON.unspent[0].vout ? outputJSON : undefined, + client.getUnclaimedGas = jest.fn(async () => + Promise.resolve({ unclaimed: data.bigNumbers.a.toString(10), address: keys[0].address }), ); - const result = await provider.getUnspentOutputs(keys[0].address); + const result = await provider.getUnclaimed(keys[0].address); - expect(result).toHaveLength(1); - expect(result[0].asset).toEqual(outputJSON.asset); - expect(result[0].value.toString(10)).toEqual(outputJSON.value); - expect(result[0].address).toEqual(outputJSON.address); - expect(result[0].hash).toEqual(accountJSON.unspent[0].txid); - expect(result[0].index).toEqual(accountJSON.unspent[0].vout); + expect(result).toEqual(data.bigNumbers.a); }); test('relayTransaction', async () => { - const transactionJSON = factory.createInvocationTransactionJSON(); + const transactionWithInvocationDataJSON = factory.createTransactionWithInvocationDataJSON(); client.relayTransaction = jest.fn(async () => Promise.resolve({ - transaction: transactionJSON, + transaction: transactionWithInvocationDataJSON, }), ); - const result = await provider.relayTransaction(data.serializedTransaction.valid); + const result = await provider.relayTransaction(factory.createTransactionModel()); - verifyInvocationTransaction(result.transaction, transactionJSON); + verify.verifyTransaction(result.transaction, transactionWithInvocationDataJSON); }); test('verifyConvertTransaction', async () => { - const transactionJSON = factory.createInvocationTransactionJSON(); + const transactionJSON = factory.createTransactionWithInvocationDataJSON(); const actionJSON = factory.createLogActionJSON(); const verificationScriptJSON = factory.createVerifyScriptResultJSON({ @@ -341,7 +76,7 @@ describe('NEOONEDataProvider', () => { }), ); - const result = await provider.relayTransaction(data.serializedTransaction.valid); + const result = await provider.relayTransaction(factory.createTransactionModel()); if (result.verifyResult === undefined) { throw new Error('for TS'); @@ -353,7 +88,7 @@ describe('NEOONEDataProvider', () => { witness: verificationScriptJSON.witness, address: scriptHashToAddress(verificationScriptJSON.hash), actions: [ - convertAction(common.uInt256ToString(common.ZERO_UINT256), -1, transactionJSON.txid, -1, 0, actionJSON), + convertAction(common.uInt256ToString(common.ZERO_UINT256), -1, transactionJSON.hash, -1, 0, actionJSON), ], }, ]); @@ -370,7 +105,7 @@ describe('NEOONEDataProvider', () => { }); test('getInvocationData', async () => { - const transactionJSON = factory.createInvocationTransactionJSON(); + const transactionJSON = factory.createTransactionWithInvocationDataJSON(); const invocationData = transactionJSON.invocationData; const transactionData = transactionJSON.data; if (invocationData === undefined || transactionData === undefined) { @@ -382,13 +117,13 @@ describe('NEOONEDataProvider', () => { const result = await provider.getInvocationData(data.hash256s.a); - verifyDefaultActions( + verify.verifyDefaultActions( result.actions, invocationData.actions, transactionData.blockIndex, transactionData.blockHash, transactionData.transactionIndex, - transactionJSON.txid, + transactionJSON.hash, ); const notificationAction = result.actions[0]; @@ -411,15 +146,8 @@ describe('NEOONEDataProvider', () => { } expect(logAction.message).toEqual(logActionJSON.message); - const asset = result.asset; - const assetJSON = invocationData.asset; - if (asset === undefined || assetJSON === undefined) { - throw new Error('For TS'); - } - verifyAsset(asset, assetJSON); - expect(result.contracts.length).toEqual(invocationData.contracts.length); - verifyContract(result.contracts[0], invocationData.contracts[0]); + verify.verifyContract(result.contracts[0], invocationData.contracts[0]); expect(result.deletedContractAddresses.length).toEqual(invocationData.deletedContractHashes.length); expect(result.deletedContractAddresses[0]).toEqual(scriptHashToAddress(invocationData.deletedContractHashes[0])); @@ -431,11 +159,11 @@ describe('NEOONEDataProvider', () => { scriptHashToAddress(invocationData.migratedContractHashes[0][1]), ); - verifyInvocationResultSuccess(result.result, invocationData.result); + verify.verifyInvocationResultSuccess(result.result, invocationData.result); }); test('getInvocationData - missing transaction data', async () => { - const { data: _data, ...transactionJSON } = factory.createInvocationTransactionJSON(); + const { data: _data, ...transactionJSON } = factory.createTransactionWithInvocationDataJSON(); // tslint:disable:no-any client.getInvocationData = jest.fn(async () => Promise.resolve(transactionJSON.invocationData) as any); @@ -449,57 +177,9 @@ describe('NEOONEDataProvider', () => { const callReceiptJSON = factory.createCallReceiptJSON(); client.testInvocation = jest.fn(async () => Promise.resolve(callReceiptJSON)); - const result = await provider.testInvoke(data.serializedTransaction.valid); - - verifyCallReceipt(result, callReceiptJSON); - }); - - test('getAccount', async () => { - const accountJSON = factory.createAccountJSON(); - client.getAccount = jest.fn(async () => Promise.resolve(accountJSON)); - - const result = await provider.getAccount(keys[0].address); + const result = await provider.testInvoke(factory.createTransactionModel()); - expect(result.address).toEqual(scriptHashToAddress(accountJSON.script_hash)); - expect(result.balances[Hash256.NEO].toString(10)).toEqual(accountJSON.balances[0].value); - expect(result.balances[Hash256.GAS].toString(10)).toEqual(accountJSON.balances[1].value); - }); - - const convertedAssetTypes = [ - ['CreditFlag', 'Credit'] as const, - ['DutyFlag', 'Duty'] as const, - ['GoverningToken', 'Governing'] as const, - ['UtilityToken', 'Utility'] as const, - ['Currency', 'Currency'] as const, - ['Share', 'Share'] as const, - ['Invoice', 'Invoice'] as const, - ['Token', 'Token'] as const, - ]; - - convertedAssetTypes.forEach(([from, to]) => { - test(`getAsset - ${from} -> ${to}`, async () => { - const assetJSON = factory.createAssetJSON({ type: from }); - client.getAsset = jest.fn(async () => Promise.resolve(assetJSON)); - - const result = await provider.getAsset(data.hash256s.a); - verifyAsset(result, assetJSON, to); - }); - }); - - test(`getAsset - extracts en name`, async () => { - const assetJSON = factory.createAssetJSON({ name: [{ lang: 'foo', name: 'bar' }, { lang: 'en', name: 'baz' }] }); - client.getAsset = jest.fn(async () => Promise.resolve(assetJSON)); - - const result = await provider.getAsset(data.hash256s.a); - verifyAsset(result, assetJSON, assetJSON.type, 'baz'); - }); - - test(`getAsset - otherwise, first name`, async () => { - const assetJSON = factory.createAssetJSON({ name: [{ lang: 'foo', name: 'bar' }, { lang: 'baz', name: 'baz' }] }); - client.getAsset = jest.fn(async () => Promise.resolve(assetJSON)); - - const result = await provider.getAsset(data.hash256s.a); - verifyAsset(result, assetJSON, assetJSON.type, 'bar'); + verify.verifyCallReceipt(result, callReceiptJSON); }); test('getBlock', async () => { @@ -509,34 +189,19 @@ describe('NEOONEDataProvider', () => { const result = await provider.getBlock(10); expect(result.version).toEqual(blockJSON.version); - expect(result.hash).toEqual(blockJSON.hash); expect(result.previousBlockHash).toEqual(blockJSON.previousblockhash); expect(result.merkleRoot).toEqual(blockJSON.merkleroot); expect(result.time).toEqual(blockJSON.time); expect(result.index).toEqual(blockJSON.index); - expect(result.nonce).toEqual(blockJSON.nonce); expect(result.nextConsensus).toEqual(blockJSON.nextconsensus); - expect(result.script).toEqual(blockJSON.script); + expect(result.witnesses.length).toEqual(blockJSON.witnesses.length); + expect(result.witnesses).toEqual(blockJSON.witnesses); + expect(result.hash).toEqual(blockJSON.hash); + expect(result.witness).toEqual(blockJSON.witnesses[0]); expect(result.size).toEqual(blockJSON.size); expect(result.transactions.length).toEqual(blockJSON.tx.length); - verifyMinerTransaction(result.transactions[0], blockJSON.tx[0]); - verifyConfirmedTransaction(result.transactions[0], blockJSON.tx[0]); - verifyClaimTransaction(result.transactions[1], blockJSON.tx[1]); - verifyConfirmedTransaction(result.transactions[1], blockJSON.tx[1]); - verifyContractTransaction(result.transactions[2], blockJSON.tx[2]); - verifyConfirmedTransaction(result.transactions[2], blockJSON.tx[2]); - verifyEnrollmentTransaction(result.transactions[3], blockJSON.tx[3]); - verifyConfirmedTransaction(result.transactions[3], blockJSON.tx[3]); - verifyInvocationTransaction(result.transactions[4], blockJSON.tx[4]); - verifyConfirmedTransaction(result.transactions[4], blockJSON.tx[4]); - verifyIssueTransaction(result.transactions[5], blockJSON.tx[5]); - verifyConfirmedTransaction(result.transactions[5], blockJSON.tx[5]); - verifyPublishTransaction(result.transactions[6], blockJSON.tx[6]); - verifyConfirmedTransaction(result.transactions[6], blockJSON.tx[6]); - verifyRegisterTransaction(result.transactions[7], blockJSON.tx[7]); - verifyConfirmedTransaction(result.transactions[7], blockJSON.tx[7]); - verifyStateTransaction(result.transactions[8], blockJSON.tx[8]); - verifyConfirmedTransaction(result.transactions[8], blockJSON.tx[8]); + verify.verifyTransaction(result.transactions[0], blockJSON.tx[0]); + verify.verifyConfirmedTransaction(result.transactions[0], blockJSON.tx[0]); }); test('iterBlocks', async () => { @@ -573,30 +238,40 @@ describe('NEOONEDataProvider', () => { const result = await provider.getContract(keys[0].address); - verifyContract(result, contractJSON); + verify.verifyContract(result, contractJSON); }); const convertedContractParameterTypes = [ - ['Signature', 'Signature'] as const, - ['Boolean', 'Boolean'] as const, - ['Integer', 'Integer'] as const, - ['Hash160', 'Address'] as const, - ['Hash256', 'Hash256'] as const, - ['ByteArray', 'Buffer'] as const, - ['PublicKey', 'PublicKey'] as const, - ['String', 'String'] as const, - ['Array', 'Array'] as const, - ['InteropInterface', 'InteropInterface'] as const, - ['Void', 'Void'] as const, + ['Any', 'Any'], + ['Signature', 'Signature'], + ['Boolean', 'Boolean'], + ['Integer', 'Integer'], + ['Hash160', 'Hash160'], + ['Hash256', 'Hash256'], + ['ByteArray', 'Buffer'], + ['PublicKey', 'PublicKey'], + ['String', 'String'], + ['Array', 'Array'], + ['InteropInterface', 'InteropInterface'], + ['Void', 'Void'], ]; convertedContractParameterTypes.forEach(([from, to]) => { test(`getContract - ${from} -> ${to}`, async () => { - const contractJSON = factory.createContractJSON({ returntype: from }); + const contractJSON = factory.createContractJSON({ + manifest: { + abi: { + methods: [ + { name: `test ${from}`, returnType: from as ContractParameterTypeJSON, offset: 0, parameters: [] }, + ], + }, + // tslint:disable-next-line: no-any + } as any, + }); client.getContract = jest.fn(async () => Promise.resolve(contractJSON)); const result = await provider.getContract(keys[0].address); - verifyContract(result, contractJSON, to); + verify.verifyContract(result, contractJSON, to); }); }); @@ -610,21 +285,12 @@ describe('NEOONEDataProvider', () => { }); test('getTransaction', async () => { - const transactionJSON = factory.createInvocationTransactionJSON(); + const transactionJSON = factory.createTransactionJSON(); client.getTransaction = jest.fn(async () => Promise.resolve(transactionJSON)); - const result = await provider.getTransaction(transactionJSON.txid); - - verifyInvocationTransaction(result, transactionJSON); - }); - - test('getOutput', async () => { - const outputJSON = factory.createOutputJSON(); - client.getOutput = jest.fn(async () => Promise.resolve(outputJSON)); - - const result = await provider.getOutput({ hash: data.hash256s.a, index: 0 }); + const result = await provider.getTransaction(transactionJSON.hash); - verifyOutput(result, outputJSON); + verify.verifyTransaction(result, transactionJSON); }); test('getConnectedPeers', async () => { @@ -670,21 +336,17 @@ describe('NEOONEDataProvider', () => { expect(result.length).toEqual(2); const transactionJSON = blockJSON.tx[4]; - if ( - transactionJSON.type !== 'InvocationTransaction' || - transactionJSON.data === undefined || - transactionJSON.invocationData === undefined - ) { + if (transactionJSON.data === undefined || transactionJSON.invocationData === undefined) { throw new Error('For TS'); } - verifyDefaultActions( + verify.verifyDefaultActions( result, transactionJSON.invocationData.actions, transactionJSON.data.blockIndex, transactionJSON.data.blockHash, transactionJSON.data.transactionIndex, - transactionJSON.txid, + transactionJSON.hash, ); }); @@ -694,7 +356,7 @@ describe('NEOONEDataProvider', () => { const result = await provider.call(keys[0].address, 'foo', []); - verifyCallReceipt(result, callReceiptJSON); + verify.verifyCallReceipt(result, callReceiptJSON); }); test('runConsensusNow', async () => { @@ -745,15 +407,6 @@ describe('NEOONEDataProvider', () => { expect(reset).toHaveBeenCalled(); }); - test('convertMapContractParamaterType - Map', async () => { - const contract = factory.createContractJSON({ parameters: ['Map'] }); - client.getContract = jest.fn(async () => Promise.resolve(contract)); - - const result = await provider.getContract(keys[0].address); - - expect(result.parameters).toEqual(['Map']); - }); - test('construction with rpcURL provider works', () => { provider = new NEOONEDataProvider({ network, rpcURL: new JSONRPCHTTPProvider(rpcURL) }); expect(provider).toBeDefined(); diff --git a/packages/neo-one-client-core/src/__tests__/provider/NEOONEProvider.test.ts b/packages/neo-one-client-core/src/__tests__/provider/NEOONEProvider.test.ts index 102e2117bc..17340c72bd 100644 --- a/packages/neo-one-client-core/src/__tests__/provider/NEOONEProvider.test.ts +++ b/packages/neo-one-client-core/src/__tests__/provider/NEOONEProvider.test.ts @@ -1,7 +1,6 @@ // tslint:disable no-object-mutation import { Modifiable } from '@neo-one/utils'; import { AsyncIterableX } from '@reactivex/ix-es2015-cjs/asynciterable'; -import BigNumber from 'bignumber.js'; import { take } from 'rxjs/operators'; import { data, factory, keys } from '../../__data__'; import { NEOONEDataProvider, NEOONEProvider } from '../../provider'; @@ -51,7 +50,7 @@ describe('NEOONEProvider', () => { test('addNetwork', () => { const newNetwork = 'test'; - provider.addNetwork({ network: newNetwork, rpcURL: 'https://test.neotracker.io/rpc' }); + provider.addNetwork({ network: newNetwork, rpcURL: 'https://testnet.neotracker.io/rpc' }); const result = provider.getNetworks(); expect(result).toEqual([network, newNetwork]); @@ -65,7 +64,7 @@ describe('NEOONEProvider', () => { }); test('getUnclaimed', async () => { - const expected = { unclaimed: [factory.createInput()], amount: data.bigNumbers.a }; + const expected = data.bigNumbers.a; dataProvider.getUnclaimed = jest.fn(async () => Promise.resolve(expected)); const result = await provider.getUnclaimed(network, keys[0].address); @@ -73,21 +72,12 @@ describe('NEOONEProvider', () => { expect(result).toBe(expected); }); - test('getUnspentOutputs', async () => { - const expected = [factory.createInputOutput()]; - dataProvider.getUnspentOutputs = jest.fn(async () => Promise.resolve(expected)); - - const result = await provider.getUnspentOutputs(network, keys[0].address); - - expect(result).toBe(expected); - }); - test('relayTransaction', async () => { - const expected = factory.createMinerTransaction(); + const expected = factory.createTransaction(); // tslint:disable-next-line:no-any dataProvider.relayTransaction = jest.fn((async () => Promise.resolve(expected)) as any); - const result = await provider.relayTransaction(network, data.buffers.a); + const result = await provider.relayTransaction(network, factory.createTransactionModel()); expect(result).toBe(expected); }); @@ -114,16 +104,7 @@ describe('NEOONEProvider', () => { const expected = factory.createRawCallReceipt(); dataProvider.testInvoke = jest.fn(async () => Promise.resolve(expected)); - const result = await provider.testInvoke(network, data.buffers.a); - - expect(result).toBe(expected); - }); - - test('getClaimAmount', async () => { - const expected = new BigNumber('1'); - dataProvider.getClaimAmount = jest.fn(async () => Promise.resolve(expected)); - - const result = await provider.getClaimAmount(network, factory.createInput()); + const result = await provider.testInvoke(network, factory.createTransactionModel()); expect(result).toBe(expected); }); @@ -137,15 +118,6 @@ describe('NEOONEProvider', () => { expect(result).toBe(expected); }); - test('getAccount', async () => { - const expected = factory.createAccount(); - dataProvider.getAccount = jest.fn(async () => Promise.resolve(expected)); - - const result = await provider.getAccount(network, expected.address); - - expect(result).toBe(expected); - }); - test('getBlockCount', async () => { const expected = 10; dataProvider.getBlockCount = jest.fn(async () => Promise.resolve(expected)); diff --git a/packages/neo-one-client-core/src/__tests__/provider/__snapshots__/JSONRPCClient.test.ts.snap b/packages/neo-one-client-core/src/__tests__/provider/__snapshots__/JSONRPCClient.test.ts.snap index 334d968edb..9ee9b586f6 100644 --- a/packages/neo-one-client-core/src/__tests__/provider/__snapshots__/JSONRPCClient.test.ts.snap +++ b/packages/neo-one-client-core/src/__tests__/provider/__snapshots__/JSONRPCClient.test.ts.snap @@ -129,6 +129,19 @@ Array [ ] `; +exports[`JSONRPCClient getClaimable 1`] = ` +Array [ + Array [ + Object { + "method": "getclaimable", + "params": Array [ + "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + ], + }, + ], +] +`; + exports[`JSONRPCClient getConnectedPeers 1`] = ` Array [ Array [ @@ -223,6 +236,19 @@ Array [ ] `; +exports[`JSONRPCClient getTransactionHeight 1`] = ` +Array [ + Array [ + Object { + "method": "gettransactionheight", + "params": Array [ + "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + ], + }, + ], +] +`; + exports[`JSONRPCClient getTransactionReceipt 1`] = ` Array [ Array [ @@ -265,6 +291,19 @@ Array [ ] `; +exports[`JSONRPCClient getUnspents 1`] = ` +Array [ + Array [ + Object { + "method": "getunspents", + "params": Array [ + "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + ], + }, + ], +] +`; + exports[`JSONRPCClient relayTransaction - other error 1`] = ` Array [ Array [ @@ -324,6 +363,19 @@ Array [ ] `; +exports[`JSONRPCClient sendRawTransaction 1`] = ` +Array [ + Array [ + Object { + "method": "sendrawtransaction", + "params": Array [ + "b500", + ], + }, + ], +] +`; + exports[`JSONRPCClient testInvocation 1`] = ` Array [ Array [ diff --git a/packages/neo-one-client-core/src/__tests__/provider/__snapshots__/NEOProvider.test.ts.snap b/packages/neo-one-client-core/src/__tests__/provider/__snapshots__/NEOProvider.test.ts.snap new file mode 100644 index 0000000000..47b3649c4b --- /dev/null +++ b/packages/neo-one-client-core/src/__tests__/provider/__snapshots__/NEOProvider.test.ts.snap @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`NEOONEProvider getBlockCount - unknown network 1`] = `[Error [UNKNOWN_NETWORK]: Unknown network unknown]`; diff --git a/packages/neo-one-client-core/src/__tests__/provider/convert.test.ts b/packages/neo-one-client-core/src/__tests__/provider/convert.test.ts index 0e23364bda..783904a27c 100644 --- a/packages/neo-one-client-core/src/__tests__/provider/convert.test.ts +++ b/packages/neo-one-client-core/src/__tests__/provider/convert.test.ts @@ -7,7 +7,7 @@ import { convertContractParameter, convertInvocationResult } from '../../provide describe('Convert Provider Helper Tests', () => { test('convertInvocationResult - FaultState', () => { const value = '0'; - const invokeResult = factory.createInvocationResultErrorJSON({ + const invokeResult = factory.createTransactionResultErrorJSON({ stack: [factory.createIntegerContractParameterJSON({ value })], }); const result = convertInvocationResult(invokeResult); @@ -89,7 +89,7 @@ describe('Convert Provider Helper Tests', () => { const integerJSON = factory.createIntegerContractParameterJSON(); const booleanJSON = factory.createBooleanContractParameterJSON(); const mapJSON = factory.createMapContractParameterJSON({ - value: [[integerJSON, booleanJSON] as const], + value: [[integerJSON, booleanJSON]], }); expect(convertContractParameter(mapJSON)).toEqual({ diff --git a/packages/neo-one-client-core/src/__tests__/provider/sendrawtransaction.test.ts b/packages/neo-one-client-core/src/__tests__/provider/sendrawtransaction.test.ts new file mode 100644 index 0000000000..b1050a175c --- /dev/null +++ b/packages/neo-one-client-core/src/__tests__/provider/sendrawtransaction.test.ts @@ -0,0 +1,196 @@ +import { + common, + crypto, + privateKeyToAddress, + privateKeyToScriptHash, + publicKeyToAddress, + ScriptBuilder, + scriptHashToAddress, + SignerModel, + TransactionModel, + WitnessModel, + WitnessScopeModel, +} from '@neo-one/client-common'; +import { constants } from '@neo-one/utils'; +import BN from 'bn.js'; +import { Hash160 } from '../../Hash160'; +import { LocalKeyStore, LocalMemoryStore } from '../../user'; + +describe('RPC Call sendrawtransaction', () => { + const keystore = new LocalKeyStore(new LocalMemoryStore()); + const messageMagic = 1951352142; // This is TestNet number. Make sure it matches the network's magic number + + test('Create a valid private net transaction with one signer', async () => { + await keystore.addUserAccount({ + network: constants.LOCAL_NETWORK_NAME, + privateKey: constants.PRIVATE_NET_PRIVATE_KEY, + name: 'master', + }); + + const signer = new SignerModel({ + account: common.stringToUInt160(privateKeyToScriptHash(constants.PRIVATE_NET_PRIVATE_KEY)), + scopes: WitnessScopeModel.None, + }); + + const txUnsigned = new TransactionModel({ + script: new ScriptBuilder().emitOp('PUSHNULL').build(), + systemFee: new BN(0), + networkFee: new BN(1590000), + validUntilBlock: 800000, + signers: [signer], + messageMagic, + }); + + const signature = await keystore.sign({ + account: { network: 'local', address: privateKeyToAddress(constants.PRIVATE_NET_PRIVATE_KEY) }, + message: txUnsigned.message.toString('hex'), + }); + + const witness = crypto.createWitnessForSignature( + Buffer.from(signature, 'hex'), + common.stringToECPoint(constants.PRIVATE_NET_PUBLIC_KEY), + WitnessModel, + ); + + const finalTransaction = txUnsigned.clone({ witnesses: [witness] }); + + // tslint:disable-next-line: no-console + console.log(finalTransaction.serializeWire().toString('hex')); + }); + + test('Create a valid private net transaction with multiple signers', async () => { + await keystore.addUserAccount({ + network: constants.LOCAL_NETWORK_NAME, + privateKey: constants.PRIVATE_NET_PRIVATE_KEY, + name: 'master', + }); + + const standbyValidators = ['0248be3c070df745a60f3b8b494efcc6caf90244d803a9a72fe95d9bae2120ec70'].map((val) => + common.stringToECPoint(val), + ); + + // The sender needs to be the address of the multisig address + const address = crypto.toScriptHash( + crypto.createMultiSignatureVerificationScript(standbyValidators.length / 2 + 1, standbyValidators), + ); + + const signer = new SignerModel({ + account: address, + scopes: WitnessScopeModel.None, + }); + + const txUnsigned = new TransactionModel({ + script: new ScriptBuilder().emitOp('PUSHNULL').build(), + systemFee: new BN(0), + networkFee: new BN(1590000), + validUntilBlock: 800000, + signers: [signer], + messageMagic, + }); + + const signature = await keystore.sign({ + account: { network: 'local', address: privateKeyToAddress(constants.PRIVATE_NET_PRIVATE_KEY) }, + message: txUnsigned.message.toString('hex'), + }); + + const witness = crypto.createMultiSignatureWitness( + standbyValidators.length / 2 + 1, + standbyValidators, + { [`${common.ecPointToHex(standbyValidators[0])}`]: Buffer.from(signature, 'hex') }, + WitnessModel, + ); + + const finalTransaction = txUnsigned.clone({ witnesses: [witness] }); + + // tslint:disable-next-line: no-console + console.log(finalTransaction.serializeWire().toString('hex')); + }); + + test('Get the private net initialization address from standby validators', async () => { + // Standby validators is an array of public keys of the validators + const standbyValidators = ['0248be3c070df745a60f3b8b494efcc6caf90244d803a9a72fe95d9bae2120ec70'].map((val) => + common.stringToECPoint(val), + ); + const address = crypto.toScriptHash( + // The first argument might have to be changed to: validators.length - (validators.length - 1) / 3 + crypto.createMultiSignatureVerificationScript(standbyValidators.length / 2 + 1, standbyValidators), + ); + + // The script hash and address printed here should match the script hash and address that is initialized in C# GasToken and NeoToken `initialize` methods + // In this case that would be 0xa25e93cc2a5f7108c02e9e3b4898aad9d3e91486 and NY8vnYnwgxs3prMcxnQi7Mog7VHezJgfwx + console.log(common.uInt160ToString(address)); + console.log(scriptHashToAddress(common.uInt160ToString(address))); + }); + + test.skip('transaction creation for consensus testing', async () => { + const config = { + blockchain: { + standbyValidators: ['0248be3c070df745a60f3b8b494efcc6caf90244d803a9a72fe95d9bae2120ec70'].map((p) => + common.stringToECPoint(p), + ), + addressVersion: common.NEO_ADDRESS_VERSION, + messageMagic: 7630401, + }, + }; + const privateKeyString = 'e35fa5d1652c4c65e296c86e63a3da6939bc471b741845be636e2daa320dc770'; + const privateKey = common.stringToPrivateKey(privateKeyString); + const publicKey = crypto.privateKeyToPublicKey(privateKey); + const publicKeyString = common.ecPointToHex(publicKey); + + const multiScriptHash = crypto.toScriptHash( + crypto.createMultiSignatureVerificationScript(1, config.blockchain.standbyValidators), + ); + + const multiAddress = crypto.scriptHashToAddress({ + addressVersion: config.blockchain.addressVersion, + scriptHash: multiScriptHash, + }); + + const scriptHash = crypto.publicKeyToScriptHash(publicKey); + const address = crypto.scriptHashToAddress({ addressVersion: config.blockchain.addressVersion, scriptHash }); + + await keystore.addUserAccount({ + network: 'local', + privateKey: privateKeyString, + name: 'master', + }); + + const signer = new SignerModel({ + account: multiScriptHash, + scopes: WitnessScopeModel.None, + }); + + const builder = new ScriptBuilder(); + builder.emitAppCall(common.nativeHashes.NEO, 'transfer', multiScriptHash, scriptHash, 10); + const script = builder.build(); + + const txUnsigned = new TransactionModel({ + script, + systemFee: new BN(10000), + networkFee: new BN(245000), + validUntilBlock: 800000, + signers: [signer], + messageMagic: config.blockchain.messageMagic, + }); + + const signature = await keystore.sign({ + account: { + network: 'local', + address: privateKeyToAddress('e35fa5d1652c4c65e296c86e63a3da6939bc471b741845be636e2daa320dc770'), + }, + message: txUnsigned.message.toString('hex'), + }); + + const witness = crypto.createMultiSignatureWitness( + 1, + [publicKey], + { [`${common.ecPointToHex(publicKey)}`]: Buffer.from(signature, 'hex') }, + WitnessModel, + ); + + const finalTransaction = txUnsigned.clone({ witnesses: [witness] }); + + console.log(finalTransaction.serializeWire().toString('hex')); + console.log(address); + }); +}); diff --git a/packages/neo-one-client-core/src/__tests__/provider/temp.test.ts b/packages/neo-one-client-core/src/__tests__/provider/temp.test.ts new file mode 100644 index 0000000000..a20c2d6a29 --- /dev/null +++ b/packages/neo-one-client-core/src/__tests__/provider/temp.test.ts @@ -0,0 +1,159 @@ +import { common, ScriptBuilder, UInt160 } from '@neo-one/client-common'; +import { Hash160 } from '../../Hash160'; +import { JSONRPCClient, JSONRPCHTTPProvider } from '../../provider'; + +describe('JSONRPCClient Tests', async () => { + const neo = 'http://seed1t.neo.org:20332/'; + const staging = 'https://staging.neotracker.io/rpc'; + const local = 'http://localhost:8080/rpc'; + const neoClient = new JSONRPCClient(new JSONRPCHTTPProvider(neo)); + const stagingClient = new JSONRPCClient(new JSONRPCHTTPProvider(local)); + const client = stagingClient; + const address = 'NSVX6sk3z14pSSjFx6WFEGajQXEbmahvwx'; + const addressAsScriptHash = '0x4262ca65a1523a3d01a96d15471ce1ee9a1f2948'; + const addressWithTransfers = 'NiXgSLtGUjTRTgp4y9ax7vyJ9UZAjsRDVt'; + const addressWithTransfersAsScriptHash = '0x8e9193bb505b10f98e7fb8b3e4bb188eccc213f8'; + const transactionHash = '0x173dcbc4a88995a0cf7bdd006923d148f787f76ca75621dc4c440ca6d9afbc73'; + // addressToScriptHash(Hash160.NEO) = 0xde5f57d430d3dece511cf975a8d37848cb9e0525; + + const getStorageArgs = (hash: UInt160, num: number) => [ + common.uInt160ToString(hash), + Buffer.from([num]).toString('hex'), + ]; + + const methods: Array<[string, ReadonlyArray]> = [ + ['getStorage', getStorageArgs(common.nativeHashes.NEO, 11)], + ['getStorage', getStorageArgs(common.nativeHashes.NEO, 1)], + ['getStorage', getStorageArgs(common.nativeHashes.NEO, 14)], // 0xde5f57d430d3dece511cf975a8d37848cb9e0525, 0e + ['getStorage', getStorageArgs(common.nativeHashes.GAS, 11)], + ['getApplicationLog', [transactionHash]], + ['getBlock', [1]], + ['getNep5Balances', [address]], + ['getNep5Transfers', [addressWithTransfers, 1468595301000, 1603753592250]], + ['getBestBlockHash', []], + ['getBlockCount', []], + ['getContract', [Hash160.NEO]], + ['getMemPool', []], + ['getTransaction', [transactionHash]], + ['testInvokeRaw', [new ScriptBuilder().emitOp('PUSH0').build().toString('hex')]], + ['getUnclaimedGas', [address]], + ['getTransactionHeight', [transactionHash]], + ['getBlockHash', [1]], + ['getBlockHeader', [1]], + ['getValidators', []], + ['validateAddress', [address]], + // ['relayTransaction'], /// see sendrawtransaction.test.ts + // ['sendRawTransaction'], // see sendrawtransaction.test.ts + // ['getInvocationData'], + // ['runConsensusNow'], + // ['updateSettings'], + // ['fastForwardOffset'], + // ['fastForwardToTime'], + // ['reset'], + // ['getNEOTrackerURL'], + // ['resetProject'], + ]; + + const getBoth = async (method: string, args: ReadonlyArray = []) => + // @ts-ignore + Promise.all([neoClient[method](...args), stagingClient[method](...args)]); + + methods.forEach(async (tuple) => { + test(tuple[0], async () => { + const [neoResult, stagingResult] = await getBoth(tuple[0], tuple[1]); + expect(neoResult).toEqual(stagingResult); + }); + }); + + // TODO: needs to be looked into + test('getStorage - Policy', async () => { + const getStorageByNum = (hashIn: UInt160, num: number) => + client.getStorage(common.uInt160ToString(hashIn), Buffer.from([num]).toString('hex')); + + const hash = common.nativeHashes.Policy; + // 0xce06595079cd69583126dbfd1d2e25cca74cffe9 + + const maxPerBlock = await getStorageByNum(hash, 23); + expect(maxPerBlock).toEqual('00020000'); + + const feePerByte = await getStorageByNum(hash, 10); + expect(feePerByte).toEqual('e803000000000000'); + + const blockedAccounts = await getStorageByNum(hash, 15); + expect(blockedAccounts).toEqual('00'); + + const maxBlockSize = await getStorageByNum(hash, 12); + expect(maxBlockSize).toEqual('00000400'); + + const maxBlockSysFee = await getStorageByNum(hash, 17); + expect(maxBlockSysFee).toEqual('00282e8cd1000000'); + }); + + test('getSettings', async () => { + const settings = await client.getSettings(); + + expect(settings.millisecondsPerBlock).toEqual(15000); + }); + + test('getTransactionReceipt', async () => { + const receipt = await client.getTransactionReceipt(transactionHash); + + expect(receipt.blockHash).toEqual('0xc359030132be10fd19cfd0a27e289fe04acb0c5c4ca5254af8a2d99498c7da45'); + expect(receipt.blockIndex).toEqual(0); + expect(receipt.globalIndex).toEqual('-1'); + expect(receipt.transactionHash).toEqual(transactionHash); + expect(receipt.confirmations).toBeDefined(); + expect(receipt.blockTime).toEqual('1468595301000'); + }); + + test('getConnectionCount', async () => { + const count = await client.getConnectionCount(); + + expect(count).toBeGreaterThanOrEqual(1); + }); + + test('getVersion', async () => { + const version = await client.getVersion(); + + expect(version.tcpport).toBeDefined(); + expect(version.wsport).toBeDefined(); + expect(version.nonce).toBeDefined(); + expect(version.useragent).toEqual('NEO:neo-one-js:3.0.0-preview3'); + }); + + test('getConnectedPeers', async () => { + const peers = await client.getConnectedPeers(); + + expect(peers.length).toBeGreaterThan(0); + expect(peers[0]).toBeDefined(); + expect(peers[0].port).toEqual(20333); + }); + + test('getNetworkSettings', async () => { + const { + decrementinterval, + generationamount, + privatekeyversion, + standbyvalidators, + messagemagic, + addressversion, + standbycommittee, + committeememberscount, + validatorscount, + millisecondsperblock, + memorypoolmaxtransactions, + } = await client.getNetworkSettings(); + + expect(decrementinterval).toBeDefined(); + expect(generationamount).toBeDefined(); + expect(privatekeyversion).toBeDefined(); + expect(standbyvalidators).toBeDefined(); + expect(messagemagic).toBeDefined(); + expect(addressversion).toBeDefined(); + expect(standbycommittee).toBeDefined(); + expect(committeememberscount).toBeDefined(); + expect(validatorscount).toBeDefined(); + expect(millisecondsperblock).toBeDefined(); + expect(memorypoolmaxtransactions).toBeDefined(); + }); +}); diff --git a/packages/neo-one-client-core/src/__tests__/sc/common.test.ts b/packages/neo-one-client-core/src/__tests__/sc/common.test.ts index 7d7d456b3a..404aebfd8d 100644 --- a/packages/neo-one-client-core/src/__tests__/sc/common.test.ts +++ b/packages/neo-one-client-core/src/__tests__/sc/common.test.ts @@ -9,6 +9,7 @@ describe('common', () => { const param: ContractParameter = { type: 'String', value, + name, }; test('convertParameter', () => { @@ -56,8 +57,8 @@ describe('common', () => { const action = factory.createRawNotification({ args: [ factory.createStringContractParameter({ value: event.name }), - factory.createAddressContractParameter({ value: keys[0].address }), - factory.createAddressContractParameter({ value: keys[1].address }), + factory.createHash160ContractParameter({ value: keys[0].address }), + factory.createHash160ContractParameter({ value: keys[1].address }), factory.createIntegerContractParameter({ value: data.bns.a }), ], }); diff --git a/packages/neo-one-client-core/src/__tests__/sc/createSmartContract.test.ts b/packages/neo-one-client-core/src/__tests__/sc/createSmartContract.test.ts index e9357393f4..3ad4f3f835 100644 --- a/packages/neo-one-client-core/src/__tests__/sc/createSmartContract.test.ts +++ b/packages/neo-one-client-core/src/__tests__/sc/createSmartContract.test.ts @@ -60,7 +60,7 @@ describe('createSmartContract', () => { }; test('createInvoke', async () => { - const transaction = factory.createInvocationTransaction(); + const transaction = factory.createTransaction(); const receipt = factory.createRawInvokeReceipt({ actions: [factory.createRawTransferNotification(), rawLog], result: factory.createRawInvocationResultSuccess({ @@ -92,7 +92,7 @@ describe('createSmartContract', () => { }); test('createInvoke - confirmed', async () => { - const transaction = factory.createInvocationTransaction(); + const transaction = factory.createTransaction(); const receipt = factory.createRawInvokeReceipt({ actions: [factory.createRawTransferNotification(), rawLog], result: factory.createRawInvocationResultSuccess({ diff --git a/packages/neo-one-client-core/src/__tests__/sc/params.test.ts b/packages/neo-one-client-core/src/__tests__/sc/params.test.ts index 17e481b9db..f458b3368f 100644 --- a/packages/neo-one-client-core/src/__tests__/sc/params.test.ts +++ b/packages/neo-one-client-core/src/__tests__/sc/params.test.ts @@ -27,7 +27,7 @@ describe('params', () => { }); test('Address - optional undefined', () => { - const result = params.Address(name, undefined, { type: 'Address', optional: true }); + const result = params.Hash160(name, undefined, { type: 'Hash160', optional: true }); expect(result).toBeUndefined(); }); @@ -35,7 +35,7 @@ describe('params', () => { test('Address - optional defined', () => { const value = keys[0].address; - const result = params.Address(name, value, { type: 'Address', optional: true }); + const result = params.Hash160(name, value, { type: 'Hash160', optional: true }); expect(result).toMatchSnapshot(); }); @@ -43,7 +43,7 @@ describe('params', () => { test('Address - defined', () => { const value = keys[0].address; - const result = params.Address(name, value, { type: 'Address' }); + const result = params.Hash160(name, value, { type: 'Hash160' }); expect(result).toMatchSnapshot(); }); diff --git a/packages/neo-one-client-core/src/__tests__/signatures.test.ts b/packages/neo-one-client-core/src/__tests__/signatures.test.ts new file mode 100644 index 0000000000..d2372e02de --- /dev/null +++ b/packages/neo-one-client-core/src/__tests__/signatures.test.ts @@ -0,0 +1,74 @@ +import { common, crypto } from '@neo-one/client-common'; +import { constants } from '@neo-one/utils'; +import { LocalKeyStore, LocalMemoryStore } from '../user'; + +const validators = [constants.PRIVATE_NET_PUBLIC_KEY].map(common.stringToECPoint); +const multiScriptHash = crypto.toScriptHash(crypto.createMultiSignatureVerificationScript(1, validators)); +const multiAddress = crypto.scriptHashToAddress({ + addressVersion: common.NEO_ADDRESS_VERSION, + scriptHash: multiScriptHash, +}); + +const singleScriptHash = crypto.privateKeyToScriptHash(common.stringToPrivateKey(constants.PRIVATE_NET_PRIVATE_KEY)); +const singleAddress = crypto.scriptHashToAddress({ + addressVersion: common.NEO_ADDRESS_VERSION, + scriptHash: singleScriptHash, +}); + +describe('debug signature contract tests', () => { + const keystore = new LocalKeyStore(new LocalMemoryStore()); + + test.only('addressVersion test', () => { + const newPrivateKey = crypto.createPrivateKey(); + const newPublicKey = crypto.privateKeyToPublicKey(newPrivateKey); + const newScriptHash = crypto.publicKeyToScriptHash(newPublicKey); + const newAddress = crypto.scriptHashToAddress({ addressVersion: 0x35, scriptHash: newScriptHash }); + + console.log({ + privateKey: common.privateKeyToString(newPrivateKey), + publicKey: common.ecPointToString(newPublicKey), + scriptHash: common.uInt160ToHex(newScriptHash), + address: newAddress, + }); + }); + + test('single', async () => { + await keystore.addUserAccount({ + network: 'local', + privateKey: constants.PRIVATE_NET_PRIVATE_KEY, + name: 'single', + }); + const singleUser = keystore + .getUserAccounts() + .find((account) => account.id.network === 'local' && account.id.address === singleAddress); + + if (singleUser === undefined) { + throw new Error('for ts'); + } + + const witnessScript = singleUser.contract.script; + const result = crypto.isSignatureContract(witnessScript); + + expect(result).toEqual(true); + }); + test('multi', async () => { + await keystore.addMultiSigUserAccount({ + network: 'local', + privateKeys: [constants.PRIVATE_NET_PRIVATE_KEY], + name: 'multi', + }); + + const multiUser = keystore + .getUserAccounts() + .find((account) => account.id.network === 'local' && account.id.address === multiAddress); + + if (multiUser === undefined) { + throw new Error('for ts'); + } + + const witnessScript = multiUser.contract.script; + const { result } = crypto.isMultiSigContractWithResult(witnessScript); + + expect(result).toEqual(true); + }); +}); diff --git a/packages/neo-one-client-core/src/__tests__/temp.test.ts b/packages/neo-one-client-core/src/__tests__/temp.test.ts new file mode 100644 index 0000000000..e2af1e73e7 --- /dev/null +++ b/packages/neo-one-client-core/src/__tests__/temp.test.ts @@ -0,0 +1,64 @@ +import { common, crypto } from '@neo-one/client-common'; +import { Client } from '../Client'; +import { NEOONEProvider } from '../provider'; +import { LocalKeyStore, LocalMemoryStore, LocalUserAccountProvider } from '../user'; + +describe('Client Tests', () => { + const createUserAccountProvider = async () => { + const keystore = new LocalKeyStore(new LocalMemoryStore()); + await keystore.addUserAccount({ + network: 'testnet', + privateKey: 'L4sEvTq6RDL42XGoGRQJjhLwfZ4BbwiStks9zrbLuG7yF3dXdpBZ', + name: 'sender', + }); + + await keystore.addUserAccount({ + network: 'testnet', + privateKey: 'L4qhHtwbiAMu1nrSmsTP5a3dJbxA3SNS6oheKnKd8E7KTJyCLcUv', + name: 'receiver', + }); + + return new LocalUserAccountProvider({ + keystore, + provider: new NEOONEProvider([ + { + network: 'testnet', + rpcURL: 'http://127.0.0.1:8080/rpc', + }, + ]), + }); + }; + + const setupClient = async () => { + const accountProvider = await createUserAccountProvider(); + + return new Client({ local: accountProvider }); + }; + + let client: Client; + beforeEach(async () => { + client = await setupClient(); + }); + + test('__call', async () => { + const account = client.getCurrentUserAccount(); + if (account === undefined) { + throw new Error('for ts'); + } + + const result = await client.__call( + 'testnet', + crypto.scriptHashToAddress({ addressVersion: common.NEO_ADDRESS_VERSION, scriptHash: common.nativeHashes.GAS }), + 'balanceOf', + [account.id.address], + ); + + console.log(result); + }); + + test('getAccount', async () => { + const result = await client.getAccount({ network: 'testnet', address: 'NSuX7PdXJLwUB7zboGor3X2C2eHswdM3t9' }); + + console.log(result); + }); +}); diff --git a/packages/neo-one-client-core/src/__tests__/user/DapiUserAccountProvider.test.ts b/packages/neo-one-client-core/src/__tests__/user/DapiUserAccountProvider.test.ts index 517f606b17..4b1da58638 100644 --- a/packages/neo-one-client-core/src/__tests__/user/DapiUserAccountProvider.test.ts +++ b/packages/neo-one-client-core/src/__tests__/user/DapiUserAccountProvider.test.ts @@ -15,9 +15,7 @@ describe('DapiUserAccountProvider', () => { const networks = [network]; const getNetworks = jest.fn(() => networks); const getUnclaimed = jest.fn(); - const getOutput = jest.fn(); const getTransaction = jest.fn(); - const getUnspentOutputs = jest.fn(); const relayTransaction = jest.fn(); const getTransactionReceipt = jest.fn(); const getInvocationData = jest.fn(); @@ -25,21 +23,17 @@ describe('DapiUserAccountProvider', () => { const getBlockCount = jest.fn(); const call = jest.fn(); const iterBlocks = jest.fn(); - const getAccount = jest.fn(); const iterActionsRaw = jest.fn(); const dataProvider: Modifiable = { networks$: _of(networks), getNetworks, getUnclaimed, - getOutput, getTransaction, - getUnspentOutputs, relayTransaction, getTransactionReceipt, getInvocationData, testInvoke, getBlockCount, - getAccount, iterBlocks, iterActionsRaw, call, @@ -58,7 +52,7 @@ describe('DapiUserAccountProvider', () => { publicKey: unlockedWallet.userAccount.publicKey, }; const writeResult = { - txid: factory.createContractTransaction().hash, + txid: factory.createTransaction().hash, nodeUrl: 'http://mock.node.com:0000', }; @@ -112,17 +106,6 @@ describe('DapiUserAccountProvider', () => { expect(result).toEqual(blockCount); }); - test('getAccount', async () => { - const account = { - address: unlockedWallet.userAccount.id.address, - balances: {}, - }; - getAccount.mockImplementation(async () => account); - const result = await dapiProvider.getAccount(unlockedWallet.userAccount.id.address, network); - - expect(result).toEqual(account); - }); - test('iterBlocks', async () => { const block = factory.createBlock(); @@ -160,8 +143,6 @@ describe('DapiUserAccountProvider', () => { test('transfer', async () => { await new Promise((resolve) => setTimeout(resolve, 100)); const transfer = factory.createTransfer(); - getUnspentOutputs.mockImplementation(async () => [factory.createInputOutput()]); - getOutput.mockImplementation(async () => factory.createInputOutput()); const transaction = factory.createContractTransaction(); getTransaction.mockImplementation(async () => transaction); @@ -213,41 +194,39 @@ describe('DapiUserAccountProvider', () => { Buffer.from('abc123', 'hex'), true, [data.bns.b, data.numbers.b], - new Map([[data.bns.a, data.numbers.b] as const]), + new Map([[data.bns.a, data.numbers.b]]), { key: false }, undefined, ]; const allParamsZipped = [ - ['undefined', undefined] as const, - ['bignumber', data.bigNumbers.a] as const, - ['buffer', data.buffers.a] as const, - ['address', unlockedWallet.userAccount.id.address] as const, - ['hash256', data.hash256s.a] as const, - ['publicKey', keys[0].publicKeyString] as const, - ['boolean', true] as const, - ['array', [['undefined', undefined], ['bignumber', data.bigNumbers.a]]] as const, - ['map', new Map([[data.bns.a, data.numbers.b] as const])] as const, - ['object', { key: false }] as const, + ['undefined', undefined], + ['bignumber', data.bigNumbers.a], + ['buffer', data.buffers.a], + ['address', unlockedWallet.userAccount.id.address], + ['hash256', data.hash256s.a], + ['publicKey', keys[0].publicKeyString], + ['boolean', true], + [ + 'array', + [ + ['undefined', undefined], + ['bignumber', data.bigNumbers.a], + ], + ], + ['map', new Map([[data.bns.a, data.numbers.b]])], + ['object', { key: false }], [ 'forward', { name: 'forwardValue', converted: Buffer.alloc(20, 7), param: unlockedWallet.userAccount.id.address }, - ] as const, + ], ] as ReadonlyArray; - const inputOutputs = [ - factory.createInputOutput(), - factory.createInputOutput(), - factory.createInputOutput({ asset: common.GAS_ASSET_HASH }), - factory.createInputOutput({ asset: common.GAS_ASSET_HASH }), - ]; const invocation = factory.createInvocationTransaction(); const receipt = factory.createRawCallReceipt(); const invocationData = factory.createRawInvocationData(); test('invoke', async () => { await new Promise((resolve) => setTimeout(resolve, 100)); - getUnspentOutputs.mockImplementation(async () => inputOutputs); - getOutput.mockImplementation(async () => factory.createInputOutput()); getTransaction.mockImplementation(async () => invocation); getTransactionReceipt.mockImplementation(async () => receipt); testInvoke.mockImplementation(async () => receipt); @@ -277,8 +256,6 @@ describe('DapiUserAccountProvider', () => { await new Promise((resolve) => setTimeout(resolve, 100)); const transfer = factory.createTransfer(); - getUnspentOutputs.mockImplementation(async () => inputOutputs); - getOutput.mockImplementation(async () => factory.createInputOutput()); getTransaction.mockImplementation(async () => invocation); getTransactionReceipt.mockImplementation(async () => receipt); testInvoke.mockImplementation(async () => receipt); @@ -305,8 +282,6 @@ describe('DapiUserAccountProvider', () => { test('invokeCompleteSend', async () => { await new Promise((resolve) => setTimeout(resolve, 100)); - getUnspentOutputs.mockImplementation(async () => inputOutputs); - getOutput.mockImplementation(async () => factory.createInputOutput()); getTransaction.mockImplementation(async () => invocation); getTransactionReceipt.mockImplementation(async () => receipt); testInvoke.mockImplementation(async () => receipt); @@ -333,8 +308,6 @@ describe('DapiUserAccountProvider', () => { test('invokeRefundAssets', async () => { await new Promise((resolve) => setTimeout(resolve, 100)); - getUnspentOutputs.mockImplementation(async () => inputOutputs); - getOutput.mockImplementation(async () => factory.createInputOutput()); getTransaction.mockImplementation(async () => invocation); getTransactionReceipt.mockImplementation(async () => receipt); testInvoke.mockImplementation(async () => receipt); @@ -361,7 +334,6 @@ describe('DapiUserAccountProvider', () => { test('invokeClaim - not implemented', async () => { await new Promise((resolve) => setTimeout(resolve, 100)); - getOutput.mockImplementation(async () => factory.createInputOutput()); getUnclaimed.mockImplementation(async () => ({ unclaimed: [factory.createInputOutput({ asset: common.GAS_ASSET_HASH })], amount: data.bigNumbers.a, diff --git a/packages/neo-one-client-core/src/__tests__/user/LocalUserAccountProvider.test.ts b/packages/neo-one-client-core/src/__tests__/user/LocalUserAccountProvider.test.ts new file mode 100644 index 0000000000..02e5949361 --- /dev/null +++ b/packages/neo-one-client-core/src/__tests__/user/LocalUserAccountProvider.test.ts @@ -0,0 +1,208 @@ +import { common, crypto } from '@neo-one/client-common'; +import { constants } from '@neo-one/utils'; +import BigNumber from 'bignumber.js'; +import { NEOONEProvider } from '../../provider'; +import { LocalKeyStore, LocalMemoryStore, LocalUserAccountProvider } from '../../user'; + +const secondaryKeyString = '04c1784140445016cf0f8cc86dd10ad8764e1a89c563c500e21ac19a5d905ab3'; + +describe.skip('Test LocalUserAccountProvider transfer methods -- local network', () => { + const config = { + blockchain: { + standbyValidators: ['0248be3c070df745a60f3b8b494efcc6caf90244d803a9a72fe95d9bae2120ec70'].map((p) => + common.stringToECPoint(p), + ), + }, + network: { + rpcURL: 'http://localhost:9040/rpc', + name: 'local', + }, + }; + + const masterAccount = { + network: constants.LOCAL_NETWORK_NAME, + privateKeys: [constants.PRIVATE_NET_PRIVATE_KEY], + name: 'master', + }; + + const masterScriptHash = crypto.toScriptHash( + crypto.createMultiSignatureVerificationScript(1, config.blockchain.standbyValidators), + ); + const masterAddress = crypto.scriptHashToAddress({ + addressVersion: common.NEO_ADDRESS_VERSION, + scriptHash: masterScriptHash, + }); + + const emptyKey = common.stringToPrivateKey(secondaryKeyString); + const emptyAddress = crypto.privateKeyToAddress({ addressVersion: common.NEO_ADDRESS_VERSION, privateKey: emptyKey }); + + const emptyAccount = { + network: constants.LOCAL_NETWORK_NAME, + privateKey: secondaryKeyString, + name: 'empty', + }; + + test('Transfer', async () => { + const keystore = new LocalKeyStore(new LocalMemoryStore()); + await Promise.all([keystore.addMultiSigUserAccount(masterAccount), keystore.addUserAccount(emptyAccount)]); + + const provider = new NEOONEProvider([{ network: 'local', rpcURL: config.network.rpcURL }]); + + const localProvider = new LocalUserAccountProvider({ provider, keystore }); + + const transfer = { + amount: new BigNumber(100000), + asset: common.nativeScriptHashes.NEO, + to: emptyAddress, + }; + + const result = await localProvider.transfer([transfer], { + from: { + network: 'local', + address: masterAddress, + }, + maxNetworkFee: new BigNumber(-1), + maxSystemFee: new BigNumber(-1), + }); + + await result.confirmed(); + + const receipt = await localProvider.provider.getApplicationLogData('local', result.transaction.hash); + + const stackReturn = receipt.stack[0]; + if (typeof stackReturn === 'string') { + throw new Error('expected good return'); + } + + expect(stackReturn.value).toEqual(true); + }); +}); + +// Test the localUserAccountProvider using our test account +describe.skip('Test LocalUserAccountProvider transfer methods -- staging network', () => { + const masterPK = '08674acb3bb23d24473f2a578cee0399e2ae9e14b5159b6f1fcbdf1a6b678422'; + + const masterAccount = { + network: 'test', + privateKey: masterPK, + name: 'fundAccount', + }; + + const secondaryAccount = { + network: 'test', + privateKey: secondaryKeyString, + name: 'receiveAccount', + }; + + const masterAddress = crypto.privateKeyToAddress({ + privateKey: common.stringToPrivateKey(masterPK), + addressVersion: common.NEO_ADDRESS_VERSION, + }); + const secondaryAddress = crypto.privateKeyToAddress({ + privateKey: common.stringToPrivateKey(secondaryKeyString), + addressVersion: common.NEO_ADDRESS_VERSION, + }); + + const providerOptions = { + network: 'test', + rpcURL: 'https://staging.neotracker.io/rpc', + }; + + test('Transfer', async () => { + const keystore = new LocalKeyStore(new LocalMemoryStore()); + await Promise.all([keystore.addUserAccount(masterAccount), keystore.addUserAccount(secondaryAccount)]); + + const localProvider = new LocalUserAccountProvider({ provider: new NEOONEProvider([providerOptions]), keystore }); + + const transfer = { + amount: new BigNumber(10), + asset: common.nativeScriptHashes.GAS, + to: secondaryAddress, + }; + + const result = await localProvider.transfer([transfer], { + from: { + network: 'test', + address: masterAddress, + }, + }); + + await result.confirmed(); + + const receipt = await localProvider.provider.getApplicationLogData('local', result.transaction.hash); + + const stackReturn = receipt.stack[0]; + if (typeof stackReturn === 'string') { + throw new Error('expected good return'); + } + + expect(stackReturn.value).toEqual(true); + }); + + test('Claim Gas -- forming our own transaction', async () => { + const keystore = new LocalKeyStore(new LocalMemoryStore()); + const account = await keystore.addUserAccount(masterAccount); + + const provider = new NEOONEProvider([providerOptions]); + const localProvider = new LocalUserAccountProvider({ provider, keystore }); + + const unclaimedInit = await provider.getUnclaimed('test', account.userAccount.id.address); + + const transfer = { + amount: new BigNumber(0), + asset: common.nativeScriptHashes.NEO, + to: account.userAccount.id.address, + }; + + const result = await localProvider.transfer([transfer], { + maxNetworkFee: new BigNumber(-1), + maxSystemFee: new BigNumber(-1), + }); + + await result.confirmed(); + + const unclaimedPost = await provider.getUnclaimed('test', account.userAccount.id.address); + expect(unclaimedPost.toNumber()).toBeLessThan(unclaimedInit.toNumber()); + }); + + test('Claim Gas -- using LUAP method', async () => { + const keystore = new LocalKeyStore(new LocalMemoryStore()); + const account = await keystore.addUserAccount(masterAccount); + + const provider = new NEOONEProvider([providerOptions]); + const localProvider = new LocalUserAccountProvider({ provider, keystore }); + + const unclaimedInit = await provider.getUnclaimed('test', account.userAccount.id.address); + + const result = await localProvider.claim({ + from: account.userAccount.id, + maxNetworkFee: new BigNumber(-1), + maxSystemFee: new BigNumber(-1), + }); + + await result.confirmed(); + + const unclaimedPost = await provider.getUnclaimed('test', account.userAccount.id.address); + expect(unclaimedPost.toNumber()).toBeLessThan(unclaimedInit.toNumber()); + }); +}); + +describe.skip('contract info / usage testing', () => { + const knownContractHashString = '0x79597a92440ce385fe1b0f4d9d2a92ca8608a575'; + + const providerOptions = { + network: 'test', + rpcURL: 'https://staging.neotracker.io/rpc', + }; + const provider = new NEOONEProvider([providerOptions]); + + test('use `call` to get name of a non-native contract', async () => { + const result = await provider.call('test', knownContractHashString, 'name', []); + const value = result.stack[0]; + if (typeof value === 'string') { + throw new Error(value); + } + + expect(value.value).toEqual('S3 Plus'); + }); +}); diff --git a/packages/neo-one-client-core/src/__tests__/user/keystore/LocalHDHandler.test.ts b/packages/neo-one-client-core/src/__tests__/user/keystore/LocalHDHandler.test.ts index de7b7f67e8..e1b66e3cb7 100644 --- a/packages/neo-one-client-core/src/__tests__/user/keystore/LocalHDHandler.test.ts +++ b/packages/neo-one-client-core/src/__tests__/user/keystore/LocalHDHandler.test.ts @@ -102,7 +102,7 @@ describe('LocalHDHandler', () => { }); test('Chain Access Discovery - active account', async () => { - bootstrapMockHandler([0, 0], getAccountMock([0, 0, 1] as const)); + bootstrapMockHandler([0, 0], getAccountMock([0, 0, 1])); const accounts = await handler.scanAccounts(network, 5); expect(accounts.length).toEqual(3); @@ -110,7 +110,7 @@ describe('LocalHDHandler', () => { }); test('Wallet Access Discovery - active account', async () => { - bootstrapMockHandler([0], getAccountMock([0, 0, 1] as const)); + bootstrapMockHandler([0], getAccountMock([0, 0, 1])); const accounts = await handler.scanAccounts(network, 5); expect(accounts.length).toEqual(5); @@ -118,7 +118,7 @@ describe('LocalHDHandler', () => { }); test('Master Access Discovery - active account', async () => { - bootstrapMockHandler([], getAccountMock([1, 0, 1] as const)); + bootstrapMockHandler([], getAccountMock([1, 0, 1])); const accounts = await handler.scanAccounts(network, 4); expect(accounts.length).toEqual(13); diff --git a/packages/neo-one-client-core/src/__tests__/user/keystore/LocalHDStore.test.ts b/packages/neo-one-client-core/src/__tests__/user/keystore/LocalHDStore.test.ts index 0d0917a476..4a1efe754b 100644 --- a/packages/neo-one-client-core/src/__tests__/user/keystore/LocalHDStore.test.ts +++ b/packages/neo-one-client-core/src/__tests__/user/keystore/LocalHDStore.test.ts @@ -56,11 +56,11 @@ describe('LocalHDStore', () => { bootstrapSingle('m'); const testPaths = [ - [0, 0, 0] as const, - [0, 0, 1] as const, - [0, 1, 0] as const, - [0, 1, 1] as const, - [2, 0, 3] as const, + [0, 0, 0], + [0, 0, 1], + [0, 1, 0], + [0, 1, 1], + [2, 0, 3], ]; const masterPath = await store.getMasterPath(); @@ -73,7 +73,11 @@ describe('LocalHDStore', () => { test('Wallet Bootstrap - Single', async () => { bootstrapSingle('m/0'); - const testPaths = [[0, 0, 0] as const, [0, 0, 1] as const, [0, 1, 0] as const]; + const testPaths = [ + [0, 0, 0], + [0, 0, 1], + [0, 1, 0], + ]; const masterPath = await store.getMasterPath(); const accountKeys = await Promise.all(testPaths.map(async (path) => store.getPublicKey(path))); @@ -81,13 +85,16 @@ describe('LocalHDStore', () => { expect(masterPath).toEqual([0]); expect(accountKeys).toEqual(testPaths.map((path) => getPublicKey(`m/${path.join('/')}`))); - await expect(store.getPublicKey([1, 0, 0] as const)).rejects.toEqual(new UndiscoverableWalletError(1)); + await expect(store.getPublicKey([1, 0, 0])).rejects.toEqual(new UndiscoverableWalletError(1)); }); test('Chain Bootstrap - Single', async () => { bootstrapSingle('m/0/0'); - const testPaths = [[0, 0, 0] as const, [0, 0, 1] as const]; + const testPaths = [ + [0, 0, 0], + [0, 0, 1], + ]; const masterPath = await store.getMasterPath(); const accountKeys = await Promise.all(testPaths.map(async (path) => store.getPublicKey(path))); @@ -95,14 +102,17 @@ describe('LocalHDStore', () => { expect(masterPath).toEqual([0, 0]); expect(accountKeys).toEqual(testPaths.map((path) => getPublicKey(`m/${path.join('/')}`))); - await expect(store.getPublicKey([1, 0, 0] as const)).rejects.toEqual(new UndiscoverableWalletError(1)); - await expect(store.getPublicKey([0, 1, 0] as const)).rejects.toEqual(new UndiscoverableChainError([0, 1] as const)); + await expect(store.getPublicKey([1, 0, 0])).rejects.toEqual(new UndiscoverableWalletError(1)); + await expect(store.getPublicKey([0, 1, 0])).rejects.toEqual(new UndiscoverableChainError([0, 1])); }); test('MasterSeed Bootstrap - Full', async () => { bootstrapFull(); - const testPaths = [[0, 0, 0] as const, [4, 1, 4] as const]; + const testPaths = [ + [0, 0, 0], + [4, 1, 4], + ]; const masterPath = await store.getMasterPath(); const accountKeys = await Promise.all(testPaths.map(async (path) => store.getPublicKey(path))); @@ -117,12 +127,12 @@ describe('LocalHDStore', () => { let setItems: readonly string[] = []; setItem.mockImplementation(async (key: string, _value: string) => (setItems = setItems.concat(key))); - await store.getPublicKey([0, 0, 0] as const); + await store.getPublicKey([0, 0, 0]); await store.close(); expect(setItems).toEqual(['m/0', 'm/0/0', 'm/0/0/0']); setItems = []; - await Promise.all([store.getPublicKey([0, 0, 0] as const), store.getPublicKey([0, 1, 0] as const)]); + await Promise.all([store.getPublicKey([0, 0, 0]), store.getPublicKey([0, 1, 0])]); await store.close(); expect(setItems).toEqual(['m/0', 'm/0/0', 'm/0/0/0', 'm/0/1', 'm/0/1/0']); }); diff --git a/packages/neo-one-client-core/src/__tests__/user/keystore/LocalKeyStore.test.ts b/packages/neo-one-client-core/src/__tests__/user/keystore/LocalKeyStore.test.ts index dad3c037c4..955b5d86d7 100644 --- a/packages/neo-one-client-core/src/__tests__/user/keystore/LocalKeyStore.test.ts +++ b/packages/neo-one-client-core/src/__tests__/user/keystore/LocalKeyStore.test.ts @@ -135,10 +135,7 @@ describe('LocalKeyStore', () => { }); test('getWallet$', async () => { - const result = await keystore - .getWallet$(lockedWallet.userAccount.id) - .pipe(take(1)) - .toPromise(); + const result = await keystore.getWallet$(lockedWallet.userAccount.id).pipe(take(1)).toPromise(); expect(result).toEqual(lockedWallet); }); diff --git a/packages/neo-one-client-core/src/args.ts b/packages/neo-one-client-core/src/args.ts index acc56ef7c6..80e64786cd 100644 --- a/packages/neo-one-client-core/src/args.ts +++ b/packages/neo-one-client-core/src/args.ts @@ -1,19 +1,28 @@ // tslint:disable strict-type-predicates import { - ABI, ABIDefault, ABIDefaultType, - ABIEvent, - ABIFunction, ABIParameter, ABIReturn, AddressString, addressToScriptHash, - assertAttributeUsageJSON, + assertAttributeTypeJSON, Attribute, - AttributeUsage, + AttributeTypeModel, BufferString, common, + ContractABI, + ContractABIClient, + ContractEventDescriptor, + ContractEventDescriptorClient, + ContractGroup, + ContractManifest, + ContractManifestClient, + ContractMethodDescriptor, + ContractMethodDescriptorClient, + ContractParameter, + ContractPermission, + ContractPermissionDescriptor, ForwardValue, Hash256String, InvokeSendUnsafeReceiveTransactionOptions, @@ -28,14 +37,19 @@ import { SmartContractNetworkDefinition, SmartContractNetworksDefinition, SourceMaps, + toAttributeType, TransactionOptions, Transfer, + UInt160Hex, UpdateAccountNameOptions, UserAccountID, wifToPrivateKey, + Wildcard, + WildcardContainer, } from '@neo-one/client-common'; -import { OmitStrict, utils } from '@neo-one/utils'; +import { JSONObject, JSONValue, OmitStrict, utils } from '@neo-one/utils'; import BigNumber from 'bignumber.js'; +import BN from 'bn.js'; import _ from 'lodash'; import { InvalidArgumentError } from './errors'; @@ -98,6 +112,22 @@ export const assertAddress = (name: string, addressIn?: unknown): AddressString } }; +export const tryGetUInt160Hex = (name: string, addressOrUInt160In: unknown): UInt160Hex => { + const addressOrUInt160 = assertString(name, addressOrUInt160In); + + try { + scriptHashToAddress(addressOrUInt160); + + return addressOrUInt160; + } catch { + try { + return addressToScriptHash(addressOrUInt160); + } catch { + throw new InvalidArgumentError('AddressOrUInt160', name, addressOrUInt160); + } + } +}; + export const assertHash256 = (name: string, hash?: unknown): Hash256String => { const value = assertString(name, hash); @@ -126,6 +156,16 @@ export const assertPublicKey = (name: string, publicKey?: unknown): PublicKeyStr } }; +const assertUInt160Hex = (name: string, value?: unknown): UInt160Hex => { + const valueIn = assertString(name, value); + + try { + return common.uInt160ToString(common.stringToUInt160(valueIn)); + } catch { + throw new InvalidArgumentError('UInt160Hex', name, value); + } +}; + export const assertBigNumber = (name: string, value?: unknown): BigNumber => { if (value == undefined || !BigNumber.isBigNumber(value)) { throw new InvalidArgumentError('BigNumber', name, value); @@ -142,6 +182,14 @@ export const assertNullableBigNumber = (name: string, value?: unknown): BigNumbe return assertBigNumber(name, value); }; +export const assertBN = (name: string, value?: unknown): BN => { + if (value == undefined || !BN.isBN(value)) { + throw new InvalidArgumentError('BN', name, value); + } + + return value; +}; + export const assertArray = (name: string, value?: unknown): readonly unknown[] => { if (!Array.isArray(value)) { throw new InvalidArgumentError('Array', name, value); @@ -225,10 +273,57 @@ export const assertUpdateAccountNameOptions = (name: string, value?: unknown): U }; }; -const ABI_TYPES = new Set([ +const CONTRACT_PARAMETER_TYPES = new Set([ + 'Any', 'Signature', 'Boolean', 'Address', + 'Hash160', + 'Hash256', + 'Buffer', + 'PublicKey', + 'String', + 'Array', + 'Map', + 'Object', + 'Void', + 'Integer', + 'ForwardValue', +]); + +const assertContractParameterType = (name: string, valueIn?: unknown): ContractParameter['type'] => { + const value = assertString(name, valueIn); + + if (!CONTRACT_PARAMETER_TYPES.has(value)) { + throw new InvalidArgumentError('ContractParameterType', name, value); + } + + return value as ContractParameter['type']; +}; + +const assertMapProperty = ( + value: T, + objectName: string, + name: Name, + assertType: (name: string, v?: unknown) => P, +): ReadonlyArray => { + const map = assertProperty(value, objectName, name, assertMap); + const result: Array<[P, P]> = []; + map.forEach((val, key) => { + const keyOut = assertType(`${objectName}.${name}`, key); + const valOut = assertType(`${objectName}.${name}`, val); + + // tslint:disable-next-line: no-array-mutation + result.push([keyOut, valOut]); + }); + + return result; +}; + +const ABI_TYPES = new Set([ + 'Signature', + 'Boolean', + 'Hash160', 'Hash256', 'Buffer', 'PublicKey', @@ -251,60 +346,58 @@ const assertABIType = (name: string, valueIn?: unknown): ABIReturn['type'] => { return value as ABIReturn['type']; }; -const assertABIProperties = (name: string, value?: unknown): { readonly [key: string]: ABIReturn } => { +const assertContractParameter = (paramName: string, value?: unknown): ContractParameter => { if (!isObject(value)) { - throw new InvalidArgumentError('ABIReturn', name, value); + throw new InvalidArgumentError('ContractParameter', paramName, value); } - return _.fromPairs(Object.entries(value).map(([k, v]) => [assertString(name, k), assertABIReturn(name, v)])); -}; + const type = assertProperty(value, 'ContractParameter', 'type', assertContractParameterType); + const name = assertProperty(value, 'ContractParameter', 'name', assertString); -const assertABIReturn = (name: string, value?: unknown): ABIReturn => { - if (!isObject(value)) { - throw new InvalidArgumentError('ABIReturn', name, value); - } - - const type = assertProperty(value, 'ABIReturn', 'type', assertABIType); - const optional = assertProperty(value, 'ABIReturn', 'optional', assertNullableBoolean); - const forwardedValue = assertProperty(value, 'ABIReturn', 'forwardedValue', assertNullableBoolean); switch (type) { + case 'Any': + return { type, name, value: undefined }; case 'Signature': - return { type, optional, forwardedValue }; + return { type, name, value: assertProperty(value, 'ContractParameter', 'value', assertString) }; case 'Boolean': - return { type, optional, forwardedValue }; - case 'Address': - return { type, optional, forwardedValue }; + return { type, name, value: assertProperty(value, 'ContractParameter', 'value', assertBoolean) }; + case 'Hash160': + return { type, name, value: assertProperty(value, 'ContractParameter', 'value', assertAddress) }; case 'Hash256': - return { type, optional, forwardedValue }; + return { type, name, value: assertProperty(value, 'ContractParameter', 'value', assertHash256) }; case 'Buffer': - return { type, optional, forwardedValue }; + return { type, name, value: assertProperty(value, 'ContractParameter', 'value', assertBuffer) }; case 'PublicKey': - return { type, optional, forwardedValue }; + return { type, name, value: assertProperty(value, 'ContractParameter', 'value', assertPublicKey) }; case 'String': - return { type, optional, forwardedValue }; + return { type, name, value: assertProperty(value, 'ContractParameter', 'value', assertString) }; case 'Array': - return { type, value: assertProperty(value, 'ABIReturn', 'value', assertABIReturn), optional, forwardedValue }; - case 'Map': return { type, - key: assertProperty(value, 'ABIReturn', 'key', assertABIReturn), - value: assertProperty(value, 'ABIReturn', 'value', assertABIReturn), - optional, - forwardedValue, + name, + value: assertProperty(value, 'ContractParameter', 'value', assertArray).map((param) => + assertContractParameter('Array', param), + ), }; - case 'Object': + case 'Map': return { type, - properties: assertProperty(value, 'ABIReturn', 'properties', assertABIProperties), - optional, - forwardedValue, + name, + value: assertMapProperty(value, 'ContractParameter', 'value', assertContractParameter), }; case 'Void': - return { type, optional, forwardedValue }; + return { type, name }; case 'Integer': - return { type, decimals: assertProperty(value, 'ABIReturn', 'decimals', assertNumber), optional, forwardedValue }; - case 'ForwardValue': - return { type, optional, forwardedValue }; + return { + type, + name, + value: assertProperty(value, 'ContractParameter', 'value', assertBN), + }; + case 'InteropInterface': + return { + type, + name, + }; default: /* istanbul ignore next */ utils.assertNever(type); @@ -354,11 +447,13 @@ const assertABIParameter = (propName: string, value?: unknown): ABIParameter => const forwardedValue = assertProperty(value, 'ABIParameter', 'forwardedValue', assertNullableBoolean); switch (type) { + case 'Any': + return { type, name, optional, default: defaultValue, forwardedValue, rest }; case 'Signature': return { type, name, optional, default: defaultValue, forwardedValue, rest }; case 'Boolean': return { type, name, optional, default: defaultValue, forwardedValue, rest }; - case 'Address': + case 'Hash160': return { type, name, optional, default: defaultValue, forwardedValue, rest }; case 'Hash256': return { type, name, optional, default: defaultValue, forwardedValue, rest }; @@ -420,52 +515,345 @@ const assertABIParameter = (propName: string, value?: unknown): ABIParameter => } }; -const assertABIFunction = (name: string, value?: unknown): ABIFunction => { +const assertABIProperties = (name: string, value?: unknown): { readonly [key: string]: ABIReturn } => { + if (!isObject(value)) { + throw new InvalidArgumentError('ABIReturn', name, value); + } + + return _.fromPairs(Object.entries(value).map(([k, v]) => [assertString(name, k), assertABIReturn(name, v)])); +}; + +const assertABIReturn = (name: string, value?: unknown): ABIReturn => { if (!isObject(value)) { - throw new InvalidArgumentError('ABIFunction', name, value); + throw new InvalidArgumentError('ABIReturn', name, value); + } + + const type = assertProperty(value, 'ABIReturn', 'type', assertABIType); + const optional = assertProperty(value, 'ABIReturn', 'optional', assertNullableBoolean); + const forwardedValue = assertProperty(value, 'ABIReturn', 'forwardedValue', assertNullableBoolean); + switch (type) { + case 'Any': + return { type, optional, forwardedValue }; + case 'Signature': + return { type, optional, forwardedValue }; + case 'Boolean': + return { type, optional, forwardedValue }; + case 'Hash160': + return { type, optional, forwardedValue }; + case 'Hash256': + return { type, optional, forwardedValue }; + case 'Buffer': + return { type, optional, forwardedValue }; + case 'PublicKey': + return { type, optional, forwardedValue }; + case 'String': + return { type, optional, forwardedValue }; + case 'Array': + return { type, value: assertProperty(value, 'ABIReturn', 'value', assertABIReturn), optional, forwardedValue }; + case 'Map': + return { + type, + key: assertProperty(value, 'ABIReturn', 'key', assertABIReturn), + value: assertProperty(value, 'ABIReturn', 'value', assertABIReturn), + optional, + forwardedValue, + }; + case 'Object': + return { + type, + properties: assertProperty(value, 'ABIReturn', 'properties', assertABIProperties), + optional, + forwardedValue, + }; + case 'Void': + return { type, optional, forwardedValue }; + case 'Integer': + return { type, decimals: assertProperty(value, 'ABIReturn', 'decimals', assertNumber), optional, forwardedValue }; + case 'ForwardValue': + return { type, optional, forwardedValue }; + default: + /* istanbul ignore next */ + utils.assertNever(type); + /* istanbul ignore next */ + throw new Error('For TS'); + } +}; + +const assertContractMethodDescriptorClient = (name: string, value?: unknown): ContractMethodDescriptorClient => { + if (!isObject(value)) { + throw new InvalidArgumentError('ContractMethodDescriptorClient', name, value); } return { - name: assertProperty(value, 'ABIFunction', 'name', assertString), - parameters: assertProperty(value, 'ABIFunction', 'parameters', assertNullableArray).map((parameter) => - assertABIParameter('ABIFunction.parameters', parameter), + name: assertProperty(value, 'ContractMethodDescriptorClient', 'name', assertString), + parameters: assertProperty( + value, + 'ContractMethodDescriptorClient', + 'parameters', + assertNullableArray, + ).map((parameter) => assertABIParameter('ContractMethodDescriptorClient.parameters', parameter)), + returnType: assertProperty(value, 'ContractMethodDescriptorClient', 'returnType', assertABIReturn), + constant: assertProperty(value, 'ContractMethodDescriptorClient', 'constant', assertNullableBoolean), + send: assertProperty(value, 'ContractMethodDescriptorClient', 'send', assertNullableBoolean), + sendUnsafe: assertProperty(value, 'ContractMethodDescriptorClient', 'sendUnsafe', assertNullableBoolean), + receive: assertProperty(value, 'ContractMethodDescriptorClient', 'receive', assertNullableBoolean), + claim: assertProperty(value, 'ContractMethodDescriptorClient', 'claim', assertNullableBoolean), + refundAssets: assertProperty(value, 'ContractMethodDescriptorClient', 'refundAssets', assertNullableBoolean), + completeSend: assertProperty(value, 'ContractMethodDescriptorClient', 'completeSend', assertNullableBoolean), + offset: assertProperty(value, 'ContractMethodDescriptorClient', 'offset', assertNumber), + }; +}; + +const assertContractMethodDescriptor = (name: string, value?: unknown): ContractMethodDescriptor => { + if (!isObject(value)) { + throw new InvalidArgumentError('ContractMethodDescriptor', name, value); + } + + return { + name: assertProperty(value, 'ContractMethodDescriptor', 'name', assertString), + parameters: assertProperty(value, 'ContractMethodDescriptor', 'parameters', assertNullableArray).map((parameter) => + assertContractParameter('ContractMethodDescriptor.parameters', parameter), ), - returnType: assertProperty(value, 'ABIFunction', 'returnType', assertABIReturn), - constant: assertProperty(value, 'ABIFunction', 'constant', assertNullableBoolean), - send: assertProperty(value, 'ABIFunction', 'send', assertNullableBoolean), - sendUnsafe: assertProperty(value, 'ABIFunction', 'sendUnsafe', assertNullableBoolean), - receive: assertProperty(value, 'ABIFunction', 'receive', assertNullableBoolean), - claim: assertProperty(value, 'ABIFunction', 'claim', assertNullableBoolean), - refundAssets: assertProperty(value, 'ABIFunction', 'refundAssets', assertNullableBoolean), - completeSend: assertProperty(value, 'ABIFunction', 'completeSend', assertNullableBoolean), + returnType: assertProperty(value, 'ContractMethodDescriptor', 'returnType', assertContractParameterType), + offset: assertProperty(value, 'ContractMethodDescriptor', 'offset', assertNumber), }; }; -const assertABIEvent = (name: string, value?: unknown): ABIEvent => { +const assertContractEventDescriptorClient = (name: string, value?: unknown): ContractEventDescriptorClient => { + if (!isObject(value)) { + throw new InvalidArgumentError('ContractEventDescriptorClient', name, value); + } + + return { + name: assertProperty(value, 'ContractEventDescriptorClient', 'name', assertString), + parameters: assertProperty( + value, + 'ContractEventDescriptorClient', + 'parameters', + assertNullableArray, + ).map((parameter) => assertABIParameter('ContractEventDescriptorClient.parameters', parameter)), + }; +}; + +const assertContractEventDescriptor = (name: string, value?: unknown): ContractEventDescriptor => { + if (!isObject(value)) { + throw new InvalidArgumentError('ContractEventDescriptor', name, value); + } + + return { + name: assertProperty(value, 'ContractEventDescriptor', 'name', assertString), + parameters: assertProperty(value, 'ContractEventDescriptor', 'parameters', assertNullableArray).map((parameter) => + assertContractParameter('ContractEventDescriptor.parameters', parameter), + ), + }; +}; + +export const assertContractABIClient = (name: string, value?: unknown): ContractABIClient => { + if (!isObject(value)) { + throw new InvalidArgumentError('ContractABI', name, value); + } + + return { + hash: assertProperty(value, 'ContractABI', 'hash', assertUInt160Hex), + methods: assertProperty(value, 'ContractABI', 'methods', assertArray).map((method) => + assertContractMethodDescriptorClient('ContractABI.methods', method), + ), + events: assertProperty(value, 'ABI', 'events', assertArray).map((func) => + assertContractEventDescriptorClient('ABI.events', func), + ), + }; +}; + +export const assertContractABI = (name: string, value?: unknown): ContractABI => { + if (!isObject(value)) { + throw new InvalidArgumentError('ContractABI', name, value); + } + + return { + hash: assertProperty(value, 'ContractABI', 'hash', assertUInt160Hex), + methods: assertProperty(value, 'ContractABI', 'methods', assertArray).map((method) => + assertContractMethodDescriptor('ContractABI.methods', method), + ), + events: assertProperty(value, 'ABI', 'events', assertArray).map((func) => + assertContractEventDescriptor('ABI.events', func), + ), + }; +}; + +export const assertWildcardContainer = (name: string, value: unknown): WildcardContainer => { + if (value === undefined || value === '*') { + return '*'; + } + if (!Array.isArray(value) && value !== '*') { + throw new InvalidArgumentError('WildcardContainer', name, value); + } + + return value; +}; + +export const assertWildcardContainerProperty = ( + value: T, + objectName: string, + name: Name, + assertType: (name: string, v?: unknown) => P, +): readonly P[] | Wildcard => { + const wildcardOrArray = assertProperty(value, objectName, name, assertWildcardContainer); + if (wildcardOrArray === '*') { + return '*'; + } + + return assertProperty(value, objectName, name, assertArray).map((val) => assertType(`${objectName}.${name}`, val)); +}; + +export const isJSON = (value?: unknown): value is JSONObject => { + if (value === undefined) { + return false; + } + + if (!isObject(value)) { + return false; + } + + try { + Object.keys(value).forEach((key) => assertString('JSONObject', key)); + Object.values(value).forEach((val) => assertJSONValue('JSONObject', val)); + } catch { + return false; + } + + return true; +}; + +export const isJSONValue = (value?: unknown): value is JSONValue => { + if (value === undefined) { + return false; + } + if (typeof value === 'object') { + return isJSON(value); + } + if (Array.isArray(value)) { + return value.every(isJSONValue); + } + + return true; +}; + +export const assertJSONValue = (name: string, value?: unknown): JSONValue => { + if (!isJSONValue(value)) { + throw new InvalidArgumentError('JSONObject', name, value); + } + + return value; +}; + +export const assertNullableJSON = (name: string, value?: unknown): JSONObject => { + if (value === undefined) { + return {}; + } + + if (!isJSON(value)) { + throw new InvalidArgumentError('JSONObject', name, value); + } + + return value; +}; + +const assertHashOrGroup = (name: string, value?: unknown): PublicKeyString | UInt160Hex | Wildcard => { + const valueIn = assertString(name, value); + if (valueIn === '*') { + return '*'; + } + + try { + return assertUInt160Hex(name, valueIn); + } catch { + // do nothing + } + + try { + return assertPublicKey(name, valueIn); + } catch { + // do nothing + } + + throw new InvalidArgumentError('HashOrGroup', name, value); +}; + +export const assertContractManifestClient = (name: string, value?: unknown): ContractManifestClient => { if (!isObject(value)) { - throw new InvalidArgumentError('ABIEvent', name, value); + throw new InvalidArgumentError('ContractManifest', name, value); } return { - name: assertProperty(value, 'ABIEvent', 'name', assertString), - parameters: assertProperty(value, 'ABIEvent', 'parameters', assertNullableArray).map((parameter) => - assertABIParameter('ABIEvent.parameters', parameter), + hash: assertProperty(value, 'ContractManifest', 'hash', assertUInt160Hex), + groups: assertProperty(value, 'ContractManifest', 'groups', assertArray).map((group) => + assertContractGroup('ContractManifest.groups', group), + ), + supportedStandards: assertProperty(value, 'ContractManifest', 'supportedStandards', assertArray).map((std) => + assertString('ContractManifest.supportedStandards', std), ), + abi: assertProperty(value, 'ContractManifest', 'abi', assertContractABIClient), + permissions: assertProperty(value, 'ContractManifest', 'permissions', assertArray).map((permission) => + assertContractPermission('ContractManifest.permissions', permission), + ), + trusts: assertWildcardContainerProperty(value, 'ContractManifest', 'trusts', assertUInt160Hex), + extra: assertProperty(value, 'ContractManifest', 'extra', assertNullableJSON), }; }; -export const assertABI = (name: string, value?: unknown): ABI => { +export const assertContractManifest = (name: string, value?: unknown): ContractManifest => { if (!isObject(value)) { - throw new InvalidArgumentError('ABI', name, value); + throw new InvalidArgumentError('ContractManifest', name, value); } return { - functions: assertProperty(value, 'ABI', 'functions', assertNullableArray).map((func) => - assertABIFunction('ABI.functions', func), + groups: assertProperty(value, 'ContractManifest', 'groups', assertArray).map((group) => + assertContractGroup('ContractManifest.groups', group), + ), + supportedStandards: assertProperty(value, 'ContractManifest', 'supportedStandards', assertArray).map((std) => + assertString('ContractManifest.supportedStandards', std), ), - events: assertProperty(value, 'ABI', 'events', assertNullableArray).map((func) => - assertABIEvent('ABI.events', func), + abi: assertProperty(value, 'ContractManifest', 'abi', assertContractABI), + permissions: assertProperty(value, 'ContractManifest', 'permissions', assertArray).map((permission) => + assertContractPermission('ContractManifest.permissions', permission), ), + trusts: assertWildcardContainerProperty(value, 'ContractManifest', 'trusts', assertUInt160Hex), + extra: assertProperty(value, 'ContractManifest', 'extra', assertNullableJSON), + }; +}; + +const assertContractPermission = (name: string, value?: unknown): ContractPermission => { + if (!isObject(value)) { + throw new InvalidArgumentError('ContractPermission', name, value); + } + + return { + contract: assertProperty(value, 'ContractPermission', 'contract', assertContractPermissionDescriptor), + methods: assertWildcardContainerProperty(value, 'ContractPermission', 'methods', assertString), + }; +}; + +const assertContractPermissionDescriptor = (name: string, value?: unknown): ContractPermissionDescriptor => { + if (!isObject(value)) { + throw new InvalidArgumentError('ContractPermissionDescriptor', name, value); + } + + return { + hashOrGroup: assertProperty(value, 'ContractPermissionDescriptor', 'hashOrGroup', assertHashOrGroup), + isHash: assertProperty(value, 'ContractPermissionDescriptor', 'isHash', assertBoolean), + isGroup: assertProperty(value, 'ContractPermissionDescriptor', 'isGroup', assertBoolean), + isWildcard: assertProperty(value, 'ContractPermissionDescriptor', 'isWildcard', assertBoolean), + }; +}; + +const assertContractGroup = (name: string, value?: unknown): ContractGroup => { + if (!isObject(value)) { + throw new InvalidArgumentError('ContractGroup', name, value); + } + + return { + publicKey: assertProperty(value, 'ContractGroup', 'publicKey', assertPublicKey), + signature: assertProperty(value, 'ContractGroup', 'signature', assertBuffer), }; }; @@ -504,7 +892,7 @@ export const assertSmartContractDefinition = (name: string, value?: unknown): Sm return { networks: assertProperty(value, 'SmartContractDefinition', 'networks', assertSmartContractNetworksDefinition), - abi: assertProperty(value, 'SmartContractDefinition', 'abi', assertABI), + manifest: assertProperty(value, 'SmartContractDefinition', 'manfifest', assertContractManifestClient), sourceMaps: assertProperty(value, 'SmartContractDefinition', 'sourceMaps', assertSourceMaps), }; }; @@ -563,7 +951,7 @@ export const assertTransfer = (name: string, value?: unknown): Transfer => { return { amount: assertProperty(value, 'Transfer', 'amount', assertBigNumber), - asset: assertProperty(value, 'Transfer', 'asset', assertHash256), + asset: assertProperty(value, 'Transfer', 'asset', tryGetUInt160Hex), to: assertProperty(value, 'Transfer', 'to', assertAddress), }; }; @@ -589,12 +977,12 @@ export const assertTransfers = (name: string, valueIn?: unknown): readonly Trans return value.map((val) => assertTransfer(name, val)); }; -const assertAttributeUsage = (name: string, valueIn?: unknown): AttributeUsage => { +const assertAttributeTypeArg = (name: string, valueIn?: unknown): AttributeTypeModel => { const value = assertString(name, valueIn); try { - return assertAttributeUsageJSON(value); + return toAttributeType(assertAttributeTypeJSON(value)); } catch { - throw new InvalidArgumentError('AttributeUsage', name, value); + throw new InvalidArgumentError('AttributeType', name, value); } }; @@ -603,68 +991,9 @@ export const assertAttribute = (name: string, attribute?: unknown): Attribute => throw new InvalidArgumentError('Attribute', name, attribute); } - const usage = assertProperty(attribute, 'Attribute', 'usage', assertAttributeUsage); - switch (usage) { - case 'ContractHash': - case 'Vote': - case 'Hash1': - case 'Hash2': - case 'Hash3': - case 'Hash4': - case 'Hash5': - case 'Hash6': - case 'Hash7': - case 'Hash8': - case 'Hash9': - case 'Hash10': - case 'Hash11': - case 'Hash12': - case 'Hash13': - case 'Hash14': - case 'Hash15': - return { - usage, - data: assertProperty(attribute, 'Attribute', 'data', assertHash256), - }; - case 'Script': - return { - usage, - data: assertProperty(attribute, 'Attribute', 'data', assertAddress), - }; - case 'ECDH02': - case 'ECDH03': - return { - usage, - data: assertProperty(attribute, 'Attribute', 'data', assertPublicKey), - }; - case 'DescriptionUrl': - case 'Description': - case 'Remark': - case 'Remark1': - case 'Remark2': - case 'Remark3': - case 'Remark4': - case 'Remark5': - case 'Remark6': - case 'Remark7': - case 'Remark8': - case 'Remark9': - case 'Remark10': - case 'Remark11': - case 'Remark12': - case 'Remark13': - case 'Remark14': - case 'Remark15': - return { - usage, - data: assertProperty(attribute, 'Attribute', 'data', assertBuffer), - }; - default: - /* istanbul ignore next */ - utils.assertNever(usage); - /* istanbul ignore next */ - throw new Error('For TS'); - } + return { + type: assertProperty(attribute, 'Attribute', 'type', assertAttributeTypeArg), + }; }; export const assertTransactionOptions = (name: string, options?: unknown): TransactionOptions => { @@ -681,8 +1010,8 @@ export const assertTransactionOptions = (name: string, options?: unknown): Trans attributes: assertProperty(options, 'TransactionOptions', 'attributes', assertNullableArray).map((value) => assertAttribute('TransactionOption.attributes', value), ), - networkFee: assertProperty(options, 'TransactionOptions', 'networkFee', assertNullableBigNumber), - systemFee: assertProperty(options, 'TransactionOptions', 'systemFee', assertNullableBigNumber), + maxNetworkFee: assertProperty(options, 'TransactionOptions', 'networkFee', assertNullableBigNumber), + maxSystemFee: assertProperty(options, 'TransactionOptions', 'systemFee', assertNullableBigNumber), }; }; @@ -706,13 +1035,13 @@ export const assertInvokeSendUnsafeReceiveTransactionOptions = ( 'attributes', assertNullableArray, ).map((value) => assertAttribute('TransactionOption.attributes', value)), - networkFee: assertProperty( + maxNetworkFee: assertProperty( options, 'InvokeSendUnsafeReceiveTransactionOptions', 'networkFee', assertNullableBigNumber, ), - systemFee: assertProperty( + maxSystemFee: assertProperty( options, 'InvokeSendUnsafeReceiveTransactionOptions', 'systemFee', diff --git a/packages/neo-one-client-core/src/clientUtils.ts b/packages/neo-one-client-core/src/clientUtils.ts index 6d87229bd4..a06aebd9f0 100644 --- a/packages/neo-one-client-core/src/clientUtils.ts +++ b/packages/neo-one-client-core/src/clientUtils.ts @@ -1,4 +1,15 @@ -import { AddressString, addressToScriptHash, common, ScriptBuilder, ScriptBuilderParam } from '@neo-one/client-common'; +import { + AddressString, + addressToScriptHash, + BufferString, + common, + NetworkType, + ScriptBuilder, + ScriptBuilderParam, + UInt160Hex, +} from '@neo-one/client-common'; +import sp from 'synchronized-promise'; +import { LocalKeyStore } from './user'; const getInvokeMethodInvocationScript = ({ method, @@ -14,20 +25,31 @@ const getInvokeMethodInvocationScript = ({ }; const getInvokeMethodScript = ({ - address, + scriptHash, method, params, }: { - readonly address: AddressString; + readonly scriptHash: UInt160Hex; readonly method: string; readonly params: ReadonlyArray; }): Buffer => { const sb = new ScriptBuilder(); - sb.emitAppCall(common.stringToUInt160(addressToScriptHash(address)), method, ...params); + sb.emitAppCall(common.stringToUInt160(scriptHash), method, ...params); return sb.build(); }; +export const addLocalKeysSync = ( + wallets: ReadonlyArray<{ + readonly network: NetworkType; + readonly privateKey?: BufferString; + readonly name?: string; + readonly password?: string; + readonly nep2?: string; + }>, + keyStore: LocalKeyStore, +) => sp(async () => Promise.all(wallets.map((wallet) => keyStore.addUserAccount(wallet))))(); + export const clientUtils = { getInvokeMethodInvocationScript, getInvokeMethodScript, diff --git a/packages/neo-one-client-core/src/errors.ts b/packages/neo-one-client-core/src/errors.ts index deec82b44b..4b3dc92af1 100644 --- a/packages/neo-one-client-core/src/errors.ts +++ b/packages/neo-one-client-core/src/errors.ts @@ -61,6 +61,11 @@ export const InsufficientSystemFeeError = makeErrorWithCode( (total: BigNumber, expected: BigNumber) => `Found ${total.toString()} allowed system fee, required: ${expected.toString()}.`, ); +export const InsufficientNetworkFeeError = makeErrorWithCode( + 'INSUFFICIENT_NETWORK_FEE', + (total: BigNumber, expected: BigNumber) => + `Found ${total.toString()} allowed network fee, required: ${expected.toString()}.`, +); export const FundsInUseError = makeErrorWithCode( 'FUNDS_IN_USE', (total: BigNumber, expected: BigNumber, numInputs: number) => @@ -154,8 +159,15 @@ export const InvalidMasterPathError = makeErrorWithCode( 'INVALID_HD_MASTER_PATH', (path: readonly number[]) => `Invalid masterPath returned by HDStore: ${path}`, ); - export const NotImplementedError = makeErrorWithCode( 'NOT_IMPLEMENTED', (name: string) => `${name} not implemented for this provider.`, ); +export const NeoNotImplementedError = makeErrorWithCode( + 'NEO_NOT_IMPLEMENTED', + (name: string) => `${name} not implemented for the NEODataProvider. Use a NEOONEDataProvider to use this method.`, +); +export const UnknownTransactionError = makeErrorWithCode( + 'UNKNOWN_TRANSACTION', + (transaction: string) => `Unknown transaction: ${transaction}`, +); diff --git a/packages/neo-one-client-core/src/index.ts b/packages/neo-one-client-core/src/index.ts index 0b52395c1a..a891bda3d8 100644 --- a/packages/neo-one-client-core/src/index.ts +++ b/packages/neo-one-client-core/src/index.ts @@ -1,14 +1,15 @@ import * as args from './args'; +import { addLocalKeysSync } from './clientUtils'; import * as nep5 from './nep5'; export * from './AsyncBlockIterator'; export * from './Client'; export * from './DeveloperClient'; -export * from './Hash256'; +export * from './Hash160'; export * from './errors'; export * from './provider'; export * from './sc'; export * from './trace'; export * from './types'; export * from './user'; -export { args, nep5 }; +export { args, nep5, addLocalKeysSync }; diff --git a/packages/neo-one-client-core/src/nep5.ts b/packages/neo-one-client-core/src/nep5.ts index 4d3ca37f3a..1c7d428e0f 100644 --- a/packages/neo-one-client-core/src/nep5.ts +++ b/packages/neo-one-client-core/src/nep5.ts @@ -1,10 +1,14 @@ import { - ABI, - ABIFunction, AddressString, + common, + ContractABIClient, + ContractManifestClient, + ContractMethodDescriptorClient, + crypto, Event, InvokeReceipt, NetworkType, + ScriptBuilder, SmartContractNetworksDefinition, SmartContractReadOptions, TransactionOptions, @@ -38,26 +42,34 @@ export interface NEP5SmartContract extends Smar ) => TransactionResult>; } -const decimalsFunction: ABIFunction = { +const decimalsFunction: ContractMethodDescriptorClient = { name: 'decimals', constant: true, parameters: [], returnType: { type: 'Integer', decimals: 0 }, + offset: 0, }; -export const abi = (decimals: number): ABI => ({ - functions: [ +// TODO: check that the script/hash can/should be blank here. also check offsets +const blankScript = new ScriptBuilder().build(); +const blankHash = crypto.toScriptHash(blankScript); + +export const abi = (decimals: number): ContractABIClient => ({ + hash: common.uInt160ToString(blankHash), + methods: [ { name: 'name', constant: true, parameters: [], returnType: { type: 'String' }, + offset: 0, }, { name: 'symbol', constant: true, parameters: [], returnType: { type: 'String' }, + offset: 0, }, decimalsFunction, { @@ -65,16 +77,17 @@ export const abi = (decimals: number): ABI => ({ constant: true, parameters: [], returnType: { type: 'Integer', decimals }, + offset: 0, }, { name: 'transfer', parameters: [ { - type: 'Address', + type: 'Hash160', name: 'from', }, { - type: 'Address', + type: 'Hash160', name: 'to', }, { @@ -84,17 +97,19 @@ export const abi = (decimals: number): ABI => ({ }, ], returnType: { type: 'Boolean' }, + offset: 0, }, { name: 'balanceOf', constant: true, parameters: [ { - type: 'Address', + type: 'Hash160', name: 'account', }, ], returnType: { type: 'Integer', decimals }, + offset: 0, }, ], events: [ @@ -102,12 +117,12 @@ export const abi = (decimals: number): ABI => ({ name: 'transfer', parameters: [ { - type: 'Address', + type: 'Hash160', name: 'from', optional: true, }, { - type: 'Address', + type: 'Hash160', name: 'to', optional: true, }, @@ -121,13 +136,29 @@ export const abi = (decimals: number): ABI => ({ ], }); +// TODO: check that the script/hash can/should be blank here +export const manifest = (decimals: number): ContractManifestClient => ({ + hash: common.uInt160ToString(blankHash), + groups: [], + supportedStandards: [], + abi: abi(decimals), + permissions: [], + trusts: '*', +}); + export const getDecimals = async ( client: Client, networksDefinition: SmartContractNetworksDefinition, network: NetworkType, ): Promise => { const decimalsBigNumber = await client - .smartContract({ networks: networksDefinition, abi: { functions: [decimalsFunction] } }) + .smartContract({ + networks: networksDefinition, + manifest: { + ...manifest(0), + abi: { hash: manifest(0).hash, events: [], methods: [decimalsFunction] }, + }, + }) .decimals({ network }); return decimalsBigNumber.toNumber(); @@ -140,5 +171,5 @@ export const createNEP5SmartContract = ( ): NEP5SmartContract => client.smartContract>({ networks: networksDefinition, - abi: abi(decimals), + manifest: manifest(decimals), }); diff --git a/packages/neo-one-client-core/src/paramUtils.ts b/packages/neo-one-client-core/src/paramUtils.ts deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/neo-one-client-core/src/provider/JSONRPCClient.ts b/packages/neo-one-client-core/src/provider/JSONRPCClient.ts index a93390912b..c7f9b4f730 100644 --- a/packages/neo-one-client-core/src/provider/JSONRPCClient.ts +++ b/packages/neo-one-client-core/src/provider/JSONRPCClient.ts @@ -1,27 +1,30 @@ import { - AccountJSON, AddressString, addressToScriptHash, - AssetJSON, + ApplicationLogJSON, BlockJSON, BufferString, CallReceiptJSON, ContractJSON, GetOptions, Hash256String, - InputJSON, + HeaderJSON, InvocationDataJSON, - InvocationResultJSON, + Nep5BalancesJSON, + Nep5TransfersJSON, NetworkSettingsJSON, - OutputJSON, Peer, PrivateNetworkSettings, RelayTransactionResultJSON, + SendRawTransactionResultJSON, StorageItemJSON, - TransactionJSON, TransactionReceiptJSON, + UnclaimedGASJSON, + ValidatorJSON, + VerboseTransactionJSON, + VerificationCostJSON, + VersionJSON, } from '@neo-one/client-common'; -import BigNumber from 'bignumber.js'; import { RelayTransactionError } from '../errors'; import { JSONRPCProvider, JSONRPCProviderManager } from './JSONRPCProvider'; @@ -32,32 +35,36 @@ export class JSONRPCClient { this.provider = provider; } - public async getAccount(address: AddressString): Promise { + public async getBlock(hashOrIndex: Hash256String | number, options: GetOptions = {}): Promise { + const { timeoutMS } = options; + return this.withInstance(async (provider) => provider.request({ - method: 'getaccountstate', - params: [address], + method: 'getblock', + params: [hashOrIndex, 1], + watchTimeoutMS: timeoutMS, }), ); } - public async getAsset(hash: Hash256String): Promise { + public async getNep5Balances(address: AddressString): Promise { return this.withInstance(async (provider) => provider.request({ - method: 'getassetstate', - params: [hash], + method: 'getnep5balances', + params: [addressToScriptHash(address)], }), ); } - public async getBlock(hashOrIndex: Hash256String | number, options: GetOptions = {}): Promise { - const { timeoutMS } = options; - + public async getNep5Transfers( + address: AddressString, + startTime?: number, + endTime?: number, + ): Promise { return this.withInstance(async (provider) => provider.request({ - method: 'getblock', - params: [hashOrIndex, 1], - watchTimeoutMS: timeoutMS, + method: 'getnep5transfers', + params: [addressToScriptHash(address), startTime, endTime], }), ); } @@ -70,6 +77,10 @@ export class JSONRPCClient { return this.withInstance(async (provider) => provider.request({ method: 'getblockcount' })); } + public async getFeePerByte(): Promise { + return this.withInstance(async (provider) => provider.request({ method: 'getfeeperbyte' })); + } + public async getContract(address: AddressString): Promise { return this.withInstance(async (provider) => provider.request({ @@ -79,11 +90,11 @@ export class JSONRPCClient { ); } - public async getMemPool(): Promise { + public async getMemPool(): Promise<{ readonly height: number; readonly verified: readonly string[] }> { return this.withInstance(async (provider) => provider.request({ method: 'getrawmempool' })); } - public async getTransaction(hash: Hash256String): Promise { + public async getTransaction(hash: Hash256String): Promise { return this.withInstance(async (provider) => provider.request({ method: 'getrawtransaction', @@ -92,20 +103,32 @@ export class JSONRPCClient { ); } - public async getUnspentOutput(input: InputJSON): Promise { + public async testInvokeRaw( + script: BufferString, + verifications: readonly BufferString[] = [], + ): Promise { return this.withInstance(async (provider) => provider.request({ - method: 'gettxout', - params: [input.txid, input.vout], + method: 'invokescript', + params: [script, ...verifications], }), ); } - public async testInvokeRaw(script: BufferString): Promise { + public async getVerificationCost(hash: AddressString, transaction: BufferString): Promise { return this.withInstance(async (provider) => provider.request({ - method: 'invokescript', - params: [script], + method: 'getverificationcost', + params: [hash, transaction], + }), + ); + } + + public async testTransaction(transaction: BufferString): Promise { + return this.withInstance(async (provider) => + provider.request({ + method: 'testtransaction', + params: [transaction], }), ); } @@ -128,40 +151,38 @@ export class JSONRPCClient { ); } - public async getOutput(input: InputJSON): Promise { - return this.withInstance(async (provider) => - provider.request({ - method: 'getoutput', - params: [input.txid, input.vout], - }), - ); - } - - public async getClaimAmount(input: InputJSON): Promise { + public async sendRawTransaction(value: BufferString): Promise { return this.withInstance(async (provider) => provider .request({ - method: 'getclaimamount', - params: [input.txid, input.vout], + method: 'sendrawtransaction', + params: [value], }) - .then((res) => new BigNumber(res)), + .catch((error) => { + const [message, code]: [string, string] = error.message.split(':'); + if (error.code === 'JSON_RPC' && code === '-110') { + throw new RelayTransactionError(message); + } + + throw error; + }), ); } - public async getAllStorage(address: AddressString): Promise { + public async getUnclaimedGas(address: AddressString): Promise { return this.withInstance(async (provider) => provider.request({ - method: 'getallstorage', - params: [addressToScriptHash(address)], + method: 'getunclaimedgas', + params: [address], }), ); } - public async testInvocation(value: BufferString): Promise { + public async getAllStorage(address: AddressString): Promise { return this.withInstance(async (provider) => provider.request({ - method: 'testinvocation', - params: [value], + method: 'getallstorage', + params: [addressToScriptHash(address)], }), ); } @@ -178,6 +199,62 @@ export class JSONRPCClient { ); } + public async getTransactionHeight(hash: Hash256String): Promise { + return this.withInstance(async (provider) => + provider.request({ + method: 'gettransactionheight', + params: [hash], + }), + ); + } + + public async getBlockHash(index: number): Promise { + return this.withInstance(async (provider) => + provider.request({ + method: 'getblockhash', + params: [index], + }), + ); + } + + public async getBlockHeader(hashOrIndex: Hash256String | number): Promise { + return this.withInstance(async (provider) => + provider.request({ + method: 'getblockheader', + params: [hashOrIndex, 1], + }), + ); + } + + public async getValidators(): Promise { + return this.withInstance(async (provider) => provider.request({ method: 'getvalidators' })); + } + + public async validateAddress(address: string): Promise<{ readonly address: string; readonly isvalid: boolean }> { + return this.withInstance(async (provider) => provider.request({ method: 'validateaddress', params: [address] })); + } + + public async getConnectionCount(): Promise { + return this.withInstance(async (provider) => provider.request({ method: 'getconnectioncount' })); + } + + public async getStorage(address: AddressString, key: BufferString): Promise { + return this.withInstance(async (provider) => provider.request({ method: 'getstorage', params: [address, key] })); + } + + public async getVersion(): Promise { + return this.withInstance(async (provider) => provider.request({ method: 'getversion' })); + } + + public async getApplicationLog(hash: Hash256String): Promise { + return this.withInstance(async (provider) => + provider.request({ + method: 'getapplicationlog', + params: [hash], + }), + ); + } + public async getInvocationData(hash: Hash256String): Promise { return this.withInstance(async (provider) => provider.request({ diff --git a/packages/neo-one-client-core/src/provider/JSONRPCHTTPProvider.ts b/packages/neo-one-client-core/src/provider/JSONRPCHTTPProvider.ts index 74fee06dda..0ebf294f98 100644 --- a/packages/neo-one-client-core/src/provider/JSONRPCHTTPProvider.ts +++ b/packages/neo-one-client-core/src/provider/JSONRPCHTTPProvider.ts @@ -1,5 +1,4 @@ -import { Span, SpanKind, tracer } from '@neo-one/client-switch'; -import { addAttributesToSpan, Labels } from '@neo-one/utils'; +import { Labels } from '@neo-one/utils'; // tslint:disable-next-line match-default-export-name import _fetch from 'cross-fetch'; import DataLoader from 'dataloader'; @@ -59,7 +58,6 @@ const instrumentFetch = async ( doFetch: (headers: Record) => Promise, endpoint: string, type: 'fetch' | 'watch', - span: Span, ) => { // tslint:disable-next-line: no-any const headers: Record = { @@ -71,33 +69,15 @@ const instrumentFetch = async ( [Labels.JSONRPC_TYPE]: type, }; - addAttributesToSpan(span, labels); - + let status = -1; try { - if (tracer.active) { - tracer.propagation.inject( - { - setHeader: (name: string, value: string) => { - // tslint:disable-next-line: no-object-mutation - headers[name] = value; - }, - }, - span.spanContext, - ); - } - - let status = -1; - try { - const resp = await doFetch(headers); - status = resp.status; - logger('%o', { level: 'debug', name: 'http_client_request', ...labels }); + const resp = await doFetch(headers); + status = resp.status; + logger('%o', { level: 'debug', name: 'http_client_request', ...labels }); - return resp; - } finally { - span.addAttribute(Labels.HTTP_STATUS_CODE, status); - } + return resp; } catch (error) { - logger('%o', { level: 'error', name: 'http_client_request', ...labels, error: error.message }); + logger('%o', { level: 'error', name: 'http_client_request', ...labels, error: error.message, status }); throw error; } }; @@ -109,12 +89,11 @@ const doRequest = async ({ tries, }: { readonly endpoint: string; - readonly requests: ReadonlyArray<{ readonly span: Span; readonly request: object }>; + readonly requests: ReadonlyArray<{ readonly request: object }>; readonly timeoutMS: number; readonly tries: number; }) => { const body = JSON.stringify(requests.map((req) => req.request)); - const span = requests[0].span; let remainingTries = tries; let parseErrorTries = 3; @@ -143,7 +122,6 @@ const doRequest = async ({ ), endpoint, 'fetch', - span, ); if (!response.ok) { @@ -199,12 +177,10 @@ const watchSingle = async ({ endpoint, req, timeoutMS, - span, }: { readonly endpoint: string; readonly req: object; readonly timeoutMS: number; - readonly span: Span; // tslint:disable-next-line: no-any }): Promise => { const response = await instrumentFetch( @@ -220,7 +196,6 @@ const watchSingle = async ({ ), endpoint, 'watch', - span, ); if (!response.ok) { @@ -237,7 +212,6 @@ const watchSingle = async ({ endpoint, req, timeoutMS, - span, }); } throw new HTTPError(response.status, text); @@ -252,7 +226,7 @@ const watchSingle = async ({ export class JSONRPCHTTPProvider extends JSONRPCProvider { public readonly endpoint: string; // tslint:disable-next-line no-any - public readonly batcher: DataLoader<{ readonly span: Span; readonly request: any }, any>; + public readonly batcher: DataLoader<{ readonly request: any }, any>; public constructor(endpoint: string) { super(); @@ -283,28 +257,23 @@ export class JSONRPCHTTPProvider extends JSONRPCProvider { [Labels.SPAN_KIND]: 'client', }; - return tracer.startRootSpan({ name: 'json_rpc_client_request', kind: SpanKind.CLIENT }, async (span) => { - addAttributesToSpan(span, labels); - - try { - const result = await this.requestInternal(req, span); - logger({ level: 'debug', name: 'jsonrpc_client_request', ...labels }); + try { + const result = await this.requestInternal(req); + logger({ level: 'debug', name: 'jsonrpc_client_request', ...labels }); - return result; - } catch (error) { - logger({ level: 'error', name: 'jsonrpc_client_request', ...labels, error: error.message }); + return result; + } catch (error) { + logger({ level: 'error', name: 'jsonrpc_client_request', ...labels, error: error.message }); - throw error; - } finally { - span.end(); - } - }); + throw error; + } } // tslint:disable-next-line no-any - private async requestInternal(req: JSONRPCRequest, span: Span): Promise { + private async requestInternal(req: JSONRPCRequest): Promise { let response; const { watchTimeoutMS, params = [] } = req; + if (watchTimeoutMS !== undefined) { response = await watchSingle({ endpoint: this.endpoint, @@ -314,12 +283,10 @@ export class JSONRPCHTTPProvider extends JSONRPCProvider { method: req.method, params: params.concat([watchTimeoutMS]), }, - span, timeoutMS: watchTimeoutMS, }); } else { response = await this.batcher.load({ - span, request: { jsonrpc: '2.0', id: 1, diff --git a/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts b/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts index 0ddad2da02..c0ed5281b4 100644 --- a/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts +++ b/packages/neo-one-client-core/src/provider/NEOONEDataProvider.ts @@ -1,71 +1,72 @@ /// import { Account, - AccountJSON, AddressString, - Asset, - AssetJSON, - AssetType, - AssetTypeJSON, + ApplicationLogJSON, Attribute, AttributeJSON, Block, BlockJSON, - common, ConfirmedTransaction, Contract, + ContractABI, + ContractABIJSON, + ContractEventDescriptor, + ContractEventDescriptorJSON, + ContractGroup, + ContractGroupJSON, ContractJSON, + ContractManifest, + ContractManifestJSON, + ContractMethodDescriptor, + ContractMethodDescriptorJSON, + ContractParameterDefinition, + ContractParameterDefinitionJSON, ContractParameterType, ContractParameterTypeJSON, + ContractPermission, + ContractPermissionJSON, DeveloperProvider, + FeelessTransactionModel, GetOptions, Hash256String, - Input, - InputJSON, - InputOutput, - InvocationDataJSON, - InvocationTransactionJSON, - InvocationTransactionModel, IterOptions, JSONHelper, NetworkSettings, NetworkSettingsJSON, NetworkType, - Output, - OutputJSON, Peer, PrivateNetworkSettings, - RawAction, + RawApplicationLogData, RawCallReceipt, - RawInvocationData, - RawStorageChange, RelayTransactionResult, RelayTransactionResultJSON, ScriptBuilderParam, scriptHashToAddress, - StorageChangeJSON, + Signer, + SignerJSON, StorageItem, StorageItemJSON, + toAttributeType, + toVerifyResult, Transaction, - TransactionBase, TransactionJSON, + TransactionModel, TransactionReceipt, - utils, - VerifyTransactionResult, - VerifyTransactionResultJSON, + TransactionReceiptJSON, + VerifyResultJSON, + VerifyResultModel, + UInt160Hex, } from '@neo-one/client-common'; import { utils as commonUtils } from '@neo-one/utils'; import { AsyncIterableX } from '@reactivex/ix-es2015-cjs/asynciterable/asynciterablex'; -import { flatMap } from '@reactivex/ix-es2015-cjs/asynciterable/pipe/flatmap'; import { flatten } from '@reactivex/ix-es2015-cjs/asynciterable/pipe/flatten'; import { map } from '@reactivex/ix-es2015-cjs/asynciterable/pipe/map'; import BigNumber from 'bignumber.js'; import debug from 'debug'; -import _ from 'lodash'; import { AsyncBlockIterator } from '../AsyncBlockIterator'; import { clientUtils } from '../clientUtils'; -import { MissingTransactionDataError } from '../errors'; -import { convertAction, convertCallReceipt, convertInvocationResult } from './convert'; +import { convertCallReceipt, convertNotification, convertStackItem } from './convert'; import { JSONRPCClient } from './JSONRPCClient'; import { JSONRPCHTTPProvider } from './JSONRPCHTTPProvider'; import { JSONRPCProvider, JSONRPCProviderManager } from './JSONRPCProvider'; @@ -99,60 +100,16 @@ export class NEOONEDataProvider implements DeveloperProvider { this.mutableClient = new JSONRPCClient(new JSONRPCHTTPProvider(rpcURL)); } - public async getUnclaimed( - address: AddressString, - ): Promise<{ readonly unclaimed: readonly Input[]; readonly amount: BigNumber }> { + public async getUnclaimed(address: AddressString): Promise { return this.capture(async () => { - const account = await this.getAccountInternal(address); - const amounts = await Promise.all( - account.unclaimed.map(async (input) => this.mutableClient.getClaimAmount(input)), - ); - - return { - unclaimed: this.convertInputs(account.unclaimed), - amount: amounts.reduce((acc, amount) => acc.plus(amount), utils.ZERO_BIG_NUMBER), - }; - }, 'neo_get_unclaimed'); - } - - public async getClaimAmount(input: Input): Promise { - return this.capture( - async () => this.mutableClient.getClaimAmount({ txid: input.hash, vout: input.index }), - 'neo_get_claim_amount', - ); - } - - public async getUnspentOutputs(address: AddressString): Promise { - return this.capture(async () => { - const account = await this.getAccountInternal(address); - const outputs = await Promise.all( - account.unspent.map( - async (input): Promise => { - const outputJSON = await this.mutableClient.getUnspentOutput(input); - - if (outputJSON === undefined) { - return undefined; - } + const result = await this.mutableClient.getUnclaimedGas(address); - const output = this.convertOutput(outputJSON); - - return { - asset: output.asset, - value: output.value, - address: output.address, - hash: input.txid, - index: input.vout, - }; - }, - ), - ); - - return outputs.filter(commonUtils.notNull); - }, 'neo_get_unspent'); + return new BigNumber(result.unclaimed); + }, 'neo_get_unclaimed'); } - public async relayTransaction(transaction: string): Promise { - const result = await this.mutableClient.relayTransaction(transaction); + public async relayTransaction(transaction: TransactionModel): Promise { + const result = await this.mutableClient.relayTransaction(transaction.serializeWire().toString('hex')); return this.convertRelayTransactionResult(result); } @@ -163,56 +120,49 @@ export class NEOONEDataProvider implements DeveloperProvider { return { ...result, globalIndex: new BigNumber(result.globalIndex) }; } - public async getInvocationData(hash: Hash256String): Promise { - const [invocationData, transaction] = await Promise.all([ - this.mutableClient.getInvocationData(hash), - this.mutableClient.getTransaction(hash), - ]); + public async getApplicationLogData(hash: Hash256String): Promise { + const applicationLogData = await this.mutableClient.getApplicationLog(hash); - if (transaction.data === undefined) { - throw new MissingTransactionDataError(hash); - } + return this.convertApplicationLogData(applicationLogData); + } - return this.convertInvocationData( - invocationData, - transaction.data.blockHash, - transaction.data.blockIndex, - hash, - transaction.data.transactionIndex, - ); + public async testInvoke(script: Buffer): Promise { + const receipt = await this.mutableClient.testInvokeRaw(script.toString('hex')); + + return convertCallReceipt(receipt); } - public async testInvoke(transaction: string): Promise { - const receipt = await this.mutableClient.testInvocation(transaction); + public async testTransaction(transaction: TransactionModel): Promise { + const receipt = await this.mutableClient.testTransaction(transaction.serializeWire().toString('hex')); return convertCallReceipt(receipt); } - public async getAccount(address: AddressString): Promise { - const account = await this.getAccountInternal(address); + public async getBlock(hashOrIndex: Hash256String | number, options?: GetOptions): Promise { + const block = await this.mutableClient.getBlock(hashOrIndex, options); - return { - address, - balances: account.balances.reduce( - (acc, { asset, value }) => ({ - ...acc, - [asset]: new BigNumber(value), - }), - {}, - ), - }; + return this.convertBlock(block); } - public async getAsset(hash: Hash256String): Promise { - const asset = await this.mutableClient.getAsset(hash); + public async getFeePerByte(): Promise { + const feePerByte = await this.mutableClient.getFeePerByte(); - return this.convertAsset(asset); + return new BigNumber(feePerByte); } - public async getBlock(hashOrIndex: Hash256String | number, options?: GetOptions): Promise { - const block = await this.mutableClient.getBlock(hashOrIndex, options); + public async getVerificationCost( + hash: AddressString, + transaction: TransactionModel, + ): Promise<{ + readonly fee: BigNumber; + readonly size: number; + }> { + const result = await this.mutableClient.getVerificationCost(hash, transaction.serializeWire().toString('hex')); - return this.convertBlock(block); + return { + fee: new BigNumber(result.fee), + size: result.size, + }; } public iterBlocks(options: IterOptions = {}): AsyncIterable { @@ -240,7 +190,7 @@ export class NEOONEDataProvider implements DeveloperProvider { return this.convertContract(contract); } - public async getMemPool(): Promise { + public async getMemPool(): Promise<{ readonly height: number; readonly verified: readonly Hash256String[] }> { return this.mutableClient.getMemPool(); } @@ -250,15 +200,6 @@ export class NEOONEDataProvider implements DeveloperProvider { return this.convertTransaction(transaction); } - public async getOutput(input: Input): Promise { - const output = await this.mutableClient.getOutput({ - txid: input.hash, - vout: input.index, - }); - - return this.convertOutput(output); - } - public async getConnectedPeers(): Promise { return this.mutableClient.getConnectedPeers(); } @@ -269,40 +210,18 @@ export class NEOONEDataProvider implements DeveloperProvider { return this.convertNetworkSettings(settings); } - public iterActionsRaw(options: IterOptions = {}): AsyncIterable { - return AsyncIterableX.from(this.iterBlocks(options)).pipe( - flatMap(async (block) => { - const actions = _.flatten( - block.transactions.map((transaction) => { - if (transaction.type === 'InvocationTransaction') { - return [...transaction.invocationData.actions]; - } - - return []; - }), - ); - - return AsyncIterableX.of(...actions); - }), - ); - } - public async call( - contract: AddressString, + contract: UInt160Hex, method: string, params: ReadonlyArray, ): Promise { - const testTransaction = new InvocationTransactionModel({ - version: 1, - gas: common.TEN_THOUSAND_FIXED8, - script: clientUtils.getInvokeMethodScript({ - address: contract, - method, - params, - }), + const script = clientUtils.getInvokeMethodScript({ + scriptHash: contract, + method, + params, }); - return this.testInvoke(testTransaction.serializeWire().toString('hex')); + return this.testInvoke(script); } public async runConsensusNow(): Promise { @@ -345,6 +264,21 @@ export class NEOONEDataProvider implements DeveloperProvider { ); } + public async getAccount(address: AddressString): Promise { + const balances = await this.mutableClient.getNep5Balances(address); + + return { + address, + balances: balances.balance.reduce( + (acc, { assethash, amount }) => ({ + ...acc, + [assethash]: new BigNumber(amount), + }), + {}, + ), + }; + } + private convertStorageItem(storageItem: StorageItemJSON): StorageItem { return { address: scriptHashToAddress(storageItem.hash), @@ -359,215 +293,143 @@ export class NEOONEDataProvider implements DeveloperProvider { hash: block.hash, previousBlockHash: block.previousblockhash, merkleRoot: block.merkleroot, - time: block.time, + time: new BigNumber(block.time), + consensusData: + block.consensusdata === undefined + ? undefined + : { + primaryIndex: block.consensusdata.primary, + nonce: block.consensusdata.nonce, + }, index: block.index, - nonce: block.nonce, nextConsensus: block.nextconsensus, - script: block.script, + witness: block.witnesses[0], + witnesses: block.witnesses, size: block.size, transactions: block.tx.map((transaction) => this.convertConfirmedTransaction(transaction)), }; } private convertTransaction(transaction: TransactionJSON): Transaction { - return this.convertTransactionBase( - transaction, - (invocation, transactionBase) => ({ - ...transactionBase, - type: 'InvocationTransaction', - script: invocation.script, - gas: new BigNumber(invocation.gas), - }), - /* istanbul ignore next */ - (converted) => converted, - ); + return { + version: transaction.version, + nonce: transaction.nonce, + sender: transaction.sender ? transaction.sender : undefined, + hash: transaction.hash, + size: transaction.size, + validUntilBlock: transaction.validuntilblock, + attributes: this.convertAttributes(transaction.attributes), + systemFee: new BigNumber(transaction.sysfee), + networkFee: new BigNumber(transaction.netfee), + signers: transaction.signers.map((signer) => this.convertSigner(signer)), + script: transaction.script, + witnesses: transaction.witnesses, + }; } - private convertConfirmedTransaction(transaction: TransactionJSON): ConfirmedTransaction { - if (transaction.data === undefined) { - /* istanbul ignore next */ - throw new Error('Unexpected undefined data'); - } - const data = { - blockHash: transaction.data.blockHash, - blockIndex: transaction.data.blockIndex, - transactionIndex: transaction.data.transactionIndex, - globalIndex: JSONHelper.readUInt64(transaction.data.globalIndex), + private convertTransactionReceipt(receipt: TransactionReceiptJSON): TransactionReceipt { + return { + blockIndex: receipt.blockIndex, + blockHash: receipt.blockHash, + blockTime: receipt.blockTime, + transactionHash: receipt.transactionHash, + globalIndex: JSONHelper.readUInt64(receipt.globalIndex), + confirmations: receipt.confirmations, + transactionIndex: receipt.transactionIndex, }; - - return this.convertTransactionBase( - transaction, - (invocation, transactionBase) => { - /* istanbul ignore next */ - if (invocation.invocationData === undefined || transaction.data === undefined) { - throw new Error('Unexpected undefined data'); - } - - const invocationData = this.convertInvocationData( - invocation.invocationData, - transaction.data.blockHash, - transaction.data.blockIndex, - transaction.txid, - transaction.data.transactionIndex, - ); - - return { - ...transactionBase, - type: 'InvocationTransaction', - script: invocation.script, - gas: new BigNumber(invocation.gas), - receipt: data, - invocationData, - }; - }, - // tslint:disable-next-line no-any - (converted) => ({ ...converted, receipt: data } as any), - ); } - private convertTransactionBase( - transaction: TransactionJSON, - convertInvocation: (invocation: InvocationTransactionJSON, transactionBase: TransactionBase) => Result, - convertTransaction: (transaction: Transaction) => Result, - ): Result { - const transactionBase = { - hash: transaction.txid, - size: transaction.size, - version: transaction.version, - attributes: this.convertAttributes(transaction.attributes), - inputs: this.convertInputs(transaction.vin), - outputs: this.convertOutputs(transaction.vout), - scripts: transaction.scripts, - systemFee: new BigNumber(transaction.sys_fee), - networkFee: new BigNumber(transaction.net_fee), + private convertSigner(signer: SignerJSON): Signer { + return { + account: scriptHashToAddress(signer.account), + scopes: signer.scopes, + allowedContracts: signer.allowedcontracts?.map(scriptHashToAddress), + allowedGroups: signer.allowedgroups, }; + } - let converted: Transaction; - switch (transaction.type) { - case 'ClaimTransaction': - converted = { - ...transactionBase, - type: 'ClaimTransaction', - claims: this.convertInputs(transaction.claims), - }; - break; - case 'ContractTransaction': - converted = { - ...transactionBase, - type: 'ContractTransaction', - }; - break; - case 'EnrollmentTransaction': - converted = { - ...transactionBase, - type: 'EnrollmentTransaction', - publicKey: transaction.pubkey, - }; - break; - case 'InvocationTransaction': - return convertInvocation(transaction, transactionBase); - case 'IssueTransaction': - converted = { - ...transactionBase, - type: 'IssueTransaction', - }; - break; - case 'MinerTransaction': - converted = { - ...transactionBase, - type: 'MinerTransaction', - nonce: transaction.nonce, - }; - break; - case 'PublishTransaction': - converted = { - ...transactionBase, - type: 'PublishTransaction', - contract: this.convertContract(transaction.contract), - }; - break; - case 'RegisterTransaction': - converted = { - ...transactionBase, - type: 'RegisterTransaction', - asset: { - type: this.convertAssetType(transaction.asset.type), - name: Array.isArray(transaction.asset.name) - ? /* istanbul ignore next */ transaction.asset.name[0].name - : transaction.asset.name, - amount: new BigNumber(transaction.asset.amount), - precision: transaction.asset.precision, - owner: transaction.asset.owner, - admin: transaction.asset.admin, - }, - }; - break; - case 'StateTransaction': - converted = { - ...transactionBase, - type: 'StateTransaction', - }; - break; - /* istanbul ignore next */ - default: - commonUtils.assertNever(transaction); - throw new Error('For TS'); - } - - return convertTransaction(converted); + private convertConfirmedTransaction(transaction: TransactionJSON): ConfirmedTransaction { + return { + ...this.convertTransaction(transaction), + receipt: transaction.receipt ? this.convertTransactionReceipt(transaction.receipt) : undefined, + }; } private convertAttributes(attributes: readonly AttributeJSON[]): readonly Attribute[] { return attributes.map((attribute) => ({ - // tslint:disable-next-line no-any - usage: attribute.usage as any, - data: attribute.usage === 'Script' ? scriptHashToAddress(attribute.data) : attribute.data, + type: toAttributeType(attribute.type), })); } - private convertInputs(inputs: readonly InputJSON[]): readonly Input[] { - return inputs.map((input) => this.convertInput(input)); + private convertContract(contract: ContractJSON): Contract { + return { + id: contract.id, + script: contract.script, + hash: contract.hash, + manifest: this.convertContractManifest(contract.manifest), + }; + } + + private convertContractManifest(manifest: ContractManifestJSON): ContractManifest { + return { + groups: manifest.groups.map(this.convertContractGroup), + supportedStandards: manifest.supportedstandards, + abi: this.convertContractABI(manifest.abi), + permissions: manifest.permissions.map(this.convertContractPermission), + trusts: manifest.trusts, + extra: manifest.extra, + }; } - private convertInput(input: InputJSON): Input { + private convertContractGroup(group: ContractGroupJSON): ContractGroup { return { - hash: input.txid, - index: input.vout, + publicKey: group.publicKey, + signature: group.signature, }; } - private convertOutputs(outputs: readonly OutputJSON[]): readonly Output[] { - return outputs.map((output) => this.convertOutput(output)); + private convertContractPermission(permission: ContractPermissionJSON): ContractPermission { + return { + contract: permission.contract, + methods: permission.methods, + }; } - private convertOutput(output: OutputJSON): Output { + private convertContractABI(abi: ContractABIJSON): ContractABI { return { - asset: output.asset, - address: output.address, - value: new BigNumber(output.value), + hash: abi.hash, + methods: abi.methods.map(this.convertContractMethodDescriptor), + events: abi.events.map(this.convertContractEventDescriptor), }; } - private convertContract(contract: ContractJSON): Contract { + private convertContractEventDescriptor(event: ContractEventDescriptorJSON): ContractEventDescriptor { return { - version: contract.version, - address: scriptHashToAddress(contract.hash), - script: contract.script, - parameters: contract.parameters.map((param) => this.convertContractParameterType(param)), - returnType: this.convertContractParameterType(contract.returntype), - name: contract.name, - codeVersion: contract.code_version, - author: contract.author, - email: contract.email, - description: contract.description, - storage: contract.properties.storage, - dynamicInvoke: contract.properties.dynamic_invoke, - payable: contract.properties.payable, + name: event.name, + parameters: event.parameters.map(this.convertContractParameterDefinition), + }; + } + + private convertContractMethodDescriptor(method: ContractMethodDescriptorJSON): ContractMethodDescriptor { + return { + name: method.name, + parameters: method.parameters.map(this.convertContractParameterDefinition), + returnType: this.convertContractParameterType(method.returntype), + offset: method.offset, + }; + } + + private convertContractParameterDefinition(param: ContractParameterDefinitionJSON): ContractParameterDefinition { + return { + type: this.convertContractParameterType(param.type), + name: param.name, }; } private convertContractParameterType(param: ContractParameterTypeJSON): ContractParameterType { switch (param) { + case 'Any': + return 'Any'; case 'Signature': return 'Signature'; case 'Boolean': @@ -575,7 +437,7 @@ export class NEOONEDataProvider implements DeveloperProvider { case 'Integer': return 'Integer'; case 'Hash160': - return 'Address'; + return 'Hash160'; case 'Hash256': return 'Hash256'; case 'ByteArray': @@ -599,142 +461,44 @@ export class NEOONEDataProvider implements DeveloperProvider { } } - private convertInvocationData( - data: InvocationDataJSON, - blockHash: string, - blockIndex: number, - transactionHash: string, - transactionIndex: number, - ): RawInvocationData { - return { - result: convertInvocationResult(data.result), - asset: data.asset === undefined ? data.asset : this.convertAsset(data.asset), - contracts: data.contracts.map((contract) => this.convertContract(contract)), - deletedContractAddresses: data.deletedContractHashes.map(scriptHashToAddress), - migratedContractAddresses: data.migratedContractHashes.map( - ([hash0, hash1]) => [scriptHashToAddress(hash0), scriptHashToAddress(hash1)] as const, - ), - actions: data.actions.map((action, idx) => - convertAction(blockHash, blockIndex, transactionHash, transactionIndex, idx, action), - ), - storageChanges: data.storageChanges.map((storageChange) => this.convertStorageChange(storageChange)), - }; - } - - private convertStorageChange(storageChange: StorageChangeJSON): RawStorageChange { - if (storageChange.type === 'Add') { - return { - type: 'Add', - address: scriptHashToAddress(storageChange.hash), - key: storageChange.key, - value: storageChange.value, - }; - } - - if (storageChange.type === 'Modify') { - return { - type: 'Modify', - address: scriptHashToAddress(storageChange.hash), - key: storageChange.key, - value: storageChange.value, - }; - } - - return { - type: 'Delete', - address: scriptHashToAddress(storageChange.hash), - key: storageChange.key, - }; - } - - private convertAsset(asset: AssetJSON): Asset { - const assetName = asset.name; - let name; - if (Array.isArray(assetName)) { - const enName = assetName.find(({ lang }) => lang === 'en'); - name = enName === undefined ? assetName[0].name : enName.name; - } else { - name = assetName; - } - + private convertApplicationLogData(data: ApplicationLogJSON): RawApplicationLogData { return { - hash: asset.id, - type: this.convertAssetType(asset.type), - name, - amount: new BigNumber(asset.amount), - available: new BigNumber(asset.available), - precision: asset.precision, - owner: asset.owner, - admin: asset.admin, - issuer: asset.issuer, - expiration: asset.expiration, - frozen: asset.frozen, + txId: data?.txid, + trigger: data.trigger, + vmState: data.vmstate, + gasConsumed: new BigNumber(data.gasconsumed), + stack: typeof data.stack === 'string' ? data.stack : data.stack.map(convertStackItem), + notifications: data.notifications.map(convertNotification), }; } - private convertAssetType(assetType: AssetTypeJSON): AssetType { - switch (assetType) { - case 'CreditFlag': - return 'Credit'; - case 'DutyFlag': - return 'Duty'; - case 'GoverningToken': - return 'Governing'; - case 'UtilityToken': - return 'Utility'; - case 'Currency': - return 'Currency'; - case 'Share': - return 'Share'; - case 'Invoice': - return 'Invoice'; - case 'Token': - return 'Token'; - default: - /* istanbul ignore next */ - commonUtils.assertNever(assetType); - /* istanbul ignore next */ - throw new Error('For TS'); - } - } - - private async getAccountInternal(address: AddressString): Promise { - return this.mutableClient.getAccount(address); - } - private convertNetworkSettings(settings: NetworkSettingsJSON): NetworkSettings { return { - issueGASFee: new BigNumber(settings.issueGASFee), + blockCount: settings.blockcount, + decrementInterval: settings.decrementinterval, + generationAmount: settings.generationamount, + privateKeyVersion: settings.privatekeyversion, + standbyvalidators: settings.standbyvalidators, + messageMagic: settings.messagemagic, + addressVersion: settings.addressversion, + standbyCommittee: settings.standbycommittee, + committeeMemberscount: settings.committeememberscount, + validatorsCount: settings.validatorscount, + millisecondsPerBlock: settings.millisecondsperblock, + memoryPoolMaxTransactions: settings.memorypoolmaxtransactions, }; } private convertRelayTransactionResult(result: RelayTransactionResultJSON): RelayTransactionResult { const transaction = this.convertTransaction(result.transaction); - const verifyResult = - result.verifyResult === undefined ? undefined : this.convertVerifyResult(transaction.hash, result.verifyResult); + const verifyResult = result.verifyResult === undefined ? undefined : this.convertVerifyResult(result.verifyResult); return { transaction, verifyResult }; } /* istanbul ignore next */ - private convertVerifyResult(transactionHash: string, result: VerifyTransactionResultJSON): VerifyTransactionResult { - return { - verifications: result.verifications.map((verification) => ({ - failureMessage: verification.failureMessage, - witness: verification.witness, - address: scriptHashToAddress(verification.hash), - actions: verification.actions.map((action, idx) => - convertAction( - common.uInt256ToString(common.bufferToUInt256(Buffer.alloc(32, 0))), - -1, - transactionHash, - -1, - idx, - action, - ), - ), - })), - }; + private convertVerifyResult(result: VerifyResultJSON): VerifyResultModel { + return toVerifyResult(result); } private async capture(func: () => Promise, title: string): Promise { diff --git a/packages/neo-one-client-core/src/provider/NEOONEProvider.ts b/packages/neo-one-client-core/src/provider/NEOONEProvider.ts index deaf5d796d..b2bd704da6 100644 --- a/packages/neo-one-client-core/src/provider/NEOONEProvider.ts +++ b/packages/neo-one-client-core/src/provider/NEOONEProvider.ts @@ -2,21 +2,20 @@ import { Account, AddressString, Block, + FeelessTransactionModel, GetOptions, Hash256String, - Input, - InputOutput, IterOptions, NetworkSettings, NetworkType, - Output, - RawAction, + RawApplicationLogData, RawCallReceipt, - RawInvocationData, RelayTransactionResult, ScriptBuilderParam, Transaction, + TransactionModel, TransactionReceipt, + UInt160Hex, } from '@neo-one/client-common'; import BigNumber from 'bignumber.js'; import { BehaviorSubject, Observable } from 'rxjs'; @@ -58,18 +57,11 @@ export class NEOONEProvider implements Provider { this.networksInternal$.next(networks); } - public async getUnclaimed( - network: NetworkType, - address: AddressString, - ): Promise<{ readonly unclaimed: readonly Input[]; readonly amount: BigNumber }> { + public async getUnclaimed(network: NetworkType, address: AddressString): Promise { return this.getProvider(network).getUnclaimed(address); } - public async getUnspentOutputs(network: NetworkType, address: AddressString): Promise { - return this.getProvider(network).getUnspentOutputs(address); - } - - public async relayTransaction(network: NetworkType, transaction: string): Promise { + public async relayTransaction(network: NetworkType, transaction: TransactionModel): Promise { return this.getProvider(network).relayTransaction(transaction); } @@ -81,17 +73,36 @@ export class NEOONEProvider implements Provider { return this.getProvider(network).getTransactionReceipt(hash, options); } - public async getInvocationData(network: NetworkType, hash: Hash256String): Promise { - return this.getProvider(network).getInvocationData(hash); + public async getApplicationLogData(network: NetworkType, hash: Hash256String): Promise { + return this.getProvider(network).getApplicationLogData(hash); + } + + public async testInvoke(network: NetworkType, script: Buffer): Promise { + return this.getProvider(network).testInvoke(script); + } + + public async getFeePerByte(network: NetworkType): Promise { + return this.getProvider(network).getFeePerByte(); + } + + public async getVerificationCost( + network: NetworkType, + hash: UInt160Hex, + transaction: TransactionModel, + ): Promise<{ + readonly fee: BigNumber; + readonly size: number; + }> { + return this.getProvider(network).getVerificationCost(hash, transaction); } - public async testInvoke(network: NetworkType, transaction: string): Promise { - return this.getProvider(network).testInvoke(transaction); + public async testTransaction(network: NetworkType, transaction: TransactionModel): Promise { + return this.getProvider(network).testTransaction(transaction); } public async call( network: NetworkType, - contract: AddressString, + contract: UInt160Hex, method: string, params: ReadonlyArray, ): Promise { @@ -110,14 +121,6 @@ export class NEOONEProvider implements Provider { return this.getProvider(network).getTransaction(hash); } - public async getOutput(network: NetworkType, input: Input): Promise { - return this.getProvider(network).getOutput(input); - } - - public async getClaimAmount(network: NetworkType, input: Input): Promise { - return this.getProvider(network).getClaimAmount(input); - } - public read(network: NetworkType): NEOONEDataProvider { return this.getProvider(network); } @@ -126,10 +129,6 @@ export class NEOONEProvider implements Provider { return this.getProvider(network).getAccount(address); } - public iterActionsRaw(network: NetworkType, options?: IterOptions): AsyncIterable { - return this.getProvider(network).iterActionsRaw(options); - } - public iterBlocks(network: NetworkType, options: IterOptions = {}): AsyncIterable { return this.getProvider(network).iterBlocks(options); } diff --git a/packages/neo-one-client-core/src/provider/convert.ts b/packages/neo-one-client-core/src/provider/convert.ts index bbd5d12913..c4e4351195 100644 --- a/packages/neo-one-client-core/src/provider/convert.ts +++ b/packages/neo-one-client-core/src/provider/convert.ts @@ -1,15 +1,19 @@ import { ActionJSON, CallReceiptJSON, + common, ContractParameter, ContractParameterJSON, InvocationResultJSON, JSONHelper, + NewRawNotification, + NotificationJSON, RawAction, RawCallReceipt, RawInvocationResult, + RawStackItem, scriptHashToAddress, - VMState, + StackItemJSON, } from '@neo-one/client-common'; import { utils } from '@neo-one/utils'; import BigNumber from 'bignumber.js'; @@ -17,17 +21,49 @@ import { BN } from 'bn.js'; export function convertCallReceipt(receipt: CallReceiptJSON): RawCallReceipt { return { - result: convertInvocationResult(receipt.result), - actions: receipt.actions.map((action, idx) => - convertAction( - '0x​​​​​0000000000000000000000000000000000000000000000000000000000000000​​​​​', - 0, - '0x​​​​​0000000000000000000000000000000000000000000000000000000000000000​​​​​', - 0, - idx, - action, - ), - ), + script: JSONHelper.readBuffer(receipt.script), + state: receipt.state, + gasConsumed: common.fixedToDecimal(new BN(receipt.gasconsumed), 0), + stack: typeof receipt.stack === 'string' ? receipt.stack : receipt.stack.map(convertStackItem), + notifications: receipt.notifications.map(convertNotification), + }; +} + +export function convertStackItem(item: StackItemJSON): RawStackItem { + switch (item.type) { + case 'Any': + return { type: 'Any', value: undefined }; + case 'Boolean': + return { type: 'Boolean', value: item.value }; + case 'Pointer': + return { type: 'Pointer', value: item.value }; + case 'Integer': + return { type: 'Integer', value: new BigNumber(item.value) }; + case 'Buffer': + return { type: 'Buffer', value: Buffer.from(item.value, 'hex') }; + case 'ByteString': + return { type: 'ByteString', value: Buffer.from(item.value, 'base64').toString('ascii') }; + case 'Array': + return { type: 'Array', value: item.value.map(convertStackItem) }; + case 'Map': + return { + type: 'Map', + value: item.value.map(({ key, value }) => [ + convertStackItem(key), + convertStackItem(value), + ]), + }; + default: + utils.assertNever(item); + throw new Error('Problem converting stack item'); + } +} + +export function convertNotification(notification: NotificationJSON): NewRawNotification { + return { + scriptHash: common.stringToUInt160(notification.scripthash), + eventName: notification.eventname, + state: typeof notification.state === 'string' ? notification.state : notification.state.map(convertStackItem), }; } @@ -69,13 +105,14 @@ export function convertAction( } export function convertInvocationResult(result: InvocationResultJSON): RawInvocationResult { - if (result.state === VMState.Fault) { + if (result.state === 'FAULT') { return { state: 'FAULT', gasConsumed: new BigNumber(result.gas_consumed), gasCost: new BigNumber(result.gas_cost), stack: convertContractParameters(result.stack), message: result.message, + script: result.script, }; } @@ -84,6 +121,7 @@ export function convertInvocationResult(result: InvocationResultJSON): RawInvoca gasConsumed: new BigNumber(result.gas_consumed), gasCost: new BigNumber(result.gas_cost), stack: convertContractParameters(result.stack), + script: result.script, }; } @@ -93,10 +131,17 @@ export function convertContractParameters(parameters: readonly ContractParameter export function convertContractParameter(parameter: ContractParameterJSON): ContractParameter { switch (parameter.type) { + case 'Any': + return { + type: 'Any', + value: undefined, + name: parameter.name, + }; case 'Array': return { type: 'Array', value: convertContractParameters(parameter.value), + name: parameter.name, }; case 'Boolean': return parameter; @@ -104,11 +149,13 @@ export function convertContractParameter(parameter: ContractParameterJSON): Cont return { type: 'Buffer', value: parameter.value, + name: parameter.name, }; case 'Hash160': return { - type: 'Address', + type: 'Hash160', value: scriptHashToAddress(parameter.value), + name: parameter.name, }; case 'Hash256': return parameter; @@ -116,15 +163,18 @@ export function convertContractParameter(parameter: ContractParameterJSON): Cont return { type: 'Integer', value: new BN(parameter.value, 10), + name: parameter.name, }; case 'InteropInterface': return parameter; case 'Map': return { type: 'Map', - value: parameter.value.map( - ([key, val]) => [convertContractParameter(key), convertContractParameter(val)] as const, - ), + value: parameter.value.map(([key, val]) => [ + convertContractParameter(key), + convertContractParameter(val), + ]), + name: parameter.name, }; case 'PublicKey': return parameter; diff --git a/packages/neo-one-client-core/src/sc/common.ts b/packages/neo-one-client-core/src/sc/common.ts index 1202bf91c1..6b9016a582 100644 --- a/packages/neo-one-client-core/src/sc/common.ts +++ b/packages/neo-one-client-core/src/sc/common.ts @@ -1,10 +1,10 @@ import { - ABIEvent, - ABIFunction, ABIParameter, ABIReturn, Action, AddressString, + ContractEventDescriptorClient, + ContractMethodDescriptorClient, ContractParameter, contractParameters, Event, @@ -82,7 +82,7 @@ export const getForwardValues = ({ readonly parameters: readonly ABIParameter[]; // tslint:disable-next-line no-any readonly args: readonly any[]; - readonly events: readonly ABIEvent[]; + readonly events: readonly ContractEventDescriptorClient[]; }): ReadonlyArray => { const hasForwardOptions = parameters.length > 0 && @@ -115,7 +115,10 @@ export const getForwardValues = ({ ); }; -const createForwardValueArgs = (parameters: readonly ABIParameter[], events: readonly ABIEvent[]) => ( +const createForwardValueArgs = ( + parameters: readonly ABIParameter[], + events: readonly ContractEventDescriptorClient[], +) => ( // tslint:disable-next-line no-any readonly-array ...args: any[] ) => getForwardValues({ parameters, events, args }); @@ -125,9 +128,9 @@ export const convertActions = ({ events, }: { readonly actions: readonly RawAction[]; - readonly events: readonly ABIEvent[]; + readonly events: readonly ContractEventDescriptorClient[]; }): readonly Action[] => { - const eventsObj = traceEvents.concat(events).reduce<{ [key: string]: ABIEvent }>( + const eventsObj = traceEvents.concat(events).reduce<{ [key: string]: ContractEventDescriptorClient }>( (acc, event) => ({ ...acc, [event.name]: event, @@ -156,7 +159,7 @@ export const filterLogs = (actions: ReadonlyArray): readonly Log[] const isInvokeReceipt = (value: any): value is InvokeReceipt => typeof value === 'object' && value.result !== undefined && value.events !== undefined && value.logs !== undefined; -const createForwardValueReturn = (returnType: ABIReturn, forwardEvents: readonly ABIEvent[]) => ( +const createForwardValueReturn = (returnType: ABIReturn, forwardEvents: readonly ContractEventDescriptorClient[]) => ( receiptOrValue: InvokeReceipt | ContractParameter, // tslint:disable-next-line no-any ): any => { @@ -219,7 +222,7 @@ export const convertAction = ({ events, }: { readonly action: RawAction; - readonly events: { readonly [K in string]?: ABIEvent }; + readonly events: { readonly [K in string]?: ContractEventDescriptorClient }; }): Action | string => { if (action.type === 'Log') { return action; @@ -265,7 +268,7 @@ export const convertInvocationResult = async ({ readonly actions: readonly RawAction[]; readonly sourceMaps?: SourceMaps; }): Promise> => { - const { gasConsumed, gasCost } = result; + const { gasConsumed, gasCost, script } = result; if (result.state === 'FAULT') { const message = await processActionsAndMessage({ actions, @@ -278,6 +281,7 @@ export const convertInvocationResult = async ({ gasConsumed, gasCost, message, + script, }; } @@ -289,7 +293,7 @@ export const convertInvocationResult = async ({ parameter: contractParameter, }); - return { state: result.state, gasConsumed, gasCost, value }; + return { state: result.state, gasConsumed, gasCost, value, script }; }; export const convertCallResult = async ({ @@ -382,15 +386,15 @@ export const convertParams = ({ const zipped = zip.map(([parameterIn, param]) => { const parameter = parameterIn as ABIParameter; - return [parameter.name, parameter.type === 'ForwardValue' ? (param as ForwardValue).param : param] as const; + return [parameter.name, parameter.type === 'ForwardValue' ? (param as ForwardValue).param : param]; }); return { converted, zipped }; }; export const addForward = ( - func: ABIFunction, - forwardEvents: readonly ABIEvent[], + func: ContractMethodDescriptorClient, + forwardEvents: readonly ContractEventDescriptorClient[], // tslint:disable-next-line no-any value: any, // tslint:disable-next-line no-any diff --git a/packages/neo-one-client-core/src/sc/createSmartContract.ts b/packages/neo-one-client-core/src/sc/createSmartContract.ts index ab5f1edd54..dbfbac846a 100644 --- a/packages/neo-one-client-core/src/sc/createSmartContract.ts +++ b/packages/neo-one-client-core/src/sc/createSmartContract.ts @@ -1,16 +1,14 @@ /// import { - ABIEvent, - ABIFunction, ABIParameter, Action, AddressString, - ClaimTransaction, + ContractEventDescriptorClient, + ContractMethodDescriptorClient, Event, ForwardOptions, GetOptions, Hash256String, - InvocationTransaction, InvokeReceipt, InvokeSendUnsafeReceiveTransactionOptions, Log, @@ -23,7 +21,6 @@ import { SmartContractDefinition, SmartContractIterOptions, SmartContractNetworkDefinition, - TransactionReceipt, TransactionResult, Transfer, } from '@neo-one/client-common'; @@ -227,7 +224,7 @@ const createCall = ({ }: { readonly definition: SmartContractDefinition; readonly client: Client; - readonly func: ABIFunction; + readonly func: ContractMethodDescriptorClient; // tslint:disable-next-line no-any }) => async (...args: any[]): Promise => { const { params, network, address } = getParamsAndOptions({ @@ -269,14 +266,12 @@ const createInvoke = ({ }: { readonly definition: SmartContractDefinition; readonly client: Client; - readonly func: ABIFunction; + readonly func: ContractMethodDescriptorClient; }) => { const invoke = async ( // tslint:disable-next-line no-any ...args: any[] - ): Promise< - TransactionResult | TransactionResult - > => { + ): Promise | TransactionResult> => { const { params, paramsZipped, options, forwardOptions, address, transfer, hash } = getParamsAndOptions({ definition, parameters, @@ -293,7 +288,7 @@ const createInvoke = ({ return client.__invokeClaim(address, name, params, paramsZipped, options, definition.sourceMaps); } - let result: TransactionResult; + let result: TransactionResult; if (send) { /* istanbul ignore next */ if (transfer === undefined) { @@ -347,7 +342,7 @@ const createInvoke = ({ transaction: result.transaction, confirmed: async (getOptions?): Promise => { const receipt = await result.confirmed(getOptions); - const { events = [] } = definition.abi; + const { events = [] } = definition.manifest.abi; const { events: forwardEvents = [] } = forwardOptions; const actions = common.convertActions({ actions: receipt.actions, @@ -365,6 +360,9 @@ const createInvoke = ({ blockIndex: receipt.blockIndex, blockHash: receipt.blockHash, globalIndex: receipt.globalIndex, + blockTime: receipt.blockTime, + confirmations: receipt.confirmations, + transactionHash: receipt.transactionHash, transactionIndex: receipt.transactionIndex, result: invocationResult, events: common.filterEvents(actions), @@ -399,9 +397,11 @@ export const createSmartContract = ({ readonly client: Client; }): SmartContractAny => { const { - abi: { events: abiEvents = [] }, + manifest: { + abi: { events: abiEvents = [] }, + }, } = definition; - const events = traceEvents.concat(abiEvents).reduce<{ [key: string]: ABIEvent }>( + const events = traceEvents.concat(abiEvents).reduce<{ [key: string]: ContractEventDescriptorClient }>( (acc, event) => ({ ...acc, [event.name]: event, @@ -424,10 +424,7 @@ export const createSmartContract = ({ }; const iterActions = (options?: SmartContractIterOptions): AsyncIterable => - AsyncIterableX.from(iterActionsRaw(options)).pipe( - map(convertAction), - filter(utils.notNull), - ); + AsyncIterableX.from(iterActionsRaw(options)).pipe(map(convertAction), filter(utils.notNull)); const iterEvents = (options?: SmartContractIterOptions): AsyncIterable => AsyncIterableX.from(iterActions(options)).pipe( @@ -455,7 +452,7 @@ export const createSmartContract = ({ filter(Boolean), ); - return definition.abi.functions.reduce( + return definition.manifest.abi.methods.reduce( (acc, func) => common.addForward(func, abiEvents, { ...acc, diff --git a/packages/neo-one-client-core/src/sc/params.ts b/packages/neo-one-client-core/src/sc/params.ts index b7e2c4a749..fa522c9f1a 100644 --- a/packages/neo-one-client-core/src/sc/params.ts +++ b/packages/neo-one-client-core/src/sc/params.ts @@ -1,12 +1,13 @@ import { ABIReturn, - AddressABI, addressToScriptHash, + AnyABI, ArrayABI, BooleanABI, BufferABI, common, ForwardValueABI, + Hash160ABI, Hash256ABI, IntegerABI, MapABI, @@ -23,9 +24,10 @@ import * as args from '../args'; import { InvalidArgumentError } from '../errors'; export const params = { + Any: (_name: string, _param: Param, _parameter: AnyABI): ScriptBuilderParam | undefined => undefined, String: (name: string, param: Param, parameter: StringABI): ScriptBuilderParam | undefined => parameter.optional && param === undefined ? undefined : args.assertString(name, param), - Address: (name: string, param: Param, parameter: AddressABI): ScriptBuilderParam | undefined => + Hash160: (name: string, param: Param, parameter: Hash160ABI): ScriptBuilderParam | undefined => parameter.optional && param === undefined ? undefined : common.stringToUInt160(addressToScriptHash(args.assertAddress(name, param))), diff --git a/packages/neo-one-client-core/src/sc/utils.ts b/packages/neo-one-client-core/src/sc/utils.ts index 9d09173dd1..74e5dba3d4 100644 --- a/packages/neo-one-client-core/src/sc/utils.ts +++ b/packages/neo-one-client-core/src/sc/utils.ts @@ -1,5 +1,7 @@ -import { ABIFunction } from '@neo-one/client-common'; +import { ContractMethodDescriptorClient } from '@neo-one/client-common'; import { upperCaseFirst } from '@neo-one/utils'; -export const createForwardedValueFuncArgsName = (func: ABIFunction) => `forward${upperCaseFirst(func.name)}Args`; -export const createForwardedValueFuncReturnName = (func: ABIFunction) => `forward${upperCaseFirst(func.name)}Return`; +export const createForwardedValueFuncArgsName = (func: ContractMethodDescriptorClient) => + `forward${upperCaseFirst(func.name)}Args`; +export const createForwardedValueFuncReturnName = (func: ContractMethodDescriptorClient) => + `forward${upperCaseFirst(func.name)}Return`; diff --git a/packages/neo-one-client-core/src/trace.ts b/packages/neo-one-client-core/src/trace.ts index 794ca40a8b..541bd770ad 100644 --- a/packages/neo-one-client-core/src/trace.ts +++ b/packages/neo-one-client-core/src/trace.ts @@ -1,7 +1,7 @@ -import { ABIEvent } from '@neo-one/client-common'; +import { ContractEventDescriptorClient } from '@neo-one/client-common'; // tslint:disable-next-line export-name -export const events: readonly ABIEvent[] = [ +export const events: readonly ContractEventDescriptorClient[] = [ { name: 'trace', parameters: [ diff --git a/packages/neo-one-client-core/src/user/Dapi.ts b/packages/neo-one-client-core/src/user/Dapi.ts index 22352b96a7..4ebc2cb225 100644 --- a/packages/neo-one-client-core/src/user/Dapi.ts +++ b/packages/neo-one-client-core/src/user/Dapi.ts @@ -1,4 +1,4 @@ -import { AddressString, AttributeUsage, Hash256String, NetworkType, PublicKeyString } from '@neo-one/client-common'; +import { AddressString, AttributeTypeModel, Hash256String, NetworkType, PublicKeyString } from '@neo-one/client-common'; /** * Information about the provider of a Dapi @@ -172,13 +172,15 @@ export interface AttachedAssets { } /** - * Hash `Attrribute` attached to a transaction. + * Hash `Attribute` attached to a transaction. + * TODO: removed `extends Argument` but kept `Argument` definition, as it may be + * needed after Preview 3 when they add back transaction attributes */ -export interface TxHashAttribute extends Argument { +export interface TxHashAttribute { /** * Allowed `Attribute` types. */ - readonly txAttrUsage: AttributeUsage; + readonly txAttrType: AttributeTypeModel; } /** @@ -193,11 +195,6 @@ export interface InvokeArgs extends InvokeReadArgs { * The parsed amount of network fee (in GAS) to include with transaction. */ readonly fee?: string; - /** - * A hard override of all transaction utxo inputs and outputs. - * IMPORTANT: If provided, fee and attachedAssets will be ignored. - */ - readonly assetIntentOverrides?: AssetIntentOverrides; /** * Adds the instruction to invoke the contract verification trigger. */ @@ -208,20 +205,6 @@ export interface InvokeArgs extends InvokeReadArgs { readonly txHashAttributes?: readonly TxHashAttribute[]; } -/** - * A hard override of all transaction utxo inputs and outputs. - */ -export interface AssetIntentOverrides { - /** - * Inputs to attach to the transaction. - */ - readonly inputs: readonly AssetInput[]; - /** - * Outputs to attach to the transaction. - */ - readonly outputs: readonly AssetOutput[]; -} - /** * `Input` defining the origin of an `Asset`. */ diff --git a/packages/neo-one-client-core/src/user/DapiUserAccountProvider.ts b/packages/neo-one-client-core/src/user/DapiUserAccountProvider.ts index 9080702036..e1a7d0a287 100644 --- a/packages/neo-one-client-core/src/user/DapiUserAccountProvider.ts +++ b/packages/neo-one-client-core/src/user/DapiUserAccountProvider.ts @@ -2,12 +2,7 @@ import { AddressString, addressToScriptHash, Attribute, - ClaimTransaction, - ContractTransaction, - Input, - InvocationTransaction, NetworkType, - Output, PublicKeyString, ScriptBuilderParam, scriptBuilderParamTo, @@ -22,12 +17,10 @@ import { import BigNumber from 'bignumber.js'; import { BehaviorSubject, Observable } from 'rxjs'; import { distinctUntilChanged } from 'rxjs/operators'; -import { InvocationCallError, NothingToTransferError, NotImplementedError } from '../errors'; +import { NothingToTransferError, NotImplementedError } from '../errors'; import { ACCOUNT_CHANGED, Argument, - AssetInput, - AssetOutput, Dapi, DapiAccount, DapiError, @@ -97,7 +90,8 @@ const paramToArgDataTypeCallbacks: ScriptBuilderParamToCallbacks = { const paramToArgDataType = (param: ScriptBuilderParam): Argument => scriptBuilderParamTo(param, paramToArgDataTypeCallbacks); -export class DapiUserAccountProvider extends UserAccountProviderBase +export class DapiUserAccountProvider + extends UserAccountProviderBase implements UserAccountProvider { public readonly currentUserAccount$: Observable; public readonly userAccounts$: Observable>; @@ -185,7 +179,7 @@ export class DapiUserAccountProvider extends UserAcc from: UserAccountID, _attributes: readonly Attribute[], networkFee: BigNumber, - ): Promise> { + ): Promise { await this.initCheck(); if (transfers.length === 0) { throw new NothingToTransferError(); @@ -205,9 +199,6 @@ export class DapiUserAccountProvider extends UserAcc network: from.network, }); const transaction = await this.provider.getTransaction(from.network, txid); - if (transaction.type !== 'ContractTransaction') { - throw new Error('For TS'); - } return { transaction, @@ -219,19 +210,17 @@ export class DapiUserAccountProvider extends UserAcc _from: UserAccountID, _attributes: readonly Attribute[], _networkFee: BigNumber, - ): Promise> { + ): Promise { throw new NotImplementedError('executeClaim'); } protected async executeInvokeScript( _options: ExecuteInvokeScriptOptions, - ): Promise> { + ): Promise> { throw new NotImplementedError('executeInvokeScript'); } - protected async executeInvokeClaim( - _options: ExecuteInvokeClaimOptions, - ): Promise> { + protected async executeInvokeClaim(_options: ExecuteInvokeClaimOptions): Promise { throw new NotImplementedError('executeInvokeClaim'); } @@ -239,14 +228,9 @@ export class DapiUserAccountProvider extends UserAcc invokeMethodOptions, from, attributes, - inputs, - outputs, - rawInputs, - rawOutputs, verify, - reorderOutputs, onConfirm, - }: ExecuteInvokeMethodOptions): Promise> { + }: ExecuteInvokeMethodOptions): Promise> { await this.initCheck(); const { contract, invokeMethod, params } = invokeMethodOptions; @@ -257,16 +241,9 @@ export class DapiUserAccountProvider extends UserAcc network: this.defaultNetworkInternal$.getValue(), triggerContractVerification: verify, txHashAttributes: this.convertDapiAttributes(attributes), - assetIntentOverrides: { - inputs: this.convertDapiInputs(rawInputs.concat(inputs)), - outputs: this.convertDapiOutputs(reorderOutputs(rawOutputs.concat(outputs))), - }, }); const transaction = await this.provider.getTransaction(from.network, txid); - if (transaction.type !== 'InvocationTransaction') { - throw new InvocationCallError(`Expected InvocationTransaction, received ${transaction.type}`); - } return { transaction, @@ -282,14 +259,9 @@ export class DapiUserAccountProvider extends UserAcc } private convertDapiAttributes(attributes: readonly Attribute[]): readonly TxHashAttribute[] { - return attributes.map((attribute) => { - const argBase = paramToArgDataType(attribute.data); - - return { - ...argBase, - txAttrUsage: attribute.usage, - }; - }); + return attributes.map((attribute) => ({ + txAttrType: attribute.type, + })); } private async init(): Promise { @@ -345,19 +317,4 @@ export class DapiUserAccountProvider extends UserAcc this.networksInternal$.next(networks); this.defaultNetworkInternal$.next(defaultNetwork); } - - private convertDapiInputs(inputs: ReadonlyArray): ReadonlyArray { - return inputs.map((input) => ({ - txid: input.hash, - index: input.index, - })); - } - - private convertDapiOutputs(outputs: ReadonlyArray): ReadonlyArray { - return outputs.map((output) => ({ - asset: output.asset, - address: output.address, - value: output.value.toString(), - })); - } } diff --git a/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts b/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts index 6e99172286..0ff705f71f 100644 --- a/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts +++ b/packages/neo-one-client-core/src/user/LocalUserAccountProvider.ts @@ -1,27 +1,25 @@ import { AddressString, + addressToScriptHash, Attribute, - ClaimTransaction, - ClaimTransactionModel, common, crypto, + ECDsaVerifyPrice, + getOpCodePrice, GetOptions, - Input, - InputModel, - InputOutput, - InvocationTransaction, - InvocationTransactionModel, - IterOptions, + InvalidFormatError, + IOHelper, NetworkType, - Output, + Op, Param, RawAction, RelayTransactionResult, ScriptBuilder, ScriptBuilderParam, + SignerModel, SourceMaps, Transaction, - TransactionBaseModel, + TransactionModel, TransactionReceipt, TransactionResult, Transfer, @@ -30,13 +28,15 @@ import { UserAccountID, UserAccountProvider, utils, + VerifyResultModel, WitnessModel, + WitnessScopeModel, } from '@neo-one/client-common'; import { processActionsAndMessage } from '@neo-one/client-switch'; import { utils as commonUtils } from '@neo-one/utils'; import BigNumber from 'bignumber.js'; import { Observable } from 'rxjs'; -import { InvokeError, NothingToClaimError, NothingToTransferError, UnknownAccountError } from '../errors'; +import { InsufficientNetworkFeeError, InvokeError, UnknownAccountError } from '../errors'; import { ExecuteInvokeMethodOptions, ExecuteInvokeScriptOptions, @@ -86,7 +86,7 @@ export interface KeyStore { } export interface Provider extends ProviderBase { - readonly relayTransaction: (network: NetworkType, transaction: string) => Promise; + readonly relayTransaction: (network: NetworkType, transaction: TransactionModel) => Promise; } /** @@ -103,13 +103,12 @@ export class LocalUserAccountProvider Promise; public readonly updateUserAccountName?: (options: UpdateAccountNameOptions) => Promise; - public readonly iterActionsRaw?: (network: NetworkType, options?: IterOptions) => AsyncIterable; protected readonly executeInvokeMethod: ( options: ExecuteInvokeMethodOptions, - ) => Promise>; + ) => Promise>; protected readonly executeInvokeScript: ( options: ExecuteInvokeScriptOptions, - ) => Promise>; + ) => Promise>; public constructor({ keystore, provider }: { readonly keystore: TKeyStore; readonly provider: TProvider }) { super({ provider }); @@ -135,11 +134,6 @@ export class LocalUserAccountProvider signer.size) + + IOHelper.sizeOfArray(transaction.attributes, (attr) => attr.size) + + IOHelper.sizeOfVarBytesLE(transaction.script) + + IOHelper.sizeOfVarUIntLE(hashes.length); + + let size = initSize; + let fee = new BigNumber(0); + + // tslint:disable-next-line + for (const hash of hashes) { + try { + let witnessScript: Buffer | undefined; + witnessScript = this.tryGetUserAccount({ + network, + address: crypto.scriptHashToAddress({ + addressVersion: common.NEO_ADDRESS_VERSION, + scriptHash: hash, + }), + })?.contract.script; + + if (witnessScript === undefined && transaction.witnesses.length !== 0) { + transaction.witnesses.forEach((witness) => { + if (crypto.toScriptHash(witness.verification).equals(hash)) { + witnessScript = witness.verification; + } + }); + } + + // TODO: Implemented looking up the witness verification script by contract hash: https://github.com/neo-project/neo/blob/master/src/neo/Wallets/Wallet.cs#L390 + if (witnessScript === undefined) { + throw new Error('Contract witness script not yet implemented'); + } + + const multiSig = crypto.isMultiSigContractWithResult(witnessScript); + if (multiSig.result) { + const { m, n } = multiSig; + const sizeInv = m * 66; + const sizeMulti = IOHelper.sizeOfVarUIntLE(sizeInv) + sizeInv + IOHelper.sizeOfVarBytesLE(witnessScript); + + const initMFee = getOpCodePrice(Op.PUSHDATA1).multipliedBy(m); + const mBuilder = new ScriptBuilder(); + const mScript = mBuilder.emitPushInt(m).build(); + const mFee = getOpCodePrice(mScript[0]).plus(initMFee); + + const initNFee = getOpCodePrice(Op.PUSHDATA1).multipliedBy(n); + const nBuilder = new ScriptBuilder(); + const nScript = nBuilder.emitPushInt(n).build(); + const nFee = getOpCodePrice(nScript[0]).plus(initNFee); + + const totalFee = getOpCodePrice(Op.PUSHNULL).plus(ECDsaVerifyPrice.multipliedBy(n)).plus(mFee).plus(nFee); + + size = size + sizeMulti; + fee = fee.plus(totalFee); + } else if (crypto.isSignatureContract(witnessScript)) { + const sigSize = IOHelper.sizeOfVarBytesLE(witnessScript) + 67; + const sigFee = getOpCodePrice(Op.PUSHDATA1) + .multipliedBy(2) + .plus(getOpCodePrice(Op.PUSHNULL)) + .plus(ECDsaVerifyPrice); + + size = size + sigSize; + fee = fee.plus(sigFee); + } else { + // do nothing + } + } catch { + const { fee: newFee, size: newSize } = await this.provider.getVerificationCost( + network, + common.uInt160ToString(hash), + transaction, + ); + fee = fee.plus(newFee); + size = size + newSize; + } + } + + const feePerByte = await this.provider.getFeePerByte(network); + + const gas = fee.plus(feePerByte.multipliedBy(size)).integerValue(BigNumber.ROUND_UP); + if (gas.gt(utils.ZERO_BIG_NUMBER) && maxFee.lt(gas) && !maxFee.eq(utils.NEGATIVE_ONE_BIG_NUMBER)) { + throw new InsufficientNetworkFeeError(maxFee, gas); + } + + return gas; + } + protected async sendTransaction({ - inputs, - transaction: transactionUnsignedIn, + transaction: transactionUnsigned, from, onConfirm, - sourceMaps, }: { - readonly inputs: readonly InputOutput[]; - readonly transaction: TransactionBaseModel; + readonly transaction: TransactionModel; readonly from: UserAccountID; readonly onConfirm: (options: { readonly transaction: Transaction; readonly receipt: TransactionReceipt; }) => Promise; + readonly networkFee?: BigNumber; readonly sourceMaps?: SourceMaps; }): Promise> { return this.capture( async () => { - let transactionUnsigned = transactionUnsignedIn; - if (this.keystore.byteLimit !== undefined) { - transactionUnsigned = await this.consolidate({ - inputs, - from, - transactionUnsignedIn, - byteLimit: this.keystore.byteLimit, - }); - } - const address = from.address; - if ( - transactionUnsigned.inputs.length === 0 && - // tslint:disable no-any - ((transactionUnsigned as any).claims == undefined || - !Array.isArray((transactionUnsigned as any).claims) || - (transactionUnsigned as any).claims.length === 0) - // tslint:enable no-any - ) { - transactionUnsigned = transactionUnsigned.clone({ - attributes: transactionUnsigned.attributes.concat( - this.convertAttributes([ - { - usage: 'Script', - data: address, - }, - ]), - ), - }); - } - - const [signature, inputOutputs, claimOutputs] = await Promise.all([ - this.keystore.sign({ - account: from, - message: transactionUnsigned.serializeUnsigned().toString('hex'), - }), - Promise.all( - transactionUnsigned.inputs.map(async (input) => - this.provider.getOutput(from.network, { hash: common.uInt256ToString(input.hash), index: input.index }), - ), - ), - transactionUnsigned instanceof ClaimTransactionModel - ? Promise.all( - transactionUnsigned.claims.map(async (input) => - this.provider.getOutput(from.network, { - hash: common.uInt256ToString(input.hash), - index: input.index, - }), - ), - ) - : Promise.resolve([]), - ]); + const signature = await this.keystore.sign({ + account: from, + message: transactionUnsigned.message.toString('hex'), + }); const userAccount = this.getUserAccount(from); - const witness = crypto.createWitnessForSignature( - Buffer.from(signature, 'hex'), - common.stringToECPoint(userAccount.publicKey), - WitnessModel, - ); - const result = await this.provider.relayTransaction( - from.network, - this.addWitness({ - transaction: transactionUnsigned, - inputOutputs: inputOutputs.concat(claimOutputs), - address, - witness, - }) - .serializeWire() - .toString('hex'), - ); - const failures = - result.verifyResult === undefined - ? [] - : result.verifyResult.verifications.filter(({ failureMessage }) => failureMessage !== undefined); - if (failures.length > 0) { - const message = await processActionsAndMessage({ - actions: failures.reduce((acc, { actions }) => acc.concat(actions), []), - message: failures - .map(({ failureMessage }) => failureMessage) - .filter(commonUtils.notNull) - .join(' '), - sourceMaps, - }); + // TODO: we check multisig for the private net 1-validator case + // really we need add support for them across the board + let witness: WitnessModel | undefined; + if (crypto.isSignatureContract(userAccount.contract.script)) { + witness = crypto.createWitnessForSignature( + Buffer.from(signature, 'hex'), + common.stringToECPoint(userAccount.publicKey), + WitnessModel, + ); + } else if (crypto.isMultiSigContract(userAccount.contract.script)) { + witness = crypto.createMultiSignatureWitness( + 1, + [common.stringToECPoint(userAccount.publicKey)], + { [userAccount.publicKey]: Buffer.from(signature, 'hex') }, + WitnessModel, + ); + } - throw new InvokeError(message); + if (witness === undefined) { + throw new InvalidFormatError(); } - (transactionUnsigned.inputs as readonly InputModel[]).forEach((transfer) => - this.mutableUsedOutputs.add(`${common.uInt256ToString(transfer.hash)}:${transfer.index}`), - ); + const fullTransaction = this.addWitness({ + transaction: transactionUnsigned, + witness, + }); + + const result = await this.provider.relayTransaction(from.network, fullTransaction); + + // TODO: we'll have to add back checks here since this links back to sourcemappings + // For now we can just check if it succeeded; + + // const failures = + // result.verifyResult === undefined + // ? [] + // : result.verifyResult.verifications.filter(({ failureMessage }) => failureMessage !== undefined); + // if (failures.length > 0) { + // const message = await processActionsAndMessage({ + // actions: failures.reduce((acc, { actions }) => acc.concat(actions), []), + // message: failures + // .map(({ failureMessage }) => failureMessage) + // .filter(commonUtils.notNull) + // .join(' '), + // sourceMaps, + // }); + + // throw new InvokeError(message); + // } + + if (result.verifyResult !== undefined && result.verifyResult !== VerifyResultModel.Succeed) { + throw new InvokeError(`Transaction failed to verify with result: ${VerifyResultModel[result.verifyResult]}`); + } const { transaction } = result; @@ -293,52 +352,51 @@ export class LocalUserAccountProvider; readonly paramsZipped: ReadonlyArray; readonly from: UserAccountID; readonly sourceMaps?: SourceMaps; - }): Promise> { - const transaction = new ClaimTransactionModel({ - inputs: this.convertInputs(inputs), - claims: this.convertInputs(unclaimed), - outputs: this.convertOutputs( - outputs.concat([ - { - address: contract, - asset: common.GAS_ASSET_HASH, - value: amount, - }, - ]), - ), - attributes: this.convertAttributes( - // By definition, the contract address is a claim input so the script hash is already included - // By definition, the from address is not an input or a claim, so we need to add it - attributes.concat(this.getInvokeAttributes(contract, method, paramsZipped, false, from.address)), - ), + readonly networkFee?: BigNumber; + }): Promise { + const script = new ScriptBuilder() + // TODO: check that this is correct script for claiming gas? + .emitAppCall(common.nativeHashes.GAS, 'transfer', [ + addressToScriptHash(contract), // check this is correct address + common.nativeHashes.GAS, + unclaimedAmount.toString(), + ]) + .build(); + + const [{ gas }, { count, messageMagic }] = await Promise.all([ + this.getSystemFee({ from, script, attributes }), + this.getCountAndMagic(from), + ]); + + const transaction = new TransactionModel({ + systemFee: utils.bigNumberToBN(gas, 8), + networkFee: utils.bigNumberToBN(networkFee ? networkFee : new BigNumber(0), 8), // TODO: check. should it be optional param or no? // Since the contract address is an input, we must add a witness for it. - scripts: this.getInvokeScripts(method, params, true), + witnesses: this.getInvokeScripts(method, params, true), + script, + attributes: this.convertAttributes(attributes), + validUntilBlock: count + 240, + messageMagic, }); - return this.sendTransaction({ - inputs, + return this.sendTransaction({ from, transaction, onConfirm: async ({ receipt }) => receipt, @@ -350,115 +408,131 @@ export class LocalUserAccountProvider> { - const { inputs, outputs } = await this.getTransfersInputOutputs({ - transfers: transfers.map((transfer) => ({ from, ...transfer })), - from, - gas: networkFee, + maxNetworkFee: BigNumber, + maxSystemFee: BigNumber, + validBlockCount: number = TransactionModel.maxValidBlockIncrement, + ): Promise { + const sb = new ScriptBuilder(); + if (transfers.length > 1) { + throw new Error('temporary'); + } + + const { addressVersion, blockCount, messageMagic } = await this.provider.getNetworkSettings(from.network); + + transfers.forEach((transfer) => { + sb.emitAppCall( + common.stringToUInt160(transfer.asset), + 'transfer', + crypto.addressToScriptHash({ addressVersion, address: from.address }), + crypto.addressToScriptHash({ addressVersion, address: transfer.to }), + transfer.amount.toNumber(), + undefined, + ); }); - if (inputs.length === 0 && this.keystore.byteLimit === undefined) { - throw new NothingToTransferError(); - } + const script = sb.build(); - const transaction = new InvocationTransactionModel({ - inputs: this.convertInputs(inputs), - outputs: this.convertOutputs(outputs), - attributes: this.convertAttributes(attributes), - gas: utils.ZERO, - script: new ScriptBuilder().emitOp('PUSH1').build(), + const signer = new SignerModel({ + account: crypto.addressToScriptHash({ address: from.address, addressVersion }), + scopes: WitnessScopeModel.Global, }); - return this.sendTransaction({ - from, - transaction, - inputs, - onConfirm: async ({ receipt }) => receipt, + const nonce = utils.randomUShort(); + const validUntilBlock = blockCount + validBlockCount; + + const feelessTransaction = new TransactionModel({ + version: 0, + nonce, + script, + validUntilBlock, + signers: [signer], + attributes: this.convertAttributes(attributes), + systemFee: utils.bigNumberToBN(utils.ZERO_BIG_NUMBER, 8), + networkFee: utils.bigNumberToBN(utils.ZERO_BIG_NUMBER, 8), + messageMagic, }); - } - protected async executeClaim( - from: UserAccountID, - attributes: readonly Attribute[], - networkFee: BigNumber, - ): Promise> { - const [{ unclaimed, amount }, { inputs, outputs }] = await Promise.all([ - this.provider.getUnclaimed(from.network, from.address), - this.getTransfersInputOutputs({ - from, - gas: networkFee, - transfers: [], + const [systemFee, networkFee] = await Promise.all([ + this.getSystemFee({ + network: from.network, + transaction: feelessTransaction, + maxFee: maxSystemFee, + }), + this.getNetworkFee({ + network: from.network, + transaction: feelessTransaction, + maxFee: maxNetworkFee, }), ]); - if (unclaimed.length === 0) { - throw new NothingToClaimError(from); - } - - const transaction = new ClaimTransactionModel({ - inputs: this.convertInputs(inputs), - claims: this.convertInputs(unclaimed), - outputs: this.convertOutputs( - outputs.concat([ - { - address: from.address, - asset: common.GAS_ASSET_HASH, - value: amount, - }, - ]), - ), + const transaction = new TransactionModel({ + version: 0, + nonce, + script, + validUntilBlock, + signers: [signer], attributes: this.convertAttributes(attributes), + systemFee: utils.bigNumberToBN(systemFee, 0), + networkFee: utils.bigNumberToBN(networkFee, 0), + messageMagic, }); - return this.sendTransaction({ - inputs, + return this.sendTransaction({ from, transaction, onConfirm: async ({ receipt }) => receipt, }); } + protected async executeClaim( + from: UserAccountID, + attributes: readonly Attribute[], + maxNetworkFee: BigNumber, + maxSystemFee: BigNumber, + validBlockCount: number, + ): Promise { + const transfer: Transfer = { + to: from.address, + asset: common.nativeScriptHashes.NEO, + amount: new BigNumber(0), + }; + + return this.executeTransfer([transfer], from, attributes, maxNetworkFee, maxSystemFee, validBlockCount); + } + + // TODO: see invokeScript and invokeFunction in neo-modules private async executeInvoke({ script, from, attributes, - inputs, - outputs, - rawInputs, - rawOutputs, - gas, - scripts, - reorderOutputs, + systemFee, + networkFee, + witnesses, onConfirm, sourceMaps, - }: ExecuteInvokeScriptOptions): Promise> { - const invokeTransaction = new InvocationTransactionModel({ - version: 1, - inputs: this.convertInputs(rawInputs.concat(inputs)), - outputs: this.convertOutputs(reorderOutputs(rawOutputs.concat(outputs))), + }: ExecuteInvokeScriptOptions): Promise> { + const { count, messageMagic } = await this.getCountAndMagic(from); + const invokeTransaction = new TransactionModel({ + systemFee: utils.bigNumberToBN(systemFee, 8), // TODO: check + networkFee: utils.bigNumberToBN(networkFee ? networkFee : new BigNumber(0), 8), // TODO: check. should it be optional param or no? attributes: this.convertAttributes(attributes), - gas: utils.bigNumberToBN(gas, 8), script, - scripts, + witnesses, + validUntilBlock: count + 240, + messageMagic, }); try { - // tslint:disable-next-line prefer-immediate-return - const result = await this.sendTransaction({ + return this.sendTransaction({ from, - inputs, transaction: invokeTransaction, onConfirm: async ({ transaction, receipt }) => { - const data = await this.provider.getInvocationData(from.network, transaction.hash); + const data = await this.provider.getApplicationLogData(from.network, transaction.hash); return onConfirm({ transaction, receipt, data }); }, sourceMaps, }); - - // tslint:disable-next-line:no-var-before-return - return result; } catch (error) { const message = await processActionsAndMessage({ actions: [], @@ -473,10 +547,14 @@ export class LocalUserAccountProvider account.id.network === id.network && account.id.address === id.address); + } + + private getUserAccount(id: UserAccountID): UserAccount { + const userAccount = this.tryGetUserAccount(id); if (userAccount === undefined) { throw new UnknownAccountError(id.address); } diff --git a/packages/neo-one-client-core/src/user/RemoteUserAccountProvider.ts b/packages/neo-one-client-core/src/user/RemoteUserAccountProvider.ts index ca0cabdf8c..650b1c1236 100644 --- a/packages/neo-one-client-core/src/user/RemoteUserAccountProvider.ts +++ b/packages/neo-one-client-core/src/user/RemoteUserAccountProvider.ts @@ -2,10 +2,8 @@ import { Account, AddressString, Block, - ClaimTransaction, GetOptions, Hash256String, - InvocationTransaction, InvokeSendUnsafeReceiveTransactionOptions, IterOptions, NetworkType, @@ -16,7 +14,6 @@ import { ScriptBuilderParam, SourceMaps, TransactionOptions, - TransactionReceipt, TransactionResult, Transfer, UpdateAccountNameOptions, @@ -196,17 +193,14 @@ export class RemoteUserAccountProvider implements UserAccountProvider { return asyncGenerator(this.messageEndpoint, 'iterActionsRaw', network, options); } - public async transfer( - transfers: readonly Transfer[], - options?: TransactionOptions, - ): Promise> { + public async transfer(transfers: readonly Transfer[], options?: TransactionOptions): Promise { return this.handleMethodWithConfirmation({ method: 'transfer', args: [transfers, options], }); } - public async claim(options?: TransactionOptions): Promise> { + public async claim(options?: TransactionOptions): Promise { return this.handleMethodWithConfirmation({ method: 'claim', args: [options] }); } @@ -218,7 +212,7 @@ export class RemoteUserAccountProvider implements UserAccountProvider { verify: boolean, options?: InvokeSendUnsafeReceiveTransactionOptions, sourceMaps?: SourceMaps, - ): Promise> { + ): Promise> { return this.handleMethodWithConfirmation({ method: 'invoke', args: [contract, method, params, paramsZipped, verify, options, sourceMaps], @@ -233,7 +227,7 @@ export class RemoteUserAccountProvider implements UserAccountProvider { transfer: Transfer, options?: TransactionOptions, sourceMaps?: SourceMaps, - ): Promise> { + ): Promise> { return this.handleMethodWithConfirmation({ method: 'invokeSend', args: [contract, method, params, paramsZipped, transfer, options, sourceMaps], @@ -248,7 +242,7 @@ export class RemoteUserAccountProvider implements UserAccountProvider { hash: Hash256String, options?: TransactionOptions, sourceMaps?: SourceMaps, - ): Promise> { + ): Promise> { return this.handleMethodWithConfirmation({ method: 'invokeCompleteSend', args: [contract, method, params, paramsZipped, hash, options, sourceMaps], @@ -263,7 +257,7 @@ export class RemoteUserAccountProvider implements UserAccountProvider { hash: Hash256String, options?: TransactionOptions, sourceMaps?: SourceMaps, - ): Promise> { + ): Promise> { return this.handleMethodWithConfirmation({ method: 'invokeRefundAssets', args: [contract, method, params, paramsZipped, hash, options, sourceMaps], @@ -277,7 +271,7 @@ export class RemoteUserAccountProvider implements UserAccountProvider { paramsZipped: ReadonlyArray, options?: TransactionOptions, sourceMaps?: SourceMaps, - ): Promise> { + ): Promise { return this.handleMethodWithConfirmation({ method: 'invokeClaim', args: [contract, method, params, paramsZipped, options, sourceMaps], diff --git a/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts b/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts index 0fa6f0dd27..f2fe69dba3 100644 --- a/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts +++ b/packages/neo-one-client-core/src/user/UserAccountProviderBase.ts @@ -4,75 +4,51 @@ import { addressToScriptHash, Attribute, AttributeModel, - AttributeUsageModel, Block, - ClaimTransaction, common, - ContractTransaction, ForwardValue, GetOptions, Hash256String, - Input, - InputModel, - InputOutput, - InvocationTransaction, - InvocationTransactionModel, InvokeSendUnsafeReceiveTransactionOptions, IterOptions, + NetworkSettings, NetworkType, - Output, - OutputModel, Param, ParamJSON, - RawAction, + RawApplicationLogData, RawCallReceipt, RawInvocationData, RawInvokeReceipt, ScriptBuilderParam, SourceMaps, Transaction, - TransactionBaseModel, + TransactionModel, TransactionOptions, TransactionReceipt, TransactionResult, Transfer, - UInt160AttributeModel, UserAccount, UserAccountID, utils, Witness, WitnessModel, + UInt160Hex, } from '@neo-one/client-common'; -import { - AggregationType, - globalStats, - Measure, - MeasureUnit, - processActionsAndMessage, - TagMap, -} from '@neo-one/client-switch'; -import { Labels, labelToTag, utils as commonUtils } from '@neo-one/utils'; +import { Labels, utils as commonUtils } from '@neo-one/utils'; import BigNumber from 'bignumber.js'; import debug from 'debug'; -import _ from 'lodash'; import { Observable } from 'rxjs'; import { clientUtils } from '../clientUtils'; import { - FundsInUseError, - InsufficientFundsError, InsufficientSystemFeeError, - InvalidTransactionError, InvokeError, NoAccountError, NothingToClaimError, - NothingToRefundError, - NothingToSendError, NotImplementedError, } from '../errors'; import { converters } from './converters'; const logger = debug('NEOONE:LocalUserAccountProvider'); -const invokeTag = labelToTag(Labels.INVOKE_RAW_METHOD); export interface InvokeMethodOptions { readonly contract: AddressString; @@ -85,32 +61,28 @@ export interface InvokeRawOptions { readonly transfers?: readonly FullTransfer[]; readonly options?: TransactionOptions; readonly verify?: boolean; + // TODO: fix onConfirm type. return type from node is no longer valid readonly onConfirm: (options: { readonly transaction: Transaction; readonly data: RawInvocationData; readonly receipt: TransactionReceipt; }) => Promise | T; readonly method: string; - readonly scripts?: readonly WitnessModel[]; + readonly witnesses?: readonly WitnessModel[]; readonly labels?: Record; - readonly rawInputs?: readonly Input[]; - readonly rawOutputs?: readonly Output[]; readonly sourceMaps?: SourceMaps; - readonly reorderOutputs?: (outputs: readonly Output[]) => readonly Output[]; + readonly networkFee?: BigNumber; } export interface ExecuteInvokeScriptOptions { readonly script: Buffer; readonly from: UserAccountID; readonly attributes: readonly Attribute[]; - readonly inputs: readonly InputOutput[]; - readonly outputs: readonly Output[]; - readonly rawInputs: readonly Input[]; - readonly rawOutputs: readonly Output[]; - readonly gas: BigNumber; - readonly scripts: readonly WitnessModel[]; + readonly systemFee: BigNumber; // TODO: is this name change appropriate (from "gas" to "systemFee")? + readonly networkFee?: BigNumber; // TODO: is this addition appropriate? + readonly witnesses: readonly WitnessModel[]; readonly verify: boolean; - readonly reorderOutputs: (outputs: readonly Output[]) => readonly Output[]; + // TODO: fix onConfirm type. return type from node is no longer valid readonly onConfirm: (options: { readonly transaction: Transaction; readonly data: RawInvocationData; @@ -125,10 +97,7 @@ export interface ExecuteInvokeMethodOptions extend export interface ExecuteInvokeClaimOptions { readonly contract: AddressString; - readonly inputs: readonly InputOutput[]; - readonly outputs: readonly Output[]; - readonly unclaimed: readonly Input[]; - readonly amount: BigNumber; + readonly unclaimedAmount: BigNumber; readonly attributes: readonly Attribute[]; readonly method: string; readonly params: ReadonlyArray; @@ -140,128 +109,57 @@ export interface ExecuteInvokeClaimOptions { export interface Provider { readonly networks$: Observable; readonly getNetworks: () => readonly NetworkType[]; - readonly getUnclaimed: ( - network: NetworkType, - address: AddressString, - ) => Promise<{ readonly unclaimed: readonly Input[]; readonly amount: BigNumber }>; - readonly getUnspentOutputs: (network: NetworkType, address: AddressString) => Promise; + readonly getUnclaimed: (network: NetworkType, address: AddressString) => Promise; readonly getTransactionReceipt: ( network: NetworkType, hash: Hash256String, options?: GetOptions, ) => Promise; - readonly getInvocationData: (network: NetworkType, hash: Hash256String) => Promise; - readonly testInvoke: (network: NetworkType, transaction: string) => Promise; + readonly getApplicationLogData: (network: NetworkType, hash: Hash256String) => Promise; + readonly testInvoke: (network: NetworkType, script: Buffer) => Promise; + readonly testTransaction: (network: NetworkType, transaction: TransactionModel) => Promise; readonly call: ( network: NetworkType, - contract: AddressString, + contract: UInt160Hex, method: string, params: ReadonlyArray, ) => Promise; + readonly getNetworkSettings: (network: NetworkType) => Promise; readonly getBlockCount: (network: NetworkType) => Promise; + readonly getFeePerByte: (network: NetworkType) => Promise; readonly getTransaction: (network: NetworkType, hash: Hash256String) => Promise; - readonly getOutput: (network: NetworkType, input: Input) => Promise; readonly iterBlocks: (network: NetworkType, options?: IterOptions) => AsyncIterable; readonly getAccount: (network: NetworkType, address: AddressString) => Promise; - readonly iterActionsRaw?: (network: NetworkType, options?: IterOptions) => AsyncIterable; + readonly getVerificationCost: ( + network: NetworkType, + hash: UInt160Hex, + transaction: TransactionModel, + ) => Promise<{ + readonly fee: BigNumber; + readonly size: number; + }>; } interface TransactionOptionsFull { readonly from: UserAccountID; readonly attributes: readonly Attribute[]; - readonly networkFee: BigNumber; - readonly systemFee: BigNumber; + readonly maxNetworkFee: BigNumber; + readonly maxSystemFee: BigNumber; + readonly validBlockCount: number; } -const NEO_ONE_ATTRIBUTE: Attribute = { - usage: 'Remark15', - data: Buffer.from('neo-one', 'utf8').toString('hex'), -}; - -const transferDurationSec = globalStats.createMeasureDouble('transfer/duration', MeasureUnit.SEC); -const transferFailures = globalStats.createMeasureInt64('transfer/failures', MeasureUnit.UNIT); -const claimDurationSec = globalStats.createMeasureDouble('claim/duration', MeasureUnit.SEC); -const claimFailures = globalStats.createMeasureInt64('claim/failures', MeasureUnit.UNIT); -const invokeDurationSec = globalStats.createMeasureDouble('invoke/duration', MeasureUnit.SEC); -const invokeFailures = globalStats.createMeasureInt64('invoke/failures', MeasureUnit.UNIT); - -const NEO_TRANSFER_DURATION_SECONDS = globalStats.createView( - 'neo_transfer_duration_seconds', - transferDurationSec, - AggregationType.DISTRIBUTION, - [], - 'transfer durations in seconds', - [1, 2, 5, 7.5, 10, 12.5, 15, 17.5, 20], -); -globalStats.registerView(NEO_TRANSFER_DURATION_SECONDS); - -const NEO_TRANSFER_FAILURES_TOTAL = globalStats.createView( - 'neo_transfer_failures_total', - transferFailures, - AggregationType.COUNT, - [], - 'total transfer failures', -); -globalStats.registerView(NEO_TRANSFER_FAILURES_TOTAL); - -const NEO_CLAIM_DURATION_SECONDS = globalStats.createView( - 'neo_claim_duration_seconds', - claimDurationSec, - AggregationType.DISTRIBUTION, - [], - 'claim durations in seconds', - [1, 2, 5, 7.5, 10, 12.5, 15, 17.5, 20], -); -globalStats.registerView(NEO_CLAIM_DURATION_SECONDS); - -const NEO_CLAIM_FAILURES_TOTAL = globalStats.createView( - 'neo_claims_failures_total', - claimFailures, - AggregationType.COUNT, - [], - 'total claims failures', -); -globalStats.registerView(NEO_CLAIM_FAILURES_TOTAL); - -const NEO_INVOKE_RAW_DURATION_SECONDS = globalStats.createView( - 'neo_invoke_raw_duration_seconds', - invokeDurationSec, - AggregationType.DISTRIBUTION, - [invokeTag], - 'invoke durations in seconds', - [1, 2, 5, 7.5, 10, 12.5, 15, 17.5, 20], -); -globalStats.registerView(NEO_INVOKE_RAW_DURATION_SECONDS); - -const NEO_INVOKE_RAW_FAILURES_TOTAL = globalStats.createView( - 'neo_invoke_raw_failures_total', - invokeFailures, - AggregationType.COUNT, - [invokeTag], - 'total invocation failures', -); -globalStats.registerView(NEO_INVOKE_RAW_FAILURES_TOTAL); - interface FullTransfer extends Transfer { readonly from: UserAccountID; } export abstract class UserAccountProviderBase { public readonly provider: TProvider; - public readonly iterActionsRaw?: (network: NetworkType, options?: IterOptions) => AsyncIterable; - protected readonly mutableUsedOutputs: Set; protected mutableBlockCount: number; public constructor({ provider }: { readonly provider: TProvider }) { this.provider = provider; this.mutableBlockCount = 0; - this.mutableUsedOutputs = new Set(); - - const iterActionsRaw = this.provider.iterActionsRaw; - if (iterActionsRaw !== undefined) { - this.iterActionsRaw = iterActionsRaw.bind(this.provider); - } } public getCurrentUserAccount(): UserAccount | undefined { @@ -292,30 +190,22 @@ export abstract class UserAccountProviderBase { return this.provider.getAccount(network, address); } - public async transfer( - transfers: readonly Transfer[], - options?: TransactionOptions, - ): Promise> { - const { from, attributes, networkFee } = this.getTransactionOptions(options); - - return this.capture(async () => this.executeTransfer(transfers, from, attributes, networkFee), { - name: 'neo_transfer', - measures: { - total: transferDurationSec, - error: transferFailures, + public async transfer(transfers: readonly Transfer[], options?: TransactionOptions): Promise { + const { from, attributes, maxNetworkFee, maxSystemFee, validBlockCount } = this.getTransactionOptions(options); + + return this.capture( + async () => this.executeTransfer(transfers, from, attributes, maxNetworkFee, maxSystemFee, validBlockCount), + { + name: 'neo_transfer', }, - }); + ); } - public async claim(options?: TransactionOptions): Promise> { - const { from, attributes, networkFee } = this.getTransactionOptions(options); + public async claim(options?: TransactionOptions): Promise { + const { from, attributes, maxNetworkFee, maxSystemFee, validBlockCount } = this.getTransactionOptions(options); - return this.capture(async () => this.executeClaim(from, attributes, networkFee), { + return this.capture(async () => this.executeClaim(from, attributes, maxNetworkFee, maxSystemFee, validBlockCount), { name: 'neo_claim', - measures: { - total: claimDurationSec, - error: claimFailures, - }, }); } @@ -327,7 +217,7 @@ export abstract class UserAccountProviderBase { verify: boolean, options: InvokeSendUnsafeReceiveTransactionOptions = {}, sourceMaps: SourceMaps = {}, - ): Promise> { + ): Promise> { const { attributes = [] } = options; const transactionOptions = this.getTransactionOptions(options); const { from } = transactionOptions; @@ -366,12 +256,15 @@ export abstract class UserAccountProviderBase { onConfirm: ({ receipt, data }): RawInvokeReceipt => ({ blockIndex: receipt.blockIndex, blockHash: receipt.blockHash, + blockTime: receipt.blockTime, transactionIndex: receipt.transactionIndex, + transactionHash: receipt.transactionHash, globalIndex: receipt.globalIndex, + confirmations: receipt.confirmations, result: data.result, actions: data.actions, }), - scripts: this.getInvokeScripts( + witnesses: this.getInvokeScripts( method, params, verify && (options.sendFrom !== undefined || options.sendTo !== undefined), @@ -384,6 +277,7 @@ export abstract class UserAccountProviderBase { }); } + // TODO? public async invokeSend( contract: AddressString, method: string, @@ -392,7 +286,7 @@ export abstract class UserAccountProviderBase { transfer: Transfer, options: TransactionOptions = {}, sourceMaps: SourceMaps = {}, - ): Promise> { + ): Promise> { const transactionOptions = this.getTransactionOptions(options); const { from, attributes } = transactionOptions; @@ -413,15 +307,19 @@ export abstract class UserAccountProviderBase { ...transactionOptions, attributes: attributes.concat(this.getInvokeAttributes(contract, method, paramsZipped, false, from.address)), }, + // TODO: fix onConfirm onConfirm: ({ receipt, data }): RawInvokeReceipt => ({ blockIndex: receipt.blockIndex, blockHash: receipt.blockHash, + blockTime: receipt.blockTime, transactionIndex: receipt.transactionIndex, + transactionHash: receipt.transactionHash, globalIndex: receipt.globalIndex, + confirmations: receipt.confirmations, result: data.result, actions: data.actions, }), - scripts: this.getInvokeScripts(method, params, true), + witnesses: this.getInvokeScripts(method, params, true), transfers: [ { ...transfer, @@ -429,18 +327,6 @@ export abstract class UserAccountProviderBase { from: contractID, }, ], - reorderOutputs: (outputs) => { - const output = outputs.find(({ value }) => value.isEqualTo(transfer.amount)); - if (output === undefined) { - throw new Error('Something went wrong.'); - } - const outputIdx = outputs.indexOf(output); - if (outputIdx === -1) { - throw new Error('Something went wrong.'); - } - - return [outputs[outputIdx]].concat(outputs.slice(0, outputIdx)).concat(outputs.slice(outputIdx + 1)); - }, method: 'invokeSend', labels: { [Labels.INVOKE_METHOD]: method, @@ -449,6 +335,7 @@ export abstract class UserAccountProviderBase { }); } + // TODO: finalize after compiler (need to open issue) public async invokeCompleteSend( contract: AddressString, method: string, @@ -457,19 +344,11 @@ export abstract class UserAccountProviderBase { hash: Hash256String, options: TransactionOptions = {}, sourceMaps: SourceMaps = {}, - ): Promise> { + ): Promise> { const transactionOptions = this.getTransactionOptions(options); const { from, attributes } = transactionOptions; const sendTransaction = await this.provider.getTransaction(from.network, hash); - if (sendTransaction.outputs.length === 0) { - throw new NothingToSendError(); - } - const sendInput = { hash, index: 0 }; - const sendOutput = { - ...sendTransaction.outputs[0], - address: from.address, - }; return this.invokeRaw({ invokeMethodOptionsOrScript: { @@ -481,17 +360,19 @@ export abstract class UserAccountProviderBase { ...transactionOptions, attributes: attributes.concat(this.getInvokeAttributes(contract, method, paramsZipped, false, from.address)), }, + // TODO: fix onConfirm onConfirm: ({ receipt, data }): RawInvokeReceipt => ({ blockIndex: receipt.blockIndex, blockHash: receipt.blockHash, + blockTime: receipt.blockTime, transactionIndex: receipt.transactionIndex, + transactionHash: receipt.transactionHash, globalIndex: receipt.globalIndex, + confirmations: receipt.confirmations, result: data.result, actions: data.actions, }), - scripts: this.getInvokeScripts(method, params, true), - rawInputs: [sendInput], - rawOutputs: [sendOutput], + witnesses: this.getInvokeScripts(method, params, true), method: 'invokeCompleteSend', labels: { [Labels.INVOKE_METHOD]: method, @@ -500,6 +381,7 @@ export abstract class UserAccountProviderBase { }); } + // TODO: finalize after compiler (need to open issue) public async invokeRefundAssets( contract: AddressString, method: string, @@ -508,26 +390,11 @@ export abstract class UserAccountProviderBase { hash: Hash256String, options: TransactionOptions = {}, sourceMaps: SourceMaps = {}, - ): Promise> { + ): Promise> { const transactionOptions = this.getTransactionOptions(options); const { from, attributes } = transactionOptions; const refundTransaction = await this.provider.getTransaction(from.network, hash); - const refundOutputs = refundTransaction.outputs - .map((output, idx) => ({ output, idx })) - .filter(({ output }) => output.address === contract); - const inputs = refundOutputs.map(({ idx }) => ({ hash, index: idx })); - const outputs = Object.entries(_.groupBy(refundOutputs.map(({ output }) => output), (output) => output.asset)).map( - ([asset, assetOutputs]) => ({ - address: from.address, - asset, - value: assetOutputs.reduce((acc, output) => acc.plus(output.value), new BigNumber('0')), - }), - ); - - if (inputs.length === 0) { - throw new NothingToRefundError(); - } return this.invokeRaw({ invokeMethodOptionsOrScript: { @@ -539,17 +406,19 @@ export abstract class UserAccountProviderBase { ...transactionOptions, attributes: attributes.concat(this.getInvokeAttributes(contract, method, paramsZipped, false, from.address)), }, + // TODO: fix onConfirm onConfirm: ({ receipt, data }): RawInvokeReceipt => ({ blockIndex: receipt.blockIndex, blockHash: receipt.blockHash, + blockTime: receipt.blockTime, transactionIndex: receipt.transactionIndex, + transactionHash: receipt.transactionHash, globalIndex: receipt.globalIndex, + confirmations: receipt.confirmations, result: data.result, actions: data.actions, }), - scripts: this.getInvokeScripts(method, params, true), - rawInputs: inputs, - rawOutputs: outputs, + witnesses: this.getInvokeScripts(method, params, true), method: 'invokeRefundAssets', labels: { [Labels.INVOKE_METHOD]: method, @@ -565,30 +434,20 @@ export abstract class UserAccountProviderBase { paramsZipped: ReadonlyArray, options: TransactionOptions = {}, sourceMaps: SourceMaps = {}, - ): Promise> { - const { from, attributes, networkFee } = this.getTransactionOptions(options); + ): Promise { + const { from, attributes } = this.getTransactionOptions(options); return this.capture( async () => { - const [{ unclaimed, amount }, { inputs, outputs }] = await Promise.all([ - this.provider.getUnclaimed(from.network, contract), - this.getTransfersInputOutputs({ - from, - gas: networkFee, - transfers: [], - }), - ]); - - if (unclaimed.length === 0) { + const unclaimedAmount = await this.provider.getUnclaimed(from.network, contract); + + if (unclaimedAmount.lte(new BigNumber(0))) { throw new NothingToClaimError(from); } return this.executeInvokeClaim({ contract, - inputs, - outputs, - unclaimed, - amount, + unclaimedAmount, attributes, from, method, @@ -599,10 +458,6 @@ export abstract class UserAccountProviderBase { }, { name: 'neo_invoke_claim', - measures: { - total: claimDurationSec, - error: claimFailures, - }, }, ); } @@ -616,11 +471,38 @@ export abstract class UserAccountProviderBase { return this.provider.call(network, contract, method, params); } - protected getTransactionOptions(options: TransactionOptions = {}): TransactionOptionsFull { - const { attributes = [], networkFee = utils.ZERO_BIG_NUMBER, systemFee = utils.ZERO_BIG_NUMBER } = options; + public async getSystemFee({ + network, + transaction, + maxFee, + }: { + readonly network: NetworkType; + readonly transaction: TransactionModel; + readonly maxFee: BigNumber; + }): Promise { + const callReceipt = await this.provider.testTransaction(network, transaction); + if (callReceipt.state === 'FAULT') { + throw new InvokeError(callReceipt.state); + } + + const gas = callReceipt.gasConsumed.integerValue(BigNumber.ROUND_UP); + if (gas.gt(utils.ZERO_BIG_NUMBER) && maxFee.lt(gas) && !maxFee.eq(utils.NEGATIVE_ONE_BIG_NUMBER)) { + throw new InsufficientSystemFeeError(maxFee, gas); + } + + return gas; + } - const { from: fromIn } = options; + protected getTransactionOptions(options: TransactionOptions = {}): TransactionOptionsFull { + const { + attributes = [], + maxNetworkFee = utils.ZERO_BIG_NUMBER, + maxSystemFee = utils.ZERO_BIG_NUMBER, + from: fromIn, + validBlockCount = TransactionModel.maxValidBlockIncrement - 1, + } = options; let from = fromIn; + if (from === undefined) { const fromAccount = this.getCurrentUserAccount(); if (fromAccount === undefined) { @@ -631,42 +513,22 @@ export abstract class UserAccountProviderBase { return { from, - attributes: attributes.concat([NEO_ONE_ATTRIBUTE]), - networkFee, - systemFee, + attributes, + maxNetworkFee, + maxSystemFee, + validBlockCount, }; } + // Keep this for now for if they add back transaction attributes later protected getInvokeAttributes( - contract: AddressString, - method: string, - paramsZipped: ReadonlyArray, - verify: boolean, - from?: AddressString, + _contract: AddressString, + _method: string, + _paramsZipped: ReadonlyArray, + _verify: boolean, + _from?: AddressString, ): readonly Attribute[] { - return [ - { - usage: 'Remark14', - data: Buffer.from( - `neo-one-invoke:${this.getInvokeAttributeTag(contract, method, paramsZipped)}`, - 'utf8', - ).toString('hex'), - }, - verify - ? ({ - usage: 'Script', - data: contract, - // tslint:disable-next-line no-any - } as any) - : undefined, - from === undefined - ? undefined - : ({ - usage: 'Script', - data: from, - // tslint:disable-next-line no-any - } as any), - ].filter(commonUtils.notNull); + return [].filter(commonUtils.notNull); } protected getInvokeScripts( @@ -687,437 +549,15 @@ export abstract class UserAccountProviderBase { ].filter(commonUtils.notNull); } - protected async consolidate({ - inputs, - transactionUnsignedIn, - from, - byteLimit, - }: { - readonly transactionUnsignedIn: TransactionBaseModel; - readonly inputs: readonly InputOutput[]; - readonly from: UserAccountID; - readonly byteLimit: number; - }): Promise { - const messageSize = transactionUnsignedIn.serializeUnsigned().length; - - const getMessageSize = ({ - numNewInputs, - numNewOutputs = 0, - }: { - readonly numNewInputs: number; - readonly numNewOutputs?: number; - }): number => messageSize + numNewInputs * InputModel.size + numNewOutputs * OutputModel.size; - - const { unspentOutputs: consolidatableUnspents } = await this.getUnspentOutputs({ from }); - const assetToInputOutputsUnsorted = consolidatableUnspents - .filter((unspent) => !inputs.some((input) => unspent.hash === input.hash && unspent.index === input.index)) - .reduce<{ [key: string]: readonly InputOutput[] }>((acc, unspent) => { - if ((acc[unspent.asset] as readonly InputOutput[] | undefined) !== undefined) { - return { - ...acc, - [unspent.asset]: acc[unspent.asset].concat([unspent]), - }; - } - - return { - ...acc, - [unspent.asset]: [unspent], - }; - }, {}); - - const assetToInputOutputs = Object.entries(assetToInputOutputsUnsorted).reduce( - (acc: typeof assetToInputOutputsUnsorted, [_asset, outputs]) => ({ - ...acc, - [_asset]: outputs.slice().sort((coinA, coinB) => coinA.value.comparedTo(coinB.value)), - }), - assetToInputOutputsUnsorted, - ); - - const { newInputs, updatedOutputs, remainingAssetToInputOutputs } = transactionUnsignedIn.outputs.reduce( - ( - acc: { - readonly newInputs: readonly InputModel[]; - readonly updatedOutputs: readonly OutputModel[]; - readonly remainingAssetToInputOutputs: typeof assetToInputOutputs; - }, - output, - ) => { - const asset = common.uInt256ToString(output.asset); - - const unspentOutputsIn = acc.remainingAssetToInputOutputs[asset] as readonly InputOutput[] | undefined; - - const unspentOutputs = - unspentOutputsIn === undefined || common.uInt160ToString(output.address) !== addressToScriptHash(from.address) - ? [] - : acc.remainingAssetToInputOutputs[asset]; - - const tempIns = unspentOutputs.slice( - 0, - Math.max( - Math.floor((byteLimit - getMessageSize({ numNewInputs: acc.newInputs.length })) / InputModel.size), - 0, - ), - ); - - return { - newInputs: acc.newInputs.concat(this.convertInputs(tempIns)), - updatedOutputs: acc.updatedOutputs.concat([ - output.clone({ - value: output.value.add( - utils.bigNumberToBN(tempIns.reduce((left, right) => left.plus(right.value), new BigNumber('0')), 8), - ), - }), - ]), - - remainingAssetToInputOutputs: - unspentOutputsIn === undefined - ? acc.remainingAssetToInputOutputs - : { - ...acc.remainingAssetToInputOutputs, - [asset]: unspentOutputsIn.slice(tempIns.length), - }, - }; - }, - { - newInputs: [], - updatedOutputs: [], - remainingAssetToInputOutputs: assetToInputOutputs, - }, - ); - - const { finalInputs, newOutputs } = _.sortBy( - // tslint:disable-next-line no-unused - Object.entries(remainingAssetToInputOutputs).filter(([_asset, outputs]) => outputs.length >= 2), - ([asset]) => { - if (asset === common.NEO_ASSET_HASH) { - return 0; - } - - if (asset === common.GAS_ASSET_HASH) { - return 1; - } - - return 2; - }, - ).reduce( - ( - acc: { - readonly finalInputs: readonly InputModel[]; - readonly newOutputs: readonly OutputModel[]; - }, - [asset, outputs], - ) => { - const newUnspents = outputs.slice( - 0, - Math.max( - 0, - Math.floor( - (byteLimit - - getMessageSize({ numNewInputs: acc.finalInputs.length, numNewOutputs: acc.newOutputs.length }) - - OutputModel.size) / - InputModel.size, - ), - ), - ); - - return { - finalInputs: acc.finalInputs.concat(this.convertInputs(newUnspents)), - newOutputs: - newUnspents.length === 0 - ? acc.newOutputs - : acc.newOutputs.concat( - this.convertOutputs([ - { - asset, - value: newUnspents.reduce((left, right) => left.plus(right.value), new BigNumber('0')), - address: from.address, - }, - ]), - ), - }; - }, - { finalInputs: newInputs, newOutputs: [] }, - ); - - return transactionUnsignedIn.clone({ - inputs: transactionUnsignedIn.inputs.concat(finalInputs), - outputs: updatedOutputs.concat(newOutputs), - }); - } - - /* - This function returns one of two options: - 1. For invocations -> 2 witnesses - 2. All else -> 1 witness - We do some basic verification to make sure our assumptions at this point are - correct, that is: - - If we have 2 script attributes: - - 1 of them is = to scriptHash - - We have 1 witness - - If we have 1 script attribute and it is = to script hash - - We have 0 witness - - If we have 1 script attribute and it is != to script hash - - We have 1 witness - */ protected addWitness({ transaction, - inputOutputs, - address, witness, }: { - readonly transaction: TransactionBaseModel; - readonly inputOutputs: readonly Output[]; - readonly address: AddressString; + readonly transaction: TransactionModel; readonly witness: WitnessModel; - }): TransactionBaseModel { - const scriptAttributes = transaction.attributes.filter( - (attribute): attribute is UInt160AttributeModel => attribute.usage === AttributeUsageModel.Script, - ); - const scriptHash = addressToScriptHash(address); - const scriptHashes = [ - ...new Set( - inputOutputs - .map((inputOutput) => addressToScriptHash(inputOutput.address)) - .concat(scriptAttributes.map((attribute) => common.uInt160ToString(attribute.value))), - ), - ].filter((otherHash) => otherHash !== scriptHash); - - if (scriptHashes.length === 1) { - if (transaction.scripts.length !== 1) { - throw new InvalidTransactionError('Something went wrong! Expected 1 script.'); - } - - const otherHash = scriptHashes[0]; - const otherScript = transaction.scripts[0]; - - return transaction.clone({ - scripts: _.sortBy<[string, WitnessModel]>( - [[scriptHash, witness], [otherHash, otherScript]], - [(value: [string, WitnessModel]) => value[0]], - ).map((value) => value[1]), - }); - } - - if (scriptHashes.length === 0) { - if (transaction.scripts.length !== 0) { - throw new InvalidTransactionError('Something went wrong! Expected 0 scripts.'); - } - - return transaction.clone({ scripts: [witness] }); - } - - throw new InvalidTransactionError('Something went wrong!'); - } - - protected async getUnspentOutputs({ - from, - }: { - readonly from: UserAccountID; - }): Promise<{ readonly unspentOutputs: readonly InputOutput[]; readonly wasFiltered: boolean }> { - const [newBlockCount, allUnspentsIn] = await Promise.all([ - this.provider.getBlockCount(from.network), - this.provider.getUnspentOutputs(from.network, from.address), - ]); - if (newBlockCount !== this.mutableBlockCount) { - this.mutableUsedOutputs.clear(); - this.mutableBlockCount = newBlockCount; - } - const unspentOutputs = allUnspentsIn.filter( - (unspent) => !this.mutableUsedOutputs.has(`${unspent.hash}:${unspent.index}`), - ); - const wasFiltered = allUnspentsIn.length !== unspentOutputs.length; - - return { unspentOutputs, wasFiltered }; - } - - protected async getTransfersInputOutputs({ - transfers, - from, - gas, - }: { - readonly transfers: readonly FullTransfer[]; - readonly from: UserAccountID; - readonly gas: BigNumber; - }): Promise<{ readonly outputs: readonly Output[]; readonly inputs: readonly InputOutput[] }> { - if (transfers.length === 0 && gas.lte(utils.ZERO_BIG_NUMBER)) { - return { inputs: [], outputs: [] }; - } - - const mutableGroupedTransfers = _.groupBy(transfers, ({ from: transferFrom }) => transferFrom.address); - if (gas.isGreaterThan(utils.ZERO_BIG_NUMBER)) { - const fromTransfers = mutableGroupedTransfers[from.address] as readonly FullTransfer[] | undefined; - const newTransfer: FullTransfer = { - from, - amount: gas, - asset: common.GAS_ASSET_HASH, - // tslint:disable-next-line no-any - } as any; - mutableGroupedTransfers[from.address] = - fromTransfers === undefined ? [newTransfer] : fromTransfers.concat([newTransfer]); - } - - const results = await Promise.all( - Object.values(mutableGroupedTransfers).map(async (transfersFrom) => - this.getTransfersInputOutputsFrom({ - transfers: transfersFrom, - from: transfersFrom[0].from, - }), - ), - ); - - return results.reduce( - (acc, { outputs, inputs }) => ({ - outputs: acc.outputs.concat(outputs), - inputs: acc.inputs.concat(inputs), - }), - { outputs: [], inputs: [] }, - ); - } - - protected async getTransfersInputOutputsFrom({ - transfers, - from, - }: { - readonly transfers: readonly Transfer[]; - readonly from: UserAccountID; - }): Promise<{ readonly outputs: readonly Output[]; readonly inputs: readonly InputOutput[] }> { - const { unspentOutputs: allOutputs, wasFiltered } = await this.getUnspentOutputs({ from }); - - return Object.values(_.groupBy(transfers, ({ asset }) => asset)).reduce( - (acc, toByAsset) => { - const { asset } = toByAsset[0]; - const assetResults = toByAsset.reduce<{ - remaining: BigNumber; - remainingOutputs: readonly InputOutput[]; - inputs: readonly InputOutput[]; - outputs: readonly Output[]; - }>( - ({ remaining, remainingOutputs, inputs, outputs: innerOutputs }, { amount, to }) => { - const result = this.getTransferInputOutputs({ - from: from.address, - to, - asset, - amount, - remainingOutputs, - remaining, - wasFiltered, - }); - - return { - remaining: result.remaining, - remainingOutputs: result.remainingOutputs, - inputs: inputs.concat(result.inputs), - outputs: innerOutputs.concat(result.outputs), - }; - }, - { - remaining: utils.ZERO_BIG_NUMBER, - remainingOutputs: allOutputs.filter((output) => output.asset === asset), - inputs: [], - outputs: [], - }, - ); - - let outputs = acc.outputs.concat(assetResults.outputs); - if (assetResults.remaining.gt(utils.ZERO_BIG_NUMBER)) { - outputs = outputs.concat([ - { - address: from.address, - asset, - value: assetResults.remaining, - }, - ]); - } - - return { - inputs: acc.inputs.concat(assetResults.inputs), - outputs, - }; - }, - { inputs: [] as ReadonlyArray, outputs: [] as ReadonlyArray }, - ); - } - - protected getTransferInputOutputs({ - to, - amount: originalAmount, - asset, - remainingOutputs, - remaining, - wasFiltered, - }: { - readonly from: AddressString; - readonly to?: AddressString; - readonly amount: BigNumber; - readonly asset: Hash256String; - readonly remainingOutputs: readonly InputOutput[]; - readonly remaining: BigNumber; - readonly wasFiltered: boolean; - }): { - readonly inputs: readonly InputOutput[]; - readonly outputs: readonly Output[]; - readonly remainingOutputs: readonly InputOutput[]; - readonly remaining: BigNumber; - } { - const amount = originalAmount.minus(remaining); - - const outputs: ReadonlyArray = - to === undefined - ? [] - : [ - { - address: to, - asset, - value: originalAmount, - }, - ]; - - if (amount.lte(utils.ZERO_BIG_NUMBER)) { - return { - inputs: [], - outputs, - remainingOutputs, - remaining: remaining.minus(originalAmount), - }; - } - - const outputsOrdered = remainingOutputs.slice().sort((coinA, coinB) => coinA.value.comparedTo(coinB.value) * -1); - - const sum = outputsOrdered.reduce((acc, coin) => acc.plus(coin.value), utils.ZERO_BIG_NUMBER); - - if (sum.lt(amount)) { - if (wasFiltered) { - throw new FundsInUseError(sum, amount, this.mutableUsedOutputs.size); - } - throw new InsufficientFundsError(sum, amount); - } - - // find input coins - let k = 0; - let amountRemaining = amount.plus(utils.ZERO_BIG_NUMBER); - // tslint:disable-next-line no-loop-statement - while (outputsOrdered[k].value.lte(amountRemaining)) { - amountRemaining = amountRemaining.minus(outputsOrdered[k].value); - if (amountRemaining.isEqualTo(utils.ZERO_BIG_NUMBER)) { - break; - } - k += 1; - } - - let coinAmount = utils.ZERO_BIG_NUMBER; - const mutableInputs: InputOutput[] = []; - // tslint:disable-next-line no-loop-statement - for (let i = 0; i < k + 1; i += 1) { - coinAmount = coinAmount.plus(outputsOrdered[i].value); - mutableInputs.push(outputsOrdered[i]); - } - - return { - inputs: mutableInputs, - outputs, - remainingOutputs: outputsOrdered.slice(k + 1), - remaining: coinAmount.minus(amount), - }; + }): TransactionModel { + // TODO: what kind of sorting needs to be done with the existing witnesses? + return transaction.clone({ witnesses: [witness] }); } protected getInvokeAttributeTag( @@ -1156,14 +596,6 @@ export abstract class UserAccountProviderBase { return attributes.map((attribute) => converters.attribute(attribute)); } - protected convertInputs(inputs: readonly Input[]): readonly InputModel[] { - return inputs.map((input) => converters.input(input)); - } - - protected convertOutputs(outputs: readonly Output[]): readonly OutputModel[] { - return outputs.map((output) => converters.output(output)); - } - protected convertWitness(script: Witness): WitnessModel { return converters.witness(script); } @@ -1173,208 +605,97 @@ export abstract class UserAccountProviderBase { { name, labels = {}, - measures, invoke = false, }: { readonly name: string; readonly labels?: Record; - readonly measures?: { - readonly total?: Measure; - readonly error?: Measure; - }; readonly invoke?: boolean; }, ): Promise { - const tags = new TagMap(); if (invoke) { const value = labels[Labels.INVOKE_RAW_METHOD]; // tslint:disable-next-line: strict-type-predicates if (value === undefined) { - throw new Error('invocation should have a invoke method'); + throw new Error('Invocation should have an invoke method'); } - tags.set(invokeTag, { value }); } - const startTime = commonUtils.nowSeconds(); try { const result = await func(); logger('%o', { name, level: 'verbose', ...labels }); - if (measures !== undefined && measures.total !== undefined) { - globalStats.record( - [ - { - measure: measures.total, - value: commonUtils.nowSeconds() - startTime, - }, - ], - tags, - ); - } return result; } catch (error) { logger('%o', { name, level: 'error', error: error.message, ...labels }); - if (measures !== undefined && measures.error !== undefined) { - globalStats.record( - [ - { - measure: measures.error, - value: 1, - }, - ], - tags, - ); - } throw error; } } - protected async checkSystemFees({ - script, - transfers = [], - from, - networkFee, - systemFee, - attributes: attributesIn = [], - rawInputs = [], - rawOutputs = [], - scripts = [], - sourceMaps, - reorderOutputs = (outputs) => outputs, - }: { - readonly script: Buffer; - readonly transfers?: ReadonlyArray; - readonly from: UserAccountID; - readonly networkFee: BigNumber; - readonly systemFee: BigNumber; - readonly attributes?: ReadonlyArray; - readonly rawInputs?: ReadonlyArray; - readonly rawOutputs?: ReadonlyArray; - readonly scripts?: ReadonlyArray; - readonly sourceMaps?: SourceMaps; - readonly reorderOutputs?: (outputs: ReadonlyArray) => ReadonlyArray; - }): Promise<{ - readonly gas: BigNumber; - readonly attributes: ReadonlyArray; - }> { - const { inputs: testInputs, outputs: testOutputs } = await this.getTransfersInputOutputs({ - transfers, - from, - gas: networkFee, - }); - - const attributes = attributesIn.concat({ - usage: 'Remark15', - data: Buffer.from(`${utils.randomUInt()}`, 'utf8').toString('hex'), - }); - - const testTransaction = new InvocationTransactionModel({ - version: 1, - inputs: this.convertInputs(rawInputs.concat(testInputs)), - outputs: this.convertOutputs(reorderOutputs(rawOutputs.concat(testOutputs))), - attributes: this.convertAttributes(attributes), - gas: common.TEN_THOUSAND_FIXED8, - script, - scripts, - }); - - const callReceipt = await this.provider.testInvoke(from.network, testTransaction.serializeWire().toString('hex')); - - if (callReceipt.result.state === 'FAULT') { - const message = await processActionsAndMessage({ - actions: callReceipt.actions, - message: callReceipt.result.message, - sourceMaps, - }); - throw new InvokeError(message); - } - - const gas = callReceipt.result.gasConsumed.integerValue(BigNumber.ROUND_UP); - if (gas.gt(utils.ZERO_BIG_NUMBER) && systemFee.lt(gas) && !systemFee.eq(utils.NEGATIVE_ONE_BIG_NUMBER)) { - throw new InsufficientSystemFeeError(systemFee, gas); - } - - return { gas, attributes }; - } - protected abstract async executeInvokeMethod( options: ExecuteInvokeMethodOptions, - ): Promise>; + ): Promise>; protected abstract async executeInvokeScript( options: ExecuteInvokeScriptOptions, - ): Promise>; + ): Promise>; - protected abstract async executeInvokeClaim( - options: ExecuteInvokeClaimOptions, - ): Promise>; + protected abstract async executeInvokeClaim(options: ExecuteInvokeClaimOptions): Promise; protected abstract async executeTransfer( transfers: readonly Transfer[], from: UserAccountID, attributes: readonly Attribute[], - networkFee: BigNumber, - ): Promise>; + maxNetworkFee: BigNumber, + maxSystemFee: BigNumber, + validBlockCount: number, + ): Promise; protected abstract async executeClaim( from: UserAccountID, attributes: readonly Attribute[], - networkFee: BigNumber, - ): Promise>; + maxNetworkFee: BigNumber, + maxSystemFee: BigNumber, + validBlockCount: number, + ): Promise; protected async invokeRaw({ invokeMethodOptionsOrScript, - transfers = [], options = {}, onConfirm, method, verify = true, - scripts = [], + witnesses = [], labels = {}, - rawInputs = [], - rawOutputs = [], sourceMaps, - reorderOutputs = (outputs) => outputs, + networkFee, }: InvokeRawOptions) { - const { from, attributes: attributesIn, networkFee, systemFee } = this.getTransactionOptions(options); + const { from, attributes: attributesIn } = this.getTransactionOptions(options); const { script, invokeMethodOptions } = this.getScriptAndInvokeMethodOptions(invokeMethodOptionsOrScript); return this.capture( async () => { - const { gas, attributes } = await this.checkSystemFees({ + const { gas: systemFee, attributes } = await this.getSystemFee({ script, - transfers, - from, - networkFee, - systemFee, + network: from.network, attributes: attributesIn, - rawInputs, - rawOutputs, - scripts, - sourceMaps, - reorderOutputs, + witnesses, }); - const { inputs, outputs } = await this.getTransfersInputOutputs({ - transfers, - from, - gas: networkFee.plus(gas), - }); + // TODO: do we need to use networkFee.plus(gas)? + // where does network fee come in? Note that Spencer just added "networkFee" in here. see how it was used before + // Need to finalize executeInvoke method in LUAP first to know what needs to be passed in here + // and ultimately what needs to be passed into invokeRaw return invokeMethodOptions === undefined ? this.executeInvokeScript({ script, from, attributes, - inputs, - outputs, - rawInputs, - rawOutputs, - gas, + systemFee, + networkFee, verify, - scripts, - reorderOutputs, + witnesses, onConfirm, sourceMaps, }) @@ -1383,14 +704,10 @@ export abstract class UserAccountProviderBase { invokeMethodOptions, from, attributes, - inputs, - outputs, - rawInputs, - rawOutputs, - gas, + systemFee, + networkFee, verify, - scripts, - reorderOutputs, + witnesses, onConfirm, sourceMaps, }); @@ -1398,10 +715,6 @@ export abstract class UserAccountProviderBase { { name: 'neo_invoke_raw', invoke: true, - measures: { - total: invokeDurationSec, - error: invokeFailures, - }, labels: { [Labels.INVOKE_RAW_METHOD]: method, ...labels, diff --git a/packages/neo-one-client-core/src/user/converters/attribute.ts b/packages/neo-one-client-core/src/user/converters/attribute.ts index 3e5bf583b7..46fceb2ff8 100644 --- a/packages/neo-one-client-core/src/user/converters/attribute.ts +++ b/packages/neo-one-client-core/src/user/converters/attribute.ts @@ -1,57 +1,8 @@ -import { - addressToScriptHash, - Attribute, - AttributeModel, - AttributeUsageModel, - BufferAttributeModel, - common, - ECPointAttributeModel, - toAttributeUsage, - UInt160AttributeModel, - UInt256AttributeModel, -} from '@neo-one/client-common'; +import { Attribute, AttributeModel, HighPriorityAttributeModel } from '@neo-one/client-common'; -// tslint:disable-next-line cyclomatic-complexity export const attribute = (attrib: Attribute): AttributeModel => { - const usage = toAttributeUsage(attrib.usage); - switch (usage) { - case AttributeUsageModel.DescriptionUrl: - case AttributeUsageModel.Description: - case AttributeUsageModel.Remark: - case AttributeUsageModel.Remark1: - case AttributeUsageModel.Remark2: - case AttributeUsageModel.Remark3: - case AttributeUsageModel.Remark4: - case AttributeUsageModel.Remark5: - case AttributeUsageModel.Remark6: - case AttributeUsageModel.Remark7: - case AttributeUsageModel.Remark8: - case AttributeUsageModel.Remark9: - case AttributeUsageModel.Remark10: - case AttributeUsageModel.Remark11: - case AttributeUsageModel.Remark12: - case AttributeUsageModel.Remark13: - case AttributeUsageModel.Remark14: - case AttributeUsageModel.Remark15: - return new BufferAttributeModel({ - usage, - value: Buffer.from(attrib.data, 'hex'), - }); - case AttributeUsageModel.ECDH02: - case AttributeUsageModel.ECDH03: - return new ECPointAttributeModel({ - usage, - value: common.stringToECPoint(attrib.data), - }); - case AttributeUsageModel.Script: - return new UInt160AttributeModel({ - usage, - value: common.stringToUInt160(addressToScriptHash(attrib.data)), - }); + switch (attrib.type) { default: - return new UInt256AttributeModel({ - usage, - value: common.stringToUInt256(attrib.data), - }); + return new HighPriorityAttributeModel(); } }; diff --git a/packages/neo-one-client-core/src/user/converters/index.ts b/packages/neo-one-client-core/src/user/converters/index.ts index 446e5451ca..d88e740eea 100644 --- a/packages/neo-one-client-core/src/user/converters/index.ts +++ b/packages/neo-one-client-core/src/user/converters/index.ts @@ -1,12 +1,8 @@ import { attribute } from './attribute'; -import { input } from './input'; -import { output } from './output'; import { witness } from './witness'; // tslint:disable-next-line export-name export const converters = { attribute, - input, - output, witness, }; diff --git a/packages/neo-one-client-core/src/user/converters/input.ts b/packages/neo-one-client-core/src/user/converters/input.ts deleted file mode 100644 index 5e73362cd0..0000000000 --- a/packages/neo-one-client-core/src/user/converters/input.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { common, Input, InputModel } from '@neo-one/client-common'; - -export const input = (inputLike: Input): InputModel => - new InputModel({ - hash: common.stringToUInt256(inputLike.hash), - index: inputLike.index, - }); diff --git a/packages/neo-one-client-core/src/user/converters/output.ts b/packages/neo-one-client-core/src/user/converters/output.ts deleted file mode 100644 index da6373fada..0000000000 --- a/packages/neo-one-client-core/src/user/converters/output.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { addressToScriptHash, common, Output, OutputModel, utils } from '@neo-one/client-common'; - -export const output = (outputLike: Output): OutputModel => - new OutputModel({ - address: common.stringToUInt160(addressToScriptHash(outputLike.address)), - asset: common.stringToUInt256(outputLike.asset), - value: utils.bigNumberToBN(outputLike.value, 8), - }); diff --git a/packages/neo-one-client-core/src/user/keystore/LocalHDHandler.ts b/packages/neo-one-client-core/src/user/keystore/LocalHDHandler.ts index 928724a393..0ad15f7d8f 100644 --- a/packages/neo-one-client-core/src/user/keystore/LocalHDHandler.ts +++ b/packages/neo-one-client-core/src/user/keystore/LocalHDHandler.ts @@ -92,8 +92,8 @@ export class LocalHDHandler implements HDHandler { } private async scanWallet(network: NetworkType, walletIndex: number, maxOffset?: number): Promise { - const externalPath = [walletIndex, 0] as const; - const internalPath = [walletIndex, 1] as const; + const externalPath: readonly [number, number] = [walletIndex, 0]; + const internalPath: readonly [number, number] = [walletIndex, 1]; const scannedChains = await Promise.all([ this.scanChain(network, externalPath, maxOffset), @@ -114,7 +114,7 @@ export class LocalHDHandler implements HDHandler { const scanChainInternal = async (start: number, currentOffset = 0): Promise => { const localHDAccounts = await Promise.all( _.range(start, start + maxOffset - currentOffset).map(async (num) => { - const path = [chainIndex[0], chainIndex[1], num] as const; + const path: readonly [number, number, number] = [chainIndex[0], chainIndex[1], num]; const key = await this.store.getPublicKey(path); return this.publicKeyToLocalHDAccount(path, key, network); diff --git a/packages/neo-one-client-core/src/user/keystore/LocalHDStore.ts b/packages/neo-one-client-core/src/user/keystore/LocalHDStore.ts index da580e8db1..37d86876f4 100644 --- a/packages/neo-one-client-core/src/user/keystore/LocalHDStore.ts +++ b/packages/neo-one-client-core/src/user/keystore/LocalHDStore.ts @@ -262,7 +262,7 @@ export class LocalHDStore implements HDLocalStore { } private async getAccount(path: LocalPath): Promise { - const chain = await this.getChain([path[0], path[1]] as const); + const chain = await this.getChain([path[0], path[1]]); const maybeAccount = chain.accounts[path[2]] as NodeAccount | undefined; if (maybeAccount !== undefined) { diff --git a/packages/neo-one-client-core/src/user/keystore/LocalKeyStore.ts b/packages/neo-one-client-core/src/user/keystore/LocalKeyStore.ts index 62554ab668..0d77f0179b 100644 --- a/packages/neo-one-client-core/src/user/keystore/LocalKeyStore.ts +++ b/packages/neo-one-client-core/src/user/keystore/LocalKeyStore.ts @@ -1,4 +1,5 @@ import { + AccountContract, BufferString, common, crypto, @@ -190,6 +191,7 @@ export class LocalKeyStore implements KeyStore { id: wallet.userAccount.id, name, publicKey: wallet.userAccount.publicKey, + contract: wallet.userAccount.contract, }; if (wallet.type === 'locked') { @@ -272,6 +274,8 @@ export class LocalKeyStore implements KeyStore { nep2 = await encryptNEP2({ privateKey, password }); } + const contract = AccountContract.createSignatureContract(common.stringToECPoint(publicKey)); + const userAccount = { id: { network, @@ -279,6 +283,7 @@ export class LocalKeyStore implements KeyStore { }, name: name === undefined ? address : name, publicKey, + contract, }; const unlockedWallet: UnlockedWallet = { @@ -305,6 +310,64 @@ export class LocalKeyStore implements KeyStore { }, 'neo_add_account'); } + /** + * not a true implementation, just serves as a helper for private net. + * @internal + */ + public async addMultiSigUserAccount({ + network, + privateKeys: privateKeysIn, + name, + }: { + readonly network: NetworkType; + readonly privateKeys: readonly BufferString[]; + readonly name?: string; + }): Promise { + await this.initPromise; + + return this.capture(async () => { + const pk = privateKeysIn[0]; + + const privateKey = args.assertPrivateKey('privateKey', pk); + const publicKey = privateKeyToPublicKey(privateKey); + const ecPoint = common.stringToECPoint(publicKey); + const address = crypto.scriptHashToAddress({ + addressVersion: common.NEO_ADDRESS_VERSION, + scriptHash: crypto.toScriptHash(crypto.createMultiSignatureVerificationScript(1, [ecPoint])), + }); + + const contract = AccountContract.createMultiSigContract(1, [ecPoint]); + + const userAccount = { + id: { + network, + address, + }, + name: name === undefined ? address : name, + publicKey, + contract, + }; + + const unlockedWallet: UnlockedWallet = { + type: 'unlocked', + userAccount, + privateKey, + }; + + const wallet: LocalWallet = unlockedWallet; + + await this.capture(async () => this.store.saveWallet(wallet), 'neo_save_wallet'); + + this.updateWallet(unlockedWallet); + + if (this.currentAccount === undefined) { + this.currentAccountInternal$.next(wallet.userAccount); + } + + return unlockedWallet; + }, 'neo_add_account'); + } + public async deleteUserAccount(id: UserAccountID): Promise { await this.initPromise; diff --git a/packages/neo-one-client-core/src/user/keystore/LocalStringStore.ts b/packages/neo-one-client-core/src/user/keystore/LocalStringStore.ts index a0810b2eff..01f14f5670 100644 --- a/packages/neo-one-client-core/src/user/keystore/LocalStringStore.ts +++ b/packages/neo-one-client-core/src/user/keystore/LocalStringStore.ts @@ -1,8 +1,9 @@ +import { AccountContract, UserAccountJSON } from '@neo-one/client-common'; import { PasswordRequiredError } from '../../errors'; -import { LocalStore, LocalWallet } from './LocalKeyStore'; +import { LocalStore, LocalWallet, LockedWallet, UnlockedWallet } from './LocalKeyStore'; /** - * Interfae that `LocalStringStore` requires to function. + * Interface that `LocalStringStore` requires to function. */ export interface LocalStringStoreStorage { /** @@ -23,6 +24,60 @@ export interface LocalStringStoreStorage { readonly getAllKeys: () => Promise; } +export interface LockedWalletJSON extends Omit { + readonly userAccount: UserAccountJSON; +} + +export interface UnlockedWalletJSON extends Omit { + readonly userAccount: UserAccountJSON; +} + +export type LocalWalletJSON = LockedWalletJSON | UnlockedWalletJSON; + +const toWalletJSON = (wallet: LocalWallet): LocalWalletJSON => { + const { contract, ...rest } = wallet.userAccount; + const userAccountJSON = { + ...rest, + contract: contract.serializeJSON(), + }; + if (wallet.userAccount.id.network === 'main') { + if (wallet.nep2 === undefined) { + throw new PasswordRequiredError(); + } + + return { + type: 'locked', + userAccount: userAccountJSON, + nep2: wallet.nep2, + }; + } + + const { userAccount: _userAccount, ...walletRest } = wallet; + + return { + ...walletRest, + userAccount: userAccountJSON, + }; +}; + +const fromWalletJSON = (wallet: LocalWalletJSON): LocalWallet => { + const { + userAccount: { contract, ...accountRest }, + ...rest + } = wallet; + const deserializedContract = AccountContract.fromJSON(contract); + + const userAccount = { + ...accountRest, + contract: deserializedContract, + }; + + return { + ...rest, + userAccount, + }; +}; + /** * Implements the `LocalStore` interface expected by `LocalKeyStore`. */ @@ -33,7 +88,7 @@ export class LocalStringStore implements LocalStore { const keys = await this.storage.getAllKeys(); const values = await Promise.all(keys.map(async (key) => this.storage.getItem(key))); - return values.map((value) => JSON.parse(value)); + return values.map((value) => fromWalletJSON(JSON.parse(value))); } public async saveWallet(wallet: LocalWallet): Promise { @@ -49,7 +104,7 @@ export class LocalStringStore implements LocalStore { }; } - await this.storage.setItem(this.getKey(safeWallet), JSON.stringify(safeWallet)); + await this.storage.setItem(this.getKey(safeWallet), JSON.stringify(toWalletJSON(safeWallet))); } public async deleteWallet(wallet: LocalWallet): Promise { diff --git a/packages/neo-one-client-core/tsconfig.json b/packages/neo-one-client-core/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-client-core/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-client-full-common/.npmignore b/packages/neo-one-client-full-common/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-client-full-common/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-client-full-common/CHANGELOG.json b/packages/neo-one-client-full-common/CHANGELOG.json new file mode 100644 index 0000000000..212de9756b --- /dev/null +++ b/packages/neo-one-client-full-common/CHANGELOG.json @@ -0,0 +1,87 @@ +{ + "name": "@neo-one/client-full-common", + "entries": [ + { + "version": "3.0.0", + "tag": "@neo-one/client-full-common_v3.0.0", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "major": [ + { + "comment": "3.0.0preview3-alpha release bump" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/client-full-common_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/client-full-common_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/client-full-common_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-client-full-common/CHANGELOG.md b/packages/neo-one-client-full-common/CHANGELOG.md index 9129b4b9c9..982199a9fe 100644 --- a/packages/neo-one-client-full-common/CHANGELOG.md +++ b/packages/neo-one-client-full-common/CHANGELOG.md @@ -1,118 +1,36 @@ -# Change Log +# Change Log - @neo-one/client-full-common -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-common@1.2.4...@neo-one/client-full-common@2.3.0) (2019-10-23) +## 3.0.0 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/client-full-common +### Breaking changes +- 3.0.0preview3-alpha release bump +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT +### Patches +- Upgrade TypeScript from v3.8.3 to v3.9.5 -## [1.2.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-common@1.2.3...@neo-one/client-full-common@1.2.4) (2019-10-23) +### Updates -**Note:** Version bump only for package @neo-one/client-full-common +- bump package version for future release clarity +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes +- update package release process to take better advantage of rush tooling +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -## [1.2.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-common@1.2.2...@neo-one/client-full-common@1.2.3) (2019-09-04) +### Minor changes -**Note:** Version bump only for package @neo-one/client-full-common +- Migrate to Rush - - - - -## [1.2.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-common@1.2.1...@neo-one/client-full-common@1.2.2) (2019-08-30) - -**Note:** Version bump only for package @neo-one/client-full-common - - - - - -## [1.2.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-common@1.2.0...@neo-one/client-full-common@1.2.1) (2019-08-22) - -**Note:** Version bump only for package @neo-one/client-full-common - - - - - -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-common@1.1.4...@neo-one/client-full-common@1.2.0) (2019-07-29) - - -### Features - -* **client:** rewrite binary writer ([3c70708](https://github.com/neo-one-suite/neo-one/commit/3c70708)) - - - - - -## [1.1.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-common@1.1.3...@neo-one/client-full-common@1.1.4) (2019-06-20) - - -### Bug Fixes - -* **deps:** update dependency typescript to v3.5.1 ([#1365](https://github.com/neo-one-suite/neo-one/issues/1365)) ([ec89546](https://github.com/neo-one-suite/neo-one/commit/ec89546)) - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-common@1.1.2...@neo-one/client-full-common@1.1.3) (2019-06-04) - -**Note:** Version bump only for package @neo-one/client-full-common - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-common@1.1.1...@neo-one/client-full-common@1.1.2) (2019-04-12) - -**Note:** Version bump only for package @neo-one/client-full-common - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-common@1.1.0...@neo-one/client-full-common@1.1.1) (2019-03-27) - -**Note:** Version bump only for package @neo-one/client-full-common - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-common@1.0.2...@neo-one/client-full-common@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/client-full-common - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-common@1.0.2-alpha.0...@neo-one/client-full-common@1.0.2) (2019-02-21) - -**Note:** Version bump only for package @neo-one/client-full-common - - - - - -## [1.0.2-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-common@1.0.1...@neo-one/client-full-common@1.0.2-alpha.0) (2019-02-15) - -**Note:** Version bump only for package @neo-one/client-full-common - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-common@1.0.0...@neo-one/client-full-common@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/client-full-common diff --git a/packages/neo-one-client-full-common/gulpfile.js b/packages/neo-one-client-full-common/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-client-full-common/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-client-full-common/package.json b/packages/neo-one-client-full-common/package.json index ed6ee85858..37fac0d413 100644 --- a/packages/neo-one-client-full-common/package.json +++ b/packages/neo-one-client-full-common/package.json @@ -1,12 +1,25 @@ { "name": "@neo-one/client-full-common", - "version": "2.3.0", + "version": "3.0.0", "description": "NEOβ€’ONE full client common code.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.3.0", - "@neo-one/utils": "^2.3.0", + "@neo-one/client-common": "^3.0.0", + "@neo-one/utils": "^3.0.0", "tslib": "^1.10.0" }, - "sideEffects": false + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "@types/jest": "^24.0.18", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-client-full-common/src/__data__/index.ts b/packages/neo-one-client-full-common/src/__data__/index.ts new file mode 100644 index 0000000000..e9644dae47 --- /dev/null +++ b/packages/neo-one-client-full-common/src/__data__/index.ts @@ -0,0 +1 @@ +export * from './models'; diff --git a/packages/neo-one-client-full-common/src/__data__/models.ts b/packages/neo-one-client-full-common/src/__data__/models.ts new file mode 100644 index 0000000000..dc049cc054 --- /dev/null +++ b/packages/neo-one-client-full-common/src/__data__/models.ts @@ -0,0 +1,124 @@ +import { common, ContractParameterTypeModel, ECPoint, SignatureString, UInt160 } from '@neo-one/client-common'; +import { constants } from '@neo-one/utils'; +import { + ContractABIModel, + ContractEventDescriptorModel, + ContractGroupModel, + ContractManifestModel, + ContractMethodDescriptorModel, + ContractParameterDefinitionModel, + ContractPermissionDescriptorModel, + ContractPermissionModel, + ContractStateModel, +} from '../models'; + +export const contractParamDefinitionModel = { + any: new ContractParameterDefinitionModel({ + type: ContractParameterTypeModel.Any, + name: 'param', + }), + boolean: new ContractParameterDefinitionModel({ + type: ContractParameterTypeModel.Boolean, + name: 'param', + }), + byteArray: new ContractParameterDefinitionModel({ + type: ContractParameterTypeModel.ByteArray, + name: 'param', + }), + hash160: new ContractParameterDefinitionModel({ + type: ContractParameterTypeModel.Hash160, + name: 'param', + }), + hash256: new ContractParameterDefinitionModel({ + type: ContractParameterTypeModel.Hash256, + name: 'param', + }), + array: new ContractParameterDefinitionModel({ + type: ContractParameterTypeModel.Array, + name: 'param', + }), + integer: new ContractParameterDefinitionModel({ + type: ContractParameterTypeModel.Integer, + name: 'param', + }), + interopInterface: new ContractParameterDefinitionModel({ + type: ContractParameterTypeModel.InteropInterface, + name: 'param', + }), + map: new ContractParameterDefinitionModel({ + type: ContractParameterTypeModel.Map, + name: 'param', + }), + publicKey: new ContractParameterDefinitionModel({ + type: ContractParameterTypeModel.PublicKey, + name: 'param', + }), + signature: new ContractParameterDefinitionModel({ + type: ContractParameterTypeModel.Signature, + name: 'param', + }), + string: new ContractParameterDefinitionModel({ + type: ContractParameterTypeModel.String, + name: 'param', + }), + void: new ContractParameterDefinitionModel({ + type: ContractParameterTypeModel.Void, + name: 'param', + }), +}; + +export const contractMethodDescriptorModel = ( + parameters: readonly ContractParameterDefinitionModel[] = [contractParamDefinitionModel.boolean], + returnType: ContractParameterTypeModel = ContractParameterTypeModel.Void, + name = 'function', + offset = 0, +) => new ContractMethodDescriptorModel({ name, parameters, returnType, offset }); + +export const contractEventDescriptorModel = ( + parameters: readonly ContractParameterDefinitionModel[] = [contractParamDefinitionModel.boolean], + name = 'event', +) => new ContractEventDescriptorModel({ name, parameters }); + +export const contractAbiModel = ( + methods: readonly ContractMethodDescriptorModel[] = [contractMethodDescriptorModel()], + events: readonly ContractEventDescriptorModel[] = [contractEventDescriptorModel()], + hash = common.bufferToUInt160(Buffer.alloc(20, 1)), +) => new ContractABIModel({ hash, methods, events }); + +export const contractGroupModel = ( + publicKey: ECPoint = common.stringToECPoint(constants.PRIVATE_NET_PUBLIC_KEY), + signature: Buffer = Buffer.from( + 'ccaab040cc25021c91567b75db4778853441869157b8f6aad960cdcf1069812480027a528ca9b98e2205027de20696f848cf81824eeb7af1d5110870870ceb67', + 'hex', + ), +) => new ContractGroupModel({ publicKey, signature }); + +export const contractPermissionDescriptorModel = (hashOrGroupType: 'uint160' | 'ecpoint' | undefined) => { + let hashOrGroup: UInt160 | ECPoint | undefined; + if (hashOrGroupType === 'uint160') { + hashOrGroup = common.bufferToUInt160(Buffer.alloc(20, 1)); + } else if (hashOrGroupType === 'ecpoint') { + hashOrGroup = common.stringToECPoint(constants.PRIVATE_NET_PUBLIC_KEY); + } + + return new ContractPermissionDescriptorModel({ hashOrGroup }); +}; + +export const contractPermissionModel = ( + hashOrGroupType: 'uint160' | 'ecpoint' | undefined, + methods: readonly string[] = [], +) => new ContractPermissionModel({ contract: contractPermissionDescriptorModel(hashOrGroupType), methods }); + +export const contractManifestModel = ( + groups: readonly ContractGroupModel[] = [contractGroupModel()], + abi: ContractABIModel = contractAbiModel(), + permissions: readonly ContractPermissionModel[] = [contractPermissionModel('uint160', ['method1'])], + trusts: readonly UInt160[] = [common.bufferToUInt160(Buffer.alloc(20, 1))], + supportedStandards: readonly string[] = [], +) => new ContractManifestModel({ groups, supportedStandards, abi, permissions, trusts }); + +export const contractModel = ( + id = 1, + script: Buffer = Buffer.alloc(25), + manifest: ContractManifestModel = contractManifestModel(), +) => new ContractStateModel({ id, script, manifest }); diff --git a/packages/neo-one-client-full-common/src/__tests__/abi/ContractABIModel.test.ts b/packages/neo-one-client-full-common/src/__tests__/abi/ContractABIModel.test.ts new file mode 100644 index 0000000000..7d398be6f5 --- /dev/null +++ b/packages/neo-one-client-full-common/src/__tests__/abi/ContractABIModel.test.ts @@ -0,0 +1,25 @@ +import { ContractParameterTypeModel } from '@neo-one/client-common'; +import { + contractAbiModel, + contractEventDescriptorModel, + contractMethodDescriptorModel, + contractParamDefinitionModel, +} from '../../__data__'; + +describe('ContractABIModel - serializeJSON', () => { + test('Simple', () => { + const json = contractAbiModel().serializeJSON(); + expect(json).toMatchSnapshot(); + }); + + test('Multiple', () => { + const json = contractAbiModel( + [ + contractMethodDescriptorModel([contractParamDefinitionModel.integer, contractParamDefinitionModel.hash160]), + contractMethodDescriptorModel([contractParamDefinitionModel.string], ContractParameterTypeModel.Integer), + ], + [contractEventDescriptorModel([contractParamDefinitionModel.hash160, contractParamDefinitionModel.hash256])], + ).serializeJSON(); + expect(json).toMatchSnapshot(); + }); +}); diff --git a/packages/neo-one-client-full-common/src/__tests__/abi/ContractEventDescriptorModel.test.ts b/packages/neo-one-client-full-common/src/__tests__/abi/ContractEventDescriptorModel.test.ts new file mode 100644 index 0000000000..1df4f585a1 --- /dev/null +++ b/packages/neo-one-client-full-common/src/__tests__/abi/ContractEventDescriptorModel.test.ts @@ -0,0 +1,17 @@ +import { contractEventDescriptorModel, contractParamDefinitionModel } from '../../__data__'; + +describe('ContractEventDescriptorModel - serializeJSON', () => { + test('Boolean', () => { + expect(contractEventDescriptorModel().serializeJSON()).toMatchSnapshot(); + }); + + test('Multiple Params', () => { + expect( + contractEventDescriptorModel([ + contractParamDefinitionModel.boolean, + contractParamDefinitionModel.integer, + contractParamDefinitionModel.string, + ]), + ).toMatchSnapshot(); + }); +}); diff --git a/packages/neo-one-client-full-common/src/__tests__/abi/ContractMethodDescriptorModel.test.ts b/packages/neo-one-client-full-common/src/__tests__/abi/ContractMethodDescriptorModel.test.ts new file mode 100644 index 0000000000..7fcf425319 --- /dev/null +++ b/packages/neo-one-client-full-common/src/__tests__/abi/ContractMethodDescriptorModel.test.ts @@ -0,0 +1,21 @@ +import { ContractParameterTypeModel } from '@neo-one/client-common'; +import { contractMethodDescriptorModel, contractParamDefinitionModel } from '../../__data__'; + +describe('ContractMethodDescriptorModel - serializeJSON', () => { + test('Boolean', () => { + expect(contractMethodDescriptorModel().serializeJSON()).toMatchSnapshot(); + }); + + test('Multiple Params', () => { + expect( + contractMethodDescriptorModel( + [ + contractParamDefinitionModel.boolean, + contractParamDefinitionModel.integer, + contractParamDefinitionModel.string, + ], + ContractParameterTypeModel.String, + ).serializeJSON(), + ).toMatchSnapshot(); + }); +}); diff --git a/packages/neo-one-client-full-common/src/__tests__/abi/ContractParameterDefinitionModel.test.ts b/packages/neo-one-client-full-common/src/__tests__/abi/ContractParameterDefinitionModel.test.ts new file mode 100644 index 0000000000..e4a7d50079 --- /dev/null +++ b/packages/neo-one-client-full-common/src/__tests__/abi/ContractParameterDefinitionModel.test.ts @@ -0,0 +1,51 @@ +import { contractParamDefinitionModel } from '../../__data__'; + +describe('ContractParameterModel - serializeJSON', () => { + test('Boolean', () => { + expect(contractParamDefinitionModel.boolean.serializeJSON()).toMatchSnapshot(); + }); + + test('ByteArray', () => { + expect(contractParamDefinitionModel.byteArray.serializeJSON()).toMatchSnapshot(); + }); + + test('Hash160', () => { + expect(contractParamDefinitionModel.hash160.serializeJSON()).toMatchSnapshot(); + }); + + test('Hash256', () => { + expect(contractParamDefinitionModel.hash256.serializeJSON()).toMatchSnapshot(); + }); + + test('Array', () => { + expect(contractParamDefinitionModel.array.serializeJSON()).toMatchSnapshot(); + }); + + test('Integer', () => { + expect(contractParamDefinitionModel.integer.serializeJSON()).toMatchSnapshot(); + }); + + test('InteropInterface', () => { + expect(contractParamDefinitionModel.interopInterface.serializeJSON()).toMatchSnapshot(); + }); + + test('Map', () => { + expect(contractParamDefinitionModel.map.serializeJSON()).toMatchSnapshot(); + }); + + test('PublicKey', () => { + expect(contractParamDefinitionModel.publicKey.serializeJSON()).toMatchSnapshot(); + }); + + test('Signature', () => { + expect(contractParamDefinitionModel.signature.serializeJSON()).toMatchSnapshot(); + }); + + test('String', () => { + expect(contractParamDefinitionModel.string.serializeJSON()).toMatchSnapshot(); + }); + + test('Void', () => { + expect(contractParamDefinitionModel.void.serializeJSON()).toMatchSnapshot(); + }); +}); diff --git a/packages/neo-one-client-full-common/src/__tests__/abi/__snapshots__/ContractABIModel.test.ts.snap b/packages/neo-one-client-full-common/src/__tests__/abi/__snapshots__/ContractABIModel.test.ts.snap new file mode 100644 index 0000000000..d04909f8ea --- /dev/null +++ b/packages/neo-one-client-full-common/src/__tests__/abi/__snapshots__/ContractABIModel.test.ts.snap @@ -0,0 +1,80 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`ContractABIModel - serializeJSON Multiple 1`] = ` +Object { + "events": Array [ + Object { + "name": "event", + "parameters": Array [ + Object { + "name": "param", + "type": "Hash160", + }, + Object { + "name": "param", + "type": "Hash256", + }, + ], + }, + ], + "hash": "0x0101010101010101010101010101010101010101", + "methods": Array [ + Object { + "name": "function", + "offset": undefined, + "parameters": Array [ + Object { + "name": "param", + "type": "Integer", + }, + Object { + "name": "param", + "type": "Hash160", + }, + ], + "returnType": "Void", + }, + Object { + "name": "function", + "offset": undefined, + "parameters": Array [ + Object { + "name": "param", + "type": "String", + }, + ], + "returnType": "Integer", + }, + ], +} +`; + +exports[`ContractABIModel - serializeJSON Simple 1`] = ` +Object { + "events": Array [ + Object { + "name": "event", + "parameters": Array [ + Object { + "name": "param", + "type": "Boolean", + }, + ], + }, + ], + "hash": "0x0101010101010101010101010101010101010101", + "methods": Array [ + Object { + "name": "function", + "offset": undefined, + "parameters": Array [ + Object { + "name": "param", + "type": "Boolean", + }, + ], + "returnType": "Void", + }, + ], +} +`; diff --git a/packages/neo-one-client-full-common/src/__tests__/abi/__snapshots__/ContractEventDescriptorModel.test.ts.snap b/packages/neo-one-client-full-common/src/__tests__/abi/__snapshots__/ContractEventDescriptorModel.test.ts.snap new file mode 100644 index 0000000000..7260f8bdeb --- /dev/null +++ b/packages/neo-one-client-full-common/src/__tests__/abi/__snapshots__/ContractEventDescriptorModel.test.ts.snap @@ -0,0 +1,33 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`ContractEventDescriptorModel - serializeJSON Boolean 1`] = ` +Object { + "name": "event", + "parameters": Array [ + Object { + "name": "param", + "type": "Boolean", + }, + ], +} +`; + +exports[`ContractEventDescriptorModel - serializeJSON Multiple Params 1`] = ` +ContractEventDescriptorModel { + "name": "event", + "parameters": Array [ + ContractParameterDefinitionModel { + "name": "param", + "type": 16, + }, + ContractParameterDefinitionModel { + "name": "param", + "type": 17, + }, + ContractParameterDefinitionModel { + "name": "param", + "type": 19, + }, + ], +} +`; diff --git a/packages/neo-one-client-full-common/src/__tests__/abi/__snapshots__/ContractMethodDescriptorModel.test.ts.snap b/packages/neo-one-client-full-common/src/__tests__/abi/__snapshots__/ContractMethodDescriptorModel.test.ts.snap new file mode 100644 index 0000000000..e41533e070 --- /dev/null +++ b/packages/neo-one-client-full-common/src/__tests__/abi/__snapshots__/ContractMethodDescriptorModel.test.ts.snap @@ -0,0 +1,37 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`ContractMethodDescriptorModel - serializeJSON Boolean 1`] = ` +Object { + "name": "function", + "offset": undefined, + "parameters": Array [ + Object { + "name": "param", + "type": "Boolean", + }, + ], + "returnType": "Void", +} +`; + +exports[`ContractMethodDescriptorModel - serializeJSON Multiple Params 1`] = ` +Object { + "name": "function", + "offset": undefined, + "parameters": Array [ + Object { + "name": "param", + "type": "Boolean", + }, + Object { + "name": "param", + "type": "Integer", + }, + Object { + "name": "param", + "type": "String", + }, + ], + "returnType": "String", +} +`; diff --git a/packages/neo-one-client-full-common/src/__tests__/abi/__snapshots__/ContractParameterDefinitionModel.test.ts.snap b/packages/neo-one-client-full-common/src/__tests__/abi/__snapshots__/ContractParameterDefinitionModel.test.ts.snap new file mode 100644 index 0000000000..3ae85f6d8b --- /dev/null +++ b/packages/neo-one-client-full-common/src/__tests__/abi/__snapshots__/ContractParameterDefinitionModel.test.ts.snap @@ -0,0 +1,85 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`ContractParameterModel - serializeJSON Array 1`] = ` +Object { + "name": "param", + "type": "Array", +} +`; + +exports[`ContractParameterModel - serializeJSON Boolean 1`] = ` +Object { + "name": "param", + "type": "Boolean", +} +`; + +exports[`ContractParameterModel - serializeJSON ByteArray 1`] = ` +Object { + "name": "param", + "type": "ByteArray", +} +`; + +exports[`ContractParameterModel - serializeJSON Hash160 1`] = ` +Object { + "name": "param", + "type": "Hash160", +} +`; + +exports[`ContractParameterModel - serializeJSON Hash256 1`] = ` +Object { + "name": "param", + "type": "Hash256", +} +`; + +exports[`ContractParameterModel - serializeJSON Integer 1`] = ` +Object { + "name": "param", + "type": "Integer", +} +`; + +exports[`ContractParameterModel - serializeJSON InteropInterface 1`] = ` +Object { + "name": "param", + "type": "InteropInterface", +} +`; + +exports[`ContractParameterModel - serializeJSON Map 1`] = ` +Object { + "name": "param", + "type": "Map", +} +`; + +exports[`ContractParameterModel - serializeJSON PublicKey 1`] = ` +Object { + "name": "param", + "type": "PublicKey", +} +`; + +exports[`ContractParameterModel - serializeJSON Signature 1`] = ` +Object { + "name": "param", + "type": "Signature", +} +`; + +exports[`ContractParameterModel - serializeJSON String 1`] = ` +Object { + "name": "param", + "type": "String", +} +`; + +exports[`ContractParameterModel - serializeJSON Void 1`] = ` +Object { + "name": "param", + "type": "Void", +} +`; diff --git a/packages/neo-one-client-full-common/src/__tests__/models/ContractGroupModel.test.ts b/packages/neo-one-client-full-common/src/__tests__/models/ContractGroupModel.test.ts new file mode 100644 index 0000000000..1561d174f1 --- /dev/null +++ b/packages/neo-one-client-full-common/src/__tests__/models/ContractGroupModel.test.ts @@ -0,0 +1,7 @@ +import { contractGroupModel } from '../../__data__'; + +describe('ContractGroupModel - serializeJSON', () => { + test('Simple', () => { + expect(contractGroupModel().serializeJSON()).toMatchSnapshot(); + }); +}); diff --git a/packages/neo-one-client-full-common/src/__tests__/models/ContractManifestModel.test.ts b/packages/neo-one-client-full-common/src/__tests__/models/ContractManifestModel.test.ts new file mode 100644 index 0000000000..ee8f727eb6 --- /dev/null +++ b/packages/neo-one-client-full-common/src/__tests__/models/ContractManifestModel.test.ts @@ -0,0 +1,7 @@ +import { contractManifestModel } from '../../__data__'; + +describe('ContractManifestModel - serializeJSON', () => { + test('Simple', () => { + expect(contractManifestModel().serializeJSON()).toMatchSnapshot(); + }); +}); diff --git a/packages/neo-one-client-full-common/src/__tests__/models/ContractModel.test.ts b/packages/neo-one-client-full-common/src/__tests__/models/ContractModel.test.ts new file mode 100644 index 0000000000..0d090b8862 --- /dev/null +++ b/packages/neo-one-client-full-common/src/__tests__/models/ContractModel.test.ts @@ -0,0 +1,14 @@ +import { BinaryWriter } from '@neo-one/client-common'; +import { contractModel } from '../../__data__'; + +describe('ContractModel - serializeJSON', () => { + let writer: BinaryWriter; + beforeEach(() => { + writer = new BinaryWriter(); + }); + + test('Simple', () => { + contractModel().serializeWireBase(writer); + expect(writer.toBuffer()).toMatchSnapshot(); + }); +}); diff --git a/packages/neo-one-client-full-common/src/__tests__/models/ContractPermissionDescriptorModel.test.ts b/packages/neo-one-client-full-common/src/__tests__/models/ContractPermissionDescriptorModel.test.ts new file mode 100644 index 0000000000..7fac8169a7 --- /dev/null +++ b/packages/neo-one-client-full-common/src/__tests__/models/ContractPermissionDescriptorModel.test.ts @@ -0,0 +1,27 @@ +import { contractPermissionDescriptorModel } from '../../__data__'; + +describe('ContractPermissionDescriptorModel - serializeJSON', () => { + test('UInt160', () => { + const permission = contractPermissionDescriptorModel('uint160'); + expect(permission.isHash).toBeTruthy(); + expect(permission.isGroup).toBeFalsy(); + expect(permission.isWildcard()).toBeFalsy(); + expect(permission.serializeJSON()).toMatchSnapshot(); + }); + + test('ECPoint', () => { + const permission = contractPermissionDescriptorModel('ecpoint'); + expect(permission.isGroup).toBeTruthy(); + expect(permission.isHash).toBeFalsy(); + expect(permission.isWildcard()).toBeFalsy(); + expect(permission.serializeJSON()).toMatchSnapshot(); + }); + + test('undefined', () => { + const permission = contractPermissionDescriptorModel(undefined); + expect(permission.isWildcard()).toBeTruthy(); + expect(permission.isHash).toBeFalsy(); + expect(permission.isGroup).toBeFalsy(); + expect(permission.serializeJSON()).toMatchSnapshot(); + }); +}); diff --git a/packages/neo-one-client-full-common/src/__tests__/models/ContractPermissionModel.test.ts b/packages/neo-one-client-full-common/src/__tests__/models/ContractPermissionModel.test.ts new file mode 100644 index 0000000000..47ba20513f --- /dev/null +++ b/packages/neo-one-client-full-common/src/__tests__/models/ContractPermissionModel.test.ts @@ -0,0 +1,15 @@ +import { contractPermissionModel } from '../../__data__'; + +describe('ContractPermissionModel - serializeJSON', () => { + test('UInt160', () => { + expect(contractPermissionModel('uint160').serializeJSON()).toMatchSnapshot(); + }); + + test('ECPoint', () => { + expect(contractPermissionModel('ecpoint', ['method1']).serializeJSON()).toMatchSnapshot(); + }); + + test('undefined', () => { + expect(contractPermissionModel(undefined, ['method1', 'method2']).serializeJSON()).toMatchSnapshot(); + }); +}); diff --git a/packages/neo-one-client-full-common/src/__tests__/models/ContractTests.test.ts b/packages/neo-one-client-full-common/src/__tests__/models/ContractTests.test.ts deleted file mode 100644 index a4894aa689..0000000000 --- a/packages/neo-one-client-full-common/src/__tests__/models/ContractTests.test.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { BinaryWriter } from '@neo-one/client-common'; -import { assertContractPropertyState, ContractModel, getContractProperties } from '../../models'; - -describe('Contract Model Tests', () => { - test('Serialize Wire Base', () => { - const writer = new BinaryWriter(); - const contractModel = new ContractModel({ - script: Buffer.alloc(25), - parameterList: [], - returnType: 0x01, - contractProperties: 0x01, - name: 'test', - codeVersion: '0.0.0', - author: 'Ben Dover', - email: 'example@neo-one.gov', - description: 'test', - }); - - contractModel.serializeWireBase(writer); - expect(writer.toBuffer()).toMatchSnapshot(); - }); -}); - -describe('Contract Model Property State Tests', () => { - const badStateValue = 0x10; - - const createBooleanContractProperties = (storageIn?: boolean, invokeIn?: boolean, payableIn?: boolean) => ({ - hasStorage: storageIn === undefined ? false : storageIn, - hasDynamicInvoke: invokeIn === undefined ? false : invokeIn, - payable: payableIn === undefined ? false : payableIn, - }); - - test('assertPropertyState throws on bad value', () => { - expect(() => assertContractPropertyState(badStateValue)).toThrowError( - `Expected contract parameter type, found: ${badStateValue.toString(16)}`, - ); - }); - - test('getContractProperties - all', () => { - expect(getContractProperties(createBooleanContractProperties(true, true, true))).toEqual(0x07); - }); - test('getContractProperties - storage, invoke', () => { - expect(getContractProperties(createBooleanContractProperties(true, true))).toEqual(0x03); - }); - test('getContractProperties - invoke, payable', () => { - expect(getContractProperties(createBooleanContractProperties(false, true, true))).toEqual(0x06); - }); - test('getContractProperties - invoke', () => { - expect(getContractProperties(createBooleanContractProperties(false, true))).toEqual(0x02); - }); - test('getContractProperties - storage', () => { - expect(getContractProperties(createBooleanContractProperties(true))).toEqual(0x01); - }); - test('getContractProperties - payable', () => { - expect(getContractProperties(createBooleanContractProperties(false, false, true))).toEqual(0x04); - }); - test('getContractProperties - no property', () => { - expect(getContractProperties(createBooleanContractProperties())).toEqual(0x00); - }); -}); diff --git a/packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractGroupModel.test.ts.snap b/packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractGroupModel.test.ts.snap new file mode 100644 index 0000000000..f3fd00b336 --- /dev/null +++ b/packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractGroupModel.test.ts.snap @@ -0,0 +1,8 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`ContractGroupModel - serializeJSON Simple 1`] = ` +Object { + "publicKey": "0248be3c070df745a60f3b8b494efcc6caf90244d803a9a72fe95d9bae2120ec70", + "signature": "ccaab040cc25021c91567b75db4778853441869157b8f6aad960cdcf1069812480027a528ca9b98e2205027de20696f848cf81824eeb7af1d5110870870ceb67", +} +`; diff --git a/packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractManifestModel.test.ts.snap b/packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractManifestModel.test.ts.snap new file mode 100644 index 0000000000..84602f7915 --- /dev/null +++ b/packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractManifestModel.test.ts.snap @@ -0,0 +1,56 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`ContractManifestModel - serializeJSON Simple 1`] = ` +Object { + "abi": Object { + "events": Array [ + Object { + "name": "event", + "parameters": Array [ + Object { + "name": "param", + "type": "Boolean", + }, + ], + }, + ], + "hash": "0x0101010101010101010101010101010101010101", + "methods": Array [ + Object { + "name": "function", + "offset": undefined, + "parameters": Array [ + Object { + "name": "param", + "type": "Boolean", + }, + ], + "returnType": "Void", + }, + ], + }, + "extra": undefined, + "groups": Array [ + Object { + "publicKey": "0248be3c070df745a60f3b8b494efcc6caf90244d803a9a72fe95d9bae2120ec70", + "signature": "ccaab040cc25021c91567b75db4778853441869157b8f6aad960cdcf1069812480027a528ca9b98e2205027de20696f848cf81824eeb7af1d5110870870ceb67", + }, + ], + "permissions": Array [ + Object { + "contract": "0x0101010101010101010101010101010101010101", + "methods": Array [ + "method1", + ], + }, + ], + "safeMethods": Array [ + "method1", + "method2", + ], + "supportedStandards": Array [], + "trusts": Array [ + "0x0101010101010101010101010101010101010101", + ], +} +`; diff --git a/packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractModel.test.ts.snap b/packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractModel.test.ts.snap new file mode 100644 index 0000000000..ad623d3442 --- /dev/null +++ b/packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractModel.test.ts.snap @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`ContractModel - serializeJSON Simple 1`] = `"010000001900000000000000000000000000000000000000000000000000fddb027b2267726f757073223a5b7b227075626c69634b6579223a22303234386265336330373064663734356136306633623862343934656663633663616639303234346438303361396137326665393564396261653231323065633730222c227369676e6174757265223a226363616162303430636332353032316339313536376237356462343737383835333434313836393135376238663661616439363063646366313036393831323438303032376135323863613962393865323230353032376465323036393666383438636638313832346565623761663164353131303837303837306365623637227d5d2c226665617475726573223a7b2273746f72616765223a747275652c2270617961626c65223a747275657d2c22737570706f727465645374616e6461726473223a5b5d2c22616269223a7b2268617368223a22307830313031303130313031303130313031303130313031303130313031303130313031303130313031222c226d6574686f6473223a5b7b226e616d65223a2266756e6374696f6e222c22706172616d6574657273223a5b7b226e616d65223a22706172616d222c2274797065223a22426f6f6c65616e227d5d2c2272657475726e54797065223a22566f6964227d5d2c226576656e7473223a5b7b226e616d65223a226576656e74222c22706172616d6574657273223a5b7b226e616d65223a22706172616d222c2274797065223a22426f6f6c65616e227d5d7d5d7d2c227065726d697373696f6e73223a5b7b22636f6e7472616374223a22307830313031303130313031303130313031303130313031303130313031303130313031303130313031222c226d6574686f6473223a5b226d6574686f6431225d7d5d2c22747275737473223a5b22307830313031303130313031303130313031303130313031303130313031303130313031303130313031225d2c22736166654d6574686f6473223a5b226d6574686f6431222c226d6574686f6432225d7d"`; diff --git a/packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractPermissionDescriptorModel.test.ts.snap b/packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractPermissionDescriptorModel.test.ts.snap new file mode 100644 index 0000000000..7805a9307b --- /dev/null +++ b/packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractPermissionDescriptorModel.test.ts.snap @@ -0,0 +1,7 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`ContractPermissionDescriptorModel - serializeJSON ECPoint 1`] = `"0248be3c070df745a60f3b8b494efcc6caf90244d803a9a72fe95d9bae2120ec70"`; + +exports[`ContractPermissionDescriptorModel - serializeJSON UInt160 1`] = `"0x0101010101010101010101010101010101010101"`; + +exports[`ContractPermissionDescriptorModel - serializeJSON undefined 1`] = `"*"`; diff --git a/packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractPermissionModel.test.ts.snap b/packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractPermissionModel.test.ts.snap new file mode 100644 index 0000000000..1f0e793408 --- /dev/null +++ b/packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractPermissionModel.test.ts.snap @@ -0,0 +1,27 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`ContractPermissionModel - serializeJSON ECPoint 1`] = ` +Object { + "contract": "0248be3c070df745a60f3b8b494efcc6caf90244d803a9a72fe95d9bae2120ec70", + "methods": Array [ + "method1", + ], +} +`; + +exports[`ContractPermissionModel - serializeJSON UInt160 1`] = ` +Object { + "contract": "0x0101010101010101010101010101010101010101", + "methods": Array [], +} +`; + +exports[`ContractPermissionModel - serializeJSON undefined 1`] = ` +Object { + "contract": "*", + "methods": Array [ + "method1", + "method2", + ], +} +`; diff --git a/packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractTests.test.ts.snap b/packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractTests.test.ts.snap deleted file mode 100644 index faccbef19a..0000000000 --- a/packages/neo-one-client-full-common/src/__tests__/models/__snapshots__/ContractTests.test.ts.snap +++ /dev/null @@ -1,3 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Contract Model Tests Serialize Wire Base 1`] = `"1900000000000000000000000000000000000000000000000000000101047465737405302e302e300942656e20446f766572136578616d706c65406e656f2d6f6e652e676f760474657374"`; diff --git a/packages/neo-one-client-full-common/src/__tests__/models/transaction.test.ts b/packages/neo-one-client-full-common/src/__tests__/models/transaction.test.ts deleted file mode 100644 index ea2859d3a7..0000000000 --- a/packages/neo-one-client-full-common/src/__tests__/models/transaction.test.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { IssueTransactionModel } from '../../models/transaction'; - -describe('Issue Transaction Model', () => { - test('Construction fails on bad version', () => { - const badVersion = 2; - - expect( - () => - new IssueTransactionModel({ - version: badVersion, - }), - ).toThrowError(`Expected version to be 1, found: ${badVersion}`); - }); -}); diff --git a/packages/neo-one-client-full-common/src/errors.ts b/packages/neo-one-client-full-common/src/errors.ts index 3d17a35968..2bbb12cbb5 100644 --- a/packages/neo-one-client-full-common/src/errors.ts +++ b/packages/neo-one-client-full-common/src/errors.ts @@ -1,9 +1,9 @@ import { makeErrorWithCode } from '@neo-one/utils'; // tslint:disable-next-line export-name -export const InvalidContractPropertyStateError = makeErrorWithCode( +export const InvalidContractFeatureError = makeErrorWithCode( 'INVALID_CONTRACT_PROPERTY_STATE', - (contractParameterType: number) => `Expected contract parameter type, found: ${contractParameterType.toString(16)}`, + (contractParameterFeature: number) => `Expected contract feature, found: ${contractParameterFeature.toString(16)}`, ); export const InvalidVersionError = makeErrorWithCode( 'INVALID_VERSION', diff --git a/packages/neo-one-client-full-common/src/models/ContractModel.ts b/packages/neo-one-client-full-common/src/models/ContractModel.ts deleted file mode 100644 index 219e474230..0000000000 --- a/packages/neo-one-client-full-common/src/models/ContractModel.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { - BinaryWriter, - common, - ContractParameterTypeModel, - createSerializeWire, - crypto, - SerializableWire, - SerializeWire, - UInt160, - UInt160Hex, - utils, -} from '@neo-one/client-common'; -import { BaseState } from './BaseState'; -import { ContractPropertyStateModel, HasDynamicInvoke, HasPayable, HasStorage } from './ContractPropertyStateModel'; - -export interface ContractModelAdd { - readonly hash?: UInt160; - readonly version?: number; - readonly script: Buffer; - readonly parameterList: readonly ContractParameterTypeModel[]; - readonly returnType: ContractParameterTypeModel; - readonly contractProperties: ContractPropertyStateModel; - readonly name: string; - readonly codeVersion: string; - readonly author: string; - readonly email: string; - readonly description: string; -} - -export class ContractModel extends BaseState implements SerializableWire { - public readonly script: Buffer; - public readonly parameterList: readonly ContractParameterTypeModel[]; - public readonly returnType: ContractParameterTypeModel; - public readonly name: string; - public readonly codeVersion: string; - public readonly author: string; - public readonly email: string; - public readonly description: string; - public readonly contractProperties: ContractPropertyStateModel; - public readonly hasStorage: boolean; - public readonly hasDynamicInvoke: boolean; - public readonly payable: boolean; - public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - private readonly hashInternal = utils.lazy(() => crypto.toScriptHash(this.script)); - private readonly hashHexInternal = utils.lazy(() => common.uInt160ToHex(this.hash)); - - public constructor({ - version, - script, - parameterList, - returnType, - name, - codeVersion, - author, - email, - description, - contractProperties, - }: ContractModelAdd) { - super({ version }); - this.script = script; - this.parameterList = parameterList; - this.returnType = returnType; - this.name = name; - this.codeVersion = codeVersion; - this.author = author; - this.email = email; - this.description = description; - this.contractProperties = contractProperties; - - this.hasStorage = HasStorage.has(this.contractProperties); - this.hasDynamicInvoke = HasDynamicInvoke.has(this.contractProperties); - this.payable = HasPayable.has(this.contractProperties); - } - - public get hash(): UInt160 { - return this.hashInternal(); - } - - public get hashHex(): UInt160Hex { - return this.hashHexInternal(); - } - - public serializeWireBase(writer: BinaryWriter): void { - serializeContractWireBase({ writer, contract: this }); - } -} - -export const serializeContractWireBase = ({ - writer, - contract, - publishVersion, -}: { - readonly writer: BinaryWriter; - readonly contract: ContractModel; - readonly publishVersion?: number; -}): void => { - writer.writeVarBytesLE(contract.script); - writer.writeVarBytesLE(Buffer.from(contract.parameterList as ContractParameterTypeModel[])); - writer.writeUInt8(contract.returnType); - if (publishVersion === undefined || /*istanbul ignore next */ publishVersion >= 1) { - writer.writeUInt8(contract.contractProperties); - } - writer.writeVarString(contract.name); - writer.writeVarString(contract.codeVersion); - writer.writeVarString(contract.author); - writer.writeVarString(contract.email); - writer.writeVarString(contract.description); -}; diff --git a/packages/neo-one-client-full-common/src/models/ContractPropertyStateModel.ts b/packages/neo-one-client-full-common/src/models/ContractPropertyStateModel.ts deleted file mode 100644 index 865204dbed..0000000000 --- a/packages/neo-one-client-full-common/src/models/ContractPropertyStateModel.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { InvalidContractPropertyStateError } from '../errors'; - -export enum ContractPropertyStateModel { - NoProperty = 0x00, - HasStorage = 0x01, - HasDynamicInvoke = 0x02, - Payable = 0x04, - HasStorageDynamicInvoke = 0x03, - HasStoragePayable = 0x05, - HasDynamicInvokePayable = 0x06, - HasStorageDynamicInvokePayable = 0x07, -} - -// tslint:disable-next-line variable-name -export const HasStorage = new Set([ - ContractPropertyStateModel.HasStorage, - ContractPropertyStateModel.HasStorageDynamicInvoke, - ContractPropertyStateModel.HasStoragePayable, - ContractPropertyStateModel.HasStorageDynamicInvokePayable, -]); - -// tslint:disable-next-line variable-name -export const HasDynamicInvoke = new Set([ - ContractPropertyStateModel.HasDynamicInvoke, - ContractPropertyStateModel.HasStorageDynamicInvoke, - ContractPropertyStateModel.HasDynamicInvokePayable, - ContractPropertyStateModel.HasStorageDynamicInvokePayable, -]); - -// tslint:disable-next-line variable-name -export const HasPayable = new Set([ - ContractPropertyStateModel.Payable, - ContractPropertyStateModel.HasStoragePayable, - ContractPropertyStateModel.HasDynamicInvokePayable, - ContractPropertyStateModel.HasStorageDynamicInvokePayable, -]); - -const isContractPropertyState = (value: number): value is ContractPropertyStateModel => - // tslint:disable-next-line strict-type-predicates - ContractPropertyStateModel[value] !== undefined; - -export const assertContractPropertyState = (value: number): ContractPropertyStateModel => { - if (isContractPropertyState(value)) { - return value; - } - - throw new InvalidContractPropertyStateError(value); -}; - -export const getContractProperties = ({ - hasStorage, - hasDynamicInvoke, - payable, -}: { - readonly hasStorage: boolean; - readonly hasDynamicInvoke: boolean; - readonly payable: boolean; -}): ContractPropertyStateModel => { - if (hasStorage && hasDynamicInvoke && payable) { - return ContractPropertyStateModel.HasStorageDynamicInvokePayable; - } - - if (hasStorage && hasDynamicInvoke) { - return ContractPropertyStateModel.HasStorageDynamicInvoke; - } - - if (hasStorage && payable) { - return ContractPropertyStateModel.HasStoragePayable; - } - - if (hasDynamicInvoke && payable) { - return ContractPropertyStateModel.HasDynamicInvokePayable; - } - - if (hasDynamicInvoke) { - return ContractPropertyStateModel.HasDynamicInvoke; - } - - if (hasStorage) { - return ContractPropertyStateModel.HasStorage; - } - - if (payable) { - return ContractPropertyStateModel.Payable; - } - - return ContractPropertyStateModel.NoProperty; -}; diff --git a/packages/neo-one-client-full-common/src/models/ContractStateModel.ts b/packages/neo-one-client-full-common/src/models/ContractStateModel.ts new file mode 100644 index 0000000000..b2d5c6e11b --- /dev/null +++ b/packages/neo-one-client-full-common/src/models/ContractStateModel.ts @@ -0,0 +1,26 @@ +import { ContractManifestModel } from './manifest'; +import { UInt160 } from '@neo-one/client-common'; + +export interface ContractStateModelAdd { + readonly id: number; + readonly updateCounter: number; + readonly hash: UInt160; + readonly script: Buffer; + readonly manifest: TContractManifest; +} + +export class ContractStateModel { + public readonly id: number; + public readonly updateCounter: number; + public readonly hash: UInt160; + public readonly script: Buffer; + public readonly manifest: TContractManifest; + + public constructor({ script, hash, manifest, id, updateCounter }: ContractStateModelAdd) { + this.id = id; + this.updateCounter = updateCounter; + this.hash = hash; + this.script = script; + this.manifest = manifest; + } +} diff --git a/packages/neo-one-client-full-common/src/models/index.ts b/packages/neo-one-client-full-common/src/models/index.ts index 07bb28be48..49563bd070 100644 --- a/packages/neo-one-client-full-common/src/models/index.ts +++ b/packages/neo-one-client-full-common/src/models/index.ts @@ -1,4 +1,3 @@ export * from './BaseState'; -export * from './ContractModel'; -export * from './ContractPropertyStateModel'; -export * from './transaction'; +export * from './ContractStateModel'; +export * from './manifest'; diff --git a/packages/neo-one-client-full-common/src/models/manifest/ContractABIModel.ts b/packages/neo-one-client-full-common/src/models/manifest/ContractABIModel.ts new file mode 100644 index 0000000000..2bf5dfe20a --- /dev/null +++ b/packages/neo-one-client-full-common/src/models/manifest/ContractABIModel.ts @@ -0,0 +1,35 @@ +import { ContractABIJSON, JSONHelper, SerializableJSON, UInt160 } from '@neo-one/client-common'; +import { ContractEventDescriptorModel } from './ContractEventDescriptorModel'; +import { ContractMethodDescriptorModel } from './ContractMethodDescriptorModel'; + +export interface ContractABIModelAdd< + TContractMethod extends ContractMethodDescriptorModel = ContractMethodDescriptorModel, + TContractEvent extends ContractEventDescriptorModel = ContractEventDescriptorModel +> { + readonly hash: UInt160; + readonly methods: readonly TContractMethod[]; + readonly events: readonly TContractEvent[]; +} + +export class ContractABIModel< + TContractMethod extends ContractMethodDescriptorModel = ContractMethodDescriptorModel, + TContractEvent extends ContractEventDescriptorModel = ContractEventDescriptorModel +> implements SerializableJSON { + public readonly hash: UInt160; + public readonly methods: readonly TContractMethod[]; + public readonly events: readonly TContractEvent[]; + + public constructor({ hash, methods, events }: ContractABIModelAdd) { + this.hash = hash; + this.methods = methods; + this.events = events; + } + + public serializeJSON(): ContractABIJSON { + return { + hash: JSONHelper.writeUInt160(this.hash), + methods: this.methods.map((method) => method.serializeJSON()), + events: this.events.map((event) => event.serializeJSON()), + }; + } +} diff --git a/packages/neo-one-client-full-common/src/models/manifest/ContractEventDescriptorModel.ts b/packages/neo-one-client-full-common/src/models/manifest/ContractEventDescriptorModel.ts new file mode 100644 index 0000000000..fe9e023e1f --- /dev/null +++ b/packages/neo-one-client-full-common/src/models/manifest/ContractEventDescriptorModel.ts @@ -0,0 +1,28 @@ +import { ContractEventDescriptorJSON, SerializableJSON } from '@neo-one/client-common'; +import { ContractParameterDefinitionModel } from './ContractParameterDefinitionModel'; + +export interface ContractEventDescriptorModelAdd< + TContractParameterDefinition extends ContractParameterDefinitionModel = ContractParameterDefinitionModel +> { + readonly name: string; + readonly parameters: readonly TContractParameterDefinition[]; +} + +export class ContractEventDescriptorModel< + TContractParameterDefinition extends ContractParameterDefinitionModel = ContractParameterDefinitionModel +> implements SerializableJSON { + public readonly name: string; + public readonly parameters: readonly TContractParameterDefinition[]; + + public constructor({ name, parameters }: ContractEventDescriptorModelAdd) { + this.name = name; + this.parameters = parameters; + } + + public serializeJSON(): ContractEventDescriptorJSON { + return { + name: this.name, + parameters: this.parameters.map((param) => param.serializeJSON()), + }; + } +} diff --git a/packages/neo-one-client-full-common/src/models/manifest/ContractGroupModel.ts b/packages/neo-one-client-full-common/src/models/manifest/ContractGroupModel.ts new file mode 100644 index 0000000000..89d1fe82e2 --- /dev/null +++ b/packages/neo-one-client-full-common/src/models/manifest/ContractGroupModel.ts @@ -0,0 +1,23 @@ +import { ContractGroupJSON, ECPoint, JSONHelper, SerializableJSON } from '@neo-one/client-common'; + +export interface ContractGroupModelAdd { + readonly publicKey: ECPoint; + readonly signature: Buffer; +} + +export class ContractGroupModel implements SerializableJSON { + public readonly publicKey: ECPoint; + public readonly signature: Buffer; + + public constructor({ publicKey, signature }: ContractGroupModelAdd) { + this.publicKey = publicKey; + this.signature = signature; + } + + public serializeJSON(): ContractGroupJSON { + return { + publicKey: JSONHelper.writeECPoint(this.publicKey), + signature: JSONHelper.writeBuffer(this.signature), + }; + } +} diff --git a/packages/neo-one-client-full-common/src/models/manifest/ContractManifestModel.ts b/packages/neo-one-client-full-common/src/models/manifest/ContractManifestModel.ts new file mode 100644 index 0000000000..ce1ca62f5d --- /dev/null +++ b/packages/neo-one-client-full-common/src/models/manifest/ContractManifestModel.ts @@ -0,0 +1,87 @@ +import { + BinaryWriter, + common, + ContractManifestJSON, + createSerializeWire, + JSONHelper, + SerializableJSON, + SerializableWire, + SerializeWire, + UInt160, + UInt160Hex, + utils, + WildcardContainer, +} from '@neo-one/client-common'; +import { JSONObject } from '@neo-one/utils'; +import { ContractABIModel } from './ContractABIModel'; +import { ContractGroupModel } from './ContractGroupModel'; +import { ContractPermissionModel } from './ContractPermissionModel'; + +export interface ContractManifestModelAdd< + TContractABI extends ContractABIModel = ContractABIModel, + TContractGroup extends ContractGroupModel = ContractGroupModel, + TContractPermission extends ContractPermissionModel = ContractPermissionModel +> { + readonly groups: readonly TContractGroup[]; + readonly supportedStandards: readonly string[]; + readonly abi: TContractABI; + readonly permissions: readonly TContractPermission[]; + readonly trusts: WildcardContainer; + readonly extra?: JSONObject; +} + +export class ContractManifestModel< + TContractABI extends ContractABIModel = ContractABIModel, + TContractGroup extends ContractGroupModel = ContractGroupModel, + TContractPermission extends ContractPermissionModel = ContractPermissionModel +> implements SerializableWire, SerializableJSON { + public static readonly maxLength = common.MAX_MANIFEST_LENGTH; + public readonly groups: readonly TContractGroup[]; + public readonly supportedStandards: readonly string[]; + public readonly abi: TContractABI; + public readonly permissions: readonly TContractPermission[]; + public readonly trusts: WildcardContainer; + public readonly extra: JSONObject | undefined; + public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + private readonly hashInternal = utils.lazy(() => this.abi.hash); + private readonly hashHexInternal = utils.lazy(() => common.uInt160ToHex(this.hash)); + + public constructor({ + groups, + supportedStandards, + abi, + permissions, + trusts, + extra, + }: ContractManifestModelAdd) { + this.groups = groups; + this.supportedStandards = supportedStandards; + this.abi = abi; + this.permissions = permissions; + this.trusts = trusts; + this.extra = extra; + } + + public get hash(): UInt160 { + return this.hashInternal(); + } + + public get hashHex(): UInt160Hex { + return this.hashHexInternal(); + } + + public serializeJSON(): ContractManifestJSON { + return { + groups: this.groups.map((group) => group.serializeJSON()), + supportedstandards: this.supportedStandards, + abi: this.abi.serializeJSON(), + permissions: this.permissions.map((permission) => permission.serializeJSON()), + trusts: common.isWildcard(this.trusts) ? this.trusts : this.trusts.map((trust) => JSONHelper.writeUInt160(trust)), + extra: this.extra, + }; + } + + public serializeWireBase(writer: BinaryWriter): void { + writer.writeVarString(JSON.stringify(this.serializeJSON())); + } +} diff --git a/packages/neo-one-client-full-common/src/models/manifest/ContractMethodDescriptorModel.ts b/packages/neo-one-client-full-common/src/models/manifest/ContractMethodDescriptorModel.ts new file mode 100644 index 0000000000..78ece19fd8 --- /dev/null +++ b/packages/neo-one-client-full-common/src/models/manifest/ContractMethodDescriptorModel.ts @@ -0,0 +1,42 @@ +import { + ContractMethodDescriptorJSON, + ContractParameterTypeModel, + SerializableJSON, + toJSONContractParameterType, +} from '@neo-one/client-common'; +import { ContractEventDescriptorModel, ContractEventDescriptorModelAdd } from './ContractEventDescriptorModel'; +import { ContractParameterDefinitionModel } from './ContractParameterDefinitionModel'; + +export interface ContractMethodDescriptorModelAdd< + TContractParameterDefinition extends ContractParameterDefinitionModel = ContractParameterDefinitionModel +> extends ContractEventDescriptorModelAdd { + readonly returnType: ContractParameterTypeModel; + readonly offset: number; + readonly safe: boolean; +} + +export class ContractMethodDescriptorModel< + TContractParameterDefinition extends ContractParameterDefinitionModel = ContractParameterDefinitionModel + > + extends ContractEventDescriptorModel + implements SerializableJSON { + public readonly returnType: ContractParameterTypeModel; + public readonly offset: number; + public readonly safe: boolean; + + public constructor(options: ContractMethodDescriptorModelAdd) { + super(options); + this.returnType = options.returnType; + this.offset = options.offset; + this.safe = options.safe; + } + + public serializeJSON(): ContractMethodDescriptorJSON { + return { + ...super.serializeJSON(), + offset: this.offset, + returntype: toJSONContractParameterType(this.returnType), + safe: this.safe, + }; + } +} diff --git a/packages/neo-one-client-full-common/src/models/manifest/ContractParameterDefinitionModel.ts b/packages/neo-one-client-full-common/src/models/manifest/ContractParameterDefinitionModel.ts new file mode 100644 index 0000000000..c424db1e25 --- /dev/null +++ b/packages/neo-one-client-full-common/src/models/manifest/ContractParameterDefinitionModel.ts @@ -0,0 +1,27 @@ +import { + ContractParameterDefinitionJSON, + ContractParameterTypeModel, + toJSONContractParameterType, +} from '@neo-one/client-common'; + +export interface ContractParameterDefinitionModelAdd { + readonly type: ContractParameterTypeModel; + readonly name: string; +} + +export class ContractParameterDefinitionModel { + public readonly type: ContractParameterTypeModel; + public readonly name: string; + + public constructor({ type, name }: ContractParameterDefinitionModelAdd) { + this.type = type; + this.name = name; + } + + public serializeJSON(): ContractParameterDefinitionJSON { + return { + name: this.name, + type: toJSONContractParameterType(this.type), + }; + } +} diff --git a/packages/neo-one-client-full-common/src/models/manifest/ContractPermissionDescriptorModel.ts b/packages/neo-one-client-full-common/src/models/manifest/ContractPermissionDescriptorModel.ts new file mode 100644 index 0000000000..386a5919a6 --- /dev/null +++ b/packages/neo-one-client-full-common/src/models/manifest/ContractPermissionDescriptorModel.ts @@ -0,0 +1,43 @@ +import { + common, + ContractPermissionDescriptorJSON, + ECPoint, + SerializableJSON, + UInt160, + Wildcard, +} from '@neo-one/client-common'; + +export interface ContractPermissionDescriptorModelAdd { + readonly hashOrGroup?: UInt160 | ECPoint | Wildcard; +} + +export class ContractPermissionDescriptorModel implements SerializableJSON { + public readonly hashOrGroup: UInt160 | ECPoint | Wildcard; + + public constructor({ hashOrGroup }: ContractPermissionDescriptorModelAdd = {}) { + this.hashOrGroup = hashOrGroup === undefined ? '*' : hashOrGroup; + } + + public get isHash(): boolean { + return common.isWildcard(this.hashOrGroup) ? false : common.isUInt160(this.hashOrGroup); + } + + public get isGroup(): boolean { + return common.isWildcard(this.hashOrGroup) ? false : common.isECPoint(this.hashOrGroup); + } + + public isWildcard(): boolean { + return common.isWildcard(this.hashOrGroup); + } + + public serializeJSON(): ContractPermissionDescriptorJSON { + if (this.isGroup) { + return common.ecPointToString(this.hashOrGroup as ECPoint); + } + if (this.isHash) { + return common.uInt160ToString(this.hashOrGroup as UInt160); + } + + return this.hashOrGroup as Wildcard; + } +} diff --git a/packages/neo-one-client-full-common/src/models/manifest/ContractPermissionModel.ts b/packages/neo-one-client-full-common/src/models/manifest/ContractPermissionModel.ts new file mode 100644 index 0000000000..a7a495da0b --- /dev/null +++ b/packages/neo-one-client-full-common/src/models/manifest/ContractPermissionModel.ts @@ -0,0 +1,28 @@ +import { ContractPermissionJSON, SerializableJSON, WildcardContainer } from '@neo-one/client-common'; +import { ContractPermissionDescriptorModel } from './ContractPermissionDescriptorModel'; + +export interface ContractPermissionModelAdd< + TContractPermissionDescriptor extends ContractPermissionDescriptorModel = ContractPermissionDescriptorModel +> { + readonly contract: TContractPermissionDescriptor; + readonly methods: WildcardContainer; +} + +export class ContractPermissionModel< + TContractPermissionDescriptor extends ContractPermissionDescriptorModel = ContractPermissionDescriptorModel +> implements SerializableJSON { + public readonly contract: TContractPermissionDescriptor; + public readonly methods: WildcardContainer; + + public constructor({ contract, methods }: ContractPermissionModelAdd) { + this.contract = contract; + this.methods = methods; + } + + public serializeJSON(): ContractPermissionJSON { + return { + contract: this.contract.serializeJSON(), + methods: this.methods, + }; + } +} diff --git a/packages/neo-one-client-full-common/src/models/manifest/index.ts b/packages/neo-one-client-full-common/src/models/manifest/index.ts new file mode 100644 index 0000000000..fad1e417bb --- /dev/null +++ b/packages/neo-one-client-full-common/src/models/manifest/index.ts @@ -0,0 +1,8 @@ +export * from './ContractABIModel'; +export * from './ContractEventDescriptorModel'; +export * from './ContractGroupModel'; +export * from './ContractManifestModel'; +export * from './ContractMethodDescriptorModel'; +export * from './ContractParameterDefinitionModel'; +export * from './ContractPermissionDescriptorModel'; +export * from './ContractPermissionModel'; diff --git a/packages/neo-one-client-full-common/src/models/transaction/IssueTransactionModel.ts b/packages/neo-one-client-full-common/src/models/transaction/IssueTransactionModel.ts deleted file mode 100644 index 78f542c381..0000000000 --- a/packages/neo-one-client-full-common/src/models/transaction/IssueTransactionModel.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { - AttributeModel, - InputModel, - OutputModel, - TransactionBaseModel, - TransactionBaseModelAdd, - TransactionTypeModel, - WitnessModel, -} from '@neo-one/client-common'; -import { InvalidVersionError } from '../../errors'; - -export type IssueTransactionModelAdd< - TAttribute extends AttributeModel = AttributeModel, - TInput extends InputModel = InputModel, - TOutput extends OutputModel = OutputModel, - TWitness extends WitnessModel = WitnessModel -> = TransactionBaseModelAdd; - -export class IssueTransactionModel< - TAttribute extends AttributeModel = AttributeModel, - TInput extends InputModel = InputModel, - TOutput extends OutputModel = OutputModel, - TWitness extends WitnessModel = WitnessModel -> extends TransactionBaseModel { - public static readonly VERSION: number = 1; - public constructor({ - version, - attributes, - inputs, - outputs, - scripts, - hash, - }: IssueTransactionModelAdd) { - super({ - version, - type: TransactionTypeModel.Issue, - attributes, - inputs, - outputs, - scripts, - hash, - }); - - if (this.version > 1) { - throw new InvalidVersionError(1, this.version); - } - } - - public clone({ - scripts = this.scripts, - attributes = this.attributes, - inputs = this.inputs, - outputs = this.outputs, - }: { - readonly scripts?: readonly TWitness[]; - readonly attributes?: readonly TAttribute[]; - readonly inputs?: readonly TInput[]; - readonly outputs?: readonly TOutput[]; - }): this { - // tslint:disable-next-line no-any - return new (this.constructor as any)({ - version: this.version, - attributes, - inputs, - outputs, - scripts, - }); - } -} diff --git a/packages/neo-one-client-full-common/src/models/transaction/index.ts b/packages/neo-one-client-full-common/src/models/transaction/index.ts deleted file mode 100644 index 59d506c384..0000000000 --- a/packages/neo-one-client-full-common/src/models/transaction/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './IssueTransactionModel'; diff --git a/packages/neo-one-client-full-common/tsconfig.json b/packages/neo-one-client-full-common/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-client-full-common/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-client-full-core/.npmignore b/packages/neo-one-client-full-core/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-client-full-core/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-client-full-core/CHANGELOG.json b/packages/neo-one-client-full-core/CHANGELOG.json new file mode 100644 index 0000000000..5722894006 --- /dev/null +++ b/packages/neo-one-client-full-core/CHANGELOG.json @@ -0,0 +1,151 @@ +{ + "name": "@neo-one/client-full-core", + "entries": [ + { + "version": "3.0.0", + "tag": "@neo-one/client-full-core_v3.0.0", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "major": [ + { + "comment": "3.0.0preview3-alpha release bump" + } + ], + "none": [ + { + "comment": "3.0.0preview3.1 release bump" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.7.0` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/client-full-core_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "dependency": [ + { + "comment": "Dependency @neo-one/node-core version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + } + ], + "patch": [ + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/client-full-core_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full-common\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.1", + "tag": "@neo-one/client-full-core_v2.4.1", + "date": "Thu, 23 Apr 2020 20:37:45 GMT", + "comments": { + "patch": [ + { + "comment": "Update LocalUserAccountProvider test" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/client-full-core_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full-common\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-client-full-core/CHANGELOG.md b/packages/neo-one-client-full-core/CHANGELOG.md index 4ba2c2260f..89eab324dc 100644 --- a/packages/neo-one-client-full-core/CHANGELOG.md +++ b/packages/neo-one-client-full-core/CHANGELOG.md @@ -1,170 +1,47 @@ -# Change Log +# Change Log - @neo-one/client-full-core -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-core@1.2.6...@neo-one/client-full-core@2.3.0) (2019-10-23) +## 3.0.0 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/client-full-core +### Breaking changes +- 3.0.0preview3-alpha release bump +### Updates +- 3.0.0preview3.1 release bump +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT -## [1.2.6](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-core@1.2.5...@neo-one/client-full-core@1.2.6) (2019-10-23) +### Patches -**Note:** Version bump only for package @neo-one/client-full-core +- Upgrade TypeScript from v3.8.3 to v3.9.5 +### Updates +- bump package version for future release clarity +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes -## [1.2.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-core@1.2.4...@neo-one/client-full-core@1.2.5) (2019-10-23) +- update package release process to take better advantage of rush tooling -**Note:** Version bump only for package @neo-one/client-full-core +## 2.4.1 +Thu, 23 Apr 2020 20:37:45 GMT +### Patches +- Update LocalUserAccountProvider test +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT +### Minor changes -## [1.2.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-core@1.2.3...@neo-one/client-full-core@1.2.4) (2019-09-04) +- Migrate to Rush -**Note:** Version bump only for package @neo-one/client-full-core - - - - - -## [1.2.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-core@1.2.2...@neo-one/client-full-core@1.2.3) (2019-08-31) - -**Note:** Version bump only for package @neo-one/client-full-core - - - - - -## [1.2.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-core@1.2.1...@neo-one/client-full-core@1.2.2) (2019-08-30) - -**Note:** Version bump only for package @neo-one/client-full-core - - - - - -## [1.2.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-core@1.2.0...@neo-one/client-full-core@1.2.1) (2019-08-23) - -**Note:** Version bump only for package @neo-one/client-full-core - - - - - -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-core@1.1.5...@neo-one/client-full-core@1.2.0) (2019-08-22) - - -### Features - -* **monitor:** remove @neo-one/monitor. replace with opencensus, pino, and debug ([#1597](https://github.com/neo-one-suite/neo-one/issues/1597)) ([4b1a28f](https://github.com/neo-one-suite/neo-one/commit/4b1a28f)) - - - - - -## [1.1.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-core@1.1.4...@neo-one/client-full-core@1.1.5) (2019-07-29) - -**Note:** Version bump only for package @neo-one/client-full-core - - - - - -## [1.1.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-core@1.1.3...@neo-one/client-full-core@1.1.4) (2019-06-20) - - -### Bug Fixes - -* **deps:** update dependency typescript to v3.5.1 ([#1365](https://github.com/neo-one-suite/neo-one/issues/1365)) ([ec89546](https://github.com/neo-one-suite/neo-one/commit/ec89546)) - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-core@1.1.2...@neo-one/client-full-core@1.1.3) (2019-06-04) - - -### Bug Fixes - -* **@neo-one/types:** eliminate global types from @neo-one/types ([004330d](https://github.com/neo-one-suite/neo-one/commit/004330d)) -* **deps:** update misc dependencies ([0c9bdde](https://github.com/neo-one-suite/neo-one/commit/0c9bdde)) - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-core@1.1.1...@neo-one/client-full-core@1.1.2) (2019-04-12) - -**Note:** Version bump only for package @neo-one/client-full-core - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-core@1.1.0...@neo-one/client-full-core@1.1.1) (2019-03-27) - - -### Bug Fixes - -* **deps:** update dependency @reactivex/ix-es2015-cjs to v2.5.2 ([bb4047b](https://github.com/neo-one-suite/neo-one/commit/bb4047b)) -* **deps:** update dependency bignumber.js to v8.1.1 ([2d6f93a](https://github.com/neo-one-suite/neo-one/commit/2d6f93a)) - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-core@1.0.3...@neo-one/client-full-core@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/client-full-core - - - - - -## [1.0.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-core@1.0.3-alpha.0...@neo-one/client-full-core@1.0.3) (2019-02-21) - -**Note:** Version bump only for package @neo-one/client-full-core - - - - - -## [1.0.3-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-core@1.0.2...@neo-one/client-full-core@1.0.3-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **build:** adjust several packages to allow emitting .d.ts files. ([27a2d88](https://github.com/neo-one-suite/neo-one/commit/27a2d88)) -* **deps:** update dependency @reactivex/ix-es2015-cjs and @reactivex/ix-esnext-esm to v2.5.1 ([b16cb09](https://github.com/neo-one-suite/neo-one/commit/b16cb09)) -* **deps:** update dependency @types/lodash to v4.14.120 ([a76dae7](https://github.com/neo-one-suite/neo-one/commit/a76dae7)) -* **deps:** update dependency rxjs to v6.4.0 ([e28af2a](https://github.com/neo-one-suite/neo-one/commit/e28af2a)) -* **reactivex:** downgrade and pin reactivex dependencies ([a9ee114](https://github.com/neo-one-suite/neo-one/commit/a9ee114)) - - -### Features - -* **node:** record storage changes for each transaction ([22ef835](https://github.com/neo-one-suite/neo-one/commit/22ef835)) - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-core@1.0.1...@neo-one/client-full-core@1.0.2) (2018-11-13) - -**Note:** Version bump only for package @neo-one/client-full-core - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client-full-core@1.0.0...@neo-one/client-full-core@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/client-full-core diff --git a/packages/neo-one-client-full-core/gulpfile.js b/packages/neo-one-client-full-core/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-client-full-core/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-client-full-core/package.json b/packages/neo-one-client-full-core/package.json index ed6e5249d7..ca4978153b 100644 --- a/packages/neo-one-client-full-core/package.json +++ b/packages/neo-one-client-full-core/package.json @@ -1,25 +1,36 @@ { "name": "@neo-one/client-full-core", - "version": "2.3.0", + "version": "3.0.0", "description": "NEOβ€’ONE client-full core types implementation.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.3.0", - "@neo-one/client-core": "^2.3.0", - "@neo-one/client-full-common": "^2.3.0", - "@neo-one/client-switch": "^2.3.0", - "@neo-one/utils": "^2.3.0", + "@neo-one/client-common": "^3.0.0", + "@neo-one/client-core": "^3.0.0", + "@neo-one/client-full-common": "^3.0.0", + "@neo-one/client-switch": "^3.0.0", + "@neo-one/utils": "^3.0.0", "bignumber.js": "^9.0.0", "lodash": "^4.17.15", "tslib": "^1.10.0" }, "devDependencies": { - "@neo-one/node-core": "^2.3.0", + "@neo-one/build-tools": "^1.0.0", + "@neo-one/node-core": "^3.0.0", "@reactivex/ix-es2015-cjs": "^2.5.3", "@types/bn.js": "^4.11.5", + "@types/jest": "^24.0.18", "@types/lodash": "^4.14.138", "bn.js": "^5.0.0", - "rxjs": "^6.5.2" - }, - "sideEffects": false + "gulp": "~4.0.2", + "rxjs": "^6.5.3" + } } diff --git a/packages/neo-one-client-full-core/src/Client.ts b/packages/neo-one-client-full-core/src/Client.ts index 3fea2643cf..14e6be7754 100644 --- a/packages/neo-one-client-full-core/src/Client.ts +++ b/packages/neo-one-client-full-core/src/Client.ts @@ -1,29 +1,15 @@ import { - ABI, - AddressString, - Hash256String, - InvocationTransaction, - IssueTransaction, + ContractManifestClient, NetworkType, Param, SourceMaps, TransactionOptions, - TransactionReceipt, TransactionResult, - Transfer, } from '@neo-one/client-common'; import { args as clientArgs, Client as ClientLite } from '@neo-one/client-core'; -import BigNumber from 'bignumber.js'; import * as args from './args'; import { ReadClient } from './ReadClient'; -import { - AssetRegister, - ContractRegister, - PublishReceipt, - RegisterAssetReceipt, - UserAccountProvider, - UserAccountProviders, -} from './types'; +import { ContractRegister, PublishReceipt, UserAccountProvider, UserAccountProviders } from './types'; // tslint:disable-next-line no-any export class Client extends ClientLite< @@ -33,7 +19,7 @@ export class Client ex public async publish( contract: ContractRegister, optionsIn?: TransactionOptions, - ): Promise> { + ): Promise> { const options = clientArgs.assertTransactionOptions('options', optionsIn); await this.applyBeforeRelayHook(options); @@ -44,18 +30,18 @@ export class Client ex public async publishAndDeploy( contract: ContractRegister, - abi: ABI, + manifest: ContractManifestClient, params: readonly Param[] = [], optionsIn?: TransactionOptions, sourceMaps: SourceMaps = {}, - ): Promise> { + ): Promise> { const options = clientArgs.assertTransactionOptions('options', optionsIn); await this.applyBeforeRelayHook(options); return this.addTransactionHooks( this.getProvider(options).publishAndDeploy( args.assertContractRegister('contract', contract), - clientArgs.assertABI('abi', abi), + clientArgs.assertContractManifestClient('manifest', manifest), params, options, sourceMaps, @@ -63,36 +49,6 @@ export class Client ex ); } - public async registerAsset( - asset: AssetRegister, - optionsIn?: TransactionOptions, - ): Promise> { - const options = clientArgs.assertTransactionOptions('options', optionsIn); - await this.applyBeforeRelayHook(options); - - return this.addTransactionHooks( - this.getProvider(options).registerAsset(args.assertAssetRegister('asset', asset), options), - ); - } - - public async issue( - amount: BigNumber, - asset: Hash256String, - to: AddressString, - options?: TransactionOptions, - ): Promise>; - public async issue( - transfers: readonly Transfer[], - options?: TransactionOptions, - ): Promise>; - // tslint:disable-next-line readonly-array no-any - public async issue(...argsIn: any[]): Promise> { - const { transfers, options } = this.getTransfersOptions(argsIn); - await this.applyBeforeRelayHook(options); - - return this.addTransactionHooks(this.getProvider(options).issue(transfers, options)); - } - public read(network: NetworkType): ReadClient { return new ReadClient( this.getNetworkProvider(clientArgs.assertString('network', network)).read( diff --git a/packages/neo-one-client-full-core/src/ReadClient.ts b/packages/neo-one-client-full-core/src/ReadClient.ts index a0a39a3cb0..b0d332733f 100644 --- a/packages/neo-one-client-full-core/src/ReadClient.ts +++ b/packages/neo-one-client-full-core/src/ReadClient.ts @@ -1,14 +1,11 @@ import { Account, AddressString, - Asset, Block, Contract, GetOptions, Hash256String, - Input, IterOptions, - Output, Peer, Transaction, } from '@neo-one/client-common'; @@ -27,10 +24,6 @@ export class ReadClient { return this.dataProvider.getAccount(clientArgs.assertAddress('address', address)); } - public async getAsset(hash: Hash256String): Promise { - return this.dataProvider.getAsset(clientArgs.assertHash256('hash', hash)); - } - public async getBlock(hash: number | Hash256String, optionsIn?: GetOptions): Promise { const options = args.assertGetOptions('options', optionsIn); if (typeof hash === 'number') { @@ -56,7 +49,7 @@ export class ReadClient { return this.dataProvider.getContract(clientArgs.assertAddress('address', address)); } - public async getMemPool(): Promise { + public async getMemPool(): Promise<{ readonly height: number; readonly verified: readonly Hash256String[] }> { return this.dataProvider.getMemPool(); } @@ -64,10 +57,6 @@ export class ReadClient { return this.dataProvider.getTransaction(clientArgs.assertHash256('hash', hash)); } - public async getOutput(input: Input): Promise { - return this.dataProvider.getOutput(input); - } - public async getConnectedPeers(): Promise { return this.dataProvider.getConnectedPeers(); } diff --git a/packages/neo-one-client-full-core/src/__data__/data.ts b/packages/neo-one-client-full-core/src/__data__/data.ts index ebebfb8ba0..2d030fccae 100644 --- a/packages/neo-one-client-full-core/src/__data__/data.ts +++ b/packages/neo-one-client-full-core/src/__data__/data.ts @@ -1,4 +1,4 @@ -import { ABIParameter, ABIReturn, AssetType } from '@neo-one/client-common'; +import { ABIParameter, ABIReturn } from '@neo-one/client-common'; import { Hash256 } from '@neo-one/client-core'; import BigNumber from 'bignumber.js'; import { BN } from 'bn.js'; @@ -88,25 +88,7 @@ const numbers = { b: 8, }; -const createValidAssetRegister = (type: AssetType) => ({ - type, - name: 'Foo', - amount: bigNumbers.a, - precision: numbers.b, - owner: keys[0].publicKeyString, - admin: keys[0].address, - issuer: keys[1].address, -}); - const assetRegisters = { - credit: createValidAssetRegister('Credit'), - duty: createValidAssetRegister('Duty'), - governing: createValidAssetRegister('Governing'), - utility: createValidAssetRegister('Utility'), - currency: createValidAssetRegister('Currency'), - share: createValidAssetRegister('Share'), - invoice: createValidAssetRegister('Invoice'), - token: createValidAssetRegister('Token'), validScriptHash: { type: 'Token', name: 'Foo', @@ -235,7 +217,7 @@ const simpleParameterType = (paramType: ABIParameter) => ({ const abi = { returnSignature: simpleReturnType({ type: 'Signature' }), returnBoolean: simpleReturnType({ type: 'Boolean' }), - returnAddress: simpleReturnType({ type: 'Address' }), + returnAddress: simpleReturnType({ type: 'Hash160' }), returnHash256: simpleReturnType({ type: 'Hash256' }), returnBuffer: simpleReturnType({ type: 'Buffer' }), returnPublicKey: simpleReturnType({ type: 'PublicKey' }), @@ -245,7 +227,7 @@ const abi = { returnInteger: simpleReturnType({ type: 'Integer', decimals: 8 }), paramSignature: simpleParameterType({ type: 'Signature', name: 'foo' }), paramBoolean: simpleParameterType({ type: 'Boolean', name: 'foo' }), - paramAddress: simpleParameterType({ type: 'Address', name: 'foo' }), + paramAddress: simpleParameterType({ type: 'Hash160', name: 'foo' }), paramHash256: simpleParameterType({ type: 'Hash256', name: 'foo' }), paramBuffer: simpleParameterType({ type: 'Buffer', name: 'foo' }), paramPublicKey: simpleParameterType({ type: 'PublicKey', name: 'foo' }), diff --git a/packages/neo-one-client-full-core/src/__data__/factory.ts b/packages/neo-one-client-full-core/src/__data__/factory.ts index c1c3ad5c08..b2f3fd47a4 100644 --- a/packages/neo-one-client-full-core/src/__data__/factory.ts +++ b/packages/neo-one-client-full-core/src/__data__/factory.ts @@ -264,7 +264,7 @@ const createIntegerContractParameterJSON = ( const createInvocationResultSuccessJSON = ( options: Partial = {}, ): InvocationResultSuccessJSON => ({ - state: VMState.Halt, + state: 'HALT', gas_consumed: '20', gas_cost: '10', stack: [createIntegerContractParameterJSON()], @@ -276,7 +276,7 @@ const createInvocationDataJSON = (options: Partial = {}): In asset: createAssetJSON(), contracts: [createContractJSON()], deletedContractHashes: [keys[2].scriptHashString], - migratedContractHashes: [[keys[0].scriptHashString, keys[1].scriptHashString] as const], + migratedContractHashes: [[keys[0].scriptHashString, keys[1].scriptHashString]], voteUpdates: [], actions: [createNotificationActionJSON(), createLogActionJSON()], storageChanges: [], @@ -637,7 +637,7 @@ const createRawInvocationData = (options: Partial = {}): RawI asset: createAsset(), contracts: [createContract()], deletedContractAddresses: [keys[2].address], - migratedContractAddresses: [[keys[0].address, keys[1].address] as const], + migratedContractAddresses: [[keys[0].address, keys[1].address]], actions: [createRawNotification(), createRawLog()], storageChanges: [], ...options, diff --git a/packages/neo-one-client-full-core/src/__tests__/Client.test.ts b/packages/neo-one-client-full-core/src/__tests__/Client.test.ts index f10ba45e66..9653cfb9fc 100644 --- a/packages/neo-one-client-full-core/src/__tests__/Client.test.ts +++ b/packages/neo-one-client-full-core/src/__tests__/Client.test.ts @@ -21,7 +21,6 @@ describe('Client', () => { const claim = jest.fn(async () => commonTransactionResult) as any; const publish = jest.fn(async () => commonTransactionResult) as any; const publishAndDeploy = jest.fn(async () => commonTransactionResult) as any; - const registerAsset = jest.fn(async () => commonTransactionResult) as any; const readClient = {}; const read = jest.fn(() => readClient) as any; const invoke = jest.fn(async () => commonTransactionResult) as any; @@ -33,12 +32,9 @@ describe('Client', () => { const call = jest.fn(async () => commonRawCallReceipt); const iterBlocks = jest.fn(); const getBlockCount = jest.fn(); - const getAccount = jest.fn(); const iterActionsRaw = jest.fn(); let transfer: jest.Mock; let transfer1: jest.Mock; - let issue: jest.Mock; - let issue1: jest.Mock; // tslint:enable:no-any let provider: UserAccountProvider; @@ -47,8 +43,6 @@ describe('Client', () => { beforeEach(() => { transfer = jest.fn(async () => factory.createTransactionResult()); transfer1 = jest.fn(async () => factory.createTransactionResult()); - issue = jest.fn(async () => factory.createTransactionResult()); - issue1 = jest.fn(async () => factory.createTransactionResult()); provider = { currentUserAccount$: _of(unlockedWallet.userAccount), @@ -64,8 +58,6 @@ describe('Client', () => { claim, publish, publishAndDeploy, - registerAsset, - issue, read, invoke, invokeSend, @@ -75,7 +67,6 @@ describe('Client', () => { call, iterBlocks, getBlockCount, - getAccount, iterActionsRaw, }; provider1 = { @@ -93,8 +84,6 @@ describe('Client', () => { claim: jest.fn(async () => Promise.resolve()) as any, publish: jest.fn(async () => Promise.resolve()) as any, publishAndDeploy: jest.fn(async () => Promise.resolve()) as any, - registerAsset: jest.fn(async () => Promise.resolve()) as any, - issue: issue1, read: jest.fn(), invoke: jest.fn(async () => Promise.resolve()) as any, invokeSend: jest.fn(async () => Promise.resolve()) as any, @@ -105,7 +94,6 @@ describe('Client', () => { call: jest.fn(), iterBlocks, getBlockCount, - getAccount, iterActionsRaw, }; client = new Client({ [type]: provider, [type1]: provider1 }); @@ -257,36 +245,6 @@ describe('Client', () => { expect(result.transaction).toEqual(commonTransactionResult.transaction); }); - test('registerAsset', async () => { - const asset = factory.createAssetRegister(); - const result = await client.registerAsset(asset); - - expect(registerAsset.mock.calls).toMatchSnapshot(); - expect(result.transaction).toEqual(commonTransactionResult.transaction); - }); - - test('issue - simple', async () => { - const transactionResult = factory.createTransactionResult(); - issue.mockImplementation(async () => transactionResult); - - const result = await client.issue(data.bigNumbers.a, Hash256.NEO, keys[0].address); - - expect(issue.mock.calls).toMatchSnapshot(); - expect(result.transaction).toEqual(transactionResult.transaction); - }); - - test('issue - array', async () => { - const transactionResult = factory.createTransactionResult(); - issue1.mockImplementation(async () => transactionResult); - - const result = await client.issue([{ amount: data.bigNumbers.a, asset: Hash256.NEO, to: keys[0].address }], { - from: unlockedWallet1.userAccount.id, - }); - - expect(issue1.mock.calls).toMatchSnapshot(); - expect(result.transaction).toEqual(transactionResult.transaction); - }); - test('read', () => { const result = client.read(lockedWallet.userAccount.id.network); diff --git a/packages/neo-one-client-full-core/src/__tests__/ReadClient.test.ts b/packages/neo-one-client-full-core/src/__tests__/ReadClient.test.ts index 0ccca59325..f59ba4972a 100644 --- a/packages/neo-one-client-full-core/src/__tests__/ReadClient.test.ts +++ b/packages/neo-one-client-full-core/src/__tests__/ReadClient.test.ts @@ -7,7 +7,6 @@ import { DataProvider } from '../types'; describe('ReadClient', () => { const network = 'main'; const getAccount = jest.fn(); - const getAsset = jest.fn(); const getBlock = jest.fn(); const iterBlocks = jest.fn(); const getBestBlockHash = jest.fn(); @@ -15,12 +14,10 @@ describe('ReadClient', () => { const getContract = jest.fn(); const getMemPool = jest.fn(); const getTransaction = jest.fn(); - const getOutput = jest.fn(); const getConnectedPeers = jest.fn(); const provider: DataProvider = { network, getAccount, - getAsset, getBlock, iterBlocks, getBestBlockHash, @@ -28,7 +25,6 @@ describe('ReadClient', () => { getContract, getMemPool, getTransaction, - getOutput, getConnectedPeers, }; let client: ReadClient; @@ -46,16 +42,6 @@ describe('ReadClient', () => { expect(getAccount.mock.calls).toMatchSnapshot(); }); - test('getAsset', async () => { - const value = factory.createAsset(); - getAsset.mockImplementationOnce(() => value); - - const result = await client.getAsset(data.hash256s.a); - - expect(result).toEqual(value); - expect(getAsset.mock.calls).toMatchSnapshot(); - }); - test('getBlock', async () => { const value = factory.createBlock(); getBlock.mockReset(); @@ -138,16 +124,6 @@ describe('ReadClient', () => { expect(getTransaction.mock.calls).toMatchSnapshot(); }); - test('getOutput', async () => { - const value = factory.createOutput(); - getOutput.mockImplementationOnce(() => value); - - const result = await client.getOutput(factory.createInput()); - - expect(result).toEqual(value); - expect(getOutput.mock.calls).toMatchSnapshot(); - }); - test('getConnectedPeers', async () => { const value = [factory.createPeerJSON()]; getConnectedPeers.mockImplementationOnce(() => value); diff --git a/packages/neo-one-client-full-core/src/__tests__/__snapshots__/Client.test.ts.snap b/packages/neo-one-client-full-core/src/__tests__/__snapshots__/Client.test.ts.snap index 03c0aaefaa..a1cf5b978e 100644 --- a/packages/neo-one-client-full-core/src/__tests__/__snapshots__/Client.test.ts.snap +++ b/packages/neo-one-client-full-core/src/__tests__/__snapshots__/Client.test.ts.snap @@ -2291,8 +2291,242 @@ Object { }, "index": 1, "isStopped": true, - "outerIndex": undefined, - "outerValue": undefined, + "outerIndex": 0, + "outerValue": Object { + "call": [MockFunction], + "claim": [MockFunction] { + "calls": Array [ + Array [ + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "currentUserAccount$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, + "deleteUserAccount": [MockFunction] { + "calls": Array [ + Array [ + Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], + }, + "getAccount": [MockFunction], + "getBlockCount": [MockFunction], + "getCurrentUserAccount": [MockFunction] { + "calls": Array [ + Array [], + Array [], + ], + "results": Array [ + Object { + "type": "return", + "value": Object { + "id": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "name": "Mock", + "publicKey": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", + }, + }, + Object { + "type": "return", + "value": Object { + "id": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "name": "Mock", + "publicKey": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", + }, + }, + ], + }, + "getNetworks": [MockFunction] { + "calls": Array [ + Array [], + ], + "results": Array [ + Object { + "type": "return", + "value": Array [ + "main", + ], + }, + ], + }, + "getUserAccounts": [MockFunction], + "invoke": [MockFunction], + "invokeClaim": [MockFunction], + "invokeCompleteSend": [MockFunction], + "invokeRefundAssets": [MockFunction], + "invokeSend": [MockFunction], + "issue": [MockFunction], + "iterActionsRaw": [MockFunction], + "iterBlocks": [MockFunction], + "networks$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, + "publish": [MockFunction] { + "calls": Array [ + Array [ + Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "Hello World", + "dynamicInvoke": false, + "email": "alex.dicarlo@neotracker.io", + "name": "MyContract", + "parameters": Array [ + "Address", + "Buffer", + ], + "payable": true, + "returnType": "Buffer", + "script": "5f8d70", + "storage": true, + }, + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "publishAndDeploy": [MockFunction] { + "calls": Array [ + Array [ + Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "Hello World", + "dynamicInvoke": false, + "email": "alex.dicarlo@neotracker.io", + "name": "MyContract", + "parameters": Array [ + "Address", + "Buffer", + ], + "payable": true, + "returnType": "Buffer", + "script": "5f8d70", + "storage": true, + }, + Object { + "events": Array [], + "functions": Array [ + Object { + "claim": undefined, + "completeSend": undefined, + "constant": undefined, + "name": "deploy", + "parameters": Array [], + "receive": undefined, + "refundAssets": undefined, + "returnType": Object { + "forwardedValue": undefined, + "optional": undefined, + "type": "Boolean", + }, + "send": undefined, + "sendUnsafe": undefined, + }, + ], + }, + Array [], + Object {}, + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "read": [MockFunction] { + "calls": Array [ + Array [ + "main", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Object {}, + }, + ], + }, + "registerAsset": [MockFunction] { + "calls": Array [ + Array [ + Object { + "admin": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "amount": "100000000", + "issuer": "ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s", + "name": "TheToken", + "owner": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", + "precision": 8, + "type": "Token", + }, + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "selectUserAccount": [MockFunction], + "transfer": [MockFunction], + "updateUserAccountName": [MockFunction] { + "calls": Array [ + Array [ + Object { + "id": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "name": "newName", + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], + }, + "userAccounts$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, + }, "parent": [Circular], "syncErrorThrowable": false, "syncErrorThrown": false, @@ -2389,8 +2623,242 @@ Object { }, "index": 1, "isStopped": true, - "outerIndex": undefined, - "outerValue": undefined, + "outerIndex": 0, + "outerValue": Object { + "call": [MockFunction], + "claim": [MockFunction] { + "calls": Array [ + Array [ + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "currentUserAccount$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, + "deleteUserAccount": [MockFunction] { + "calls": Array [ + Array [ + Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], + }, + "getAccount": [MockFunction], + "getBlockCount": [MockFunction], + "getCurrentUserAccount": [MockFunction] { + "calls": Array [ + Array [], + Array [], + ], + "results": Array [ + Object { + "type": "return", + "value": Object { + "id": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "name": "Mock", + "publicKey": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", + }, + }, + Object { + "type": "return", + "value": Object { + "id": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "name": "Mock", + "publicKey": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", + }, + }, + ], + }, + "getNetworks": [MockFunction] { + "calls": Array [ + Array [], + ], + "results": Array [ + Object { + "type": "return", + "value": Array [ + "main", + ], + }, + ], + }, + "getUserAccounts": [MockFunction], + "invoke": [MockFunction], + "invokeClaim": [MockFunction], + "invokeCompleteSend": [MockFunction], + "invokeRefundAssets": [MockFunction], + "invokeSend": [MockFunction], + "issue": [MockFunction], + "iterActionsRaw": [MockFunction], + "iterBlocks": [MockFunction], + "networks$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, + "publish": [MockFunction] { + "calls": Array [ + Array [ + Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "Hello World", + "dynamicInvoke": false, + "email": "alex.dicarlo@neotracker.io", + "name": "MyContract", + "parameters": Array [ + "Address", + "Buffer", + ], + "payable": true, + "returnType": "Buffer", + "script": "5f8d70", + "storage": true, + }, + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "publishAndDeploy": [MockFunction] { + "calls": Array [ + Array [ + Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "Hello World", + "dynamicInvoke": false, + "email": "alex.dicarlo@neotracker.io", + "name": "MyContract", + "parameters": Array [ + "Address", + "Buffer", + ], + "payable": true, + "returnType": "Buffer", + "script": "5f8d70", + "storage": true, + }, + Object { + "events": Array [], + "functions": Array [ + Object { + "claim": undefined, + "completeSend": undefined, + "constant": undefined, + "name": "deploy", + "parameters": Array [], + "receive": undefined, + "refundAssets": undefined, + "returnType": Object { + "forwardedValue": undefined, + "optional": undefined, + "type": "Boolean", + }, + "send": undefined, + "sendUnsafe": undefined, + }, + ], + }, + Array [], + Object {}, + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "read": [MockFunction] { + "calls": Array [ + Array [ + "main", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Object {}, + }, + ], + }, + "registerAsset": [MockFunction] { + "calls": Array [ + Array [ + Object { + "admin": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "amount": "100000000", + "issuer": "ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s", + "name": "TheToken", + "owner": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", + "precision": 8, + "type": "Token", + }, + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "selectUserAccount": [MockFunction], + "transfer": [MockFunction], + "updateUserAccountName": [MockFunction] { + "calls": Array [ + Array [ + Object { + "id": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "name": "newName", + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], + }, + "userAccounts$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, + }, "parent": [Circular], "syncErrorThrowable": false, "syncErrorThrown": false, @@ -2836,8 +3304,242 @@ Object { }, "index": 1, "isStopped": true, - "outerIndex": undefined, - "outerValue": undefined, + "outerIndex": 0, + "outerValue": Object { + "call": [MockFunction], + "claim": [MockFunction] { + "calls": Array [ + Array [ + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "currentUserAccount$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, + "deleteUserAccount": [MockFunction] { + "calls": Array [ + Array [ + Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], + }, + "getAccount": [MockFunction], + "getBlockCount": [MockFunction], + "getCurrentUserAccount": [MockFunction] { + "calls": Array [ + Array [], + Array [], + ], + "results": Array [ + Object { + "type": "return", + "value": Object { + "id": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "name": "Mock", + "publicKey": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", + }, + }, + Object { + "type": "return", + "value": Object { + "id": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "name": "Mock", + "publicKey": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", + }, + }, + ], + }, + "getNetworks": [MockFunction] { + "calls": Array [ + Array [], + ], + "results": Array [ + Object { + "type": "return", + "value": Array [ + "main", + ], + }, + ], + }, + "getUserAccounts": [MockFunction], + "invoke": [MockFunction], + "invokeClaim": [MockFunction], + "invokeCompleteSend": [MockFunction], + "invokeRefundAssets": [MockFunction], + "invokeSend": [MockFunction], + "issue": [MockFunction], + "iterActionsRaw": [MockFunction], + "iterBlocks": [MockFunction], + "networks$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, + "publish": [MockFunction] { + "calls": Array [ + Array [ + Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "Hello World", + "dynamicInvoke": false, + "email": "alex.dicarlo@neotracker.io", + "name": "MyContract", + "parameters": Array [ + "Address", + "Buffer", + ], + "payable": true, + "returnType": "Buffer", + "script": "5f8d70", + "storage": true, + }, + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "publishAndDeploy": [MockFunction] { + "calls": Array [ + Array [ + Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "Hello World", + "dynamicInvoke": false, + "email": "alex.dicarlo@neotracker.io", + "name": "MyContract", + "parameters": Array [ + "Address", + "Buffer", + ], + "payable": true, + "returnType": "Buffer", + "script": "5f8d70", + "storage": true, + }, + Object { + "events": Array [], + "functions": Array [ + Object { + "claim": undefined, + "completeSend": undefined, + "constant": undefined, + "name": "deploy", + "parameters": Array [], + "receive": undefined, + "refundAssets": undefined, + "returnType": Object { + "forwardedValue": undefined, + "optional": undefined, + "type": "Boolean", + }, + "send": undefined, + "sendUnsafe": undefined, + }, + ], + }, + Array [], + Object {}, + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "read": [MockFunction] { + "calls": Array [ + Array [ + "main", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Object {}, + }, + ], + }, + "registerAsset": [MockFunction] { + "calls": Array [ + Array [ + Object { + "admin": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "amount": "100000000", + "issuer": "ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s", + "name": "TheToken", + "owner": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", + "precision": 8, + "type": "Token", + }, + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "selectUserAccount": [MockFunction], + "transfer": [MockFunction], + "updateUserAccountName": [MockFunction] { + "calls": Array [ + Array [ + Object { + "id": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "name": "newName", + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], + }, + "userAccounts$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, + }, "parent": [Circular], "syncErrorThrowable": false, "syncErrorThrown": false, @@ -5030,53 +5732,287 @@ Object { }, ], }, - "selectUserAccount": [MockFunction], - "transfer": [MockFunction], - "updateUserAccountName": [MockFunction] { - "calls": Array [ - Array [ + "selectUserAccount": [MockFunction], + "transfer": [MockFunction], + "updateUserAccountName": [MockFunction] { + "calls": Array [ + Array [ + Object { + "id": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "name": "newName", + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], + }, + "userAccounts$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, + }, + ], + }, + "syncErrorThrowable": false, + "syncErrorThrown": false, + "syncErrorValue": null, + }, + "index": 1, + "innerSubscription": InnerSubscriber { + "_parentOrParents": null, + "_subscriptions": null, + "closed": true, + "destination": Object { + "closed": true, + "complete": [Function], + "error": [Function], + "next": [Function], + }, + "index": 1, + "isStopped": true, + "outerIndex": 0, + "outerValue": Object { + "call": [MockFunction], + "claim": [MockFunction] { + "calls": Array [ + Array [ + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "currentUserAccount$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, + "deleteUserAccount": [MockFunction] { + "calls": Array [ + Array [ + Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], + }, + "getAccount": [MockFunction], + "getBlockCount": [MockFunction], + "getCurrentUserAccount": [MockFunction] { + "calls": Array [ + Array [], + Array [], + ], + "results": Array [ + Object { + "type": "return", + "value": Object { + "id": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "name": "Mock", + "publicKey": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", + }, + }, + Object { + "type": "return", + "value": Object { + "id": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "name": "Mock", + "publicKey": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", + }, + }, + ], + }, + "getNetworks": [MockFunction] { + "calls": Array [ + Array [], + ], + "results": Array [ + Object { + "type": "return", + "value": Array [ + "main", + ], + }, + ], + }, + "getUserAccounts": [MockFunction], + "invoke": [MockFunction], + "invokeClaim": [MockFunction], + "invokeCompleteSend": [MockFunction], + "invokeRefundAssets": [MockFunction], + "invokeSend": [MockFunction], + "issue": [MockFunction], + "iterActionsRaw": [MockFunction], + "iterBlocks": [MockFunction], + "networks$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, + "publish": [MockFunction] { + "calls": Array [ + Array [ + Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "Hello World", + "dynamicInvoke": false, + "email": "alex.dicarlo@neotracker.io", + "name": "MyContract", + "parameters": Array [ + "Address", + "Buffer", + ], + "payable": true, + "returnType": "Buffer", + "script": "5f8d70", + "storage": true, + }, + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "publishAndDeploy": [MockFunction] { + "calls": Array [ + Array [ + Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "Hello World", + "dynamicInvoke": false, + "email": "alex.dicarlo@neotracker.io", + "name": "MyContract", + "parameters": Array [ + "Address", + "Buffer", + ], + "payable": true, + "returnType": "Buffer", + "script": "5f8d70", + "storage": true, + }, + Object { + "events": Array [], + "functions": Array [ Object { - "id": Object { - "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", - "network": "main", + "claim": undefined, + "completeSend": undefined, + "constant": undefined, + "name": "deploy", + "parameters": Array [], + "receive": undefined, + "refundAssets": undefined, + "returnType": Object { + "forwardedValue": undefined, + "optional": undefined, + "type": "Boolean", }, - "name": "newName", + "send": undefined, + "sendUnsafe": undefined, }, ], - ], - "results": Array [ - Object { - "type": "return", - "value": undefined, - }, - ], + }, + Array [], + Object {}, + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, }, - "userAccounts$": Observable { - "_isScalar": false, - "_subscribe": [Function], + ], + }, + "read": [MockFunction] { + "calls": Array [ + Array [ + "main", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Object {}, }, - }, - ], - }, - "syncErrorThrowable": false, - "syncErrorThrown": false, - "syncErrorValue": null, - }, - "index": 1, - "innerSubscription": InnerSubscriber { - "_parentOrParents": null, - "_subscriptions": null, - "closed": true, - "destination": Object { - "closed": true, - "complete": [Function], - "error": [Function], - "next": [Function], + ], + }, + "registerAsset": [MockFunction] { + "calls": Array [ + Array [ + Object { + "admin": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "amount": "100000000", + "issuer": "ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s", + "name": "TheToken", + "owner": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", + "precision": 8, + "type": "Token", + }, + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "selectUserAccount": [MockFunction], + "transfer": [MockFunction], + "updateUserAccountName": [MockFunction] { + "calls": Array [ + Array [ + Object { + "id": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "name": "newName", + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], + }, + "userAccounts$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, }, - "index": 1, - "isStopped": true, - "outerIndex": undefined, - "outerValue": undefined, "parent": [Circular], "syncErrorThrowable": false, "syncErrorThrown": false, @@ -5171,10 +6107,244 @@ Object { "error": [Function], "next": [Function], }, - "index": 1, - "isStopped": true, - "outerIndex": undefined, - "outerValue": undefined, + "index": 1, + "isStopped": true, + "outerIndex": 0, + "outerValue": Object { + "call": [MockFunction], + "claim": [MockFunction] { + "calls": Array [ + Array [ + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "currentUserAccount$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, + "deleteUserAccount": [MockFunction] { + "calls": Array [ + Array [ + Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], + }, + "getAccount": [MockFunction], + "getBlockCount": [MockFunction], + "getCurrentUserAccount": [MockFunction] { + "calls": Array [ + Array [], + Array [], + ], + "results": Array [ + Object { + "type": "return", + "value": Object { + "id": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "name": "Mock", + "publicKey": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", + }, + }, + Object { + "type": "return", + "value": Object { + "id": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "name": "Mock", + "publicKey": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", + }, + }, + ], + }, + "getNetworks": [MockFunction] { + "calls": Array [ + Array [], + ], + "results": Array [ + Object { + "type": "return", + "value": Array [ + "main", + ], + }, + ], + }, + "getUserAccounts": [MockFunction], + "invoke": [MockFunction], + "invokeClaim": [MockFunction], + "invokeCompleteSend": [MockFunction], + "invokeRefundAssets": [MockFunction], + "invokeSend": [MockFunction], + "issue": [MockFunction], + "iterActionsRaw": [MockFunction], + "iterBlocks": [MockFunction], + "networks$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, + "publish": [MockFunction] { + "calls": Array [ + Array [ + Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "Hello World", + "dynamicInvoke": false, + "email": "alex.dicarlo@neotracker.io", + "name": "MyContract", + "parameters": Array [ + "Address", + "Buffer", + ], + "payable": true, + "returnType": "Buffer", + "script": "5f8d70", + "storage": true, + }, + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "publishAndDeploy": [MockFunction] { + "calls": Array [ + Array [ + Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "Hello World", + "dynamicInvoke": false, + "email": "alex.dicarlo@neotracker.io", + "name": "MyContract", + "parameters": Array [ + "Address", + "Buffer", + ], + "payable": true, + "returnType": "Buffer", + "script": "5f8d70", + "storage": true, + }, + Object { + "events": Array [], + "functions": Array [ + Object { + "claim": undefined, + "completeSend": undefined, + "constant": undefined, + "name": "deploy", + "parameters": Array [], + "receive": undefined, + "refundAssets": undefined, + "returnType": Object { + "forwardedValue": undefined, + "optional": undefined, + "type": "Boolean", + }, + "send": undefined, + "sendUnsafe": undefined, + }, + ], + }, + Array [], + Object {}, + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "read": [MockFunction] { + "calls": Array [ + Array [ + "main", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Object {}, + }, + ], + }, + "registerAsset": [MockFunction] { + "calls": Array [ + Array [ + Object { + "admin": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "amount": "100000000", + "issuer": "ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s", + "name": "TheToken", + "owner": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", + "precision": 8, + "type": "Token", + }, + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "selectUserAccount": [MockFunction], + "transfer": [MockFunction], + "updateUserAccountName": [MockFunction] { + "calls": Array [ + Array [ + Object { + "id": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "name": "newName", + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], + }, + "userAccounts$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, + }, "parent": [Circular], "syncErrorThrowable": false, "syncErrorThrown": false, @@ -5620,8 +6790,242 @@ Object { }, "index": 1, "isStopped": true, - "outerIndex": undefined, - "outerValue": undefined, + "outerIndex": 0, + "outerValue": Object { + "call": [MockFunction], + "claim": [MockFunction] { + "calls": Array [ + Array [ + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "currentUserAccount$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, + "deleteUserAccount": [MockFunction] { + "calls": Array [ + Array [ + Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], + }, + "getAccount": [MockFunction], + "getBlockCount": [MockFunction], + "getCurrentUserAccount": [MockFunction] { + "calls": Array [ + Array [], + Array [], + ], + "results": Array [ + Object { + "type": "return", + "value": Object { + "id": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "name": "Mock", + "publicKey": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", + }, + }, + Object { + "type": "return", + "value": Object { + "id": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "name": "Mock", + "publicKey": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", + }, + }, + ], + }, + "getNetworks": [MockFunction] { + "calls": Array [ + Array [], + ], + "results": Array [ + Object { + "type": "return", + "value": Array [ + "main", + ], + }, + ], + }, + "getUserAccounts": [MockFunction], + "invoke": [MockFunction], + "invokeClaim": [MockFunction], + "invokeCompleteSend": [MockFunction], + "invokeRefundAssets": [MockFunction], + "invokeSend": [MockFunction], + "issue": [MockFunction], + "iterActionsRaw": [MockFunction], + "iterBlocks": [MockFunction], + "networks$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, + "publish": [MockFunction] { + "calls": Array [ + Array [ + Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "Hello World", + "dynamicInvoke": false, + "email": "alex.dicarlo@neotracker.io", + "name": "MyContract", + "parameters": Array [ + "Address", + "Buffer", + ], + "payable": true, + "returnType": "Buffer", + "script": "5f8d70", + "storage": true, + }, + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "publishAndDeploy": [MockFunction] { + "calls": Array [ + Array [ + Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "Hello World", + "dynamicInvoke": false, + "email": "alex.dicarlo@neotracker.io", + "name": "MyContract", + "parameters": Array [ + "Address", + "Buffer", + ], + "payable": true, + "returnType": "Buffer", + "script": "5f8d70", + "storage": true, + }, + Object { + "events": Array [], + "functions": Array [ + Object { + "claim": undefined, + "completeSend": undefined, + "constant": undefined, + "name": "deploy", + "parameters": Array [], + "receive": undefined, + "refundAssets": undefined, + "returnType": Object { + "forwardedValue": undefined, + "optional": undefined, + "type": "Boolean", + }, + "send": undefined, + "sendUnsafe": undefined, + }, + ], + }, + Array [], + Object {}, + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "read": [MockFunction] { + "calls": Array [ + Array [ + "main", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Object {}, + }, + ], + }, + "registerAsset": [MockFunction] { + "calls": Array [ + Array [ + Object { + "admin": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "amount": "100000000", + "issuer": "ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s", + "name": "TheToken", + "owner": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", + "precision": 8, + "type": "Token", + }, + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "selectUserAccount": [MockFunction], + "transfer": [MockFunction], + "updateUserAccountName": [MockFunction] { + "calls": Array [ + Array [ + Object { + "id": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "name": "newName", + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], + }, + "userAccounts$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, + }, "parent": [Circular], "syncErrorThrowable": false, "syncErrorThrown": false, @@ -9437,43 +10841,277 @@ Object { "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", "network": "main", }, - "name": "newName", + "name": "newName", + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], + }, + "userAccounts$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, + }, + ], + }, + "syncErrorThrowable": false, + "syncErrorThrown": false, + "syncErrorValue": null, + }, + "index": 1, + "innerSubscription": InnerSubscriber { + "_parentOrParents": null, + "_subscriptions": null, + "closed": true, + "destination": Object { + "closed": true, + "complete": [Function], + "error": [Function], + "next": [Function], + }, + "index": 1, + "isStopped": true, + "outerIndex": 0, + "outerValue": Object { + "call": [MockFunction], + "claim": [MockFunction] { + "calls": Array [ + Array [ + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "currentUserAccount$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, + "deleteUserAccount": [MockFunction] { + "calls": Array [ + Array [ + Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], + }, + "getAccount": [MockFunction], + "getBlockCount": [MockFunction], + "getCurrentUserAccount": [MockFunction] { + "calls": Array [ + Array [], + Array [], + ], + "results": Array [ + Object { + "type": "return", + "value": Object { + "id": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "name": "Mock", + "publicKey": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", + }, + }, + Object { + "type": "return", + "value": Object { + "id": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "name": "Mock", + "publicKey": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", + }, + }, + ], + }, + "getNetworks": [MockFunction] { + "calls": Array [ + Array [], + ], + "results": Array [ + Object { + "type": "return", + "value": Array [ + "main", + ], + }, + ], + }, + "getUserAccounts": [MockFunction], + "invoke": [MockFunction], + "invokeClaim": [MockFunction], + "invokeCompleteSend": [MockFunction], + "invokeRefundAssets": [MockFunction], + "invokeSend": [MockFunction], + "issue": [MockFunction], + "iterActionsRaw": [MockFunction], + "iterBlocks": [MockFunction], + "networks$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, + "publish": [MockFunction] { + "calls": Array [ + Array [ + Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "Hello World", + "dynamicInvoke": false, + "email": "alex.dicarlo@neotracker.io", + "name": "MyContract", + "parameters": Array [ + "Address", + "Buffer", + ], + "payable": true, + "returnType": "Buffer", + "script": "5f8d70", + "storage": true, + }, + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "publishAndDeploy": [MockFunction] { + "calls": Array [ + Array [ + Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "Hello World", + "dynamicInvoke": false, + "email": "alex.dicarlo@neotracker.io", + "name": "MyContract", + "parameters": Array [ + "Address", + "Buffer", + ], + "payable": true, + "returnType": "Buffer", + "script": "5f8d70", + "storage": true, + }, + Object { + "events": Array [], + "functions": Array [ + Object { + "claim": undefined, + "completeSend": undefined, + "constant": undefined, + "name": "deploy", + "parameters": Array [], + "receive": undefined, + "refundAssets": undefined, + "returnType": Object { + "forwardedValue": undefined, + "optional": undefined, + "type": "Boolean", + }, + "send": undefined, + "sendUnsafe": undefined, }, ], - ], - "results": Array [ - Object { - "type": "return", - "value": undefined, - }, - ], + }, + Array [], + Object {}, + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, }, - "userAccounts$": Observable { - "_isScalar": false, - "_subscribe": [Function], + ], + }, + "read": [MockFunction] { + "calls": Array [ + Array [ + "main", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Object {}, }, - }, - ], - }, - "syncErrorThrowable": false, - "syncErrorThrown": false, - "syncErrorValue": null, - }, - "index": 1, - "innerSubscription": InnerSubscriber { - "_parentOrParents": null, - "_subscriptions": null, - "closed": true, - "destination": Object { - "closed": true, - "complete": [Function], - "error": [Function], - "next": [Function], + ], + }, + "registerAsset": [MockFunction] { + "calls": Array [ + Array [ + Object { + "admin": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "amount": "100000000", + "issuer": "ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s", + "name": "TheToken", + "owner": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", + "precision": 8, + "type": "Token", + }, + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "selectUserAccount": [MockFunction], + "transfer": [MockFunction], + "updateUserAccountName": [MockFunction] { + "calls": Array [ + Array [ + Object { + "id": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "name": "newName", + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], + }, + "userAccounts$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, }, - "index": 1, - "isStopped": true, - "outerIndex": undefined, - "outerValue": undefined, "parent": [Circular], "syncErrorThrowable": false, "syncErrorThrown": false, @@ -9570,8 +11208,242 @@ Object { }, "index": 1, "isStopped": true, - "outerIndex": undefined, - "outerValue": undefined, + "outerIndex": 0, + "outerValue": Object { + "call": [MockFunction], + "claim": [MockFunction] { + "calls": Array [ + Array [ + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "currentUserAccount$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, + "deleteUserAccount": [MockFunction] { + "calls": Array [ + Array [ + Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], + }, + "getAccount": [MockFunction], + "getBlockCount": [MockFunction], + "getCurrentUserAccount": [MockFunction] { + "calls": Array [ + Array [], + Array [], + ], + "results": Array [ + Object { + "type": "return", + "value": Object { + "id": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "name": "Mock", + "publicKey": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", + }, + }, + Object { + "type": "return", + "value": Object { + "id": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "name": "Mock", + "publicKey": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", + }, + }, + ], + }, + "getNetworks": [MockFunction] { + "calls": Array [ + Array [], + ], + "results": Array [ + Object { + "type": "return", + "value": Array [ + "main", + ], + }, + ], + }, + "getUserAccounts": [MockFunction], + "invoke": [MockFunction], + "invokeClaim": [MockFunction], + "invokeCompleteSend": [MockFunction], + "invokeRefundAssets": [MockFunction], + "invokeSend": [MockFunction], + "issue": [MockFunction], + "iterActionsRaw": [MockFunction], + "iterBlocks": [MockFunction], + "networks$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, + "publish": [MockFunction] { + "calls": Array [ + Array [ + Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "Hello World", + "dynamicInvoke": false, + "email": "alex.dicarlo@neotracker.io", + "name": "MyContract", + "parameters": Array [ + "Address", + "Buffer", + ], + "payable": true, + "returnType": "Buffer", + "script": "5f8d70", + "storage": true, + }, + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "publishAndDeploy": [MockFunction] { + "calls": Array [ + Array [ + Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "Hello World", + "dynamicInvoke": false, + "email": "alex.dicarlo@neotracker.io", + "name": "MyContract", + "parameters": Array [ + "Address", + "Buffer", + ], + "payable": true, + "returnType": "Buffer", + "script": "5f8d70", + "storage": true, + }, + Object { + "events": Array [], + "functions": Array [ + Object { + "claim": undefined, + "completeSend": undefined, + "constant": undefined, + "name": "deploy", + "parameters": Array [], + "receive": undefined, + "refundAssets": undefined, + "returnType": Object { + "forwardedValue": undefined, + "optional": undefined, + "type": "Boolean", + }, + "send": undefined, + "sendUnsafe": undefined, + }, + ], + }, + Array [], + Object {}, + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "read": [MockFunction] { + "calls": Array [ + Array [ + "main", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Object {}, + }, + ], + }, + "registerAsset": [MockFunction] { + "calls": Array [ + Array [ + Object { + "admin": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "amount": "100000000", + "issuer": "ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s", + "name": "TheToken", + "owner": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", + "precision": 8, + "type": "Token", + }, + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "selectUserAccount": [MockFunction], + "transfer": [MockFunction], + "updateUserAccountName": [MockFunction] { + "calls": Array [ + Array [ + Object { + "id": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "name": "newName", + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], + }, + "userAccounts$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, + }, "parent": [Circular], "syncErrorThrowable": false, "syncErrorThrown": false, @@ -10041,8 +11913,242 @@ Object { }, "index": 1, "isStopped": true, - "outerIndex": undefined, - "outerValue": undefined, + "outerIndex": 0, + "outerValue": Object { + "call": [MockFunction], + "claim": [MockFunction] { + "calls": Array [ + Array [ + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "currentUserAccount$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, + "deleteUserAccount": [MockFunction] { + "calls": Array [ + Array [ + Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], + }, + "getAccount": [MockFunction], + "getBlockCount": [MockFunction], + "getCurrentUserAccount": [MockFunction] { + "calls": Array [ + Array [], + Array [], + ], + "results": Array [ + Object { + "type": "return", + "value": Object { + "id": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "name": "Mock", + "publicKey": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", + }, + }, + Object { + "type": "return", + "value": Object { + "id": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "name": "Mock", + "publicKey": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", + }, + }, + ], + }, + "getNetworks": [MockFunction] { + "calls": Array [ + Array [], + ], + "results": Array [ + Object { + "type": "return", + "value": Array [ + "main", + ], + }, + ], + }, + "getUserAccounts": [MockFunction], + "invoke": [MockFunction], + "invokeClaim": [MockFunction], + "invokeCompleteSend": [MockFunction], + "invokeRefundAssets": [MockFunction], + "invokeSend": [MockFunction], + "issue": [MockFunction], + "iterActionsRaw": [MockFunction], + "iterBlocks": [MockFunction], + "networks$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, + "publish": [MockFunction] { + "calls": Array [ + Array [ + Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "Hello World", + "dynamicInvoke": false, + "email": "alex.dicarlo@neotracker.io", + "name": "MyContract", + "parameters": Array [ + "Address", + "Buffer", + ], + "payable": true, + "returnType": "Buffer", + "script": "5f8d70", + "storage": true, + }, + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "publishAndDeploy": [MockFunction] { + "calls": Array [ + Array [ + Object { + "author": "dicarlo2", + "codeVersion": "1.0", + "description": "Hello World", + "dynamicInvoke": false, + "email": "alex.dicarlo@neotracker.io", + "name": "MyContract", + "parameters": Array [ + "Address", + "Buffer", + ], + "payable": true, + "returnType": "Buffer", + "script": "5f8d70", + "storage": true, + }, + Object { + "events": Array [], + "functions": Array [ + Object { + "claim": undefined, + "completeSend": undefined, + "constant": undefined, + "name": "deploy", + "parameters": Array [], + "receive": undefined, + "refundAssets": undefined, + "returnType": Object { + "forwardedValue": undefined, + "optional": undefined, + "type": "Boolean", + }, + "send": undefined, + "sendUnsafe": undefined, + }, + ], + }, + Array [], + Object {}, + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "read": [MockFunction] { + "calls": Array [ + Array [ + "main", + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Object {}, + }, + ], + }, + "registerAsset": [MockFunction] { + "calls": Array [ + Array [ + Object { + "admin": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "amount": "100000000", + "issuer": "ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s", + "name": "TheToken", + "owner": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", + "precision": 8, + "type": "Token", + }, + Object {}, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + ], + }, + "selectUserAccount": [MockFunction], + "transfer": [MockFunction], + "updateUserAccountName": [MockFunction] { + "calls": Array [ + Array [ + Object { + "id": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "name": "newName", + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": undefined, + }, + ], + }, + "userAccounts$": Observable { + "_isScalar": false, + "_subscribe": [Function], + }, + }, "parent": [Circular], "syncErrorThrowable": false, "syncErrorThrown": false, diff --git a/packages/neo-one-client-full-core/src/__tests__/args.test.ts b/packages/neo-one-client-full-core/src/__tests__/args.test.ts index 2226cb7e87..8f4730aa3b 100644 --- a/packages/neo-one-client-full-core/src/__tests__/args.test.ts +++ b/packages/neo-one-client-full-core/src/__tests__/args.test.ts @@ -105,78 +105,6 @@ describe('arg assertions', () => { expect(() => args.assertGetOptions('value', value)).toThrowErrorMatchingSnapshot(); }); - test('assertAssetRegister - credit', () => { - const value = data.assetRegisters.credit; - - expect(args.assertAssetRegister('value', value)).toEqual(value); - }); - - test('assertAssetRegister - duty', () => { - const value = data.assetRegisters.duty; - - expect(args.assertAssetRegister('value', value)).toEqual(value); - }); - - test('assertAssetRegister - governing', () => { - const value = data.assetRegisters.governing; - - expect(args.assertAssetRegister('value', value)).toEqual(value); - }); - - test('assertAssetRegister - utility', () => { - const value = data.assetRegisters.utility; - - expect(args.assertAssetRegister('value', value)).toEqual(value); - }); - - test('assertAssetRegister - currency', () => { - const value = data.assetRegisters.currency; - - expect(args.assertAssetRegister('value', value)).toEqual(value); - }); - - test('assertAssetRegister - share', () => { - const value = data.assetRegisters.share; - - expect(args.assertAssetRegister('value', value)).toEqual(value); - }); - - test('assertAssetRegister - invoice', () => { - const value = data.assetRegisters.invoice; - - expect(args.assertAssetRegister('value', value)).toEqual(value); - }); - - test('assertAssetRegister - token', () => { - const value = data.assetRegisters.token; - - expect(args.assertAssetRegister('value', value)).toEqual(value); - }); - - test('assertAssetRegister - validScriptHash', () => { - const value = data.assetRegisters.validScriptHash; - - expect(args.assertAssetRegister('value', value)).toEqual(data.assetRegisters.token); - }); - - test('assertAssetRegister - undefined', () => { - const value = undefined; - - expect(() => args.assertAssetRegister('value', value)).toThrowErrorMatchingSnapshot(); - }); - - test('assertAssetRegister - non object', () => { - const value = true; - - expect(() => args.assertAssetRegister('value', value)).toThrowErrorMatchingSnapshot(); - }); - - test('assertAssetRegister - invalid', () => { - const value = data.assetRegisters.invalid; - - expect(() => args.assertAssetRegister('value', value)).toThrowErrorMatchingSnapshot(); - }); - test('assertContractRegister - valid', () => { const value = data.contractRegisters.valid; @@ -204,6 +132,12 @@ describe('arg assertions', () => { test('assertABI - nep5', () => { const value = nep5.abi(8); - expect(clientArgs.assertABI('value', value)).toEqual(value); + expect(clientArgs.assertContractABIClient('value', value)).toEqual(value); + }); + + test('assertContractManifest', () => { + const value = nep5.manifest(8); + + expect(clientArgs.assertContractManifest('value', value)).toEqual(value); }); }); diff --git a/packages/neo-one-client-full-core/src/__tests__/user/LocalUserAccountProvider.test.ts b/packages/neo-one-client-full-core/src/__tests__/user/LocalUserAccountProvider.test.ts index 0ff54378de..1d97f5cc02 100644 --- a/packages/neo-one-client-full-core/src/__tests__/user/LocalUserAccountProvider.test.ts +++ b/packages/neo-one-client-full-core/src/__tests__/user/LocalUserAccountProvider.test.ts @@ -1,17 +1,6 @@ // tslint:disable no-object-mutation -import { - ABIParameter, - AssetType, - Attribute, - common, - ContractParameterType, - InputModel, - InputOutput, - Param, - utils, -} from '@neo-one/client-common'; +import { ABIParameter, Attribute, common, ContractParameterType, Param, utils } from '@neo-one/client-common'; import { Hash256, KeyStore } from '@neo-one/client-core'; -import { deserializeTransactionWire } from '@neo-one/node-core'; import { Modifiable } from '@neo-one/utils'; import BigNumber from 'bignumber.js'; import { of as _of } from 'rxjs'; @@ -43,9 +32,7 @@ describe('LocalUserAccountProvider', () => { const networks = [network]; const getNetworks = jest.fn(() => networks); const getUnclaimed = jest.fn(); - const getOutput = jest.fn(); const getTransaction = jest.fn(); - const getUnspentOutputs = jest.fn(); const relayTransaction = jest.fn(); const getTransactionReceipt = jest.fn(); const getInvocationData = jest.fn(); @@ -55,22 +42,18 @@ describe('LocalUserAccountProvider', () => { const read = jest.fn(); const call = jest.fn(); const iterBlocks = jest.fn(); - const getAccount = jest.fn(); const iterActionsRaw = jest.fn(); const dataProvider: Modifiable = { networks$: _of(networks), getNetworks, getUnclaimed, - getOutput, getTransaction, - getUnspentOutputs, relayTransaction, getTransactionReceipt, getInvocationData, testInvoke, getNetworkSettings, getBlockCount, - getAccount, read, iterBlocks, iterActionsRaw, @@ -109,8 +92,8 @@ describe('LocalUserAccountProvider', () => { test('transfer', async () => { const transfer = factory.createTransfer(); - getUnspentOutputs.mockImplementation(async () => Promise.resolve([factory.createInputOutput()])); - getOutput.mockImplementation(async () => Promise.resolve(factory.createInputOutput())); + // getUnspentOutputs.mockImplementation(async () => Promise.resolve([factory.createInputOutput()])); + // getOutput.mockImplementation(async () => Promise.resolve(factory.createInputOutput())); sign.mockImplementation(async () => Promise.resolve(data.buffers.a)); const transaction = factory.createContractTransaction(); relayTransaction.mockImplementation(async () => Promise.resolve({ transaction })); @@ -143,7 +126,7 @@ describe('LocalUserAccountProvider', () => { test('transfer - insufficient funds', async () => { const transfer = factory.createTransfer(); - getUnspentOutputs.mockImplementation(async () => Promise.resolve([])); + // getUnspentOutputs.mockImplementation(async () => Promise.resolve([])); const result = provider.transfer([transfer]); @@ -179,7 +162,7 @@ describe('LocalUserAccountProvider', () => { test(`publish fault`, async () => { const contract = factory.createContractRegister(); - getUnspentOutputs.mockImplementation(async () => Promise.resolve([gasInputOutput])); + // getUnspentOutputs.mockImplementation(async () => Promise.resolve([gasInputOutput])); testInvoke.mockImplementation(async () => Promise.resolve(factory.createRawCallReceipt())); sign.mockImplementation(async () => Promise.resolve(data.buffers.a)); const transaction = factory.createPublishTransaction(); @@ -213,7 +196,7 @@ describe('LocalUserAccountProvider', () => { test(`publish invoke fault`, async () => { const contract = factory.createContractRegister(); - getUnspentOutputs.mockImplementation(async () => Promise.resolve([gasInputOutput])); + // getUnspentOutputs.mockImplementation(async () => Promise.resolve([gasInputOutput])); testInvoke.mockImplementation(async () => Promise.resolve( factory.createRawCallReceipt({ @@ -231,7 +214,7 @@ describe('LocalUserAccountProvider', () => { 'Signature', 'Boolean', 'Integer', - 'Address', + 'Hash160', 'Hash256', 'Buffer', 'PublicKey', @@ -245,7 +228,7 @@ describe('LocalUserAccountProvider', () => { contractParameterTypes.forEach((returnType) => { test(`publish with return type ${returnType}`, async () => { const contract = factory.createContractRegister({ returnType }); - getUnspentOutputs.mockImplementation(async () => Promise.resolve([gasInputOutput])); + // getUnspentOutputs.mockImplementation(async () => Promise.resolve([gasInputOutput])); testInvoke.mockImplementation(async () => Promise.resolve(factory.createRawCallReceipt())); sign.mockImplementation(async () => Promise.resolve(data.buffers.a)); const transaction = factory.createPublishTransaction(); @@ -296,7 +279,7 @@ describe('LocalUserAccountProvider', () => { publishAndDeployCases.forEach(({ name, parameters, params }) => { test(`publishAndDeploy ${name}`, async () => { const contract = factory.createContractRegister(); - getUnspentOutputs.mockImplementation(async () => Promise.resolve([gasInputOutput])); + // getUnspentOutputs.mockImplementation(async () => Promise.resolve([gasInputOutput])); testInvoke.mockImplementation(async () => Promise.resolve(factory.createRawCallReceipt())); sign.mockImplementation(async () => Promise.resolve(data.buffers.a)); const transaction = factory.createPublishTransaction(); @@ -332,116 +315,11 @@ describe('LocalUserAccountProvider', () => { }); }); - const assetTypes: readonly AssetType[] = [ - 'Credit', - 'Duty', - 'Governing', - 'Utility', - 'Currency', - 'Share', - 'Invoice', - 'Token', - ]; - - assetTypes.forEach((assetType) => { - test(`registerAsset ${assetType}`, async () => { - const asset = factory.createAssetRegister({ type: assetType }); - getUnspentOutputs.mockImplementation(async () => Promise.resolve([gasInputOutput])); - testInvoke.mockImplementation(async () => Promise.resolve(factory.createRawCallReceipt())); - sign.mockImplementation(async () => Promise.resolve(data.buffers.a)); - const transaction = factory.createRegisterTransaction(); - relayTransaction.mockImplementation(async () => Promise.resolve({ transaction })); - const receipt = factory.createTransactionReceipt(); - getTransactionReceipt.mockImplementation(async () => Promise.resolve(receipt)); - const invocationData = factory.createRawInvocationData(); - getInvocationData.mockImplementation(async () => Promise.resolve(invocationData)); - - const result = await provider.registerAsset(asset, { systemFee: new BigNumber(-1) }); - const confirmResult = await result.confirmed(); - - expect(result.transaction).toEqual(transaction); - expect(confirmResult.blockHash).toEqual(receipt.blockHash); - expect(confirmResult.blockIndex).toEqual(receipt.blockIndex); - expect(confirmResult.transactionIndex).toEqual(receipt.transactionIndex); - expect(confirmResult.result.gasConsumed).toEqual(invocationData.result.gasConsumed); - expect(confirmResult.result.gasCost).toEqual(invocationData.result.gasCost); - expect(confirmResult.result.state).toEqual('HALT'); - if (confirmResult.result.state !== 'HALT') { - throw new Error('For TS'); - } - expect(confirmResult.result.value).toEqual(invocationData.asset); - - expect(sign.mock.calls).toMatchSnapshot(); - expect(testInvoke.mock.calls).toMatchSnapshot(); - expect(relayTransaction.mock.calls).toMatchSnapshot(); - }); - }); - - test(`registerAsset fault`, async () => { - const asset = factory.createAssetRegister(); - getUnspentOutputs.mockImplementation(async () => Promise.resolve([gasInputOutput])); - sign.mockImplementation(async () => Promise.resolve(data.buffers.a)); - const transaction = factory.createRegisterTransaction(); - relayTransaction.mockImplementation(async () => Promise.resolve({ transaction })); - const receipt = factory.createTransactionReceipt(); - getTransactionReceipt.mockImplementation(async () => Promise.resolve(receipt)); - testInvoke.mockImplementation(async () => Promise.resolve(factory.createRawCallReceipt())); - const invocationData = factory.createRawInvocationData({ result: factory.createRawInvocationResultError() }); - getInvocationData.mockImplementation(async () => Promise.resolve(invocationData)); - - const result = await provider.registerAsset(asset, { systemFee: new BigNumber(-1) }); - const confirmResult = await result.confirmed(); - - expect(result.transaction).toEqual(transaction); - expect(confirmResult.blockHash).toEqual(receipt.blockHash); - expect(confirmResult.blockIndex).toEqual(receipt.blockIndex); - expect(confirmResult.transactionIndex).toEqual(receipt.transactionIndex); - expect(confirmResult.result.gasConsumed).toEqual(invocationData.result.gasConsumed); - expect(confirmResult.result.gasCost).toEqual(invocationData.result.gasCost); - expect(confirmResult.result.state).toEqual('FAULT'); - if (confirmResult.result.state !== 'FAULT') { - throw new Error('For TS'); - } - expect(confirmResult.result.message).toMatchSnapshot(); - - expect(sign.mock.calls).toMatchSnapshot(); - expect(testInvoke.mock.calls).toMatchSnapshot(); - expect(relayTransaction.mock.calls).toMatchSnapshot(); - }); - - test('issue', async () => { - const transfer = factory.createTransfer(); - getNetworkSettings.mockImplementation(async () => - Promise.resolve(factory.createNetworkSettings({ issueGASFee: gasInputOutput.value })), - ); - getUnspentOutputs.mockImplementation(async () => Promise.resolve([gasInputOutput])); - sign.mockImplementation(async () => Promise.resolve(data.buffers.a)); - const transaction = factory.createIssueTransaction(); - relayTransaction.mockImplementation(async () => Promise.resolve({ transaction })); - const receipt = factory.createTransactionReceipt(); - getTransactionReceipt.mockImplementation(async () => Promise.resolve(receipt)); - - const result = await provider.issue([transfer]); - const confirmResult = await result.confirmed(); - - expect(result.transaction).toEqual(transaction); - expect(confirmResult).toEqual(receipt); - - expect(sign.mock.calls).toMatchSnapshot(); - expect(relayTransaction.mock.calls).toMatchSnapshot(); - }); - - test('issue - nothing to issue', async () => { - const result = provider.issue([]); - - await expect(result).rejects.toMatchSnapshot(); - }); - const invokeTestCases = [true, false]; invokeTestCases.forEach((verify) => { test(`invoke ${verify ? 'verify' : 'no verify'}`, async () => { - getUnspentOutputs.mockImplementation(async () => Promise.resolve([gasInputOutput])); + // getUnspentOutputs.mockImplementation(async () => Promise.resolve([gasInputOutput])); testInvoke.mockImplementation(async () => Promise.resolve(factory.createRawCallReceipt())); sign.mockImplementation(async () => Promise.resolve(data.buffers.a)); const transaction = factory.createRegisterTransaction(); @@ -451,7 +329,7 @@ describe('LocalUserAccountProvider', () => { const invocationData = factory.createRawInvocationData(); getInvocationData.mockImplementation(async () => Promise.resolve(invocationData)); - const result = await provider.invoke(keys[1].address, 'foo', [true], [['firstArg', true] as const], verify, { + const result = await provider.invoke(keys[1].address, 'foo', [true], [['firstArg', true]], verify, { systemFee: new BigNumber(-1), }); const confirmResult = await result.confirmed(); @@ -518,8 +396,8 @@ describe('LocalUserAccountProvider', () => { }); test('__execute', async () => { - getUnspentOutputs.mockImplementation(async () => Promise.resolve([gasInputOutput])); - getOutput.mockImplementation(async () => Promise.resolve(gasInputOutput)); + // getUnspentOutputs.mockImplementation(async () => Promise.resolve([gasInputOutput])); + // getOutput.mockImplementation(async () => Promise.resolve(gasInputOutput)); testInvoke.mockImplementation(async () => Promise.resolve(factory.createRawCallReceipt())); sign.mockImplementation(async () => Promise.resolve(data.buffers.a)); const transaction = factory.createRegisterTransaction(); @@ -550,8 +428,8 @@ describe('LocalUserAccountProvider', () => { }); test('__execute - with transfers', async () => { - getUnspentOutputs.mockImplementation(async () => Promise.resolve([gasInputOutput])); - getOutput.mockImplementation(async () => Promise.resolve(gasInputOutput)); + // getUnspentOutputs.mockImplementation(async () => Promise.resolve([gasInputOutput])); + // getOutput.mockImplementation(async () => Promise.resolve(gasInputOutput)); testInvoke.mockImplementation(async () => Promise.resolve(factory.createRawCallReceipt())); sign.mockImplementation(async () => Promise.resolve(data.buffers.a)); const transaction = factory.createRegisterTransaction(); @@ -567,7 +445,8 @@ describe('LocalUserAccountProvider', () => { transfers: [transfer], }); - expect(result.transaction.inputs).toMatchSnapshot(); + expect(result).toMatchSnapshot(); + // expect(result.transaction.inputs).toMatchSnapshot(); }); describe('consolidation + multi-inputs', () => { @@ -637,13 +516,8 @@ describe('LocalUserAccountProvider', () => { }, }; - const attribute: Attribute = { - usage: 'Remark', - data: 'testData', - }; - const options = { - attributes: [attribute], + attributes: [], }; const context = { @@ -652,7 +526,7 @@ describe('LocalUserAccountProvider', () => { test('throws on reused inputs', async () => { const unspent = [outputs.sevenNEO, outputs.oneNEO, outputs.elevenGAS]; - getUnspentOutputs.mockImplementation(async () => Promise.resolve(unspent)); + // getUnspentOutputs.mockImplementation(async () => Promise.resolve(unspent)); sign.mockImplementation(async () => Promise.resolve(data.buffers.a)); const transaction = factory.createContractTransaction(); relayTransaction.mockImplementation(async () => Promise.resolve({ transaction })); @@ -683,7 +557,7 @@ describe('LocalUserAccountProvider', () => { test('updates on new block', async () => { const unspent = [outputs.sevenNEO, outputs.oneNEO, outputs.elevenGAS]; - getUnspentOutputs.mockImplementation(async () => Promise.resolve(unspent)); + // getUnspentOutputs.mockImplementation(async () => Promise.resolve(unspent)); sign.mockImplementation(async () => Promise.resolve(data.buffers.a)); const transaction = factory.createContractTransaction(); relayTransaction.mockImplementation(async () => Promise.resolve({ transaction })); @@ -723,21 +597,21 @@ describe('LocalUserAccountProvider', () => { asset: Hash256.NEO, to: keys[1].address, }; - getUnspentOutputs.mockImplementation(async () => Promise.resolve(unspent)); - getOutput.mockImplementation(async (_network, input) => - Promise.resolve( - unspent.find( - (inputOutput) => - inputOutput.hash === common.uInt256ToString(input.hash) && inputOutput.index === input.index, - ), - ), - ); + // getUnspentOutputs.mockImplementation(async () => Promise.resolve(unspent)); + // getOutput.mockImplementation(async (_network, input) => + // Promise.resolve( + // unspent.find( + // (inputOutput) => + // inputOutput.hash === common.uInt256ToString(input.hash) && inputOutput.index === input.index, + // ), + // ), + // ); sign.mockImplementation(async () => Promise.resolve(data.buffers.a)); const transaction = factory.createContractTransaction(); - relayTransaction.mockImplementation(async (_network, transactionSerialized) => { + relayTransaction.mockImplementation(async (_network, transactionModel) => { const coreTransaction = deserializeTransactionWire({ context, - buffer: Buffer.from(transactionSerialized, 'hex'), + buffer: transactionModel.serializeWire(), }); expect(coreTransaction.serializeWire().length <= byteLimit).toBeTruthy(); expect(coreTransaction.inputs.length).toEqual(unspent.length); @@ -762,7 +636,7 @@ describe('LocalUserAccountProvider', () => { const byteLimit = 500; keystore.byteLimit = byteLimit; const unspent = [outputs.elevenGAS]; - getUnspentOutputs.mockImplementation(async () => Promise.resolve(unspent)); + // getUnspentOutputs.mockImplementation(async () => Promise.resolve(unspent)); getUnclaimed.mockImplementation(async () => Promise.resolve({ unclaimed: [ @@ -774,19 +648,19 @@ describe('LocalUserAccountProvider', () => { amount: new BigNumber('3'), }), ); - getOutput.mockImplementation(async () => - Promise.resolve({ - hash: data.hash256s.a, - index: 2, - address: keys[0].address, - }), - ); + // getOutput.mockImplementation(async () => + // Promise.resolve({ + // hash: data.hash256s.a, + // index: 2, + // address: keys[0].address, + // }), + // ); sign.mockImplementation(async () => Promise.resolve(data.buffers.a)); const transaction = factory.createClaimTransaction(); - relayTransaction.mockImplementation(async (_network, transactionSerialized) => { + relayTransaction.mockImplementation(async (_network, transactionModel) => { const coreTransaction = deserializeTransactionWire({ context, - buffer: Buffer.from(transactionSerialized, 'hex'), + buffer: transactionModel.serializeWire(), }); expect(coreTransaction.serializeWire().length <= byteLimit).toBeTruthy(); expect(coreTransaction.inputs.length).toEqual(unspent.length); @@ -818,21 +692,21 @@ describe('LocalUserAccountProvider', () => { outputs.twoGAS, outputs.elevenGAS, ]; - getUnspentOutputs.mockImplementation(async () => Promise.resolve(unspent)); - getOutput.mockImplementation(async (_network, input) => - Promise.resolve( - unspent.find( - (inputOutput) => - inputOutput.hash === common.uInt256ToString(input.hash) && inputOutput.index === input.index, - ), - ), - ); + // getUnspentOutputs.mockImplementation(async () => Promise.resolve(unspent)); + // getOutput.mockImplementation(async (_network, input) => + // Promise.resolve( + // unspent.find( + // (inputOutput) => + // inputOutput.hash === common.uInt256ToString(input.hash) && inputOutput.index === input.index, + // ), + // ), + // ); sign.mockImplementation(async () => Promise.resolve(data.buffers.a)); const transaction = factory.createContractTransaction(); - relayTransaction.mockImplementation(async (_network, transactionSerialized) => { + relayTransaction.mockImplementation(async (_network, transactionModel) => { const coreTransaction = deserializeTransactionWire({ context, - buffer: Buffer.from(transactionSerialized, 'hex'), + buffer: transactionModel.serializeWire(), }); expect(coreTransaction.serializeWire().length <= byteLimit).toBeTruthy(); expect(coreTransaction.inputs.length).toEqual(unspent.length); @@ -871,21 +745,21 @@ describe('LocalUserAccountProvider', () => { outputs.twoGAS, outputs.elevenGAS, ]; - getUnspentOutputs.mockImplementation(async () => Promise.resolve(unspent)); - getOutput.mockImplementation(async (_network, input) => - Promise.resolve( - unspent.find( - (inputOutput) => - inputOutput.hash === common.uInt256ToString(input.hash) && inputOutput.index === input.index, - ), - ), - ); + // getUnspentOutputs.mockImplementation(async () => Promise.resolve(unspent)); + // getOutput.mockImplementation(async (_network, input) => + // Promise.resolve( + // unspent.find( + // (inputOutput) => + // inputOutput.hash === common.uInt256ToString(input.hash) && inputOutput.index === input.index, + // ), + // ), + // ); sign.mockImplementation(async () => Promise.resolve(data.buffers.a)); const transaction = factory.createContractTransaction(); - relayTransaction.mockImplementation(async (_network, transactionSerialized) => { + relayTransaction.mockImplementation(async (_network, transactionModel) => { const coreTransaction = deserializeTransactionWire({ context, - buffer: Buffer.from(transactionSerialized, 'hex'), + buffer: transactionModel.serializeWire(), }); expect(coreTransaction.serializeWire().length).toBeLessThanOrEqual(byteLimit); expect(coreTransaction.inputs.length).toEqual(2); @@ -910,11 +784,6 @@ describe('LocalUserAccountProvider', () => { expect(relayTransaction.mock.calls).toMatchSnapshot(); }); - const verifyInput = (result: InputModel, input: InputOutput) => { - expect(common.uInt256ToString(result.hash)).toEqual(input.hash); - expect(result.index).toEqual(input.index); - }; - test('transfer one - consolidate prioritizes NEO/GAS for new outputs', async () => { const byteLimit = 400; keystore.byteLimit = byteLimit; @@ -928,21 +797,21 @@ describe('LocalUserAccountProvider', () => { outputs.twoGAS, outputs.elevenGAS, ]; - getUnspentOutputs.mockImplementation(async () => Promise.resolve(unspent)); - getOutput.mockImplementation(async (_network, input) => - Promise.resolve( - unspent.find( - (inputOutput) => - inputOutput.hash === common.uInt256ToString(input.hash) && inputOutput.index === input.index, - ), - ), - ); + // getUnspentOutputs.mockImplementation(async () => Promise.resolve(unspent)); + // getOutput.mockImplementation(async (_network, input) => + // Promise.resolve( + // unspent.find( + // (inputOutput) => + // inputOutput.hash === common.uInt256ToString(input.hash) && inputOutput.index === input.index, + // ), + // ), + // ); sign.mockImplementation(async () => Promise.resolve(data.buffers.a)); const transaction = factory.createContractTransaction(); - relayTransaction.mockImplementation(async (_network, transactionSerialized) => { + relayTransaction.mockImplementation(async (_network, transactionModel) => { const coreTransaction = deserializeTransactionWire({ context, - buffer: Buffer.from(transactionSerialized, 'hex'), + buffer: transactionModel.serializeWire(), }); expect(coreTransaction.serializeWire().length <= byteLimit).toBeTruthy(); expect(coreTransaction.inputs.length).toEqual(6); @@ -980,21 +849,21 @@ describe('LocalUserAccountProvider', () => { to: keys[1].address, }; const unspent = [outputs.oneNEO, outputs.oneGAS, outputs.elevenGAS]; - getUnspentOutputs.mockImplementation(async () => Promise.resolve(unspent)); - getOutput.mockImplementation(async (_network, input) => - Promise.resolve( - unspent.find( - (inputOutput) => - inputOutput.hash === common.uInt256ToString(input.hash) && inputOutput.index === input.index, - ), - ), - ); + // getUnspentOutputs.mockImplementation(async () => Promise.resolve(unspent)); + // getOutput.mockImplementation(async (_network, input) => + // Promise.resolve( + // unspent.find( + // (inputOutput) => + // inputOutput.hash === common.uInt256ToString(input.hash) && inputOutput.index === input.index, + // ), + // ), + // ); sign.mockImplementation(async () => Promise.resolve(data.buffers.a)); const transaction = factory.createContractTransaction(); - relayTransaction.mockImplementation(async (_network, transactionSerialized) => { + relayTransaction.mockImplementation(async (_network, transactionModel) => { const coreTransaction = deserializeTransactionWire({ context, - buffer: Buffer.from(transactionSerialized, 'hex'), + buffer: transactionModel.serializeWire(), }); expect(coreTransaction.serializeWire().length <= byteLimit).toBeTruthy(); expect(coreTransaction.inputs.length).toEqual(3); diff --git a/packages/neo-one-client-full-core/src/__tests__/user/__snapshots__/LocalUserAccountProvider.test.ts.snap b/packages/neo-one-client-full-core/src/__tests__/user/__snapshots__/LocalUserAccountProvider.test.ts.snap index f65705cb4e..977bc6dc0b 100644 --- a/packages/neo-one-client-full-core/src/__tests__/user/__snapshots__/LocalUserAccountProvider.test.ts.snap +++ b/packages/neo-one-client-full-core/src/__tests__/user/__snapshots__/LocalUserAccountProvider.test.ts.snap @@ -288,115 +288,965 @@ exports[`LocalUserAccountProvider __execute 2`] = ` Array [ Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf10010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf10010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1011c5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d0010a5d4e800000003fe6c6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7dff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1011c5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d0010a5d4e800000003fe6c6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7dff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d10102b5000010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 254, + "value": "6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7d", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 254, + "value": "6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7d", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "b500", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, ], ] `; @@ -405,123 +1255,1555 @@ exports[`LocalUserAccountProvider __execute 3`] = ` Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "010101ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + IssueTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 1, + "version": 1, + }, + undefined, ], Array [ "main", - "d1011c5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d00ca9a3b0000000003fe6c6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7dff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 254, + "value": "6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7d", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1011c5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d00ca9a3b0000000003fe6c6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7dff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 254, + "value": "6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7d", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d10102b50000ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "b500", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], ] `; @@ -568,11 +2850,96 @@ exports[`LocalUserAccountProvider claim 2`] = ` Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", ], ] `; @@ -910,147 +3277,1971 @@ exports[`LocalUserAccountProvider consolidation + multi-inputs claim - consolida Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "010101ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1011c5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d00ca9a3b0000000003fe6c6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7dff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1011c5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d00ca9a3b0000000003fe6c6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7dff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d10102b50000ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d10102b50000ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500000000000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + IssueTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 1, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65023452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5030034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600039b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50046c3230000000035b20010db73bf86371075ddfba4e6596f1ff35d9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f505000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 254, + "value": "6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7d", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65023452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5030034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600039b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50046c3230000000035b20010db73bf86371075ddfba4e6596f1ff35d9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f505000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 254, + "value": "6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7d", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65023452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5030034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600039b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f5050000000035b20010db73bf86371075ddfba4e6596f1ff35d9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50046c323000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "b500", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000002f000ff076e656f2d6f6e65053452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b503003452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b501003452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50200fbe042a3403a59513625225b9132f3c48d0014283a837ba480c136f43d112106040034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600039b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500a3e1110000000035b20010db73bf86371075ddfba4e6596f1ff35d9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50027b929000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60008c8647000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "0", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "b500", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5020002f000ff076e656f2d6f6e650134c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863060001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60004e7253000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "35b20010db73bf86371075ddfba4e6596f1ff35d", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "600000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "100000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "1", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "35b20010db73bf86371075ddfba4e6596f1ff35d", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "600000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "100000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "1", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "35b20010db73bf86371075ddfba4e6596f1ff35d", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "100000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "600000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "1", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 240, + "value": "", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 1, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 2, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "fbe042a3403a59513625225b9132f3c48d0014283a837ba480c136f43d112106", + "hashHex": "0x0621113df436c180a47b833a2814008dc4f332915b22253651593a40a342e0fb", + "index": 4, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "35b20010db73bf86371075ddfba4e6596f1ff35d", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "300000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "700000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1200000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 240, + "value": "", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 2, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1400000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", ], ] `; @@ -1381,143 +5572,1912 @@ exports[`LocalUserAccountProvider consolidation + multi-inputs transfer - consol Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "010101ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1011c5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d00ca9a3b0000000003fe6c6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7dff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1011c5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d00ca9a3b0000000003fe6c6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7dff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d10102b50000ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + IssueTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 1, + "version": 1, + }, + undefined, ], Array [ "main", - "d10102b50000ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500000000000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 254, + "value": "6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7d", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65023452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5030034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600039b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50046c3230000000035b20010db73bf86371075ddfba4e6596f1ff35d9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f505000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 254, + "value": "6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7d", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65023452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5030034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600039b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50046c3230000000035b20010db73bf86371075ddfba4e6596f1ff35d9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f505000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "b500", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65023452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5030034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600039b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f5050000000035b20010db73bf86371075ddfba4e6596f1ff35d9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50046c323000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "0", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "b500", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000002f000ff076e656f2d6f6e65053452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b503003452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b501003452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50200fbe042a3403a59513625225b9132f3c48d0014283a837ba480c136f43d112106040034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600039b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500a3e1110000000035b20010db73bf86371075ddfba4e6596f1ff35d9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50027b929000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60008c8647000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "35b20010db73bf86371075ddfba4e6596f1ff35d", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "600000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "100000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "1", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "35b20010db73bf86371075ddfba4e6596f1ff35d", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "600000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "100000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "1", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "35b20010db73bf86371075ddfba4e6596f1ff35d", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "100000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "600000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "1", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 240, + "value": "", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 1, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 2, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "fbe042a3403a59513625225b9132f3c48d0014283a837ba480c136f43d112106", + "hashHex": "0x0621113df436c180a47b833a2814008dc4f332915b22253651593a40a342e0fb", + "index": 4, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "35b20010db73bf86371075ddfba4e6596f1ff35d", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "300000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "700000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1200000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", ], ] `; @@ -1864,151 +7824,2065 @@ exports[`LocalUserAccountProvider consolidation + multi-inputs transfer none - c Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "010101ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1011c5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d00ca9a3b0000000003fe6c6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7dff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1011c5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d00ca9a3b0000000003fe6c6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7dff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d10102b50000ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d10102b50000ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500000000000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65023452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5030034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600039b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50046c3230000000035b20010db73bf86371075ddfba4e6596f1ff35d9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f505000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + IssueTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 1, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65023452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5030034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600039b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50046c3230000000035b20010db73bf86371075ddfba4e6596f1ff35d9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f505000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 254, + "value": "6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7d", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65023452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5030034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600039b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f5050000000035b20010db73bf86371075ddfba4e6596f1ff35d9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50046c323000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 254, + "value": "6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7d", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000002f000ff076e656f2d6f6e65053452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b503003452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b501003452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50200fbe042a3403a59513625225b9132f3c48d0014283a837ba480c136f43d112106040034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600039b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500a3e1110000000035b20010db73bf86371075ddfba4e6596f1ff35d9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50027b929000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60008c8647000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "b500", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5020002f000ff076e656f2d6f6e650134c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863060001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60004e7253000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "0", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "b500", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000002f000ff076e656f2d6f6e65063452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b501003452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b502003452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50300fbe042a3403a59513625225b9132f3c48d0014283a837ba480c136f43d112106040034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863050034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60004e7253000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "35b20010db73bf86371075ddfba4e6596f1ff35d", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "600000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "100000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "1", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "35b20010db73bf86371075ddfba4e6596f1ff35d", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "600000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "100000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "1", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "35b20010db73bf86371075ddfba4e6596f1ff35d", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "100000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "600000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "1", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 240, + "value": "", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 1, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 2, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "fbe042a3403a59513625225b9132f3c48d0014283a837ba480c136f43d112106", + "hashHex": "0x0621113df436c180a47b833a2814008dc4f332915b22253651593a40a342e0fb", + "index": 4, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "35b20010db73bf86371075ddfba4e6596f1ff35d", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "300000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "700000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1200000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 240, + "value": "", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 2, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1400000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 240, + "value": "", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 1, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 2, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "fbe042a3403a59513625225b9132f3c48d0014283a837ba480c136f43d112106", + "hashHex": "0x0621113df436c180a47b833a2814008dc4f332915b22253651593a40a342e0fb", + "index": 4, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 5, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1400000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", ], ] `; @@ -2382,163 +10256,2298 @@ exports[`LocalUserAccountProvider consolidation + multi-inputs transfer one - co Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "010101ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1011c5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d00ca9a3b0000000003fe6c6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7dff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1011c5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d00ca9a3b0000000003fe6c6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7dff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d10102b50000ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d10102b50000ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500000000000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65023452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5030034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600039b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50046c3230000000035b20010db73bf86371075ddfba4e6596f1ff35d9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f505000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65023452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5030034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600039b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50046c3230000000035b20010db73bf86371075ddfba4e6596f1ff35d9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f505000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65023452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5030034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600039b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f5050000000035b20010db73bf86371075ddfba4e6596f1ff35d9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50046c323000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000002f000ff076e656f2d6f6e65053452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b503003452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b501003452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50200fbe042a3403a59513625225b9132f3c48d0014283a837ba480c136f43d112106040034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600039b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500a3e1110000000035b20010db73bf86371075ddfba4e6596f1ff35d9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50027b929000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60008c8647000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + IssueTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 1, + "version": 1, + }, + undefined, ], Array [ "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5020002f000ff076e656f2d6f6e650134c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863060001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60004e7253000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 254, + "value": "6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7d", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000002f000ff076e656f2d6f6e65063452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b501003452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b502003452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50300fbe042a3403a59513625225b9132f3c48d0014283a837ba480c136f43d112106040034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863050034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60004e7253000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 254, + "value": "6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7d", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000002f000ff076e656f2d6f6e650288c2f6bcdfb7288e5b2e2c68bc1656f2f9798465f5e674908566582046f49d66090088c2f6bcdfb7288e5b2e2c68bc1656f2f9798465f5e674908566582046f49d66070002d1cb92b29c795db9ba7cf3094aee7d197172865c8a4d2f63cb84c9c57e7c8d5f00c2eb0b0000000035b20010db73bf86371075ddfba4e6596f1ff35dd1cb92b29c795db9ba7cf3094aee7d197172865c8a4d2f63cb84c9c57e7c8d5f00c2eb0b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "b500", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000002f000ff076e656f2d6f6e65063452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b501003452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b502003452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50300fbe042a3403a59513625225b9132f3c48d0014283a837ba480c136f43d112106040034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863050034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60004e7253000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "0", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "b500", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000002f000ff076e656f2d6f6e65033452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5010034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600fbe042a3403a59513625225b9132f3c48d0014283a837ba480c136f43d1121060400029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f5050000000035b20010db73bf86371075ddfba4e6596f1ff35de72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "35b20010db73bf86371075ddfba4e6596f1ff35d", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "600000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "100000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "1", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "35b20010db73bf86371075ddfba4e6596f1ff35d", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "600000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "100000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "1", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "35b20010db73bf86371075ddfba4e6596f1ff35d", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "100000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "600000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "1", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 240, + "value": "", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 1, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 2, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "fbe042a3403a59513625225b9132f3c48d0014283a837ba480c136f43d112106", + "hashHex": "0x0621113df436c180a47b833a2814008dc4f332915b22253651593a40a342e0fb", + "index": 4, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "35b20010db73bf86371075ddfba4e6596f1ff35d", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "300000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "700000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1200000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 240, + "value": "", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 2, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1400000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 240, + "value": "", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 1, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 2, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "fbe042a3403a59513625225b9132f3c48d0014283a837ba480c136f43d112106", + "hashHex": "0x0621113df436c180a47b833a2814008dc4f332915b22253651593a40a342e0fb", + "index": 4, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 5, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1400000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 240, + "value": "", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "88c2f6bcdfb7288e5b2e2c68bc1656f2f9798465f5e674908566582046f49d66", + "hashHex": "0x669df446205866859074e6f5658479f9f25616bc682c2e5b8e28b7dfbcf6c288", + "index": 9, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "88c2f6bcdfb7288e5b2e2c68bc1656f2f9798465f5e674908566582046f49d66", + "hashHex": "0x669df446205866859074e6f5658479f9f25616bc682c2e5b8e28b7dfbcf6c288", + "index": 7, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "35b20010db73bf86371075ddfba4e6596f1ff35d", + "asset": "d1cb92b29c795db9ba7cf3094aee7d197172865c8a4d2f63cb84c9c57e7c8d5f", + "serializeWire": [Function], + "size": 60, + "value": "200000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "d1cb92b29c795db9ba7cf3094aee7d197172865c8a4d2f63cb84c9c57e7c8d5f", + "serializeWire": [Function], + "size": 60, + "value": "200000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 240, + "value": "", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 1, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 2, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "fbe042a3403a59513625225b9132f3c48d0014283a837ba480c136f43d112106", + "hashHex": "0x0621113df436c180a47b833a2814008dc4f332915b22253651593a40a342e0fb", + "index": 4, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 5, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1400000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 240, + "value": "", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 1, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "fbe042a3403a59513625225b9132f3c48d0014283a837ba480c136f43d112106", + "hashHex": "0x0621113df436c180a47b833a2814008dc4f332915b22253651593a40a342e0fb", + "index": 4, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "35b20010db73bf86371075ddfba4e6596f1ff35d", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "100000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "2", ], ] `; @@ -2903,159 +12912,2225 @@ exports[`LocalUserAccountProvider consolidation + multi-inputs transfer one - co Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "010101ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1011c5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d00ca9a3b0000000003fe6c6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7dff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1011c5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d00ca9a3b0000000003fe6c6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7dff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d10102b50000ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d10102b50000ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500000000000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1010151000000000000000001ff076e656f2d6f6e65023452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5030034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600039b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50046c3230000000035b20010db73bf86371075ddfba4e6596f1ff35d9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f505000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1010151000000000000000001ff076e656f2d6f6e65023452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5030034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600039b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50046c3230000000035b20010db73bf86371075ddfba4e6596f1ff35d9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f505000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1010151000000000000000001ff076e656f2d6f6e65023452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5030034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600039b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f5050000000035b20010db73bf86371075ddfba4e6596f1ff35d9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50046c323000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + IssueTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 1, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000002f000ff076e656f2d6f6e65053452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b503003452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b501003452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50200fbe042a3403a59513625225b9132f3c48d0014283a837ba480c136f43d112106040034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600039b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500a3e1110000000035b20010db73bf86371075ddfba4e6596f1ff35d9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50027b929000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60008c8647000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 254, + "value": "6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7d", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5020002f000ff076e656f2d6f6e650134c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863060001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60004e7253000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 254, + "value": "6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7d", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000002f000ff076e656f2d6f6e65063452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b501003452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b502003452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50300fbe042a3403a59513625225b9132f3c48d0014283a837ba480c136f43d112106040034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863050034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60004e7253000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "b500", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000002f000ff076e656f2d6f6e650288c2f6bcdfb7288e5b2e2c68bc1656f2f9798465f5e674908566582046f49d66090088c2f6bcdfb7288e5b2e2c68bc1656f2f9798465f5e674908566582046f49d66070002d1cb92b29c795db9ba7cf3094aee7d197172865c8a4d2f63cb84c9c57e7c8d5f00c2eb0b0000000035b20010db73bf86371075ddfba4e6596f1ff35dd1cb92b29c795db9ba7cf3094aee7d197172865c8a4d2f63cb84c9c57e7c8d5f00c2eb0b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "0", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "b500", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000002f000ff076e656f2d6f6e65063452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b501003452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b502003452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50300fbe042a3403a59513625225b9132f3c48d0014283a837ba480c136f43d112106040034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863050034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60004e7253000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "35b20010db73bf86371075ddfba4e6596f1ff35d", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "600000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "100000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "1", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "35b20010db73bf86371075ddfba4e6596f1ff35d", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "600000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "100000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "1", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "35b20010db73bf86371075ddfba4e6596f1ff35d", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "100000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "600000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "1", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 240, + "value": "", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 1, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 2, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "fbe042a3403a59513625225b9132f3c48d0014283a837ba480c136f43d112106", + "hashHex": "0x0621113df436c180a47b833a2814008dc4f332915b22253651593a40a342e0fb", + "index": 4, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "35b20010db73bf86371075ddfba4e6596f1ff35d", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "300000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "700000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1200000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 240, + "value": "", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 2, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1400000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 240, + "value": "", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 1, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 2, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "fbe042a3403a59513625225b9132f3c48d0014283a837ba480c136f43d112106", + "hashHex": "0x0621113df436c180a47b833a2814008dc4f332915b22253651593a40a342e0fb", + "index": 4, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 5, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1400000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 240, + "value": "", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "88c2f6bcdfb7288e5b2e2c68bc1656f2f9798465f5e674908566582046f49d66", + "hashHex": "0x669df446205866859074e6f5658479f9f25616bc682c2e5b8e28b7dfbcf6c288", + "index": 9, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "88c2f6bcdfb7288e5b2e2c68bc1656f2f9798465f5e674908566582046f49d66", + "hashHex": "0x669df446205866859074e6f5658479f9f25616bc682c2e5b8e28b7dfbcf6c288", + "index": 7, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "35b20010db73bf86371075ddfba4e6596f1ff35d", + "asset": "d1cb92b29c795db9ba7cf3094aee7d197172865c8a4d2f63cb84c9c57e7c8d5f", + "serializeWire": [Function], + "size": 60, + "value": "200000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "d1cb92b29c795db9ba7cf3094aee7d197172865c8a4d2f63cb84c9c57e7c8d5f", + "serializeWire": [Function], + "size": 60, + "value": "200000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 240, + "value": "", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 1, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 2, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "fbe042a3403a59513625225b9132f3c48d0014283a837ba480c136f43d112106", + "hashHex": "0x0621113df436c180a47b833a2814008dc4f332915b22253651593a40a342e0fb", + "index": 4, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 5, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1400000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", ], ] `; @@ -3411,155 +15486,2131 @@ exports[`LocalUserAccountProvider consolidation + multi-inputs transfer one - co Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "010101ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1011c5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d00ca9a3b0000000003fe6c6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7dff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1011c5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d00ca9a3b0000000003fe6c6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7dff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d10102b50000ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d10102b50000ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500000000000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65023452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5030034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600039b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50046c3230000000035b20010db73bf86371075ddfba4e6596f1ff35d9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f505000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65023452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5030034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600039b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50046c3230000000035b20010db73bf86371075ddfba4e6596f1ff35d9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f505000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + IssueTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 1, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65023452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5030034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600039b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500e1f5050000000035b20010db73bf86371075ddfba4e6596f1ff35d9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50046c323000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 254, + "value": "6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7d", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000002f000ff076e656f2d6f6e65053452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b503003452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b501003452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50200fbe042a3403a59513625225b9132f3c48d0014283a837ba480c136f43d112106040034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600039b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500a3e1110000000035b20010db73bf86371075ddfba4e6596f1ff35d9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50027b929000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60008c8647000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 254, + "value": "6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7d", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5020002f000ff076e656f2d6f6e650134c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863060001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60004e7253000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "b500", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000002f000ff076e656f2d6f6e65063452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b501003452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b502003452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50300fbe042a3403a59513625225b9132f3c48d0014283a837ba480c136f43d112106040034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863050034c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef778630600029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0cee72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60004e7253000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "0", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "b500", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1010151000000000000000002f000ff076e656f2d6f6e650288c2f6bcdfb7288e5b2e2c68bc1656f2f9798465f5e674908566582046f49d66090088c2f6bcdfb7288e5b2e2c68bc1656f2f9798465f5e674908566582046f49d66070002d1cb92b29c795db9ba7cf3094aee7d197172865c8a4d2f63cb84c9c57e7c8d5f00c2eb0b0000000035b20010db73bf86371075ddfba4e6596f1ff35dd1cb92b29c795db9ba7cf3094aee7d197172865c8a4d2f63cb84c9c57e7c8d5f00c2eb0b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "35b20010db73bf86371075ddfba4e6596f1ff35d", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "600000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "100000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "1", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "35b20010db73bf86371075ddfba4e6596f1ff35d", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "600000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "100000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "1", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "35b20010db73bf86371075ddfba4e6596f1ff35d", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "100000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "600000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "1", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 240, + "value": "", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 1, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 2, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "fbe042a3403a59513625225b9132f3c48d0014283a837ba480c136f43d112106", + "hashHex": "0x0621113df436c180a47b833a2814008dc4f332915b22253651593a40a342e0fb", + "index": 4, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "35b20010db73bf86371075ddfba4e6596f1ff35d", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "300000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "700000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1200000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 240, + "value": "", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 2, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1400000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 240, + "value": "", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 1, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 2, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 3, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "fbe042a3403a59513625225b9132f3c48d0014283a837ba480c136f43d112106", + "hashHex": "0x0621113df436c180a47b833a2814008dc4f332915b22253651593a40a342e0fb", + "index": 4, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 5, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "34c8376ec5639f741a0269bd80115a3059e0309348ca5befa55ab0ad9ef77863", + "hashHex": "0x6378f79eadb05aa5ef5bca489330e059305a1180bd69021a749f63c56e37c834", + "index": 6, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1400000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 240, + "value": "", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "88c2f6bcdfb7288e5b2e2c68bc1656f2f9798465f5e674908566582046f49d66", + "hashHex": "0x669df446205866859074e6f5658479f9f25616bc682c2e5b8e28b7dfbcf6c288", + "index": 9, + "serializeWire": [Function], + "size": 34, + }, + InputModel { + "hash": "88c2f6bcdfb7288e5b2e2c68bc1656f2f9798465f5e674908566582046f49d66", + "hashHex": "0x669df446205866859074e6f5658479f9f25616bc682c2e5b8e28b7dfbcf6c288", + "index": 7, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "35b20010db73bf86371075ddfba4e6596f1ff35d", + "asset": "d1cb92b29c795db9ba7cf3094aee7d197172865c8a4d2f63cb84c9c57e7c8d5f", + "serializeWire": [Function], + "size": 60, + "value": "200000000", + }, + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "d1cb92b29c795db9ba7cf3094aee7d197172865c8a4d2f63cb84c9c57e7c8d5f", + "serializeWire": [Function], + "size": 60, + "value": "200000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", ], ] `; @@ -3845,318 +17896,2522 @@ exports[`LocalUserAccountProvider invoke no verify 2`] = ` Array [ Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 254, + "value": "6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7d", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 254, + "value": "6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7d", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], +] +`; + +exports[`LocalUserAccountProvider invoke no verify 3`] = ` +Array [ + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf10010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf10010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + IssueTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 1, + "version": 1, + }, + undefined, ], Array [ "main", - "d1011c5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d0010a5d4e800000003fe6c6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7dff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 254, + "value": "6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7d", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1011c5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d0010a5d4e800000003fe6c6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7dff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 254, + "value": "6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7d", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], ] `; -exports[`LocalUserAccountProvider invoke no verify 3`] = ` +exports[`LocalUserAccountProvider invoke verify 1`] = ` Array [ Array [ - "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + Object { + "account": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "message": "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, ], Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + Object { + "account": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "message": "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, ], Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + Object { + "account": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "message": "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, ], Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + Object { + "account": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "message": "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, ], Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + Object { + "account": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "message": "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, ], Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + Object { + "account": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "message": "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, ], Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + Object { + "account": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "message": "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, ], Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + Object { + "account": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "message": "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, ], Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "010101ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1011c5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d00ca9a3b0000000003fe6c6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7dff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1011c5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d00ca9a3b0000000003fe6c6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7dff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], -] -`; - -exports[`LocalUserAccountProvider invoke verify 1`] = ` -Array [ - Array [ - Object { - "account": Object { - "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", - "network": "main", - }, - "message": "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], - Array [ - Object { - "account": Object { - "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", - "network": "main", - }, - "message": "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], - Array [ - Object { - "account": Object { - "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", - "network": "main", - }, - "message": "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], - Array [ - Object { - "account": Object { - "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", - "network": "main", - }, - "message": "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], - Array [ - Object { - "account": Object { - "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", - "network": "main", - }, - "message": "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], - Array [ - Object { - "account": Object { - "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", - "network": "main", - }, - "message": "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], - Array [ - Object { - "account": Object { - "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", - "network": "main", - }, - "message": "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], - Array [ - Object { - "account": Object { - "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", - "network": "main", - }, - "message": "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], - Array [ - Object { - "account": Object { - "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", - "network": "main", - }, - "message": "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, + Object { + "account": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "message": "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, ], Array [ Object { @@ -4336,107 +20591,892 @@ exports[`LocalUserAccountProvider invoke verify 2`] = ` Array [ Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf10010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf10010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1011c5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d0010a5d4e800000003fe6c6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7dff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 254, + "value": "6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7d", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, ], ] `; @@ -4445,115 +21485,1446 @@ exports[`LocalUserAccountProvider invoke verify 3`] = ` Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "010101ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + IssueTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 1, + "version": 1, + }, + undefined, ], Array [ "main", - "d1011c5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d00ca9a3b0000000003fe6c6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7dff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 254, + "value": "6e656f2d6f6e652d696e766f6b653a7b22636f6e7472616374223a22414c666e684c67377255794c364a723938627a7a6f787a354a376d36346662523473222c226d6574686f64223a22666f6f222c22706172616d73223a5b5b226669727374417267222c747275655d5d7d", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "5151c103666f6f6735b20010db73bf86371075ddfba4e6596f1ff35d", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], ] `; @@ -4812,111 +23183,1389 @@ exports[`LocalUserAccountProvider issue 2`] = ` Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "010101ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + IssueTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 1, + "version": 1, + }, + undefined, ], ] `; @@ -4959,7 +24608,37 @@ exports[`LocalUserAccountProvider publish fault 3`] = ` Array [ Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, ], ] `; @@ -4968,15 +24647,148 @@ exports[`LocalUserAccountProvider publish fault 4`] = ` Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], ] `; @@ -5055,27 +24867,207 @@ exports[`LocalUserAccountProvider publish with return type Address 2`] = ` Array [ Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, ], ] `; @@ -5084,31 +25076,356 @@ exports[`LocalUserAccountProvider publish with return type Address 3`] = ` Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], ] `; @@ -5230,47 +25547,377 @@ exports[`LocalUserAccountProvider publish with return type Array 2`] = ` Array [ Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, ], ] `; @@ -5279,51 +25926,616 @@ exports[`LocalUserAccountProvider publish with return type Array 3`] = ` Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], ] `; @@ -5382,19 +26594,139 @@ exports[`LocalUserAccountProvider publish with return type Boolean 2`] = ` Array [ Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, ], ] `; @@ -5403,23 +26735,252 @@ exports[`LocalUserAccountProvider publish with return type Boolean 3`] = ` Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], ] `; @@ -5514,35 +27075,275 @@ exports[`LocalUserAccountProvider publish with return type Buffer 2`] = ` Array [ Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, ], ] `; @@ -5551,39 +27352,460 @@ exports[`LocalUserAccountProvider publish with return type Buffer 3`] = ` Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], ] `; @@ -5669,31 +27891,241 @@ exports[`LocalUserAccountProvider publish with return type Hash256 2`] = ` Array [ Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, ], ] `; @@ -5702,35 +28134,408 @@ exports[`LocalUserAccountProvider publish with return type Hash256 3`] = ` Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], ] `; @@ -5798,23 +28603,173 @@ exports[`LocalUserAccountProvider publish with return type Integer 2`] = ` Array [ Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, ], ] `; @@ -5823,27 +28778,304 @@ exports[`LocalUserAccountProvider publish with return type Integer 3`] = ` Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], ] `; @@ -5980,58 +29212,448 @@ Array [ `; exports[`LocalUserAccountProvider publish with return type InteropInterface 2`] = ` -Array [ - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], +Array [ Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, ], ] `; @@ -6040,59 +29662,720 @@ exports[`LocalUserAccountProvider publish with return type InteropInterface 3`] Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], ] `; @@ -6223,51 +30506,411 @@ exports[`LocalUserAccountProvider publish with return type Map 2`] = ` Array [ Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, ], ] `; @@ -6276,55 +30919,668 @@ exports[`LocalUserAccountProvider publish with return type Map 3`] = ` Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], ] `; @@ -6428,39 +31684,309 @@ exports[`LocalUserAccountProvider publish with return type PublicKey 2`] = ` Array [ Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, ], ] `; @@ -6469,43 +31995,512 @@ exports[`LocalUserAccountProvider publish with return type PublicKey 3`] = ` Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], ] `; @@ -6555,15 +32550,105 @@ exports[`LocalUserAccountProvider publish with return type Signature 2`] = ` Array [ Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, ], ] `; @@ -6572,19 +32657,200 @@ exports[`LocalUserAccountProvider publish with return type Signature 3`] = ` Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], ] `; @@ -6697,43 +32963,343 @@ exports[`LocalUserAccountProvider publish with return type String 2`] = ` Array [ Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, ], ] `; @@ -6742,47 +33308,564 @@ exports[`LocalUserAccountProvider publish with return type String 3`] = ` Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], ] `; @@ -6931,59 +34014,479 @@ exports[`LocalUserAccountProvider publish with return type Void 2`] = ` Array [ Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, ], ] `; @@ -6992,63 +34495,772 @@ exports[`LocalUserAccountProvider publish with return type Void 3`] = ` Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], ] `; @@ -7215,67 +35427,547 @@ exports[`LocalUserAccountProvider publishAndDeploy with params 2`] = ` Array [ Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf10010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf10010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, ], ] `; @@ -7284,71 +35976,876 @@ exports[`LocalUserAccountProvider publishAndDeploy with params 3`] = ` Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], ] `; @@ -7506,63 +37003,513 @@ exports[`LocalUserAccountProvider publishAndDeploy without params 2`] = ` Array [ Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf10010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, ], ] `; @@ -7571,67 +37518,824 @@ exports[`LocalUserAccountProvider publishAndDeploy without params 3`] = ` Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], ] `; @@ -7783,103 +38487,613 @@ Array [ ], Array [ Object { - "account": Object { - "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", - "network": "main", - }, - "message": "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], - Array [ - Object { - "account": Object { - "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", - "network": "main", - }, - "message": "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], - Array [ - Object { - "account": Object { - "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", - "network": "main", - }, - "message": "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], -] -`; - -exports[`LocalUserAccountProvider registerAsset Credit 2`] = ` -Array [ - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + "account": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "message": "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, ], Array [ - "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf10010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + Object { + "account": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "message": "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, ], Array [ - "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf10010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + Object { + "account": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "message": "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, ], +] +`; + +exports[`LocalUserAccountProvider registerAsset Credit 2`] = ` +Array [ Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, ], ] `; @@ -7888,75 +39102,928 @@ exports[`LocalUserAccountProvider registerAsset Credit 3`] = ` Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], ] `; @@ -8168,87 +40235,717 @@ exports[`LocalUserAccountProvider registerAsset Currency 2`] = ` Array [ Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf10010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf10010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, ], ] `; @@ -8257,91 +40954,1136 @@ exports[`LocalUserAccountProvider registerAsset Currency 3`] = ` Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], ] `; @@ -8479,122 +42221,662 @@ Array [ "account": Object { "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", "network": "main", - }, - "message": "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], - Array [ - Object { - "account": Object { - "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", - "network": "main", - }, - "message": "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], - Array [ - Object { - "account": Object { - "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", - "network": "main", - }, - "message": "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], - Array [ - Object { - "account": Object { - "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", - "network": "main", - }, - "message": "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], - Array [ - Object { - "account": Object { - "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", - "network": "main", - }, - "message": "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], -] -`; - -exports[`LocalUserAccountProvider registerAsset Duty 2`] = ` -Array [ - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + }, + "message": "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, ], Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + Object { + "account": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "message": "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, ], Array [ - "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf10010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + Object { + "account": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "message": "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, ], Array [ - "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf10010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + Object { + "account": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "message": "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, ], Array [ - "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + Object { + "account": Object { + "address": "ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW", + "network": "main", + }, + "message": "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, ], +] +`; + +exports[`LocalUserAccountProvider registerAsset Duty 2`] = ` +Array [ Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, ], ] `; @@ -8603,79 +42885,980 @@ exports[`LocalUserAccountProvider registerAsset Duty 3`] = ` Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], ] `; @@ -8869,79 +44052,649 @@ exports[`LocalUserAccountProvider registerAsset Governing 2`] = ` Array [ Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf10010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf10010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, ], ] `; @@ -8950,83 +44703,1032 @@ exports[`LocalUserAccountProvider registerAsset Governing 3`] = ` Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], ] `; @@ -9256,196 +45958,2027 @@ exports[`LocalUserAccountProvider registerAsset Invoice 2`] = ` Array [ Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf10010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf10010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], -] -`; - -exports[`LocalUserAccountProvider registerAsset Invoice 3`] = ` -Array [ - Array [ - "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, ], +] +`; + +exports[`LocalUserAccountProvider registerAsset Invoice 3`] = ` +Array [ Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], ] `; @@ -9666,91 +48199,751 @@ exports[`LocalUserAccountProvider registerAsset Share 2`] = ` Array [ Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf10010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf10010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, ], ] `; @@ -9759,95 +48952,1188 @@ exports[`LocalUserAccountProvider registerAsset Share 3`] = ` Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], ] `; @@ -10086,99 +50372,819 @@ exports[`LocalUserAccountProvider registerAsset Token 2`] = ` Array [ Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf10010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf10010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, ], ] `; @@ -10187,103 +51193,1292 @@ exports[`LocalUserAccountProvider registerAsset Token 3`] = ` Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], ] `; @@ -10486,83 +52681,683 @@ exports[`LocalUserAccountProvider registerAsset Utility 2`] = ` Array [ Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf10010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf10010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, ], ] `; @@ -10571,87 +53366,1084 @@ exports[`LocalUserAccountProvider registerAsset Utility 3`] = ` Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], ] `; @@ -10901,103 +54693,853 @@ exports[`LocalUserAccountProvider registerAsset fault 3`] = ` Array [ Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf10010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf10010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", - ], - Array [ - "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e4372656174650010a5d4e800000002ff076e656f2d6f6e65ff023130000000", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + UInt160AttributeModel { + "serializeWire": [Function], + "usage": 32, + "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + }, + ], + "gas": "1000000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, ], ] `; @@ -11006,107 +55548,1344 @@ exports[`LocalUserAccountProvider registerAsset fault 4`] = ` Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "0200013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001ff076e656f2d6f6e650001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", - ], - Array [ - "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", + ], + Array [ + "main", + ClaimTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "claims": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 2, + "version": 0, + }, + "0", + ], + Array [ + "main", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745500020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745551020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745552020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745553020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745554020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745556020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745557020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550110020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e7472616374550112020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502f000020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1015f0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745502ff00020305035f8d7068134e656f2e436f6e74726163742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017d0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e4372656174657500c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d1017e0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf100ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "0b48656c6c6f20576f726c641a616c65782e64696361726c6f406e656f747261636b65722e696f0864696361726c6f3203312e300a4d79436f6e74726163745555020305035f8d7068134e656f2e436f6e74726163742e437265617465755151c1066465706c6f79677e99a92ff6cf13c1ddeed64034e6e218f74c544cf1", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e014068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02800068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e0068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5168104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101711435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e5868104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02900068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101731435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e02980068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], Array [ "main", - "d101721435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e43726561746500ca9a3b0000000002ff076e656f2d6f6e65ff023130013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5000001e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c6000ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "3130", + }, + ], + "gas": "1000000000", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "1435b20010db73bf86371075ddfba4e6596f1ff35d143775292229eccdf904f16fff8e83e7cffdc0f0ce2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef58070000c16ff2862308546865546f6b656e016068104e656f2e41737365742e437265617465", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + undefined, ], ] `; @@ -11143,7 +56922,50 @@ exports[`LocalUserAccountProvider transfer 2`] = ` Array [ Array [ "main", - "d1010151000000000000000001ff076e656f2d6f6e65013452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b50000019b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500ca9a3b000000003775292229eccdf904f16fff8e83e7cffdc0f0ce010302b500232102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + InvocationTransactionModel { + "attributes": Array [ + BufferAttributeModel { + "serializeWire": [Function], + "usage": 255, + "value": "6e656f2d6f6e65", + }, + ], + "gas": "0", + "hashHexInternal": [Function], + "hashInternal": [Function], + "inputs": Array [ + InputModel { + "hash": "3452e7149038e7852cf2a8c9ab72c78bd3776c4b12e18d7536c8a87bd93400b5", + "hashHex": "0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234", + "index": 0, + "serializeWire": [Function], + "size": 34, + }, + ], + "messageInternal": [Function], + "outputs": Array [ + OutputModel { + "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", + "asset": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", + "serializeWire": [Function], + "size": 60, + "value": "1000000000", + }, + ], + "script": "51", + "scripts": Array [ + WitnessModel { + "invocation": "02b500", + "serializeWire": [Function], + "verification": "2102028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699efac", + }, + ], + "serializeUnsigned": [Function], + "serializeWire": [Function], + "type": 209, + "version": 1, + }, + "0", ], ] `; diff --git a/packages/neo-one-client-full-core/src/args.ts b/packages/neo-one-client-full-core/src/args.ts index 55bddb1a51..4ba298dbb2 100644 --- a/packages/neo-one-client-full-core/src/args.ts +++ b/packages/neo-one-client-full-core/src/args.ts @@ -1,9 +1,9 @@ // tslint:disable strict-type-predicates -import { AssetType, ContractParameterType, GetOptions, IterOptions } from '@neo-one/client-common'; +import { GetOptions, IterOptions } from '@neo-one/client-common'; import { args, InvalidArgumentError } from '@neo-one/client-core'; import BigNumber from 'bignumber.js'; import _ from 'lodash'; -import { AssetRegister, ContractRegister } from './types'; +import { ContractRegister } from './types'; export const assertNullableNumber = (name: string, value?: unknown): number | undefined => { if (value == undefined) { @@ -69,30 +69,6 @@ export const assertGetOptions = (name: string, options?: unknown): GetOptions | }; }; -const CONTRACT_PARAMETER_TYPES = new Set([ - 'Signature', - 'Boolean', - 'Integer', - 'Address', - 'Hash256', - 'Buffer', - 'PublicKey', - 'String', - 'Array', - 'Map', - 'InteropInterface', - 'Void', -]); - -const assertContractParameterType = (name: string, valueIn?: unknown): ContractParameterType => { - const value = args.assertString(name, valueIn); - if (!CONTRACT_PARAMETER_TYPES.has(value)) { - throw new InvalidArgumentError('ContractParameterType', name, value); - } - - return value as ContractParameterType; -}; - export const assertContractRegister = (name: string, register?: unknown): ContractRegister => { if (!args.isObject(register)) { throw new InvalidArgumentError('ContractRegister', name, register); @@ -100,45 +76,7 @@ export const assertContractRegister = (name: string, register?: unknown): Contra return { script: args.assertProperty(register, 'ContractRegister', 'script', args.assertBuffer), - parameters: args - .assertProperty(register, 'ContractRegister', 'parameters', args.assertArray) - .map((value) => assertContractParameterType('ContractRegister.parameters', value)), - returnType: args.assertProperty(register, 'ContractRegister', 'returnType', assertContractParameterType), - name: args.assertProperty(register, 'ContractRegister', 'name', args.assertString), - codeVersion: args.assertProperty(register, 'ContractRegister', 'codeVersion', args.assertString), - author: args.assertProperty(register, 'ContractRegister', 'author', args.assertString), - email: args.assertProperty(register, 'ContractRegister', 'email', args.assertString), - description: args.assertProperty(register, 'ContractRegister', 'description', args.assertString), - storage: args.assertProperty(register, 'ContractRegister', 'storage', args.assertBoolean), - dynamicInvoke: args.assertProperty(register, 'ContractRegister', 'dynamicInvoke', args.assertBoolean), - payable: args.assertProperty(register, 'ContractRegister', 'payable', args.assertBoolean), - }; -}; - -const ASSET_TYPES = new Set(['Credit', 'Duty', 'Governing', 'Utility', 'Currency', 'Share', 'Invoice', 'Token']); - -const assertAssetType = (name: string, assetTypeIn?: unknown): AssetType => { - const assetType = args.assertString(name, assetTypeIn); - - if (!ASSET_TYPES.has(assetType)) { - throw new InvalidArgumentError('AssetType', name, assetType); - } - - return assetType as AssetType; -}; - -export const assertAssetRegister = (name: string, register?: unknown): AssetRegister => { - if (!args.isObject(register)) { - throw new InvalidArgumentError('AssetRegister', name, register); - } - - return { - type: args.assertProperty(register, 'AssetRegister', 'type', assertAssetType), - name: args.assertProperty(register, 'AssetRegister', 'name', args.assertString), - amount: args.assertProperty(register, 'AssetRegister', 'amount', args.assertBigNumber), - precision: args.assertProperty(register, 'AssetRegister', 'precision', args.assertNumber), - owner: args.assertProperty(register, 'AssetRegister', 'owner', args.assertPublicKey), - admin: args.assertProperty(register, 'AssetRegister', 'admin', args.assertAddress), - issuer: args.assertProperty(register, 'AssetRegister', 'issuer', args.assertAddress), + manifest: args.assertProperty(register, 'ContractRegister', 'manifest', args.assertContractManifestClient), + id: args.assertProperty(register, 'ContractRegister', 'id', args.assertNumber), }; }; diff --git a/packages/neo-one-client-full-core/src/types.ts b/packages/neo-one-client-full-core/src/types.ts index ee487fedfe..7439687986 100644 --- a/packages/neo-one-client-full-core/src/types.ts +++ b/packages/neo-one-client-full-core/src/types.ts @@ -1,25 +1,17 @@ import { - ABI, Account, AddressString, - Asset, - AssetType, Block, BufferString, Contract, - ContractParameterType, + ContractManifestClient, GetOptions, Hash256String, - Input, InvocationResult, - InvocationTransaction, - IssueTransaction, IterOptions, NetworkType, - Output, Param, Peer, - PublicKeyString, SourceMaps, Transaction, TransactionOptions, @@ -28,60 +20,29 @@ import { Transfer, UserAccountProvider as UserAccountProviderLite, } from '@neo-one/client-common'; -import BigNumber from 'bignumber.js'; - -export interface AssetRegister { - readonly type: AssetType; - readonly name: string; - readonly amount: BigNumber; - readonly precision: number; - readonly owner: PublicKeyString; - readonly admin: AddressString; - readonly issuer: AddressString; -} export interface ContractRegister { readonly script: BufferString; - readonly parameters: readonly ContractParameterType[]; - readonly returnType: ContractParameterType; - readonly name: string; - readonly codeVersion: string; - readonly author: string; - readonly email: string; - readonly description: string; - readonly storage: boolean; - readonly dynamicInvoke: boolean; - readonly payable: boolean; + readonly manifest: ContractManifestClient; + readonly id: number; } export interface PublishReceipt extends TransactionReceipt { readonly result: InvocationResult; } -export interface RegisterAssetReceipt extends TransactionReceipt { - readonly result: InvocationResult; -} - export interface UserAccountProvider extends UserAccountProviderLite { readonly publish: ( contract: ContractRegister, options?: TransactionOptions, - ) => Promise>; + ) => Promise>; readonly publishAndDeploy: ( contract: ContractRegister, - abi: ABI, + manifest: ContractManifestClient, params: readonly Param[], options?: TransactionOptions, sourceMaps?: SourceMaps, - ) => Promise>; - readonly registerAsset: ( - asset: AssetRegister, - options?: TransactionOptions, - ) => Promise>; - readonly issue: ( - transfers: readonly Transfer[], - options?: TransactionOptions, - ) => Promise>; + ) => Promise>; readonly read: (network: NetworkType) => DataProvider; } @@ -92,15 +53,13 @@ export interface UserAccountProviders { export interface DataProvider { readonly network: NetworkType; readonly getAccount: (address: AddressString) => Promise; - readonly getAsset: (hash: Hash256String) => Promise; readonly getBlock: (hashOrIndex: number | Hash256String, options?: GetOptions) => Promise; readonly iterBlocks: (options?: IterOptions) => AsyncIterable; readonly getBestBlockHash: () => Promise; readonly getBlockCount: () => Promise; readonly getContract: (address: AddressString) => Promise; - readonly getMemPool: () => Promise; + readonly getMemPool: () => Promise<{ readonly height: number; readonly verified: readonly Hash256String[] }>; readonly getTransaction: (hash: Hash256String) => Promise; - readonly getOutput: (input: Input) => Promise; readonly getConnectedPeers: () => Promise; } diff --git a/packages/neo-one-client-full-core/src/user/LocalUserAccountProvider.ts b/packages/neo-one-client-full-core/src/user/LocalUserAccountProvider.ts index 3486179750..6fd3f1b487 100644 --- a/packages/neo-one-client-full-core/src/user/LocalUserAccountProvider.ts +++ b/packages/neo-one-client-full-core/src/user/LocalUserAccountProvider.ts @@ -1,33 +1,25 @@ import { - ABI, - addressToScriptHash, - AssetType, - AssetTypeModel, + ABIParameter, + ABIReturn, BufferString, - common, Contract, - ContractParameterType, + ContractManifestClient, ContractParameterTypeModel, crypto, - InvocationResultError, - InvocationResultSuccess, - InvocationTransaction, - IssueTransaction, NetworkSettings, NetworkType, Param, RawInvocationData, - RawInvocationResultError, - RawInvocationResultSuccess, RawInvokeReceipt, + RawTransactionResultError, + RawTransactionResultSuccess, ScriptBuilder, SourceMaps, TransactionOptions, - TransactionReceipt, TransactionResult, - Transfer, + TransactionResultError, + TransactionResultSuccess, UserAccountID, - utils, } from '@neo-one/client-common'; import { convertParams, @@ -36,29 +28,39 @@ import { LocalUserAccountProvider as LocalUserAccountProviderLite, Provider as ProviderLite, } from '@neo-one/client-core'; -import { ContractModel, getContractProperties, IssueTransactionModel } from '@neo-one/client-full-common'; +import { + ContractABIModel, + ContractEventDescriptorModel, + ContractGroupModel, + ContractManifestModel, + ContractMethodDescriptorModel, + ContractParameterDefinitionModel, + ContractPermissionDescriptorModel, + ContractPermissionModel, + ContractStateModel, + getContractProperties, +} from '@neo-one/client-full-common'; import { processActionsAndMessage, processConsoleLogMessages } from '@neo-one/client-switch'; import { utils as commonUtils } from '@neo-one/utils'; -import { NothingToIssueError } from '../errors'; import { - AssetRegister, ContractRegister, DataProvider, InvokeExecuteTransactionOptions, PublishReceipt, - RegisterAssetReceipt, UserAccountProvider, } from '../types'; -const toContractParameterType = (parameter: ContractParameterType): ContractParameterTypeModel => { - switch (parameter) { +const toContractParameterType = (parameter: ABIReturn | ABIParameter): ContractParameterTypeModel => { + switch (parameter.type) { + case 'Any': + return ContractParameterTypeModel.Any; case 'Signature': return ContractParameterTypeModel.Signature; case 'Boolean': return ContractParameterTypeModel.Boolean; case 'Integer': return ContractParameterTypeModel.Integer; - case 'Address': + case 'Hash160': return ContractParameterTypeModel.Hash160; case 'Hash256': return ContractParameterTypeModel.Hash256; @@ -70,9 +72,10 @@ const toContractParameterType = (parameter: ContractParameterType): ContractPara return ContractParameterTypeModel.String; case 'Array': return ContractParameterTypeModel.Array; + case 'Object': // TODO: is this correct? case 'Map': return ContractParameterTypeModel.Map; - case 'InteropInterface': + case 'ForwardValue': // TODO: is this correct? return ContractParameterTypeModel.InteropInterface; case 'Void': return ContractParameterTypeModel.Void; @@ -84,30 +87,60 @@ const toContractParameterType = (parameter: ContractParameterType): ContractPara } }; -const toAssetType = (assetType: AssetType): AssetTypeModel => { - switch (assetType) { - case 'Credit': - return AssetTypeModel.CreditFlag; - case 'Duty': - return AssetTypeModel.DutyFlag; - case 'Governing': - return AssetTypeModel.GoverningToken; - case 'Utility': - return AssetTypeModel.UtilityToken; - case 'Currency': - return AssetTypeModel.Currency; - case 'Share': - return AssetTypeModel.Share; - case 'Invoice': - return AssetTypeModel.Invoice; - case 'Token': - return AssetTypeModel.Token; - default: - /* istanbul ignore next */ - commonUtils.assertNever(assetType); - /* istanbul ignore next */ - throw new Error('For TS'); - } +const contractRegisterToContractModel = (contractIn: ContractRegister): ContractStateModel => { + const abi = new ContractABIModel({ + hash: contractIn.manifest.abi.hash, + methods: contractIn.manifest.abi.methods.map( + (methodIn) => + new ContractMethodDescriptorModel({ + returnType: toContractParameterType(methodIn.returnType), + offset: methodIn.offset, + name: methodIn.name, + parameters: + methodIn.parameters === undefined + ? [] + : methodIn.parameters.map( + (param) => + new ContractParameterDefinitionModel({ + type: toContractParameterType(param), + name: param.name, + }), + ), + safe: methodIn.safe, + }), + ), + events: contractIn.manifest.abi.events.map( + (event) => + new ContractEventDescriptorModel({ + name: event.name, + parameters: event.parameters.map( + (param) => new ContractParameterDefinitionModel({ type: toContractParameterType(param), name: param.name }), + ), + }), + ), + }); + const manifest = new ContractManifestModel({ + groups: contractIn.manifest.groups.map( + (group) => new ContractGroupModel({ publicKey: group.publicKey, signature: Buffer.from(group.signature, 'hex') }), + ), + supportedStandards: contractIn.manifest.supportedStandards, + abi, + permissions: contractIn.manifest.permissions.map( + (perm) => + new ContractPermissionModel({ + contract: new ContractPermissionDescriptorModel(perm.contract), + methods: perm.methods, + }), + ), + trusts: contractIn.manifest.trusts, + extra: contractIn.manifest.extra, + }); + + return new ContractStateModel({ + script: Buffer.from(contractIn.script, 'hex'), + id: contractIn.id, + manifest, + }); }; export interface Provider extends ProviderLite { @@ -125,7 +158,7 @@ export class LocalUserAccountProvider> { + ): Promise> { return this.publishBase( 'publish', contract, @@ -139,16 +172,16 @@ export class LocalUserAccountProvider> { + ): Promise> { return this.publishBase( 'publish', contract, (sb, from) => { - const deployFunc = abi.functions.find((func) => func.name === 'deploy'); + const deployFunc = manifest.abi.methods.find((func) => func.name === 'deploy'); if (deployFunc !== undefined) { // [] sb.emitOp('DROP'); @@ -162,7 +195,7 @@ export class LocalUserAccountProvider> { - const sb = new ScriptBuilder(); - - sb.emitSysCall( - 'Neo.Asset.Create', - toAssetType(asset.type), - asset.name, - utils.bigNumberToBN(asset.amount, 8), - asset.precision, - common.stringToECPoint(asset.owner), - common.stringToUInt160(addressToScriptHash(asset.admin)), - common.stringToUInt160(addressToScriptHash(asset.issuer)), - ); - - return this.invokeRaw({ - invokeMethodOptionsOrScript: sb.build(), - options, - onConfirm: async ({ receipt, data }): Promise => { - let result; - if (data.result.state === 'FAULT') { - result = await this.getInvocationResultError(data, data.result); - } else { - const createdAsset = data.asset; - if (createdAsset === undefined) { - /* istanbul ignore next */ - throw new InvalidTransactionError( - 'Something went wrong! Expected a asset to have been created, but none was found', - ); - } - - result = await this.getInvocationResultSuccess(data, data.result, createdAsset); - } - - return { - blockIndex: receipt.blockIndex, - blockHash: receipt.blockHash, - transactionIndex: receipt.transactionIndex, - globalIndex: receipt.globalIndex, - result, - }; - }, - method: 'registerAsset', - }); - } - - public async issue( - transfers: readonly Transfer[], - options?: TransactionOptions, - ): Promise> { - const { from, attributes, networkFee } = this.getTransactionOptions(options); - - return this.capture( - async () => { - if (transfers.length === 0) { - throw new NothingToIssueError(); - } - - const settings = await this.provider.getNetworkSettings(from.network); - const { inputs, outputs } = await this.getTransfersInputOutputs({ - transfers: [], - from, - gas: networkFee.plus(settings.issueGASFee), - }); - - const issueOutputs = outputs.concat( - transfers.map((transfer) => ({ - address: transfer.to, - asset: transfer.asset, - value: transfer.amount, - })), - ); - - const transaction = new IssueTransactionModel({ - inputs: this.convertInputs(inputs), - outputs: this.convertOutputs(issueOutputs), - attributes: this.convertAttributes(attributes), - }); - - return this.sendTransaction({ - inputs, - from, - transaction, - onConfirm: async ({ receipt }) => receipt, - }); - }, - { - name: 'neo_issue', - }, - ); - } - public async __execute( script: BufferString, options: InvokeExecuteTransactionOptions = {}, sourceMaps: SourceMaps = {}, - ): Promise> { + ): Promise> { const { from } = this.getTransactionOptions(options); return this.invokeRaw({ @@ -278,8 +217,11 @@ export class LocalUserAccountProvider ({ blockIndex: receipt.blockIndex, blockHash: receipt.blockHash, + blockTime: receipt.blockTime, transactionIndex: receipt.transactionIndex, + transactionHash: receipt.transactionHash, globalIndex: receipt.globalIndex, + confirmations: receipt.confirmations, result: data.result, actions: data.actions, }), @@ -294,36 +236,11 @@ export class LocalUserAccountProvider void, sourceMaps: SourceMaps = {}, options?: TransactionOptions, - ): Promise> { - const contract = new ContractModel({ - script: Buffer.from(contractIn.script, 'hex'), - parameterList: contractIn.parameters.map(toContractParameterType), - returnType: toContractParameterType(contractIn.returnType), - name: contractIn.name, - codeVersion: contractIn.codeVersion, - author: contractIn.author, - email: contractIn.email, - description: contractIn.description, - contractProperties: getContractProperties({ - hasDynamicInvoke: contractIn.dynamicInvoke, - hasStorage: contractIn.storage, - payable: contractIn.payable, - }), - }); + ): Promise> { + const contract = contractRegisterToContractModel(contractIn); const sb = new ScriptBuilder(); - sb.emitSysCall( - 'Neo.Contract.Create', - contract.script, - Buffer.from([...contract.parameterList]), - contract.returnType, - contract.contractProperties, - contract.name, - contract.codeVersion, - contract.author, - contract.email, - contract.description, - ); + sb.emitSysCall('System.Contract.Create', contract.script, contract.manifest.serializeWire()); const { from } = this.getTransactionOptions(options); emit(sb, from); @@ -351,6 +268,9 @@ export class LocalUserAccountProvider { + ): Promise { const message = await processActionsAndMessage({ actions: data.actions, message: result.message, @@ -374,16 +294,17 @@ export class LocalUserAccountProvider( data: RawInvocationData, - result: RawInvocationResultSuccess, + result: RawTransactionResultSuccess, value: T, sourceMaps: SourceMaps = {}, - ): Promise> { + ): Promise> { await processConsoleLogMessages({ actions: data.actions, sourceMaps, @@ -393,6 +314,7 @@ export class LocalUserAccountProvider => { if (process.env.NODE_ENV === 'production' && process.env.NEO_ONE_DEV !== 'true') { return options.message; } + initializeSourceMap(); + return processActionsAndMessageBase(options); }; diff --git a/packages/neo-one-client-switch/src/browser/processConsoleLogMessages.ts b/packages/neo-one-client-switch/src/browser/processConsoleLogMessages.ts index 8a10669805..902cdd0ac2 100644 --- a/packages/neo-one-client-switch/src/browser/processConsoleLogMessages.ts +++ b/packages/neo-one-client-switch/src/browser/processConsoleLogMessages.ts @@ -1,7 +1,9 @@ import { processConsoleLogMessages as processConsoleLogMessagesBase, ProcessConsoleLogOptions } from '../common'; +import { initializeSourceMap } from './initializeSourceMap'; export const processConsoleLogMessages = async (options: ProcessConsoleLogOptions): Promise => { if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') { + initializeSourceMap(); await processConsoleLogMessagesBase(options); } }; diff --git a/packages/neo-one-client-switch/src/browser/tracing.ts b/packages/neo-one-client-switch/src/browser/tracing.ts deleted file mode 100644 index 98b01a1ee6..0000000000 --- a/packages/neo-one-client-switch/src/browser/tracing.ts +++ /dev/null @@ -1,144 +0,0 @@ -// tslint:disable no-submodule-imports readonly-keyword readonly-array -import { NoopExporter } from '@opencensus/web-core/build/src/exporters/noop_exporter'; -import { Config, ExporterConfig, Propagation, Span, SpanKind, TracerBase, Tracing } from '@opencensus/web-types'; -import { AggregationType, Measure, MeasureUnit, Stats } from '@opencensus/web-types/build/src/stats/types'; -import { TagMap } from '@opencensus/web-types/build/src/tags/tag-map'; - -// tslint:disable-next-line: no-any -const noOp = (..._args: readonly any[]): any => { - // -}; - -// tslint:disable no-any -// tslint:disable-next-line: no-let -let tracer: TracerBase = { - startRootSpan: (_options: any, func: (root: any) => T) => { - const span = { - addAttribute: noOp, - spanContext: {}, - end: noOp, - }; - - return func(span); - }, - startChildSpan: noOp, - sampler: {} as any, - logger: {} as any, - activeTraceParams: {} as any, - active: false, - propagation: {} as any, - eventListeners: [], - start: noOp, - stop: noOp, - registerSpanEventListener: noOp, - unregisterSpanEventListener: noOp, - setCurrentRootSpan: noOp, - onStartSpan: noOp, - onEndSpan: noOp, -}; -// tslint:enable no-any - -// tslint:disable-next-line: no-let -let tracingCache: Tracing | undefined; -const startTracing = async (config: Config) => { - if (tracingCache === undefined) { - const ocWeb = await import('@opencensus/web-core'); - tracingCache = ocWeb.tracing; - tracer = tracingCache.tracer; - } - tracingCache.start(config); - - return () => { - if (tracingCache !== undefined) { - if (config.exporter !== undefined) { - tracingCache.unregisterExporter(config.exporter); - } - tracingCache.stop(); - } - }; -}; - -// tslint:disable-next-line: no-let -let createTraceContextFormat: (() => Propagation) | undefined; -const getNewPropagation = async () => { - if (createTraceContextFormat === undefined) { - const ocTraceContext = await import('@opencensus/web-propagation-tracecontext'); - createTraceContextFormat = () => new ocTraceContext.TraceContextFormat(); - } - - return createTraceContextFormat(); -}; - -const globalStats: Stats = { - createView: noOp, - registerView: noOp, - createMeasureDouble: noOp, - createMeasureInt64: noOp, - record: noOp, - clear: noOp, - getMetrics: noOp, - registerExporter: noOp, - unregisterExporter: noOp, - withTagContext: noOp, - getCurrentTagContext: noOp, -}; - -class PrometheusStatsExporter { - public onRegisterView = noOp; - public onRecord = noOp; - public start = noOp; - public stop = noOp; - public stopServer = noOp; - // tslint:disable-next-line: unnecessary-constructor no-any - public constructor(..._args: any[]) { - // do nothing - } -} - -export interface PrometheusExporterOptions extends ExporterConfig { - /** App prefix for metrics, if needed - default opencensus */ - prefix?: string; - /** - * Port number for Prometheus exporter server - * Default registered port is 9464: - * https://github.com/prometheus/prometheus/wiki/Default-port-allocations - */ - port?: number; - /** - * Define if the Prometheus exporter server will be started - default false - */ - startServer?: boolean; -} - -class JaegerTraceExporter extends NoopExporter { - // tslint:disable-next-line: no-any - public constructor(..._args: any[]) { - super(); - } -} - -export interface JaegerTraceExporterOptions extends ExporterConfig { - serviceName: string; - // tslint:disable-next-line no-any - tags?: any[]; - host?: string; - port?: number; - maxPacketSize?: number; -} - -export { - AggregationType, - Config as TracingConfig, - globalStats, - JaegerTraceExporter, - Measure, - MeasureUnit, - NoopExporter, - PrometheusStatsExporter, - Span, - SpanKind, - startTracing, - TagMap, - getNewPropagation, - tracer, -}; diff --git a/packages/neo-one-client-switch/src/common/createConsoleLogMessages.ts b/packages/neo-one-client-switch/src/common/createConsoleLogMessages.ts index 579a163eb6..61f471890e 100644 --- a/packages/neo-one-client-switch/src/common/createConsoleLogMessages.ts +++ b/packages/neo-one-client-switch/src/common/createConsoleLogMessages.ts @@ -1,9 +1,8 @@ import { RawAction, smartContractConverters as converters } from '@neo-one/client-common'; -import { deserializeStackItem, StackItem } from '@neo-one/node-vm'; +// import { BinaryReader, deserializeStackItem, StackItem } from '@neo-one/node-core'; import { utils } from '@neo-one/utils'; import _ from 'lodash'; import { SourceMaps } from '../common'; -import { initializeSourceMap } from './initializeSourceMap'; import { processTrace } from './processTrace'; export interface LogOptions { @@ -57,10 +56,7 @@ const inspect = (value: any, wrapString = false): any => { // tslint:disable-next-line no-any const extractValueFromStackItem = (stackItem: StackItem): any => { - const type = stackItem - .asArray()[0] - .asBigIntegerUnsafe() - .toNumber(); + const type = stackItem.getArray()[0].getInteger().toNumber(); switch (type) { case 1: @@ -69,57 +65,35 @@ const extractValueFromStackItem = (stackItem: StackItem): any => { // tslint:disable-next-line no-null-keyword return null; case 3: - return stackItem.asArray()[1].asBoolean(); + return stackItem.getArray()[1].getBoolean(); case 4: - return stackItem.asArray()[1].asString(); + return stackItem.getArray()[1].getString(); case 5: - return `Symbol(${stackItem.asArray()[1].asString()})`; + return `Symbol(${stackItem.getArray()[1].getString()})`; case 6: - return stackItem - .asArray()[1] - .asBigIntegerUnsafe() - .toString(10); + return stackItem.getArray()[1].getInteger().toString(10); case 7: return _.fromPairs( utils.zip( - stackItem - .asArray()[1] - .asArray()[0] - .asArray() - .map(extractValueFromStackItem), - stackItem - .asArray()[1] - .asArray()[1] - .asArray() - .map(extractValueFromStackItem), + stackItem.getArray()[1].getArray()[0].getArray().map(extractValueFromStackItem), + stackItem.getArray()[1].getArray()[1].getArray().map(extractValueFromStackItem), ), ); case 8: - return stackItem - .asArray()[1] - .asArray() - .map(extractValueFromStackItem); + return stackItem.getArray()[1].getArray().map(extractValueFromStackItem); case 9: - return stackItem - .asArray()[1] - .asBuffer() - .toString('hex'); + return stackItem.getArray()[1].getBuffer().toString('hex'); case 10: // tslint:disable-next-line no-any return new Map( stackItem - .asArray()[1] - .asArray() + .getArray()[1] + .getArray() // tslint:disable-next-line no-any - .map((value) => value.asArray().map(extractValueFromStackItem)), + .map((value: any) => value.getArray().map(extractValueFromStackItem)), ); case 11: - return new Set( - stackItem - .asArray()[1] - .asArray() - .map(extractValueFromStackItem), - ); + return new Set(stackItem.getArray()[1].getArray().map(extractValueFromStackItem)); default: return ``; } @@ -132,9 +106,7 @@ const extractMessageFromStackItem = (stackItem: StackItem): string => { }; const extractMessage = (value: Buffer): string => { - const stackItems = deserializeStackItem(value) - .asArray()[1] - .asArray(); + const stackItems = deserializeStackItem(new BinaryReader(value), 16, 34).getArray()[1].getArray(); const messages = stackItems.map(extractMessageFromStackItem); @@ -181,7 +153,6 @@ export const createConsoleLogMessages = async ( sourceMaps: SourceMaps = {}, { bare = false, onlyFileName = false }: LogOptions = { bare: false, onlyFileName: false }, ): Promise => { - initializeSourceMap(); const logs = extractConsoleLogs(actions); if (bare) { return logs.map(({ message }) => message); diff --git a/packages/neo-one-client-switch/src/common/index.ts b/packages/neo-one-client-switch/src/common/index.ts index 8f5cfa1630..ae6f8841e3 100644 --- a/packages/neo-one-client-switch/src/common/index.ts +++ b/packages/neo-one-client-switch/src/common/index.ts @@ -1,5 +1,4 @@ export * from './createConsoleLogMessages'; -export * from './initializeSourceMap'; export * from './Ledger'; export * from './processActionsAndMessage'; export * from './processConsoleLogMessages'; diff --git a/packages/neo-one-client-switch/src/common/processActionsAndMessage.ts b/packages/neo-one-client-switch/src/common/processActionsAndMessage.ts index 1c82df399d..fbe91c1a9a 100644 --- a/packages/neo-one-client-switch/src/common/processActionsAndMessage.ts +++ b/packages/neo-one-client-switch/src/common/processActionsAndMessage.ts @@ -2,7 +2,6 @@ import { RawAction } from '@neo-one/client-common'; import { RawSourceMap } from 'source-map'; import { processConsoleLogMessages } from '../node/processConsoleLogMessages'; import { extractErrorTrace } from './extractErrorTrace'; -import { initializeSourceMap } from './initializeSourceMap'; import { processError } from './processError'; export interface SourceMaps { @@ -20,7 +19,6 @@ export const processActionsAndMessage = async ({ message: messageIn, sourceMaps, }: ProcessActionsAndMessageOptions): Promise => { - initializeSourceMap(); const [message] = await Promise.all([ processError({ ...extractErrorTrace(actions), diff --git a/packages/neo-one-client-switch/src/common/processConsoleLogMessages.ts b/packages/neo-one-client-switch/src/common/processConsoleLogMessages.ts index 6a410c54a7..ba94746751 100644 --- a/packages/neo-one-client-switch/src/common/processConsoleLogMessages.ts +++ b/packages/neo-one-client-switch/src/common/processConsoleLogMessages.ts @@ -1,7 +1,6 @@ import { RawAction } from '@neo-one/client-common'; import { SourceMaps } from '../common'; import { createConsoleLogMessages } from './createConsoleLogMessages'; -import { initializeSourceMap } from './initializeSourceMap'; export interface ProcessConsoleLogOptions { readonly actions: readonly RawAction[]; @@ -19,7 +18,6 @@ export const enableConsoleLogForTest = () => { }; export const processConsoleLogMessages = async ({ actions, sourceMaps }: ProcessConsoleLogOptions): Promise => { - initializeSourceMap(); if (!disabled) { const logs = await createConsoleLogMessages(actions, sourceMaps); if (logs.length > 0) { diff --git a/packages/neo-one-client-switch/src/index.browser.ts b/packages/neo-one-client-switch/src/index.browser.ts index 36d1c0b99b..f83459f88f 100644 --- a/packages/neo-one-client-switch/src/index.browser.ts +++ b/packages/neo-one-client-switch/src/index.browser.ts @@ -2,7 +2,6 @@ export * from './browser'; export { disableConsoleLogForTest, HWLedger, - initializeSourceMap, LogOptions, ProcessActionsAndMessageOptions, ProcessConsoleLogOptions, diff --git a/packages/neo-one-client-switch/src/index.ts b/packages/neo-one-client-switch/src/index.ts index 429022d2e3..783d74da05 100644 --- a/packages/neo-one-client-switch/src/index.ts +++ b/packages/neo-one-client-switch/src/index.ts @@ -2,7 +2,6 @@ export { disableConsoleLogForTest, enableConsoleLogForTest, HWLedger, - initializeSourceMap, LogOptions, ProcessActionsAndMessageOptions, ProcessConsoleLogOptions, diff --git a/packages/neo-one-client-switch/src/node/index.ts b/packages/neo-one-client-switch/src/node/index.ts index 11deb78012..31fd8aaf58 100644 --- a/packages/neo-one-client-switch/src/node/index.ts +++ b/packages/neo-one-client-switch/src/node/index.ts @@ -2,4 +2,4 @@ export * from './createConsoleLogMessages'; export * from './processActionsAndMessage'; export * from './processConsoleLogMessages'; export * from './LedgerTransport'; -export * from './tracing'; +export * from './initializeSourceMap'; diff --git a/packages/neo-one-client-switch/src/node/initializeSourceMap.ts b/packages/neo-one-client-switch/src/node/initializeSourceMap.ts new file mode 100644 index 0000000000..680b8e235d --- /dev/null +++ b/packages/neo-one-client-switch/src/node/initializeSourceMap.ts @@ -0,0 +1,3 @@ +export const initializeSourceMap = () => { + // do nothing in node.js +}; diff --git a/packages/neo-one-client-switch/src/node/tracing.ts b/packages/neo-one-client-switch/src/node/tracing.ts deleted file mode 100644 index dedb968c58..0000000000 --- a/packages/neo-one-client-switch/src/node/tracing.ts +++ /dev/null @@ -1,53 +0,0 @@ -// tslint:disable no-implicit-dependencies -// @ts-ignore -import { - AggregationType, - Config, - globalStats, - Measure, - MeasureUnit, - NoopExporter, - Span, - SpanKind, - TagMap, -} from '@opencensus/core'; -import { JaegerTraceExporter, JaegerTraceExporterOptions } from '@opencensus/exporter-jaeger'; -import { PrometheusExporterOptions, PrometheusStatsExporter } from '@opencensus/exporter-prometheus'; -import { TracingBase } from '@opencensus/nodejs-base'; -import { TraceContextFormat } from '@opencensus/propagation-tracecontext'; - -const tracing = TracingBase.instance; -const tracer = tracing.tracer; - -const startTracing = async (config: Config) => { - tracing.start(config); - - return () => { - if (config.exporter !== undefined) { - tracing.unregisterExporter(config.exporter); - } - - tracing.stop(); - }; -}; - -const getNewPropagation = async () => Promise.resolve(new TraceContextFormat()); - -export { - AggregationType, - Config as TracingConfig, - globalStats, - JaegerTraceExporter, - JaegerTraceExporterOptions, - Measure, - MeasureUnit, - NoopExporter, - PrometheusExporterOptions, - PrometheusStatsExporter, - Span, - SpanKind, - startTracing, - TagMap, - getNewPropagation, - tracer, -}; diff --git a/packages/neo-one-client-switch/tsconfig.json b/packages/neo-one-client-switch/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-client-switch/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-client/.npmignore b/packages/neo-one-client/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-client/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-client/CHANGELOG.json b/packages/neo-one-client/CHANGELOG.json new file mode 100644 index 0000000000..e2bfb1b529 --- /dev/null +++ b/packages/neo-one-client/CHANGELOG.json @@ -0,0 +1,111 @@ +{ + "name": "@neo-one/client", + "entries": [ + { + "version": "3.0.0", + "tag": "@neo-one/client_v3.0.0", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "major": [ + { + "comment": "3.0.0preview3-alpha release bump" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.7.0` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/client_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "fix #1997" + }, + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.6.0", + "tag": "@neo-one/client_v2.6.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/developer-tools\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/client_v2.5.0", + "date": "Thu, 23 Apr 2020 20:37:45 GMT", + "comments": { + "minor": [ + { + "comment": "Add NEODataProvider to support C# node. Add NEOProvider to support NEODataProvider. Moved common code to DataProviderBase & ProviderBase." + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/client_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/developer-tools\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-client/CHANGELOG.md b/packages/neo-one-client/CHANGELOG.md index c02af04dd3..1227bdad9a 100644 --- a/packages/neo-one-client/CHANGELOG.md +++ b/packages/neo-one-client/CHANGELOG.md @@ -1,158 +1,44 @@ -# Change Log +# Change Log - @neo-one/client -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client@1.3.1...@neo-one/client@2.3.0) (2019-10-23) +## 3.0.0 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/client +### Breaking changes +- 3.0.0preview3-alpha release bump +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT +### Patches +- fix #1997 +- Upgrade TypeScript from v3.8.3 to v3.9.5 -## [1.3.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client@1.3.0...@neo-one/client@1.3.1) (2019-10-23) +### Updates -**Note:** Version bump only for package @neo-one/client +- bump package version for future release clarity +## 2.6.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes +- update package release process to take better advantage of rush tooling +## 2.5.0 +Thu, 23 Apr 2020 20:37:45 GMT -# [1.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client@1.2.7...@neo-one/client@1.3.0) (2019-10-23) +### Minor changes +- Add NEODataProvider to support C# node. Add NEOProvider to support NEODataProvider. Moved common code to DataProviderBase & ProviderBase. -### Features +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -* **dapi codegen:** setup DapiUserAccountProvider by default during codegen ([6b438db](https://github.com/neo-one-suite/neo-one/commit/6b438dba827b47272d5fc11f390f6912eb0303bc)) +### Minor changes +- Migrate to Rush - - - -## [1.2.7](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client@1.2.6...@neo-one/client@1.2.7) (2019-09-04) - -**Note:** Version bump only for package @neo-one/client - - - - - -## [1.2.6](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client@1.2.5...@neo-one/client@1.2.6) (2019-08-31) - -**Note:** Version bump only for package @neo-one/client - - - - - -## [1.2.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client@1.2.4...@neo-one/client@1.2.5) (2019-08-30) - -**Note:** Version bump only for package @neo-one/client - - - - - -## [1.2.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client@1.2.3...@neo-one/client@1.2.4) (2019-08-23) - -**Note:** Version bump only for package @neo-one/client - - - - - -## [1.2.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client@1.2.2...@neo-one/client@1.2.3) (2019-08-22) - -**Note:** Version bump only for package @neo-one/client - - - - - -## [1.2.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client@1.2.1...@neo-one/client@1.2.2) (2019-07-29) - -**Note:** Version bump only for package @neo-one/client - - - - - -## [1.2.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client@1.2.0...@neo-one/client@1.2.1) (2019-06-20) - -**Note:** Version bump only for package @neo-one/client - - - - - -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client@1.1.2...@neo-one/client@1.2.0) (2019-06-04) - - -### Bug Fixes - -* **@neo-one/types:** eliminate global types from @neo-one/types ([004330d](https://github.com/neo-one-suite/neo-one/commit/004330d)) - - -### Features - -* **client:** HDKeyStore testing ([8f925d4](https://github.com/neo-one-suite/neo-one/commit/8f925d4)) - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client@1.1.1...@neo-one/client@1.1.2) (2019-04-12) - -**Note:** Version bump only for package @neo-one/client - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client@1.1.0...@neo-one/client@1.1.1) (2019-03-27) - -**Note:** Version bump only for package @neo-one/client - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client@1.0.3...@neo-one/client@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/client - - - - - -## [1.0.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client@1.0.3-alpha.0...@neo-one/client@1.0.3) (2019-02-21) - -**Note:** Version bump only for package @neo-one/client - - - - - -## [1.0.3-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client@1.0.2...@neo-one/client@1.0.3-alpha.0) (2019-02-15) - - -### Features - -* **@neo-one/client:** Add iterStorage to NEOONEDataProvider ([0797f74](https://github.com/neo-one-suite/neo-one/commit/0797f74)) - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client@1.0.1...@neo-one/client@1.0.2) (2018-11-13) - -**Note:** Version bump only for package @neo-one/client - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/client@1.0.0...@neo-one/client@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/client diff --git a/packages/neo-one-client/gulpfile.js b/packages/neo-one-client/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-client/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-client/package.json b/packages/neo-one-client/package.json index 1e82976eef..0c26a80eb4 100644 --- a/packages/neo-one-client/package.json +++ b/packages/neo-one-client/package.json @@ -1,12 +1,23 @@ { "name": "@neo-one/client", - "version": "2.3.0", + "version": "3.0.0", "description": "NEOβ€’ONE client API.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.3.0", - "@neo-one/client-core": "^2.3.0", - "@neo-one/developer-tools": "^2.3.0" + "@neo-one/client-common": "^3.0.0", + "@neo-one/client-core": "^3.0.0" }, - "sideEffects": false + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-client/src/index.ts b/packages/neo-one-client/src/index.ts index 6df029a5dd..a7eacf526d 100644 --- a/packages/neo-one-client/src/index.ts +++ b/packages/neo-one-client/src/index.ts @@ -1,31 +1,26 @@ export { - ABI, ABIDefault, ABIDefaultType, - ABIEvent, - ABIFunction, ABIParameter, ABIParameterBase, ABIReturn, ABIReturnBase, - Account, Action, AddressABI, AddressABIParameter, AddressABIReturn, - AddressAttribute, - AddressAttributeUsage, AddressContractParameter, AddressString, + AnyABI, + AnyABIParameter, + AnyABIReturn, + AnyContractParameter, ArrayABI, ArrayABIParameter, ArrayABIReturn, ArrayContractParameter, - Asset, - AssetType, Attribute, AttributeBase, - AttributeUsage, Block, BlockFilter, BooleanABI, @@ -35,28 +30,26 @@ export { BufferABI, BufferABIParameter, BufferABIReturn, - BufferAttribute, - BufferAttributeUsage, BufferContractParameter, BufferString, - ClaimTransaction, - ConfirmedClaimTransaction, - ConfirmedContractTransaction, - ConfirmedEnrollmentTransaction, - ConfirmedInvocationTransaction, - ConfirmedIssueTransaction, - ConfirmedMinerTransaction, - ConfirmedPublishTransaction, - ConfirmedRegisterTransaction, - ConfirmedStateTransaction, ConfirmedTransaction, - ConfirmedTransactionBase, + ConsensusData, Contract, + ContractABI, + ContractABIClient, + ContractEventDescriptor, + ContractEventDescriptorClient, + ContractGroup, + ContractManifest, + ContractManifestClient, + ContractMethodDescriptor, + ContractMethodDescriptorClient, ContractParameter, + ContractParameterDefinition, ContractParameterType, - ContractTransaction, + ContractPermission, + ContractPermissionDescriptor, DeveloperProvider, - EnrollmentTransaction, Event, EventParameters, ForwardOptions, @@ -65,16 +58,17 @@ export { ForwardValueABIParameter, ForwardValueABIReturn, GetOptions, + Hash160ABI, + Hash160ABIParameter, + Hash160ABIReturn, + Hash160ContractParameter, Hash256ABI, Hash256ABIParameter, Hash256ABIReturn, - Hash256Attribute, - Hash256AttributeUsage, Hash256ContractParameter, Hash256String, Header, - Input, - InputOutput, + HighPriorityAttribute, IntegerABI, IntegerABIParameter, IntegerABIReturn, @@ -83,25 +77,22 @@ export { InvocationResult, InvocationResultError, InvocationResultSuccess, - InvocationTransaction, InvokeReceipt, InvokeReceiveTransactionOptions, InvokeSendUnsafeReceiveTransactionOptions, InvokeSendUnsafeTransactionOptions, - IssueTransaction, + IterOptions, JSONRPCErrorResponse, Log, MapABI, MapABIParameter, MapABIReturn, MapContractParameter, - MinerTransaction, NetworkSettings, NetworkType, ObjectABI, ObjectABIParameter, ObjectABIReturn, - Output, Param, Peer, PrivateKeyString, @@ -109,27 +100,24 @@ export { PublicKeyABI, PublicKeyABIParameter, PublicKeyABIReturn, - PublicKeyAttribute, - PublicKeyAttributeUsage, PublicKeyContractParameter, PublicKeyString, - PublishTransaction, RawAction, RawActionBase, RawCallReceipt, RawInvocationData, RawInvocationResult, - RawInvocationResultBase, - RawInvocationResultError, - RawInvocationResultSuccess, + RawTransactionResultBase, + RawTransactionResultError, + RawTransactionResultSuccess, RawInvokeReceipt, RawLog, RawNotification, - RegisterTransaction, RelayTransactionResult, Return, ScriptBuilderParam, SenderAddressABIDefault, + Signer, SignatureABI, SignatureABIParameter, SignatureABIReturn, @@ -141,17 +129,17 @@ export { SmartContractNetworksDefinition, SmartContractReadOptions, SourceMaps, - StateTransaction, StorageItem, StringABI, StringABIParameter, StringABIReturn, StringContractParameter, Transaction, - TransactionBase, TransactionOptions, TransactionReceipt, TransactionResult, + TransactionResultSuccess, + TransactionResultError, Transfer, UpdateAccountNameOptions, UserAccount, @@ -165,6 +153,7 @@ export { VoidABIReturn, VoidContractParameter, Witness, + WitnessScope, addressToScriptHash, createPrivateKey, decryptNEP2, @@ -178,16 +167,19 @@ export { publicKeyToScriptHash, scriptHashToAddress, wifToPrivateKey, + Wildcard, + WildcardContainer, } from '@neo-one/client-common'; export { + addLocalKeysSync, Client, connectRemoteUserAccountProvider, Dapi, DapiUserAccountProvider, DeveloperClient, DeveloperClients, - Hash256, + Hash160, JSONRPCProvider, JSONRPCRequest, JSONRPCResponse, @@ -209,4 +201,4 @@ export { nep5, } from '@neo-one/client-core'; -export { DeveloperTools } from '@neo-one/developer-tools'; +// export { DeveloperTools } from '@neo-one/developer-tools'; diff --git a/packages/neo-one-client/tsconfig.json b/packages/neo-one-client/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-client/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-developer-tools-frame/package.json b/packages/neo-one-developer-tools-frame/package.json index cca1664dc8..e5ce7e3f8c 100644 --- a/packages/neo-one-developer-tools-frame/package.json +++ b/packages/neo-one-developer-tools-frame/package.json @@ -2,37 +2,48 @@ "name": "@neo-one/developer-tools-frame", "version": "2.3.0", "description": "NEOβ€’ONE developer tools.", - "main": "./src/index", + "license": "MIT", + "scripts": { + "build": "", + "build-real": "node ./node_modules/@neo-one/build-tools-web/dist/compile --bundle tools", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@emotion/core": "^10.0.16", - "@emotion/styled": "^10.0.15", - "@neo-one/client-common": "^2.3.0", - "@neo-one/client-core": "^2.3.0", - "@neo-one/react": "^2.3.0", - "@neo-one/react-common": "^2.3.0", - "@neo-one/utils": "^2.3.0", + "@emotion/core": "^10.0.22", + "@emotion/styled": "^10.0.23", + "@emotion/styled-base": "^10.0.24", + "@neo-one/client-common": "^3.0.0", + "@neo-one/client-core": "^3.0.0", + "@neo-one/react": "^2.7.0", + "@neo-one/react-common": "^3.0.0", + "@neo-one/utils": "^3.0.0", + "@reactivex/ix-esnext-esm": "^2.5.3", "@render-props/size-observer": "^0.1.18", "bignumber.js": "^9.0.0", - "core-js": "^3.1.4", + "core-js": "^3.2.1", "date-fns": "^2.0.0-beta.5", "emotion-theming": "^10.0.14", "localforage": "^1.7.3", "lodash": "^4.17.15", "prop-types": "^15.6.2", - "react": "^16.11.0", - "react-dom": "^16.11.0", + "react": "^16.12.0", + "react-dom": "^16.12.0", "react-icons": "^3.7.0", "react-select": "^3.0.4", "regenerator-runtime": "^0.13.3", - "rxjs": "^6.5.2", + "rxjs": "^6.5.3", "styled-tools": "^1.7.1", "tslib": "^1.10.0" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "@neo-one/build-tools-web": "^1.0.0", "@types/lodash": "^4.14.138", - "@types/react": "^16.9.2", - "@types/react-dom": "^16.9.0", + "@types/react": "^16.9.15", + "@types/react-dom": "^16.9.4", "@types/react-select": "^3.0.0" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-developer-tools-frame/src/BalanceSelector.tsx b/packages/neo-one-developer-tools-frame/src/BalanceSelector.tsx index ca373ed2d8..bbec89cf3a 100644 --- a/packages/neo-one-developer-tools-frame/src/BalanceSelector.tsx +++ b/packages/neo-one-developer-tools-frame/src/BalanceSelector.tsx @@ -16,15 +16,14 @@ import { Token } from './types'; const { useContext } = React; -// tslint:disable-next-line no-any -const AssetInput: any = styled(ToolbarSelector)` +const AssetInput = styled(ToolbarSelector)` &&& { border-left: 0; width: 88px; } `; -const Wrapper = styled(Box)` +const Wrapper = styled(Box)<{}, {}>` display: grid; grid-auto-flow: column; align-items: center; @@ -64,7 +63,11 @@ export function BalanceSelector() { const addError = useAddError(); const [tokens] = useTokens(); const prevTokens = usePrevious(tokens); - const asset = getAsset(tokens, prevTokens, useStream(() => assetGlobal$, [assetGlobal$], assetGlobal$.getValue())); + const asset = getAsset( + tokens, + prevTokens, + useStream(() => assetGlobal$, [assetGlobal$], assetGlobal$.getValue()), + ); const { client, accountState$ } = useContext(DeveloperToolsContext); const value = useStream( diff --git a/packages/neo-one-developer-tools-frame/src/BlockIndex.tsx b/packages/neo-one-developer-tools-frame/src/BlockIndex.tsx index 1b45f29cd4..75590ea73e 100644 --- a/packages/neo-one-developer-tools-frame/src/BlockIndex.tsx +++ b/packages/neo-one-developer-tools-frame/src/BlockIndex.tsx @@ -11,7 +11,7 @@ import { ToolbarButton } from './ToolbarButton'; const { useCallback } = React; -const IndexWrapper = styled(Box)` +const IndexWrapper = styled(Box)<{ readonly width: number }, { readonly width: number }>` width: ${prop('width')}px; `; diff --git a/packages/neo-one-developer-tools-frame/src/BlockTime.tsx b/packages/neo-one-developer-tools-frame/src/BlockTime.tsx index 2844a1393d..f6ac1ccee0 100644 --- a/packages/neo-one-developer-tools-frame/src/BlockTime.tsx +++ b/packages/neo-one-developer-tools-frame/src/BlockTime.tsx @@ -16,13 +16,15 @@ import { ToolbarButton } from './ToolbarButton'; const { useState } = React; -const Time = Box.withComponent('time'); -const StyledTime = styled(Time)` +// tslint:disable-next-line: no-any +const Time = Box.withComponent('time'); +const StyledTime = styled(Time)` min-width: ${prop('minWidth')}px; `; const getMinWidth = (value: string) => Math.max(30, value.length * 8); -const StyledDivider = styled(Divider)` +// tslint:disable-next-line: no-any +const StyledDivider = styled(Divider)` height: 22px; margin: 0 8px; `; @@ -42,20 +44,20 @@ interface TimeAgoProps { readonly time: number; } -const SHORTEN_PAIRS = [ - [' seconds', 's'] as const, - [' second', 's'] as const, - [' minutes', 'm'] as const, - [' minute', 'm'] as const, - [' hours', 'h'] as const, - [' hour', 'h'] as const, - [' days', 'D'] as const, - [' day', 'D'] as const, - [' months', 'M'] as const, - [' month', 'M'] as const, - [' years', 'Y'] as const, - [' year', 'Y'] as const, -] as const; +const SHORTEN_PAIRS: ReadonlyArray = [ + [' seconds', 's'], + [' second', 's'], + [' minutes', 'm'], + [' minute', 'm'], + [' hours', 'h'], + [' hour', 'h'], + [' days', 'D'], + [' day', 'D'], + [' months', 'M'], + [' month', 'M'], + [' years', 'Y'], + [' year', 'Y'], +]; const shorten = (value: string) => { // tslint:disable-next-line no-loop-statement @@ -125,11 +127,7 @@ const createTime$ = ({ addError, block$ }: TimeOptions) => ), ); -const createMinTime$ = (options: TimeOptions) => - createTime$(options).pipe( - skip(1), - take(1), - ); +const createMinTime$ = (options: TimeOptions) => createTime$(options).pipe(skip(1), take(1)); export function BlockTime() { const addError = useAddError(); diff --git a/packages/neo-one-developer-tools-frame/src/ClientHook.tsx b/packages/neo-one-developer-tools-frame/src/ClientHook.tsx index c36f511136..f075628f77 100644 --- a/packages/neo-one-developer-tools-frame/src/ClientHook.tsx +++ b/packages/neo-one-developer-tools-frame/src/ClientHook.tsx @@ -59,9 +59,7 @@ class Hooker { id: transaction.hash, title: Transaction Confirmed, message: - this.mutableNEOTrackerURL === undefined ? ( - undefined - ) : ( + this.mutableNEOTrackerURL === undefined ? undefined : ( View on  ` color: ${prop('theme.error')}; `; @@ -50,7 +50,7 @@ export function DateTimePicker({ const onError = (nextError: string) => { editingTimeout = setTimeout(() => { setError(nextError); - // tslint:disable-next-line no-any + // tslint:disable-next-line no-any no-unnecessary-type-assertion no-useless-cast }, 2000) as any; }; diff --git a/packages/neo-one-developer-tools-frame/src/DeveloperToolsContext.tsx b/packages/neo-one-developer-tools-frame/src/DeveloperToolsContext.tsx index 9cdb2231db..fa22e191cf 100644 --- a/packages/neo-one-developer-tools-frame/src/DeveloperToolsContext.tsx +++ b/packages/neo-one-developer-tools-frame/src/DeveloperToolsContext.tsx @@ -108,7 +108,7 @@ export const useTokens = (): readonly [ReadonlyArray, (tokens: ReadonlyAr ); const onChangeTokens = useCallback((nextTokens: readonly Token[]) => onChange({ tokens: nextTokens }), [onChange]); - return [tokens, onChangeTokens] as const; + return [tokens, onChangeTokens]; }; export const useResetLocalState = () => { @@ -126,7 +126,7 @@ export const useAutoConsensus = (): readonly [boolean, () => void] => { ); const toggle = useCallback(() => onChange({ autoConsensus: !autoConsensus }), [autoConsensus, onChange]); - return [autoConsensus, toggle] as const; + return [autoConsensus, toggle]; }; export const useAutoSystemFee = (): readonly [boolean, () => void] => { @@ -138,5 +138,5 @@ export const useAutoSystemFee = (): readonly [boolean, () => void] => { ); const toggle = useCallback(() => onChange({ autoSystemFee: !autoSystemFee }), [autoSystemFee, onChange]); - return [autoSystemFee, toggle] as const; + return [autoSystemFee, toggle]; }; diff --git a/packages/neo-one-developer-tools-frame/src/Dialog.tsx b/packages/neo-one-developer-tools-frame/src/Dialog.tsx index 86d4156e5e..df0c2cdfd2 100644 --- a/packages/neo-one-developer-tools-frame/src/Dialog.tsx +++ b/packages/neo-one-developer-tools-frame/src/Dialog.tsx @@ -17,7 +17,7 @@ import { ResizeHandlerContext } from './ResizeHandlerContext'; const { useContext, useCallback } = React; -const StyledHeader = styled(Box)` +const StyledHeader = styled(Box)<{}, {}>` display: grid; grid-auto-flow: column; background-color: ${prop('theme.primary')}; @@ -27,13 +27,13 @@ const StyledHeader = styled(Box)` padding: 16px; `; -const StyledHeading = styled(H3)` +const StyledHeading = styled(H3)<{}, {}>` ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.headline')}; margin: 0; `; -const StyledBody = styled(Box)` +const StyledBody = styled(Box)<{}, {}>` display: grid; gap: 8px; background-color: ${prop('theme.gray0')}; diff --git a/packages/neo-one-developer-tools-frame/src/NetworkSelector.tsx b/packages/neo-one-developer-tools-frame/src/NetworkSelector.tsx index 02e3af1449..bfeca7b5c2 100644 --- a/packages/neo-one-developer-tools-frame/src/NetworkSelector.tsx +++ b/packages/neo-one-developer-tools-frame/src/NetworkSelector.tsx @@ -9,7 +9,7 @@ import { useAddError } from './ToastsContext'; const { useContext } = React; -const StyledSelect: any = styled(Select)` +const StyledSelect = styled(Select)` &&& { width: 100px; height: 40px; diff --git a/packages/neo-one-developer-tools-frame/src/ResetButton.tsx b/packages/neo-one-developer-tools-frame/src/ResetButton.tsx index d2a8d1d26f..c8c6361f40 100644 --- a/packages/neo-one-developer-tools-frame/src/ResetButton.tsx +++ b/packages/neo-one-developer-tools-frame/src/ResetButton.tsx @@ -16,7 +16,9 @@ export function ResetButton() { developerClient .resetProject() .then(() => { - client.reset(); + developerClient.reset().catch(() => { + // do nothing + }); setDisabled(false); }) .catch((error) => { diff --git a/packages/neo-one-developer-tools-frame/src/ResizeHandler.ts b/packages/neo-one-developer-tools-frame/src/ResizeHandler.ts index cdaea4bcb3..a80f99f1d7 100644 --- a/packages/neo-one-developer-tools-frame/src/ResizeHandler.ts +++ b/packages/neo-one-developer-tools-frame/src/ResizeHandler.ts @@ -66,7 +66,7 @@ export class ResizeHandler { this.mutableResizeTimeout = setTimeout(() => { this.mutableResizeTimeout = undefined; this.resize(); - // tslint:disable-next-line no-any + // tslint:disable-next-line no-any no-unnecessary-type-assertion no-useless-cast }, 1000) as any; }; diff --git a/packages/neo-one-developer-tools-frame/src/SecondsPerBlockInput.tsx b/packages/neo-one-developer-tools-frame/src/SecondsPerBlockInput.tsx index c3a807b0e9..61b8fb5fdf 100644 --- a/packages/neo-one-developer-tools-frame/src/SecondsPerBlockInput.tsx +++ b/packages/neo-one-developer-tools-frame/src/SecondsPerBlockInput.tsx @@ -77,7 +77,7 @@ export function SecondsPerBlockInput(props: React.ComponentProps setSecondsPerBlockText(`${settings.secondsPerBlock}`), 10000, - // tslint:disable-next-line no-any + // tslint:disable-next-line no-any no-unnecessary-type-assertion no-useless-cast ) as any; } else { updateSecondsPerBlockTimer = setTimeout(() => { @@ -93,7 +93,7 @@ export function SecondsPerBlockInput(props: React.ComponentProps` ${prop('theme.fontStyles.subheading')}; grid-auto-flow: column; align-items: center; diff --git a/packages/neo-one-developer-tools-frame/src/ThemeProvider.tsx b/packages/neo-one-developer-tools-frame/src/ThemeProvider.tsx index b7ef30dc63..0a83c30263 100644 --- a/packages/neo-one-developer-tools-frame/src/ThemeProvider.tsx +++ b/packages/neo-one-developer-tools-frame/src/ThemeProvider.tsx @@ -5,6 +5,7 @@ import * as React from 'react'; interface Props { readonly children: string | number | React.ReactElement | undefined; } + export function ThemeProvider({ children }: Props) { return {children}; } diff --git a/packages/neo-one-developer-tools-frame/src/Toast.tsx b/packages/neo-one-developer-tools-frame/src/Toast.tsx index cc32307bf5..2fb52f40b4 100644 --- a/packages/neo-one-developer-tools-frame/src/Toast.tsx +++ b/packages/neo-one-developer-tools-frame/src/Toast.tsx @@ -8,7 +8,7 @@ import { Toast as ToastType } from './ToastsContext'; const { useEffect, useCallback } = React; -const Wrapper = styled(Box)` +const Wrapper = styled(Box)<{}, {}>` display: grid; gap: 8px; background-color: ${prop('theme.gray0')}; @@ -55,10 +55,10 @@ export function Toast({ toast, removeToast }: Props) { if (toast.autoHide !== undefined) { autoHideTimer = setTimeout(() => { hide(); - // tslint:disable-next-line no-any + // tslint:disable-next-line no-any no-unnecessary-type-assertion no-useless-cast }, toast.autoHide) as any; } - // tslint:disable-next-line no-any + // tslint:disable-next-line no-any no-unnecessary-type-assertion no-useless-cast }, 500) as any; return () => { diff --git a/packages/neo-one-developer-tools-frame/src/ToastsContext.tsx b/packages/neo-one-developer-tools-frame/src/ToastsContext.tsx index cf1a7fcf96..35b4e26069 100644 --- a/packages/neo-one-developer-tools-frame/src/ToastsContext.tsx +++ b/packages/neo-one-developer-tools-frame/src/ToastsContext.tsx @@ -35,12 +35,12 @@ const removeToast = (id: string) => { export const useToasts = (): readonly [ReadonlyArray, typeof addToast, typeof removeToast] => { const toasts = useStream(() => toasts$, [toasts$], toasts$.getValue()); - return [toasts, addToast, removeToast] as const; + return [toasts, addToast, removeToast]; }; export type AddError = (error: Error) => void; -const ErrorText = styled(Box.withComponent('span'))` +const ErrorText = styled(Box.withComponent('span'))<{}, {}>` color: ${prop('theme.error')}; `; diff --git a/packages/neo-one-developer-tools-frame/src/Toolbar.tsx b/packages/neo-one-developer-tools-frame/src/Toolbar.tsx index 062f275f28..0eaac36d8e 100644 --- a/packages/neo-one-developer-tools-frame/src/Toolbar.tsx +++ b/packages/neo-one-developer-tools-frame/src/Toolbar.tsx @@ -18,7 +18,7 @@ import { WalletButton } from './WalletButton'; const { useCallback, useState } = React; -const Wrapper = styled(Box)` +const Wrapper = styled(Box)<{ readonly active: boolean }, { readonly active: boolean }>` display: flex; bottom: 0; left: 0; diff --git a/packages/neo-one-developer-tools-frame/src/ToolbarButton.tsx b/packages/neo-one-developer-tools-frame/src/ToolbarButton.tsx index 73c4b5fdee..fca61b0447 100644 --- a/packages/neo-one-developer-tools-frame/src/ToolbarButton.tsx +++ b/packages/neo-one-developer-tools-frame/src/ToolbarButton.tsx @@ -3,7 +3,7 @@ import { Box, ButtonBase, Tooltip, TooltipArrow } from '@neo-one/react-common'; import * as React from 'react'; import { prop } from 'styled-tools'; -const StyledButton = styled(ButtonBase)` +const StyledButton = styled(ButtonBase)<{}, {}>` background-color: ${prop('theme.gray0')}; border: 1px solid rgba(0, 0, 0, 0.3); border-right: 0; diff --git a/packages/neo-one-developer-tools-frame/src/ToolbarSelector.tsx b/packages/neo-one-developer-tools-frame/src/ToolbarSelector.tsx index 0ae4f447e0..8dd4d6c834 100644 --- a/packages/neo-one-developer-tools-frame/src/ToolbarSelector.tsx +++ b/packages/neo-one-developer-tools-frame/src/ToolbarSelector.tsx @@ -5,8 +5,7 @@ import * as React from 'react'; const { useCallback, useState } = React; -// tslint:disable-next-line no-any -const StyledSelect: any = styled(Select)` +const StyledSelect = styled(Select)` &&& { border-right: 0; width: 100px; diff --git a/packages/neo-one-developer-tools-frame/src/TransferTo.tsx b/packages/neo-one-developer-tools-frame/src/TransferTo.tsx index 25912dc7b7..3253ea0447 100644 --- a/packages/neo-one-developer-tools-frame/src/TransferTo.tsx +++ b/packages/neo-one-developer-tools-frame/src/TransferTo.tsx @@ -9,7 +9,8 @@ import { getWalletSelectorOptions$, makeWalletSelectorValueOption, WalletSelecto const { useContext } = React; -const Wrapper = styled(Label)` +// tslint:disable-next-line: no-any +const Wrapper = styled(Label)` border-top: 1px solid rgba(0, 0, 0, 0.3); margin-top: 8px; padding-top: 16px; @@ -43,7 +44,7 @@ export function TransferTo({ to, onChangeTo, ...props }: Props & React.Component Transfer To makeWalletSelectorValueOption({ userAccount }))} + value={to.map((userAccount: UserAccount) => makeWalletSelectorValueOption({ userAccount }))} options={options} onChange={(option: any) => { if (option != undefined) { diff --git a/packages/neo-one-developer-tools-frame/src/WalletSelectorBase.tsx b/packages/neo-one-developer-tools-frame/src/WalletSelectorBase.tsx index 04804ee24d..d3d3851d98 100644 --- a/packages/neo-one-developer-tools-frame/src/WalletSelectorBase.tsx +++ b/packages/neo-one-developer-tools-frame/src/WalletSelectorBase.tsx @@ -28,11 +28,11 @@ export const makeOption = async ({ Object.entries(account.balances).map>( async ([assetHash, value]) => { if (assetHash === Hash256.NEO) { - return ['NEO', value] as const; + return ['NEO', value]; } if (assetHash === Hash256.GAS) { - return ['GAS', value] as const; + return ['GAS', value]; } return undefined; @@ -51,7 +51,7 @@ export const makeOption = async ({ const balance = await smartContract.balanceOf(userAccount.id.address, { network: token.network }); - return [token.symbol, balance] as const; + return [token.symbol, balance]; }), ), ]); @@ -65,7 +65,7 @@ export const makeOption = async ({ // tslint:disable-next-line no-array-mutation balances: assetBalances .filter(utils.notNull) - .concat(tokenBalances) + .concat(tokenBalances.filter(utils.notNull)) .sort(([nameA], [nameB]) => { if (nameA.localeCompare(nameB) === 0) { return 0; @@ -169,6 +169,7 @@ const createFormatOptionLabel = (isMulti?: boolean) => ( {option.address} )} + {/* tslint:disable-next-line no-useless-cast */} {((option as any).balances === undefined ? [] : (option as any).balances).map( ([name, value]: [string, BigNumber]) => ( // @ts-ignore diff --git a/packages/neo-one-developer-tools-frame/tsconfig.json b/packages/neo-one-developer-tools-frame/tsconfig.json new file mode 100644 index 0000000000..588ef5ff4b --- /dev/null +++ b/packages/neo-one-developer-tools-frame/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.static.json" +} diff --git a/packages/neo-one-developer-tools/.npmignore b/packages/neo-one-developer-tools/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-developer-tools/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-developer-tools/CHANGELOG.json b/packages/neo-one-developer-tools/CHANGELOG.json new file mode 100644 index 0000000000..ca20cc2c53 --- /dev/null +++ b/packages/neo-one-developer-tools/CHANGELOG.json @@ -0,0 +1,73 @@ +{ + "name": "@neo-one/developer-tools", + "entries": [ + { + "version": "3.0.0", + "tag": "@neo-one/developer-tools_v3.0.0", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "major": [ + { + "comment": "3.0.0preview3-alpha release bump" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.7.0` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/developer-tools_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/developer-tools_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.5.0` to `^2.6.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/developer-tools_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-developer-tools/CHANGELOG.md b/packages/neo-one-developer-tools/CHANGELOG.md index 20246c0a38..352545583e 100644 --- a/packages/neo-one-developer-tools/CHANGELOG.md +++ b/packages/neo-one-developer-tools/CHANGELOG.md @@ -1,144 +1,36 @@ -# Change Log +# Change Log - @neo-one/developer-tools -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/developer-tools@1.1.12...@neo-one/developer-tools@2.3.0) (2019-10-23) +## 3.0.0 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/developer-tools +### Breaking changes +- 3.0.0preview3-alpha release bump +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT +### Patches +- Upgrade TypeScript from v3.8.3 to v3.9.5 -## [1.1.12](https://github.com/neo-one-suite/neo-one/compare/@neo-one/developer-tools@1.1.11...@neo-one/developer-tools@1.1.12) (2019-10-23) +### Updates -**Note:** Version bump only for package @neo-one/developer-tools +- bump package version for future release clarity +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes +- update package release process to take better advantage of rush tooling +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -## [1.1.11](https://github.com/neo-one-suite/neo-one/compare/@neo-one/developer-tools@1.1.10...@neo-one/developer-tools@1.1.11) (2019-10-23) +### Minor changes -**Note:** Version bump only for package @neo-one/developer-tools +- Migrate to Rush - - - - -## [1.1.10](https://github.com/neo-one-suite/neo-one/compare/@neo-one/developer-tools@1.1.9...@neo-one/developer-tools@1.1.10) (2019-09-04) - -**Note:** Version bump only for package @neo-one/developer-tools - - - - - -## [1.1.9](https://github.com/neo-one-suite/neo-one/compare/@neo-one/developer-tools@1.1.8...@neo-one/developer-tools@1.1.9) (2019-08-31) - -**Note:** Version bump only for package @neo-one/developer-tools - - - - - -## [1.1.8](https://github.com/neo-one-suite/neo-one/compare/@neo-one/developer-tools@1.1.7...@neo-one/developer-tools@1.1.8) (2019-08-30) - -**Note:** Version bump only for package @neo-one/developer-tools - - - - - -## [1.1.7](https://github.com/neo-one-suite/neo-one/compare/@neo-one/developer-tools@1.1.6...@neo-one/developer-tools@1.1.7) (2019-08-23) - -**Note:** Version bump only for package @neo-one/developer-tools - - - - - -## [1.1.6](https://github.com/neo-one-suite/neo-one/compare/@neo-one/developer-tools@1.1.5...@neo-one/developer-tools@1.1.6) (2019-08-22) - -**Note:** Version bump only for package @neo-one/developer-tools - - - - - -## [1.1.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/developer-tools@1.1.4...@neo-one/developer-tools@1.1.5) (2019-07-29) - -**Note:** Version bump only for package @neo-one/developer-tools - - - - - -## [1.1.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/developer-tools@1.1.3...@neo-one/developer-tools@1.1.4) (2019-06-20) - -**Note:** Version bump only for package @neo-one/developer-tools - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/developer-tools@1.1.2...@neo-one/developer-tools@1.1.3) (2019-06-04) - -**Note:** Version bump only for package @neo-one/developer-tools - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/developer-tools@1.1.1...@neo-one/developer-tools@1.1.2) (2019-04-12) - -**Note:** Version bump only for package @neo-one/developer-tools - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/developer-tools@1.1.0...@neo-one/developer-tools@1.1.1) (2019-03-27) - -**Note:** Version bump only for package @neo-one/developer-tools - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/developer-tools@1.0.3...@neo-one/developer-tools@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/developer-tools - - - - - -## [1.0.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/developer-tools@1.0.3-alpha.0...@neo-one/developer-tools@1.0.3) (2019-02-21) - -**Note:** Version bump only for package @neo-one/developer-tools - - - - - -## [1.0.3-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/developer-tools@1.0.2...@neo-one/developer-tools@1.0.3-alpha.0) (2019-02-15) - -**Note:** Version bump only for package @neo-one/developer-tools - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/developer-tools@1.0.1...@neo-one/developer-tools@1.0.2) (2018-11-13) - -**Note:** Version bump only for package @neo-one/developer-tools - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/developer-tools@1.0.0...@neo-one/developer-tools@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/developer-tools diff --git a/packages/neo-one-developer-tools/gulpfile.js b/packages/neo-one-developer-tools/gulpfile.js new file mode 100644 index 0000000000..f431cf66d8 --- /dev/null +++ b/packages/neo-one-developer-tools/gulpfile.js @@ -0,0 +1,9 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.rollupToolsTask.enabled = true; +build.compileBinTask.enabled = false; +build.copyStaticTask.enabled = false; + +build.initialize(); diff --git a/packages/neo-one-developer-tools/package.json b/packages/neo-one-developer-tools/package.json index 06ee184dfe..e032ddef7e 100644 --- a/packages/neo-one-developer-tools/package.json +++ b/packages/neo-one-developer-tools/package.json @@ -1,12 +1,25 @@ { "name": "@neo-one/developer-tools", - "version": "2.3.0", + "version": "3.0.0", "description": "NEOβ€’ONE developer tools.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/client-core": "^2.3.0", + "@neo-one/client-core": "^3.0.0", "resize-observer-polyfill": "^1.5.0", "tslib": "^1.10.0" }, - "sideEffects": false + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "@neo-one/developer-tools-frame": "^2.3.0", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-developer-tools/src/DeveloperToolsDev.ts b/packages/neo-one-developer-tools/src/DeveloperToolsDev.ts index 6859ccb1ec..a24f2770bf 100644 --- a/packages/neo-one-developer-tools/src/DeveloperToolsDev.ts +++ b/packages/neo-one-developer-tools/src/DeveloperToolsDev.ts @@ -8,7 +8,7 @@ import { getSize } from './utils'; // an equivalent rollup plugin for distributed version. // tslint:disable // @ts-ignore -import iframeScript from '../../../dist/tools/tools.raw.js'; +import iframeScript from '@neo-one/developer-tools-frame/dist/tools.raw.js'; // tslint:enable // tslint:disable no-let @@ -43,7 +43,7 @@ const clearRefreshOptionsTimeout = () => { const refreshOptions = () => { clearRefreshOptionsTimeout(); - // tslint:disable-next-line no-any + // tslint:disable-next-line no-any no-unnecessary-type-assertion no-useless-cast refreshOptionsTimeout = setTimeout(doRefreshOptions, 100) as any; }; diff --git a/packages/neo-one-developer-tools/tsconfig.json b/packages/neo-one-developer-tools/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-developer-tools/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-editor-server/package.json b/packages/neo-one-editor-server/package.json index f23a00b7bc..7af9c9de40 100644 --- a/packages/neo-one-editor-server/package.json +++ b/packages/neo-one-editor-server/package.json @@ -3,11 +3,19 @@ "version": "2.3.0", "description": "NEOβ€’ONE editor server.", "main": "./src/index", + "scripts": { + "build": "", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/http": "^2.3.0", - "@neo-one/logger": "^2.3.0", - "@neo-one/utils": "^2.3.0", - "@neo-one/utils-node": "^2.3.0", + "@neo-one/http": "^2.7.0", + "@neo-one/logger": "^2.6.1", + "@neo-one/utils": "^3.0.0", + "@neo-one/utils-node": "^2.6.2", + "core-js": "^3.2.1", "cross-fetch": "^3.0.4", "detective": "^5.2.0", "graphlib": "^2.1.7", @@ -17,21 +25,22 @@ "koa-router": "^7.4.0", "lodash": "^4.17.15", "lru-cache": "^5.0.0", - "rxjs": "^6.5.2", + "rxjs": "^6.5.3", "safe-stable-stringify": "^1.1.0", - "semver": "^6.0.0", + "semver": "^6.3.0", "tar": "^5.0.0" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", "@types/graphlib": "^2.1.5", + "@types/jest": "^24.0.18", "@types/koa": "^2.0.49", "@types/koa-compose": "^3.2.4", "@types/koa-compress": "^2.0.9", "@types/koa-router": "^7.0.42", "@types/lodash": "^4.14.138", "@types/lru-cache": "^5.1.0", - "@types/semver": "^6.0.1", + "@types/semver": "^6.0.2", "@types/tar": "^4.0.1" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-editor-server/src/resolveMiddleware.ts b/packages/neo-one-editor-server/src/resolveMiddleware.ts index db0aba89a3..308c639c8c 100644 --- a/packages/neo-one-editor-server/src/resolveMiddleware.ts +++ b/packages/neo-one-editor-server/src/resolveMiddleware.ts @@ -4,8 +4,6 @@ import { resolveDependencies } from './resolveDependencies'; export const resolveMiddleware = async (ctx: Context): Promise => { if (!ctx.is('application/json')) { ctx.throw(415); - - return; } // tslint:disable-next-line no-any diff --git a/packages/neo-one-editor-server/src/resolvePackage.ts b/packages/neo-one-editor-server/src/resolvePackage.ts index b2f45ff488..946aef5192 100644 --- a/packages/neo-one-editor-server/src/resolvePackage.ts +++ b/packages/neo-one-editor-server/src/resolvePackage.ts @@ -31,12 +31,7 @@ const getTarballURL = (name: string, version: string) => { return `${REGISTRY}${escapedName}/-/${scopelessName}-${version}.tgz`; }; -const getPath = (path: string) => - nodePath.sep + - path - .split(nodePath.sep) - .slice(1) - .join(nodePath.sep); +const getPath = (path: string) => nodePath.sep + path.split(nodePath.sep).slice(1).join(nodePath.sep); interface Files { readonly [path: string]: Buffer | undefined; @@ -180,11 +175,7 @@ const getAdditionalStarts = (files: Files, start: string, packageJSON: any) => { .filter( (file) => file !== start && - ((nodePath.basename(file) === 'index.js' && - !nodePath - .dirname(file) - .slice(1) - .includes('/')) || + ((nodePath.basename(file) === 'index.js' && !nodePath.dirname(file).slice(1).includes('/')) || (!file.slice(1).includes('/') && file.endsWith('.js'))) && nodePath.dirname(file) !== '/src', ) diff --git a/packages/neo-one-editor-server/tsconfig.json b/packages/neo-one-editor-server/tsconfig.json new file mode 100644 index 0000000000..588ef5ff4b --- /dev/null +++ b/packages/neo-one-editor-server/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.static.json" +} diff --git a/packages/neo-one-editor/package.json b/packages/neo-one-editor/package.json index 126e300b9d..0e012d2e31 100644 --- a/packages/neo-one-editor/package.json +++ b/packages/neo-one-editor/package.json @@ -3,6 +3,17 @@ "version": "2.3.1", "description": "NEOβ€’ONE website.", "main": "./src/index", + "license": "MIT", + "scripts": { + "build": "", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": [ + "src/engine/test/polyfill.ts", + "src/preview/window/polyfill.ts" + ], "dependencies": { "@babel/code-frame": "^7.0.0", "@babel/plugin-proposal-async-generator-functions": "^7.2.0", @@ -14,31 +25,32 @@ "@babel/plugin-transform-typescript": "^7.5.2", "@babel/preset-react": "^7.0.0", "@babel/standalone": "^7.5.4", - "@emotion/core": "^10.0.16", - "@emotion/styled": "^10.0.15", + "@emotion/core": "^10.0.22", + "@emotion/styled": "^10.0.23", "@jest/types": "^24.8.0", - "@neo-one/client": "^2.3.0", - "@neo-one/client-switch": "^2.3.0", + "@neo-one/client": "^3.0.0", + "@neo-one/client-switch": "^3.0.0", "@neo-one/local-browser": "^2.3.1", "@neo-one/local-browser-worker": "^2.3.1", "@neo-one/node-browser": "^2.3.0", "@neo-one/node-browser-worker": "^2.3.0", - "@neo-one/react": "^2.3.0", - "@neo-one/react-common": "^2.3.0", + "@neo-one/react": "^2.7.0", + "@neo-one/react-common": "^3.0.0", + "@neo-one/smart-contract-compiler": "^3.0.0", "@neo-one/smart-contract-test-browser": "^2.3.1", - "@neo-one/utils": "^2.3.0", + "@neo-one/utils": "^3.0.0", "@neo-one/worker": "^2.3.0", "@render-props/scrollable": "^0.1.20", "anser": "^1.4.8", "color": "^3.1.2", - "core-js": "^3.1.4", + "core-js": "^3.2.1", "cross-fetch": "^3.0.4", - "file-loader": "^4.2.0", + "file-loader": "^5.0.2", "fs-extra": "^8.1.0", "glob": "^7.1.4", "html-entities": "^1.2.1", - "immer": "^4.0.0", - "jest-circus": "^24.8.0", + "immer": "^5.0.0", + "jest-circus": "^24.9.0", "jest-matchers": "^20.0.3", "jest-mock": "^24.0.0", "lodash": "^4.17.15", @@ -47,9 +59,9 @@ "nanoid": "^2.0.3", "onigasm": "^2.2.2", "prop-types": "^15.6.2", - "raw-loader": "^3.0.0", - "react": "^16.11.0", - "react-dom": "^16.11.0", + "raw-loader": "^4.0.0", + "react": "^16.12.0", + "react-dom": "^16.12.0", "react-hot-loader": "^4.12.12", "react-icons": "^3.7.0", "react-redux": "^7.0.3", @@ -57,29 +69,32 @@ "regenerator-runtime": "^0.13.3", "resize-observer-polyfill": "^1.5.0", "resolve": "^1.12.0", - "rxjs": "^6.5.2", + "rxjs": "^6.5.3", "source-map": "^0.7.3", + "source-map-support": "^0.5.13", "styled-tools": "^1.7.1", - "ts-node": "^8.3.0", - "typescript": "^3.6.3", - "typescript-fsa": "^3.0.0", + "ts-node": "^8.4.1", + "tslib": "^1.10.0", + "typescript": "3.9.5", + "typescript-fsa": "^3.0.0-beta-2", "typescript-fsa-reducers": "^1.2.1", - "webpack": "^4.39.3" + "webpack": "^4.40.2" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "@types/babel__code-frame": "^7.0.1", "@types/color": "^3.0.0", "@types/fs-extra": "^8.0.0", "@types/glob": "^7.1.1", "@types/html-entities": "^1.2.16", + "@types/jest": "^24.0.18", + "@types/jest-matchers": "^20.0.2", "@types/lodash": "^4.14.138", - "@types/react": "^16.9.2", - "@types/react-dom": "^16.9.0", + "@types/nanoid": "^2.0.0", + "@types/react": "^16.9.15", + "@types/react-dom": "^16.9.4", "@types/react-redux": "^7.1.1", "@types/resolve": "^0.0.8", "@types/webpack": "^4.39.0" - }, - "sideEffects": [ - "src/engine/test/polyfill.ts", - "src/preview/window/polyfill.ts" - ] + } } diff --git a/packages/neo-one-editor/src/FullEditor.tsx b/packages/neo-one-editor/src/FullEditor.tsx index af6b075884..7189abd193 100644 --- a/packages/neo-one-editor/src/FullEditor.tsx +++ b/packages/neo-one-editor/src/FullEditor.tsx @@ -205,27 +205,24 @@ class FullEditorBase extends React.Component { } } -const ConnectedFullEditor = connect( - undefined, - (dispatch) => ({ - appendOutput: (output: OutputMessage) => dispatch(appendConsole(output)), - clearStore: (options?: InitialEditorStateOptions) => dispatch(clearStoreBase(options)), - testRunnerCallbacks: { - onUpdateSuite: async (suite: TestSuite) => { - dispatch(updateTestSuite(suite)); - }, - onRemoveSuite: async (path: string) => { - dispatch(removeTestSuite(path)); - }, - onUpdateTest: async (path: string, test: Test) => { - dispatch(updateTest({ path, test })); - }, - setTestsRunning: async (running: boolean) => { - dispatch(setTestsRunning(running)); - }, +const ConnectedFullEditor = connect(undefined, (dispatch) => ({ + appendOutput: (output: OutputMessage) => dispatch(appendConsole(output)), + clearStore: (options?: InitialEditorStateOptions) => dispatch(clearStoreBase(options)), + testRunnerCallbacks: { + onUpdateSuite: async (suite: TestSuite) => { + dispatch(updateTestSuite(suite)); }, - }), -)(FullEditorBase); + onRemoveSuite: async (path: string) => { + dispatch(removeTestSuite(path)); + }, + onUpdateTest: async (path: string, test: Test) => { + dispatch(updateTest({ path, test })); + }, + setTestsRunning: async (running: boolean) => { + dispatch(setTestsRunning(running)); + }, + }, +}))(FullEditorBase); export const FullEditor = cold((props: ExternalProps) => ( diff --git a/packages/neo-one-editor/src/__tests__/engine/resolve.test.ts b/packages/neo-one-editor/src/__tests__/engine/resolve.test.ts index c92b876016..717fe61dc1 100644 --- a/packages/neo-one-editor/src/__tests__/engine/resolve.test.ts +++ b/packages/neo-one-editor/src/__tests__/engine/resolve.test.ts @@ -24,7 +24,7 @@ const createFileSystem = (): readonly [FileSystem, JestMocked] => { // tslint:disable-next-line:no-any } as any; - return [fileSystem, fileSystem] as const; + return [fileSystem, fileSystem]; }; describe('resolve', () => { diff --git a/packages/neo-one-editor/src/editor/Editor.tsx b/packages/neo-one-editor/src/editor/Editor.tsx index 949a09ad17..892f636863 100644 --- a/packages/neo-one-editor/src/editor/Editor.tsx +++ b/packages/neo-one-editor/src/editor/Editor.tsx @@ -21,8 +21,7 @@ const Wrapper = styled(Box)` min-height: 0; `; -// tslint:disable-next-line no-any -const StyledSplitPane = styled(SplitPane as any)` +const StyledSplitPane = styled(SplitPane)` min-height: 0; min-width: 0; height: 100%; diff --git a/packages/neo-one-editor/src/editor/EditorToolbar.tsx b/packages/neo-one-editor/src/editor/EditorToolbar.tsx index 63e2050c28..8f16869af1 100644 --- a/packages/neo-one-editor/src/editor/EditorToolbar.tsx +++ b/packages/neo-one-editor/src/editor/EditorToolbar.tsx @@ -18,7 +18,7 @@ const Wrapper = styled(DispatchWrapper)` / auto; `; -const ToolbarWrapper = styled(Box)` +const ToolbarWrapper = styled(Box)<{}, {}>` display: grid; width: 100%; background-color: ${prop('theme.accent')}; diff --git a/packages/neo-one-editor/src/editor/PreviewButton.tsx b/packages/neo-one-editor/src/editor/PreviewButton.tsx index 832d11d6e4..bc680c9147 100644 --- a/packages/neo-one-editor/src/editor/PreviewButton.tsx +++ b/packages/neo-one-editor/src/editor/PreviewButton.tsx @@ -11,7 +11,7 @@ const Wrapper = styled(Box)` place-items: center; `; -const StyledButton = styled(ButtonBase)<{ readonly open: boolean }>` +const StyledButton = styled(ButtonBase)` color: ${ifProp('open', prop('theme.gray0'), prop('theme.gray3'))}; cursor: pointer; outline: none; diff --git a/packages/neo-one-editor/src/editor/toolbar/BuildAction.tsx b/packages/neo-one-editor/src/editor/toolbar/BuildAction.tsx index f80398f3d6..e0baa8d730 100644 --- a/packages/neo-one-editor/src/editor/toolbar/BuildAction.tsx +++ b/packages/neo-one-editor/src/editor/toolbar/BuildAction.tsx @@ -43,9 +43,6 @@ const BuildActionBase = ({ openConsoleOutput, ...props }: Props) => { ); }; -export const BuildAction = connect( - undefined, - (dispatch) => ({ - openConsoleOutput: () => dispatch(openConsole('output')), - }), -)(BuildActionBase); +export const BuildAction = connect(undefined, (dispatch) => ({ + openConsoleOutput: () => dispatch(openConsole('output')), +}))(BuildActionBase); diff --git a/packages/neo-one-editor/src/editor/toolbar/Console.tsx b/packages/neo-one-editor/src/editor/toolbar/Console.tsx index 41e5de3c5f..d79154d22c 100644 --- a/packages/neo-one-editor/src/editor/toolbar/Console.tsx +++ b/packages/neo-one-editor/src/editor/toolbar/Console.tsx @@ -6,7 +6,7 @@ import { TextRange } from '../types'; import { ConsoleContent } from './ConsoleContent'; import { ConsoleHeader } from './ConsoleHeader'; -const Wrapper = styled(Box)` +const Wrapper = styled(Box)<{}, {}>` display: grid; width: 100%; grid: diff --git a/packages/neo-one-editor/src/editor/toolbar/ConsoleButton.tsx b/packages/neo-one-editor/src/editor/toolbar/ConsoleButton.tsx index 8ab7c1fb32..5f1e975117 100644 --- a/packages/neo-one-editor/src/editor/toolbar/ConsoleButton.tsx +++ b/packages/neo-one-editor/src/editor/toolbar/ConsoleButton.tsx @@ -8,7 +8,7 @@ const Wrapper = styled(Box)` place-items: center; `; -const IconWrapper = styled(ButtonBase)` +const IconWrapper = styled(ButtonBase)` color: ${prop('theme.gray0')}; cursor: pointer; outline: none; diff --git a/packages/neo-one-editor/src/editor/toolbar/ConsoleOutput.tsx b/packages/neo-one-editor/src/editor/toolbar/ConsoleOutput.tsx index 53b5cfc16c..b00848594e 100644 --- a/packages/neo-one-editor/src/editor/toolbar/ConsoleOutput.tsx +++ b/packages/neo-one-editor/src/editor/toolbar/ConsoleOutput.tsx @@ -12,7 +12,8 @@ import { selectConsoleOutputOwner, } from '../redux'; -const Wrapper = styled(Box)` +// tslint:disable-next-line: no-any +const Wrapper = styled(Box)` color: ${prop('theme.gray0')}; ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.body1')}; diff --git a/packages/neo-one-editor/src/editor/toolbar/ConsoleSelector.tsx b/packages/neo-one-editor/src/editor/toolbar/ConsoleSelector.tsx index 070ea4f7d3..4ed4674f6e 100644 --- a/packages/neo-one-editor/src/editor/toolbar/ConsoleSelector.tsx +++ b/packages/neo-one-editor/src/editor/toolbar/ConsoleSelector.tsx @@ -19,9 +19,6 @@ const ConsoleSelectorBase = ({ consoleOutput, owner, onChange, ...props }: Props /> ); -export const ConsoleSelector = connect( - selectConsoleOutput, - (dispatch) => ({ - onChange: (owner: string) => dispatch(setConsoleOwner(owner)), - }), -)(ConsoleSelectorBase); +export const ConsoleSelector = connect(selectConsoleOutput, (dispatch) => ({ + onChange: (owner: string) => dispatch(setConsoleOwner(owner)), +}))(ConsoleSelectorBase); diff --git a/packages/neo-one-editor/src/editor/toolbar/ConsoleTab.tsx b/packages/neo-one-editor/src/editor/toolbar/ConsoleTab.tsx index cf0e852cb0..6146f4671e 100644 --- a/packages/neo-one-editor/src/editor/toolbar/ConsoleTab.tsx +++ b/packages/neo-one-editor/src/editor/toolbar/ConsoleTab.tsx @@ -15,7 +15,8 @@ const Wrapper = styled(Box)` grid-auto-flow: column; `; -const TextWrapper = styled(Box)<{ readonly selected: boolean }>` +// tslint:disable-next-line: no-any +const TextWrapper = styled(Box)` color: ${ifProp('selected', prop('theme.gray0'), prop('theme.gray2'))}; ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.body1')}; diff --git a/packages/neo-one-editor/src/editor/toolbar/Feedback.tsx b/packages/neo-one-editor/src/editor/toolbar/Feedback.tsx index a94d459f25..15461e59cc 100644 --- a/packages/neo-one-editor/src/editor/toolbar/Feedback.tsx +++ b/packages/neo-one-editor/src/editor/toolbar/Feedback.tsx @@ -61,7 +61,8 @@ const ExperienceWrapper = styled(RowWrapper)` grid-gap: 8px; `; -const InputBox = styled(Input.withComponent('textarea'))` +// tslint:disable-next-line: no-any +const InputBox = styled(Input.withComponent('textarea'))` color: ${prop('theme.gray0')}; ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.body1')}; diff --git a/packages/neo-one-editor/src/editor/toolbar/FileText.tsx b/packages/neo-one-editor/src/editor/toolbar/FileText.tsx index dd8a0aafab..584e7151e5 100644 --- a/packages/neo-one-editor/src/editor/toolbar/FileText.tsx +++ b/packages/neo-one-editor/src/editor/toolbar/FileText.tsx @@ -13,13 +13,13 @@ const Wrapper = styled(Box)` grid-gap: 8px; `; -const LightText = styled(Box)` +const LightText = styled(Box)<{}, {}>` ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.body1')}; color: ${prop('theme.gray0')}; `; -const DarkText = styled(Box)` +const DarkText = styled(Box)<{}, {}>` ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.caption')}; color: ${prop('theme.gray3')}; diff --git a/packages/neo-one-editor/src/editor/toolbar/Help.tsx b/packages/neo-one-editor/src/editor/toolbar/Help.tsx index 5f82df4c98..2a66831c60 100644 --- a/packages/neo-one-editor/src/editor/toolbar/Help.tsx +++ b/packages/neo-one-editor/src/editor/toolbar/Help.tsx @@ -10,7 +10,8 @@ const Wrapper = styled(Box)` grid-auto-rows: auto; `; -const Text = styled(Box)` +// tslint:disable-next-line: no-any +const Text = styled(Box)` color: ${prop('theme.gray0')}; ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.subheading')}; diff --git a/packages/neo-one-editor/src/editor/toolbar/ProblemCount.tsx b/packages/neo-one-editor/src/editor/toolbar/ProblemCount.tsx index 7dbe92b67c..3bfd95aabb 100644 --- a/packages/neo-one-editor/src/editor/toolbar/ProblemCount.tsx +++ b/packages/neo-one-editor/src/editor/toolbar/ProblemCount.tsx @@ -2,7 +2,7 @@ import styled from '@emotion/styled'; import { Box } from '@neo-one/react-common'; import { prop } from 'styled-tools'; -export const ProblemCount = styled(Box)` +export const ProblemCount = styled(Box)<{}, {}>` color: ${prop('theme.gray0')}; ${prop('theme.font.axiformaRegular')}; ${prop('theme.fontStyles.body1')}; diff --git a/packages/neo-one-editor/src/editor/toolbar/ProblemRoot.tsx b/packages/neo-one-editor/src/editor/toolbar/ProblemRoot.tsx index a8a4b5d71e..57e4e92869 100644 --- a/packages/neo-one-editor/src/editor/toolbar/ProblemRoot.tsx +++ b/packages/neo-one-editor/src/editor/toolbar/ProblemRoot.tsx @@ -29,7 +29,9 @@ const StyledEditorFileIcon = styled(FileIcon)` height: 16px; width: 16px; `; -const StyledProblemCount = styled(ProblemCount)` + +// tslint:disable-next-line: no-any +const StyledProblemCount = styled(ProblemCount)` padding-top: 1.5px; `; diff --git a/packages/neo-one-editor/src/editor/toolbar/ProblemWrapper.tsx b/packages/neo-one-editor/src/editor/toolbar/ProblemWrapper.tsx index 7e21976767..afcaee2894 100644 --- a/packages/neo-one-editor/src/editor/toolbar/ProblemWrapper.tsx +++ b/packages/neo-one-editor/src/editor/toolbar/ProblemWrapper.tsx @@ -3,7 +3,7 @@ import { Box, ButtonBase } from '@neo-one/react-common'; import * as React from 'react'; import { prop } from 'styled-tools'; -const Wrapper = styled(ButtonBase)` +const Wrapper = styled(ButtonBase)` cursor: pointer; outline: none; width: 100%; diff --git a/packages/neo-one-editor/src/editor/toolbar/Problems.tsx b/packages/neo-one-editor/src/editor/toolbar/Problems.tsx index a2560e0067..daedd062a6 100644 --- a/packages/neo-one-editor/src/editor/toolbar/Problems.tsx +++ b/packages/neo-one-editor/src/editor/toolbar/Problems.tsx @@ -15,7 +15,8 @@ import { ConsoleType } from '../types'; import { Text } from './Text'; import { Wrapper } from './Wrapper'; -const GridWrapper = styled(Text)` +// tslint:disable-next-line: no-any +const GridWrapper = styled(Text)` display: grid; gap: 2px; grid-auto-flow: column; diff --git a/packages/neo-one-editor/src/editor/toolbar/ProblemsView.tsx b/packages/neo-one-editor/src/editor/toolbar/ProblemsView.tsx index 7f2a0205ca..6cc48697e0 100644 --- a/packages/neo-one-editor/src/editor/toolbar/ProblemsView.tsx +++ b/packages/neo-one-editor/src/editor/toolbar/ProblemsView.tsx @@ -11,7 +11,7 @@ import { FileProblems, selectConsoleProblems } from '../redux'; import { TextRange } from '../types'; import { ProblemView } from './ProblemView'; -const Wrapper = styled(Box)` +const Wrapper = styled(Box)<{ readonly shadowed: boolean }, { readonly shadowed: boolean }>` display: grid; align-content: start; width: 100%; diff --git a/packages/neo-one-editor/src/editor/toolbar/RunTestsAction.tsx b/packages/neo-one-editor/src/editor/toolbar/RunTestsAction.tsx index 00ef57c838..7666638bf3 100644 --- a/packages/neo-one-editor/src/editor/toolbar/RunTestsAction.tsx +++ b/packages/neo-one-editor/src/editor/toolbar/RunTestsAction.tsx @@ -30,9 +30,6 @@ const RunTestsActionBase = ({ consoleTestsRunning, openConsoleTests, ...props }: ); -export const RunTestsAction = connect( - selectConsoleTestsRunning, - (dispatch) => ({ - openConsoleTests: () => dispatch(openConsole('test')), - }), -)(RunTestsActionBase); +export const RunTestsAction = connect(selectConsoleTestsRunning, (dispatch) => ({ + openConsoleTests: () => dispatch(openConsole('test')), +}))(RunTestsActionBase); diff --git a/packages/neo-one-editor/src/editor/toolbar/TestDetailError.tsx b/packages/neo-one-editor/src/editor/toolbar/TestDetailError.tsx index 4aab4fc3ff..da2821c98b 100644 --- a/packages/neo-one-editor/src/editor/toolbar/TestDetailError.tsx +++ b/packages/neo-one-editor/src/editor/toolbar/TestDetailError.tsx @@ -2,7 +2,7 @@ import styled from '@emotion/styled'; import { Box } from '@neo-one/react-common'; import { prop } from 'styled-tools'; -export const TestDetailError = styled(Box)` +export const TestDetailError = styled(Box)<{}, {}>` padding: 8px; color: ${prop('theme.gray1')}; background-color: ${prop('theme.gray4')}; diff --git a/packages/neo-one-editor/src/editor/toolbar/TestDetailListItem.tsx b/packages/neo-one-editor/src/editor/toolbar/TestDetailListItem.tsx index e988131004..033a24d373 100644 --- a/packages/neo-one-editor/src/editor/toolbar/TestDetailListItem.tsx +++ b/packages/neo-one-editor/src/editor/toolbar/TestDetailListItem.tsx @@ -8,7 +8,7 @@ import { TestDetailError } from './TestDetailError'; import { TestIcon } from './TestIcon'; import { TestText } from './TestText'; -const Wrapper = styled(Box)` +const Wrapper = styled(Box)<{}, {}>` display: grid; grid-gap: 0; grid-auto-flow: row; diff --git a/packages/neo-one-editor/src/editor/toolbar/TestPlayButton.tsx b/packages/neo-one-editor/src/editor/toolbar/TestPlayButton.tsx index b3f2370ab5..7742886a41 100644 --- a/packages/neo-one-editor/src/editor/toolbar/TestPlayButton.tsx +++ b/packages/neo-one-editor/src/editor/toolbar/TestPlayButton.tsx @@ -4,7 +4,7 @@ import * as React from 'react'; import { MdPlayArrow } from 'react-icons/md'; import { prop } from 'styled-tools'; -const PlayButtonWrapper = styled(ButtonBase)` +const PlayButtonWrapper = styled(ButtonBase)<{}, {}>` display: flex; justify-content: center; align-content: center; diff --git a/packages/neo-one-editor/src/editor/toolbar/TestSummaryListItem.tsx b/packages/neo-one-editor/src/editor/toolbar/TestSummaryListItem.tsx index 50bf4d78fb..e3c8aab3ee 100644 --- a/packages/neo-one-editor/src/editor/toolbar/TestSummaryListItem.tsx +++ b/packages/neo-one-editor/src/editor/toolbar/TestSummaryListItem.tsx @@ -39,9 +39,6 @@ const TestSummaryListItemBase = ({ selected, testSuite, onClick, ...props }: Pro ); -export const TestSummaryListItem = connect( - undefined, - (dispatch, { testSuite }: ExternalProps) => ({ - onClick: () => dispatch(selectTestSuite(testSuite.path)), - }), -)(TestSummaryListItemBase); +export const TestSummaryListItem = connect(undefined, (dispatch, { testSuite }: ExternalProps) => ({ + onClick: () => dispatch(selectTestSuite(testSuite.path)), +}))(TestSummaryListItemBase); diff --git a/packages/neo-one-editor/src/editor/toolbar/TestText.tsx b/packages/neo-one-editor/src/editor/toolbar/TestText.tsx index 1f1eb3b7d3..55f30117da 100644 --- a/packages/neo-one-editor/src/editor/toolbar/TestText.tsx +++ b/packages/neo-one-editor/src/editor/toolbar/TestText.tsx @@ -2,20 +2,20 @@ import styled from '@emotion/styled'; import { Box } from '@neo-one/react-common'; import { prop } from 'styled-tools'; -export const TestText = styled(Box)` +export const TestText = styled(Box)<{}, {}>` ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.body1')}; color: ${prop('theme.gray0')}; `; -export const TestTextDark = styled(TestText)` +export const TestTextDark = styled(TestText)<{}, {}>` color: ${prop('theme.gray3')}; `; -export const TestPassing = styled(TestText)` +export const TestPassing = styled(TestText)<{}, {}>` color: ${prop('theme.primaryDark')}; `; -export const TestFailing = styled(TestText)` +export const TestFailing = styled(TestText)<{}, {}>` color: ${prop('theme.error')}; `; diff --git a/packages/neo-one-editor/src/editor/toolbar/Text.tsx b/packages/neo-one-editor/src/editor/toolbar/Text.tsx index 31683c50dc..344914c135 100644 --- a/packages/neo-one-editor/src/editor/toolbar/Text.tsx +++ b/packages/neo-one-editor/src/editor/toolbar/Text.tsx @@ -2,7 +2,7 @@ import styled from '@emotion/styled'; import { Box } from '@neo-one/react-common'; import { prop } from 'styled-tools'; -export const Text = styled(Box)` +export const Text = styled(Box)<{}, {}>` color: ${prop('theme.gray0')}; ${prop('theme.fonts.axiformaBook')}; ${prop('theme.fontStyles.caption')}; diff --git a/packages/neo-one-editor/src/editor/toolbar/ToolbarPopover.tsx b/packages/neo-one-editor/src/editor/toolbar/ToolbarPopover.tsx index 2a05d48314..42b110ce91 100644 --- a/packages/neo-one-editor/src/editor/toolbar/ToolbarPopover.tsx +++ b/packages/neo-one-editor/src/editor/toolbar/ToolbarPopover.tsx @@ -5,7 +5,7 @@ import { MdClose } from 'react-icons/md'; import { prop } from 'styled-tools'; import { Wrapper } from './Wrapper'; -const HeaderWrapper = styled(Box)` +const HeaderWrapper = styled(Box)<{}, {}>` display: grid; color: ${prop('theme.gray0')}; grid-auto-flow: column; @@ -20,21 +20,21 @@ const BodyWrapper = styled(Box)` padding-right: 8px; `; -const TitleText = styled(Box)` +const TitleText = styled(Box)<{}, {}>` padding-top: 8px; padding-bottom: 8px; ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.headline')}; `; -const ToggleWrapper = styled(Wrapper)` +const ToggleWrapper = styled(Wrapper)<{}, {}>` display: grid; color: ${prop('theme.gray0')}; ${prop('theme.fonts.axiformaBook')}; ${prop('theme.fontStyles.caption')}; `; -const PopoverWrapper = styled(Box)` +const PopoverWrapper = styled(Box)<{}, {}>` display: grid; grid-auto-flow: row; grid-auto-rows: auto; diff --git a/packages/neo-one-editor/src/engine/main/initializeFileSystem.ts b/packages/neo-one-editor/src/engine/main/initializeFileSystem.ts index 8630470aad..04a254e119 100644 --- a/packages/neo-one-editor/src/engine/main/initializeFileSystem.ts +++ b/packages/neo-one-editor/src/engine/main/initializeFileSystem.ts @@ -2,116 +2,117 @@ // @ts-ignore import files from '!../../loaders/packagesLoaderEntry!../../../../neo-one-smart-contract'; // @ts-ignore -import jest_d_ts from '!raw-loader!../../../../../node_modules/@types/jest/index.d.ts'; +import jest_d_ts from '!raw-loader!../../../../../common/temp/node_modules/@types/jest/index.d.ts'; // @ts-ignore -import node_d_ts from '!raw-loader!../../../../../node_modules/@types/node/index.d.ts'; +import node_d_ts from '!raw-loader!../../../../../common/temp/node_modules/@types/node/index.d.ts'; // @ts-ignore -import lib_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.d.ts'; +import lib_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.d.ts'; // @ts-ignore -import lib_dom_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.dom.d.ts'; +import lib_dom_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.dom.d.ts'; // @ts-ignore -import lib_dom_iterable_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.dom.iterable.d.ts'; +import lib_dom_iterable_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.dom.iterable.d.ts'; // @ts-ignore -import lib_es2015_collection_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2015.collection.d.ts'; +import lib_es2015_collection_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2015.collection.d.ts'; // @ts-ignore -import lib_es2015_core_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2015.core.d.ts'; +import lib_es2015_core_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2015.core.d.ts'; // @ts-ignore -import lib_es2015_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2015.d.ts'; +import lib_es2015_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2015.d.ts'; // @ts-ignore -import lib_es2015_generator_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2015.generator.d.ts'; +import lib_es2015_generator_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2015.generator.d.ts'; // @ts-ignore -import lib_es2015_iterable_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts'; +import lib_es2015_iterable_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2015.iterable.d.ts'; // @ts-ignore -import lib_es2015_promise_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2015.promise.d.ts'; +import lib_es2015_promise_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2015.promise.d.ts'; // @ts-ignore -import lib_es2015_proxy_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts'; +import lib_es2015_proxy_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2015.proxy.d.ts'; // @ts-ignore -import lib_es2015_reflect_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts'; +import lib_es2015_reflect_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2015.reflect.d.ts'; // @ts-ignore -import lib_es2015_symbol_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts'; +import lib_es2015_symbol_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2015.symbol.d.ts'; // @ts-ignore -import lib_es2015_symbol_wellknown_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts'; +import lib_es2015_symbol_wellknown_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts'; // @ts-ignore -import lib_es2016_array_include_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts'; +import lib_es2016_array_include_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2016.array.include.d.ts'; // @ts-ignore -import lib_es2016_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2016.d.ts'; +import lib_es2016_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2016.d.ts'; // @ts-ignore -import lib_es2016_full_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2016.full.d.ts'; +import lib_es2016_full_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2016.full.d.ts'; // @ts-ignore -import lib_es2017_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2017.d.ts'; +import lib_es2017_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2017.d.ts'; // @ts-ignore -import lib_es2017_full_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2017.full.d.ts'; +import lib_es2017_full_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2017.full.d.ts'; // @ts-ignore -import lib_es2017_intl_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2017.intl.d.ts'; +import lib_es2017_intl_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2017.intl.d.ts'; // @ts-ignore -import lib_es2017_object_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2017.object.d.ts'; +import lib_es2017_object_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2017.object.d.ts'; // @ts-ignore -import lib_es2017_sharedmemory_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts'; +import lib_es2017_sharedmemory_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts'; // @ts-ignore -import lib_es2017_string_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2017.string.d.ts'; +import lib_es2017_string_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2017.string.d.ts'; // @ts-ignore -import lib_es2017_typedarrays_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts'; +import lib_es2017_typedarrays_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts'; // @ts-ignore -import lib_es2018_asynciterable_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts'; +import lib_es2018_asynciterable_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts'; // @ts-ignore -import lib_es2018_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2018.d.ts'; +import lib_es2018_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2018.d.ts'; // @ts-ignore -import lib_es2018_full_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2018.full.d.ts'; +import lib_es2018_full_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2018.full.d.ts'; // @ts-ignore -import lib_es2018_intl_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2018.intl.d.ts'; +import lib_es2018_intl_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2018.intl.d.ts'; // @ts-ignore -import lib_es2018_promise_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2018.promise.d.ts'; +import lib_es2018_promise_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2018.promise.d.ts'; // @ts-ignore -import lib_es2018_regexp_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts'; +import lib_es2018_regexp_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2018.regexp.d.ts'; // @ts-ignore -import lib_es2019_array_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2019.array.d.ts'; +import lib_es2019_array_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2019.array.d.ts'; // @ts-ignore -import lib_es2019_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2019.d.ts'; +import lib_es2019_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2019.d.ts'; // @ts-ignore -import lib_es2019_full_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2019.full.d.ts'; +import lib_es2019_full_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2019.full.d.ts'; // @ts-ignore -import lib_es2019_object_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2019.object.d.ts'; +import lib_es2019_object_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2019.object.d.ts'; // @ts-ignore -import lib_es2019_string_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2019.string.d.ts'; +import lib_es2019_string_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2019.string.d.ts'; // @ts-ignore -import lib_es2019_symbol_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts'; +import lib_es2019_symbol_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2019.symbol.d.ts'; // @ts-ignore -import lib_es2020_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2020.d.ts'; +import lib_es2020_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2020.d.ts'; // @ts-ignore -import lib_es2020_full_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2020.full.d.ts'; +import lib_es2020_full_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2020.full.d.ts'; // @ts-ignore -import lib_es2020_string_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2020.string.d.ts'; +import lib_es2020_string_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2020.string.d.ts'; // @ts-ignore -import lib_es2020_symbol_wellknown_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts'; +import lib_es2020_symbol_wellknown_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts'; // @ts-ignore -import lib_es5_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es5.d.ts'; +import lib_es5_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es5.d.ts'; // @ts-ignore -import lib_es6_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.es6.d.ts'; +import lib_es6_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.es6.d.ts'; // @ts-ignore -import lib_esnext_array_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.esnext.array.d.ts'; +import lib_esnext_array_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.esnext.array.d.ts'; // @ts-ignore -import lib_esnext_asynciterable_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.esnext.asynciterable.d.ts'; +import lib_esnext_asynciterable_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.esnext.asynciterable.d.ts'; // @ts-ignore -import lib_esnext_bigint_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.esnext.bigint.d.ts'; +import lib_esnext_bigint_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.esnext.bigint.d.ts'; // @ts-ignore -import lib_esnext_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.esnext.d.ts'; +import lib_esnext_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.esnext.d.ts'; // @ts-ignore -import lib_esnext_full_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.esnext.full.d.ts'; +import lib_esnext_full_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.esnext.full.d.ts'; // @ts-ignore -import lib_esnext_intl_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.esnext.intl.d.ts'; +import lib_esnext_intl_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.esnext.intl.d.ts'; // @ts-ignore -import lib_esnext_symbol_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.esnext.symbol.d.ts'; +import lib_esnext_symbol_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.esnext.symbol.d.ts'; // @ts-ignore -import lib_scripthost_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.scripthost.d.ts'; +import lib_scripthost_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.scripthost.d.ts'; // @ts-ignore -import lib_webworker_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.webworker.d.ts'; +import lib_webworker_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.webworker.d.ts'; +// @ts-ignore +import lib_webworker_importscripts_d_ts from '!raw-loader!../../../../../common/temp/node_modules/typescript/lib/lib.webworker.importscripts.d.ts'; // @ts-ignore -import lib_webworker_importscripts_d_ts from '!raw-loader!../../../../../node_modules/typescript/lib/lib.webworker.importscripts.d.ts'; import { FileSystem } from '@neo-one/local-browser'; // @ts-ignore -import jestPackageJSONContents from '../../../../../node_modules/@types/jest/package.json'; +import jestPackageJSONContents from '../../../../../common/temp/node_modules/@types/jest/package.json'; // @ts-ignore -import nodePackageJSONContents from '../../../../../node_modules/@types/node/package.json'; +import nodePackageJSONContents from '../../../../../common/temp/node_modules/@types/node/package.json'; const writeFile = async (fs: FileSystem, path: string, content: string) => fs.writeFile(path, content); diff --git a/packages/neo-one-editor/src/engine/remote/RemoteEngine.ts b/packages/neo-one-editor/src/engine/remote/RemoteEngine.ts index dc607f9ad1..781ae49381 100644 --- a/packages/neo-one-editor/src/engine/remote/RemoteEngine.ts +++ b/packages/neo-one-editor/src/engine/remote/RemoteEngine.ts @@ -77,10 +77,11 @@ export class RemoteEngine { jsonRPCLocalProviderManager, createJSONRPCLocalProviderManager, }).concat(pathWithExportsIn); + // tslint:disable-next-line: no-useless-cast this.mutableModules = new Map([ - [EMPTY_MODULE_PATH, new StaticExportsModule(this, EMPTY_MODULE_PATH, {})] as const, - ['path', new StaticExportsModule(this, 'path', nodePath)] as const, - ]); + [EMPTY_MODULE_PATH, new StaticExportsModule(this, EMPTY_MODULE_PATH, {})], + ['path', new StaticExportsModule(this, 'path', nodePath)], + ] as const); // tslint:disable-next-line no-loop-statement for (const { name, exports } of pathWithExports) { this.mutableModules.set(name, new StaticExportsModule(this, name, exports)); diff --git a/packages/neo-one-editor/src/error/ReactErrorOverlay.ts b/packages/neo-one-editor/src/error/ReactErrorOverlay.ts index 024b3c134f..b612f1984e 100644 --- a/packages/neo-one-editor/src/error/ReactErrorOverlay.ts +++ b/packages/neo-one-editor/src/error/ReactErrorOverlay.ts @@ -117,7 +117,7 @@ function update() { isLoadingIframe = true; const loadingIframe = window.document.createElement('iframe'); applyStyles(loadingIframe, iframeStyle); - loadingIframe.onload = function() { + loadingIframe.onload = function () { const iframeDocument = loadingIframe.contentDocument; if (iframeDocument != null && iframeDocument.body != null) { iframe = loadingIframe; diff --git a/packages/neo-one-editor/src/error/components/ErrorOverlay.tsx b/packages/neo-one-editor/src/error/components/ErrorOverlay.tsx index 1e6104805b..31eaf0a8f0 100644 --- a/packages/neo-one-editor/src/error/components/ErrorOverlay.tsx +++ b/packages/neo-one-editor/src/error/components/ErrorOverlay.tsx @@ -45,6 +45,7 @@ export class ErrorOverlay extends React.Component { public readonly getIframeWindow = (element: HTMLDivElement | null) => { if (element) { const document = element.ownerDocument; + // tslint:disable-next-line: strict-boolean-expressions if (document) { // tslint:disable-next-line no-object-mutation this.iframeWindow = document.defaultView === null ? undefined : document.defaultView; diff --git a/packages/neo-one-editor/src/error/containers/StackFrameCodeBlock.tsx b/packages/neo-one-editor/src/error/containers/StackFrameCodeBlock.tsx index 7e95cef394..e829c14447 100644 --- a/packages/neo-one-editor/src/error/containers/StackFrameCodeBlock.tsx +++ b/packages/neo-one-editor/src/error/containers/StackFrameCodeBlock.tsx @@ -28,7 +28,7 @@ export function StackFrameCodeBlock(props: StackFrameCodeBlockPropsType) { const { lines, lineNum, columnNum, contextSize, main } = props; const sourceCode: any[] = []; let whiteSpace = Infinity; - lines.forEach(function(e) { + lines.forEach(function (e) { const { content: text } = e; const m = text.match(/^\s*/); if (text === '') { @@ -40,7 +40,7 @@ export function StackFrameCodeBlock(props: StackFrameCodeBlockPropsType) { whiteSpace = 0; } }); - lines.forEach(function(e) { + lines.forEach(function (e) { let { content: text } = e; const { lineNumber: line } = e; diff --git a/packages/neo-one-editor/src/error/map.ts b/packages/neo-one-editor/src/error/map.ts index bee01d3dc7..b6944f65d5 100644 --- a/packages/neo-one-editor/src/error/map.ts +++ b/packages/neo-one-editor/src/error/map.ts @@ -36,14 +36,7 @@ export async function map( }); await Promise.all( mutableFiles.map(async (fileName) => { - const mod = engine.tryGetModule( - fileName.startsWith('http') - ? fileName - .split('/') - .slice(3) - .join('/') - : fileName, - ); + const mod = engine.tryGetModule(fileName.startsWith('http') ? fileName.split('/').slice(3).join('/') : fileName); if (mod !== undefined && mod instanceof TranspiledModule) { if (mod.sourceMap !== undefined) { const consumer = await new SourceMapConsumer(mod.sourceMap); diff --git a/packages/neo-one-editor/src/error/parse.ts b/packages/neo-one-editor/src/error/parse.ts index 6a8377bc9c..2c957f88c6 100644 --- a/packages/neo-one-editor/src/error/parse.ts +++ b/packages/neo-one-editor/src/error/parse.ts @@ -64,10 +64,7 @@ function parseStack(stack: readonly string[]): readonly StackFrame[] { if (e.indexOf('(at ') !== -1) { e = e.replace(/\(at /, '('); } - const dataOuter = e - .trim() - .split(/\s+/g) - .slice(1); + const dataOuter = e.trim().split(/\s+/g).slice(1); // tslint:disable-next-line no-array-mutation const lastOuter = dataOuter.pop(); diff --git a/packages/neo-one-editor/src/loaders/packagesLoader.ts b/packages/neo-one-editor/src/loaders/packagesLoader.ts index 67b3cb302c..cfa37ff310 100644 --- a/packages/neo-one-editor/src/loaders/packagesLoader.ts +++ b/packages/neo-one-editor/src/loaders/packagesLoader.ts @@ -1,10 +1,9 @@ // tslint:disable no-array-mutation promise-function-async -import { utils } from '@neo-one/utils'; import * as fs from 'fs-extra'; // tslint:disable-next-line match-default-export-name import glob from 'glob'; import _ from 'lodash'; -import * as path from 'path'; +import path from 'path'; import webpack from 'webpack'; const INCLUDE_PACKAGES: readonly string[] = [ @@ -35,10 +34,10 @@ const INCLUDE_PACKAGES: readonly string[] = [ 'neo-one-utils', 'neo-one-worker', ]; + const PACKAGES_DIR = path.resolve(__dirname, '..', '..', '..'); const PACKAGE_DIR_PREFIX = path.join(PACKAGES_DIR, 'neo-one-'); -// tslint:disable-next-line export-name export function packagesLoader(this: webpack.loader.LoaderContext) { try { compile(this); @@ -64,18 +63,28 @@ const getPackagesExports = async (loader: webpack.loader.LoaderContext): Promise return `module.exports = ${JSON.stringify(packages)};`; }; -const getPackages = async (loader: webpack.loader.LoaderContext) => { +export const getPackages = async (loader: webpack.loader.LoaderContext) => { const packageDirs = INCLUDE_PACKAGES; const packagePaths = packageDirs.map((dir) => path.resolve(PACKAGES_DIR, dir)); const packageFilesList = await Promise.all( - packagePaths.map((packagePath) => - getPackageFiles( + packagePaths.map(async (packagePath) => { + const hasDist = await fs.pathExists(path.resolve(packagePath, 'dist')); + + return getPackageFiles( loader, packagePath, path.join('@neo-one', packagePath.slice(PACKAGE_DIR_PREFIX.length)), - (file) => file.includes('__') || file.includes('node_modules'), - ), - ), + (file) => + file.includes('__') || + file.includes('node_modules') || + (hasDist && file.includes('src')) || + file.includes('.md') || + file.includes('package-deps.json') || + file.includes('.log') || + file.includes('gulpfile.js') || + file.includes('tsconfig'), + ); + }), ); return _.fromPairs(_.flatten(packageFilesList).filter((value) => value[1] !== undefined)); @@ -88,7 +97,6 @@ const getPackageFiles = async ( omitFile = (_file: string) => false, // tslint:disable-next-line: readonly-array ): Promise> => { - loader.addContextDependency(packageDir); const filesPromise = new Promise((resolve, reject) => glob(path.join(packageDir, '**', '*'), (err, found) => { if (err) { @@ -108,6 +116,7 @@ const getPackageFiles = async ( try { const content = await fs.readFile(file, 'utf8'); + loader.addDependency(file); return [path.join('/', 'node_modules', outputPackageDir, file.slice(packageDir.length)), content]; } catch (error) { @@ -120,5 +129,6 @@ const getPackageFiles = async ( }), ); - return result.filter(utils.notNull); + // tslint:disable-next-line: strict-type-predicates + return result.filter((value) => value != undefined) as ReadonlyArray<[string, string | undefined]>; }; diff --git a/packages/neo-one-editor/src/monaco/AsyncLanguageService.ts b/packages/neo-one-editor/src/monaco/AsyncLanguageService.ts index 2505ca8e3c..9df2e93ee8 100644 --- a/packages/neo-one-editor/src/monaco/AsyncLanguageService.ts +++ b/packages/neo-one-editor/src/monaco/AsyncLanguageService.ts @@ -241,7 +241,8 @@ export class AsyncLanguageService { fileName: string, files: { readonly [key: string]: string }, ): Promise => - Promise.all([this.fs, this.languageService]).then(([fs, languageService]) => + // tslint:disable-next-line: no-useless-cast + Promise.all([this.fs, this.languageService] as const).then(([fs, languageService]) => this.withTmpFS(files, () => { const diagnostics = this.isSmartContract ? getSemanticDiagnostics(fileName, languageService, createCompilerHost({ fs })) diff --git a/packages/neo-one-editor/src/monaco/configureGrammar.ts b/packages/neo-one-editor/src/monaco/configureGrammar.ts index 5eb77608a5..02e456873f 100644 --- a/packages/neo-one-editor/src/monaco/configureGrammar.ts +++ b/packages/neo-one-editor/src/monaco/configureGrammar.ts @@ -4,7 +4,7 @@ import { loadWASM } from 'onigasm'; // tslint:disable // @ts-ignore -import onigasm from '!file-loader!../../../../node_modules/onigasm/lib/onigasm.wasm'; +import onigasm from '!file-loader!../../node_modules/onigasm/lib/onigasm.wasm'; // @ts-ignore import tsGrammar from '!raw-loader!./grammars/TypeScriptReact.tmLanguage'; // tslint:enable diff --git a/packages/neo-one-editor/src/monaco/features/wireDiagnostics.ts b/packages/neo-one-editor/src/monaco/features/wireDiagnostics.ts index f47d3444c3..80b5878082 100644 --- a/packages/neo-one-editor/src/monaco/features/wireDiagnostics.ts +++ b/packages/neo-one-editor/src/monaco/features/wireDiagnostics.ts @@ -58,7 +58,11 @@ export const wireDiagnostics = (manager: MonacoWorkerManager, languageID: string Object.entries(_.groupBy(markers, ({ source }) => source)).forEach(([source, sourceMarkers]) => { sources.add(source); seenSources.add(source); - monaco.editor.setModelMarkers(model, source, sourceMarkers.map(({ data }) => data)); + monaco.editor.setModelMarkers( + model, + source, + sourceMarkers.map(({ data }) => data), + ); }); sources.forEach((source) => { diff --git a/packages/neo-one-editor/src/monaco/typescript.ts b/packages/neo-one-editor/src/monaco/typescript.ts index 5387614a88..29fa8518d3 100644 --- a/packages/neo-one-editor/src/monaco/typescript.ts +++ b/packages/neo-one-editor/src/monaco/typescript.ts @@ -6,7 +6,11 @@ export const conf = { lineComment: '//', blockComment: ['/*', '*/'], }, - brackets: [['{', '}'], ['[', ']'], ['(', ')']], + brackets: [ + ['{', '}'], + ['[', ']'], + ['(', ')'], + ], onEnterRules: [ { // e.g. /** | */ diff --git a/packages/neo-one-editor/tsconfig.json b/packages/neo-one-editor/tsconfig.json new file mode 100644 index 0000000000..588ef5ff4b --- /dev/null +++ b/packages/neo-one-editor/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.static.json" +} diff --git a/packages/neo-one-http-context/.npmignore b/packages/neo-one-http-context/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-http-context/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-http-context/CHANGELOG.json b/packages/neo-one-http-context/CHANGELOG.json new file mode 100644 index 0000000000..741eda5874 --- /dev/null +++ b/packages/neo-one-http-context/CHANGELOG.json @@ -0,0 +1,94 @@ +{ + "name": "@neo-one/http-context", + "entries": [ + { + "version": "2.7.1", + "tag": "@neo-one/http-context_v2.7.1", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/http-context_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.6.0` to `^2.6.1`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/http-context_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "remove opencensus metrics temporarily" + }, + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/http-context_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-http-context/CHANGELOG.md b/packages/neo-one-http-context/CHANGELOG.md index 0d37cbe375..e62a1a7c74 100644 --- a/packages/neo-one-http-context/CHANGELOG.md +++ b/packages/neo-one-http-context/CHANGELOG.md @@ -1,59 +1,35 @@ -# Change Log +# Change Log - @neo-one/http-context -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/http-context@1.2.4...@neo-one/http-context@2.3.0) (2019-10-23) +## 2.7.1 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/http-context +*Version update only* +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT +### Patches +- Upgrade TypeScript from v3.8.3 to v3.9.5 +### Updates -## [1.2.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/http-context@1.2.3...@neo-one/http-context@1.2.4) (2019-10-23) +- bump package version for future release clarity -**Note:** Version bump only for package @neo-one/http-context +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes +- remove opencensus metrics temporarily +- update package release process to take better advantage of rush tooling +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT +### Minor changes -## [1.2.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/http-context@1.2.2...@neo-one/http-context@1.2.3) (2019-10-23) +- Migrate to Rush -**Note:** Version bump only for package @neo-one/http-context - - - - - -## [1.2.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/http-context@1.2.1...@neo-one/http-context@1.2.2) (2019-09-04) - -**Note:** Version bump only for package @neo-one/http-context - - - - - -## [1.2.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/http-context@1.2.0...@neo-one/http-context@1.2.1) (2019-08-30) - -**Note:** Version bump only for package @neo-one/http-context - - - - - -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/http-context@1.1.5...@neo-one/http-context@1.2.0) (2019-08-23) - - -### Features - -* **e2e:** node-bin e2e consensus test ([0671932](https://github.com/neo-one-suite/neo-one/commit/0671932)) - - - - - -## 1.1.5 (2019-08-22) - -**Note:** Version bump only for package @neo-one/http-context diff --git a/packages/neo-one-http-context/gulpfile.js b/packages/neo-one-http-context/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-http-context/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-http-context/package.json b/packages/neo-one-http-context/package.json index 10bb4f3f31..9f9e9b4189 100644 --- a/packages/neo-one-http-context/package.json +++ b/packages/neo-one-http-context/package.json @@ -1,14 +1,27 @@ { "name": "@neo-one/http-context", - "version": "2.3.0", + "version": "2.7.1", "description": "NEOβ€’ONE http context utilities.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/client-switch": "^2.3.0", - "@neo-one/logger": "^2.3.0", - "@neo-one/utils": "^2.3.0", + "@neo-one/client-switch": "^3.0.0", + "@neo-one/logger": "^2.6.1", + "@neo-one/utils": "^3.0.0", + "@types/koa": "^2.0.49", "koa": "^2.7.0", "tslib": "^1.10.0" }, - "sideEffects": false + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-http-context/src/common.ts b/packages/neo-one-http-context/src/common.ts index 4ef6176d3c..8312ba6d21 100644 --- a/packages/neo-one-http-context/src/common.ts +++ b/packages/neo-one-http-context/src/common.ts @@ -1,8 +1,9 @@ import { Logger } from '@neo-one/logger'; import { Context } from 'koa'; +type GetLoggerType = (ctx: Context) => Logger; // tslint:disable-next-line: export-name -export const getLogger = (ctx: Context): Logger => { +export const getLogger: GetLoggerType = (ctx) => { const { logger } = ctx.state; if (logger === undefined) { ctx.throw(500); diff --git a/packages/neo-one-http-context/src/context.ts b/packages/neo-one-http-context/src/context.ts index 9c58552afb..531b83b3f9 100644 --- a/packages/neo-one-http-context/src/context.ts +++ b/packages/neo-one-http-context/src/context.ts @@ -1,32 +1,7 @@ -import { AggregationType, globalStats, MeasureUnit, SpanKind, tracer } from '@neo-one/client-switch'; import { createChild, Logger } from '@neo-one/logger'; -import { addAttributesToSpan, Labels, labelsToTags, utils } from '@neo-one/utils'; +import { Labels } from '@neo-one/utils'; import { Context } from 'koa'; -const labelNames: readonly string[] = [Labels.HTTP_PATH, Labels.HTTP_STATUS_CODE, Labels.HTTP_METHOD]; - -const requestSec = globalStats.createMeasureInt64('requests/duration', MeasureUnit.SEC); -const requestErrors = globalStats.createMeasureInt64('requests/failures', MeasureUnit.UNIT); - -const REQUESTS_HISTOGRAM = globalStats.createView( - 'http_server_request_duration_seconds', - requestSec, - AggregationType.DISTRIBUTION, - labelsToTags(labelNames), - 'distribution of the requests duration', - [1, 2, 5, 7.5, 10, 12.5, 15, 17.5, 20], -); -globalStats.registerView(REQUESTS_HISTOGRAM); - -const REQUEST_ERRORS_COUNTER = globalStats.createView( - 'http_server_request_failures_total', - requestErrors, - AggregationType.COUNT, - labelsToTags(labelNames), - 'total request failures', -); -globalStats.registerView(REQUEST_ERRORS_COUNTER); - const getContextLabels = (ctx: Context) => { const spanLabels = { [Labels.HTTP_METHOD]: ctx.request.method, @@ -35,7 +10,6 @@ const getContextLabels = (ctx: Context) => { }; return { - spanLabels, logLabels: { [Labels.HTTP_HEADERS]: JSON.stringify(ctx.request.headers), [Labels.HTTP_URL]: ctx.request.originalUrl, @@ -48,57 +22,24 @@ const getContextLabels = (ctx: Context) => { }, }; }; - -export const context = (logger: Logger) => async (ctx: Context, next: () => Promise) => { - const spanExtract = tracer.propagation.extract({ getHeader: (name: string) => ctx.headers[name] }); - const spanContext = spanExtract !== null ? spanExtract : undefined; - const { spanLabels, logLabels } = getContextLabels(ctx); +type ContextFunctionType = (logger: Logger) => (ctx: Context, next: () => Promise) => Promise; +export const context: ContextFunctionType = (logger) => async (ctx, next) => { + const { logLabels } = getContextLabels(ctx); const childLogger = createChild(logger, { service: 'http-server', ...logLabels }); ctx.state.logger = childLogger; - await tracer.startRootSpan({ spanContext, name: 'http_server_request', kind: SpanKind.SERVER }, async (span) => { - addAttributesToSpan(span, spanLabels); - const startTime = utils.nowSeconds(); - try { - try { - await next(); - } finally { - addAttributesToSpan(span, { - [Labels.HTTP_STATUS_CODE]: ctx.status, - [Labels.HTTP_PATH]: 'unknown', - }); - // tslint:disable-next-line no-any - const { router, routerName } = ctx as any; - if (router != undefined && routerName != undefined) { - const layer = router.route(routerName); - if (layer) { - span.addAttribute(Labels.HTTP_PATH, layer.path); - } - } - } - childLogger.debug({ name: 'http_server_request' }); - } catch (err) { - childLogger.error({ name: 'http_server_request', err }); - globalStats.record([ - { - measure: requestErrors, - value: 1, - }, - ]); + try { + await next(); + + childLogger.debug({ name: 'http_server_request' }); + } catch (err) { + childLogger.error({ name: 'http_server_request', err }); - throw err; - } finally { - globalStats.record([ - { - measure: requestSec, - value: utils.nowSeconds() - startTime, - }, - ]); - span.end(); - } - }); + throw err; + } }; -export const onError = (logger: Logger) => (err: Error, ctx?: Context) => { +type OnErrorFunctionType = (logger: Logger) => (err: Error, ctx?: Context) => void; +export const onError: OnErrorFunctionType = (logger) => (err, ctx) => { const labels = ctx !== undefined ? getContextLabels(ctx).logLabels : {}; logger.error({ name: 'http_server_request_uncaught_error', err, ...labels }, 'Unexpected uncaught request error.'); }; diff --git a/packages/neo-one-http-context/tsconfig.json b/packages/neo-one-http-context/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-http-context/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-http/.npmignore b/packages/neo-one-http/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-http/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-http/CHANGELOG.json b/packages/neo-one-http/CHANGELOG.json new file mode 100644 index 0000000000..e65dd68130 --- /dev/null +++ b/packages/neo-one-http/CHANGELOG.json @@ -0,0 +1,46 @@ +{ + "name": "@neo-one/http", + "entries": [ + { + "version": "2.7.0", + "tag": "@neo-one/http_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/http_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/http_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + } + ] + } + } + ] +} diff --git a/packages/neo-one-http/CHANGELOG.md b/packages/neo-one-http/CHANGELOG.md index 41102315c0..900742680b 100644 --- a/packages/neo-one-http/CHANGELOG.md +++ b/packages/neo-one-http/CHANGELOG.md @@ -1,98 +1,29 @@ -# Change Log +# Change Log - @neo-one/http -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/http@1.2.1...@neo-one/http@2.3.0) (2019-10-23) +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT -**Note:** Version bump only for package @neo-one/http +### Patches +- Upgrade TypeScript from v3.8.3 to v3.9.5 +### Updates +- bump package version for future release clarity +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT -## [1.2.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/http@1.2.0...@neo-one/http@1.2.1) (2019-10-23) +### Minor changes -**Note:** Version bump only for package @neo-one/http +- update package release process to take better advantage of rush tooling +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT +### Minor changes +- Migrate to Rush - -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/http@1.1.4...@neo-one/http@1.2.0) (2019-08-22) - - -### Features - -* **monitor:** remove @neo-one/monitor. replace with opencensus, pino, and debug ([#1597](https://github.com/neo-one-suite/neo-one/issues/1597)) ([4b1a28f](https://github.com/neo-one-suite/neo-one/commit/4b1a28f)) - - - - - -## [1.1.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/http@1.1.3...@neo-one/http@1.1.4) (2019-07-29) - -**Note:** Version bump only for package @neo-one/http - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/http@1.1.2...@neo-one/http@1.1.3) (2019-06-20) - - -### Bug Fixes - -* **deps:** update dependency typescript to v3.5.1 ([#1365](https://github.com/neo-one-suite/neo-one/issues/1365)) ([ec89546](https://github.com/neo-one-suite/neo-one/commit/ec89546)) - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/http@1.1.1...@neo-one/http@1.1.2) (2019-06-04) - -**Note:** Version bump only for package @neo-one/http - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/http@1.1.0...@neo-one/http@1.1.1) (2019-04-12) - -**Note:** Version bump only for package @neo-one/http - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/http@1.0.2...@neo-one/http@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/http - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/http@1.0.2-alpha.0...@neo-one/http@1.0.2) (2019-02-21) - -**Note:** Version bump only for package @neo-one/http - - - - - -## [1.0.2-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/http@1.0.1...@neo-one/http@1.0.2-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **deps:** update dependency koa to v2.7.0 ([db6d374](https://github.com/neo-one-suite/neo-one/commit/db6d374)) -* **deps:** update dependency rxjs to v6.4.0 ([e28af2a](https://github.com/neo-one-suite/neo-one/commit/e28af2a)) - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/http@1.0.0...@neo-one/http@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/http diff --git a/packages/neo-one-http/gulpfile.js b/packages/neo-one-http/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-http/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-http/package.json b/packages/neo-one-http/package.json index 033a72df20..5b53ae7b90 100644 --- a/packages/neo-one-http/package.json +++ b/packages/neo-one-http/package.json @@ -1,9 +1,22 @@ { "name": "@neo-one/http", - "version": "2.3.0", + "version": "2.7.0", "description": "NEOβ€’ONE http utilities.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { + "@types/koa": "^2.0.49", + "@types/koa-bodyparser": "^4.3.0", + "@types/koa-convert": "^1.2.2", + "@types/koa-cors": "^0.0.0", "koa": "^2.7.0", "koa-bodyparser": "^4.2.1", "koa-convert": "^1.2.0", @@ -11,8 +24,7 @@ "tslib": "^1.10.0" }, "devDependencies": { - "@types/koa-convert": "^1.2.2", - "@types/koa-cors": "^0.0.0" - }, - "sideEffects": false + "@neo-one/build-tools": "^1.0.0", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-http/src/bodyParser.ts b/packages/neo-one-http/src/bodyParser.ts index e904ffa8b2..c0f0f98e50 100644 --- a/packages/neo-one-http/src/bodyParser.ts +++ b/packages/neo-one-http/src/bodyParser.ts @@ -2,7 +2,8 @@ import body from 'koa-bodyparser'; import convert from 'koa-convert'; -export const bodyParser = () => +type BodyParser = () => ReturnType; +export const bodyParser: BodyParser = () => convert( body({ textLimit: '100mb', diff --git a/packages/neo-one-http/src/cors.ts b/packages/neo-one-http/src/cors.ts index 70b131ec6b..215394d599 100644 --- a/packages/neo-one-http/src/cors.ts +++ b/packages/neo-one-http/src/cors.ts @@ -1,4 +1,4 @@ import convert from 'koa-convert'; import koaCors from 'koa-cors'; -export const cors = convert(koaCors({ origin: '*' })); +export const cors: ReturnType = convert(koaCors({ origin: '*' })); diff --git a/packages/neo-one-http/tsconfig.json b/packages/neo-one-http/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-http/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-local-browser-worker/package.json b/packages/neo-one-local-browser-worker/package.json index 146db02734..ce1bc4d9f2 100644 --- a/packages/neo-one-local-browser-worker/package.json +++ b/packages/neo-one-local-browser-worker/package.json @@ -3,17 +3,26 @@ "version": "2.3.1", "description": "NEOβ€’ONE local browser workers.", "main": "./src/index", + "scripts": { + "build": "", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { "@neo-one/local-browser": "^2.3.1", "@neo-one/worker": "^2.3.0", - "core-js": "^3.1.4", + "core-js": "^3.2.1", + "file-loader": "^5.0.2", "nanoid": "^2.0.3", - "pouchdb": "^7.1.1", + "pouchdb": "7.1.1", "regenerator-runtime": "^0.13.3", - "rxjs": "^6.5.2" + "rxjs": "^6.5.3" }, "devDependencies": { - "@types/nanoid": "^2.0.0" - }, - "sideEffects": false + "@neo-one/build-tools": "^1.0.0", + "@types/nanoid": "^2.0.0", + "@types/pouchdb": "^6.4.0" + } } diff --git a/packages/neo-one-local-browser-worker/tsconfig.json b/packages/neo-one-local-browser-worker/tsconfig.json new file mode 100644 index 0000000000..588ef5ff4b --- /dev/null +++ b/packages/neo-one-local-browser-worker/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.static.json" +} diff --git a/packages/neo-one-local-browser/package.json b/packages/neo-one-local-browser/package.json index 03b0dd709f..3171dfa628 100644 --- a/packages/neo-one-local-browser/package.json +++ b/packages/neo-one-local-browser/package.json @@ -3,29 +3,37 @@ "version": "2.3.1", "description": "NEOβ€’ONE local browser implementation.", "main": "./src/index", + "scripts": { + "build": "", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/cli-common": "^2.4.0", - "@neo-one/client-common": "^2.3.0", - "@neo-one/client-core": "^2.3.0", + "@neo-one/cli-common": "^3.0.0", + "@neo-one/client-common": "^3.0.0", + "@neo-one/client-core": "^3.0.0", "@neo-one/node-browser": "^2.3.0", - "@neo-one/smart-contract-codegen": "^2.3.1", - "@neo-one/smart-contract-compiler": "^2.3.0", - "@neo-one/utils": "^2.3.0", + "@neo-one/smart-contract-codegen": "^2.7.1", + "@neo-one/smart-contract-compiler": "^3.0.0", + "@neo-one/utils": "^3.0.0", "@neo-one/worker": "^2.3.0", + "core-js": "^3.2.1", "lodash": "^4.17.15", "nanoid": "^2.0.3", - "pouchdb": "^7.1.1", + "pouchdb": "7.1.1", "pouchdb-utils": "^7.1.1", - "rxjs": "^6.5.2", + "rxjs": "^6.5.3", "safe-stable-stringify": "^1.1.0", "source-map": "^0.7.3", "tslib": "^1.10.0", - "typescript": "^3.6.3" + "typescript": "3.9.5" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", "@types/lodash": "^4.14.138", "@types/nanoid": "^2.0.0", "@types/pouchdb": "^6.4.0" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-local-browser/src/createCompilerHost.ts b/packages/neo-one-local-browser/src/createCompilerHost.ts index e558ab1077..f23d47621e 100644 --- a/packages/neo-one-local-browser/src/createCompilerHost.ts +++ b/packages/neo-one-local-browser/src/createCompilerHost.ts @@ -1,6 +1,6 @@ import { normalizePath, utils } from '@neo-one/utils'; import ts from 'typescript'; -import { currentDirectory, useCaseSensitiveFileNames } from './constants'; +import { useCaseSensitiveFileNames } from './constants'; import { FileSystem } from './filesystem'; import { createFSHost } from './sys'; import { getSmartContractLibPath, getSmartContractPath } from './utils'; @@ -63,7 +63,6 @@ export const createCompilerHost = ({ fs }: Options) => { // tslint:disable-next-line no-non-null-assertion return ts.ScriptSnapshot.fromString(servicesHost.readFile!(fileName)!); }, - getCurrentDirectory: () => currentDirectory, getCompilationSettings: () => options, getDefaultLibFileName: (opts) => ts.getDefaultLibFilePath(opts), useCaseSensitiveFileNames: () => useCaseSensitiveFileNames, diff --git a/packages/neo-one-local-browser/src/filesystem/PouchDBFileSystem.ts b/packages/neo-one-local-browser/src/filesystem/PouchDBFileSystem.ts index 9fcdd76d34..300e95ea7e 100644 --- a/packages/neo-one-local-browser/src/filesystem/PouchDBFileSystem.ts +++ b/packages/neo-one-local-browser/src/filesystem/PouchDBFileSystem.ts @@ -35,10 +35,7 @@ type Entry = WriteEntry | RemoveEntry; export class PouchDBFileSystem implements FileSystem { public static async create(db: Database): Promise { const mutableFiles: Files = new Map(); - const changes$ = createChanges$(db).pipe( - retryBackoff(1000), - share(), - ); + const changes$ = createChanges$(db).pipe(retryBackoff(1000), share()); const subscription = changes$ .pipe( map((change) => { diff --git a/packages/neo-one-local-browser/tsconfig.json b/packages/neo-one-local-browser/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-local-browser/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-local-singleton/package.json b/packages/neo-one-local-singleton/package.json index adcd6b9453..21e369f966 100644 --- a/packages/neo-one-local-singleton/package.json +++ b/packages/neo-one-local-singleton/package.json @@ -3,11 +3,21 @@ "version": "2.3.1", "description": "NEOβ€’ONE local singleton stubs.", "main": "./src/index", + "scripts": { + "build": "", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { "@neo-one/local-browser": "^2.3.1", "@neo-one/node-browser": "^2.3.0", "@neo-one/worker": "^2.3.0", + "core-js": "^3.2.1", "tslib": "^1.10.0" }, - "sideEffects": false + "devDependencies": { + "@neo-one/build-tools": "^1.0.0" + } } diff --git a/packages/neo-one-local-singleton/tsconfig.json b/packages/neo-one-local-singleton/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-local-singleton/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-logger-config/.npmignore b/packages/neo-one-logger-config/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-logger-config/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-logger-config/CHANGELOG.json b/packages/neo-one-logger-config/CHANGELOG.json new file mode 100644 index 0000000000..e9c57db7ae --- /dev/null +++ b/packages/neo-one-logger-config/CHANGELOG.json @@ -0,0 +1,46 @@ +{ + "name": "@neo-one/logger-config", + "entries": [ + { + "version": "2.6.1", + "tag": "@neo-one/logger-config_v2.6.1", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/logger-config_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/logger-config_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + } + ] + } + } + ] +} diff --git a/packages/neo-one-logger-config/CHANGELOG.md b/packages/neo-one-logger-config/CHANGELOG.md index f17d87967e..594d998b49 100644 --- a/packages/neo-one-logger-config/CHANGELOG.md +++ b/packages/neo-one-logger-config/CHANGELOG.md @@ -1,24 +1,25 @@ -# Change Log +# Change Log - @neo-one/logger-config -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/logger-config@1.0.2...@neo-one/logger-config@2.3.0) (2019-10-23) +## 2.6.1 +Thu, 23 Jul 2020 22:11:12 GMT -**Note:** Version bump only for package @neo-one/logger-config +### Patches +- Upgrade TypeScript from v3.8.3 to v3.9.5 +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes +- update package release process to take better advantage of rush tooling -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/logger-config@1.0.1...@neo-one/logger-config@1.0.2) (2019-10-23) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/logger-config +### Minor changes +- Migrate to Rush - - - -## 1.0.1 (2019-08-22) - -**Note:** Version bump only for package @neo-one/logger-config diff --git a/packages/neo-one-logger-config/gulpfile.js b/packages/neo-one-logger-config/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-logger-config/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-logger-config/package.json b/packages/neo-one-logger-config/package.json index b44a9f20de..959050cfce 100644 --- a/packages/neo-one-logger-config/package.json +++ b/packages/neo-one-logger-config/package.json @@ -1,7 +1,22 @@ { "name": "@neo-one/logger-config", - "version": "2.3.0", + "version": "2.6.1", "description": "NEOβ€’ONE logging utility config", - "main": "./src/index", - "sideEffects": false + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, + "dependencies": { + "tslib": "^1.10.0" + }, + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-logger-config/tsconfig.json b/packages/neo-one-logger-config/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-logger-config/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-logger/.npmignore b/packages/neo-one-logger/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-logger/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-logger/CHANGELOG.json b/packages/neo-one-logger/CHANGELOG.json new file mode 100644 index 0000000000..7365a6ad92 --- /dev/null +++ b/packages/neo-one-logger/CHANGELOG.json @@ -0,0 +1,64 @@ +{ + "name": "@neo-one/logger", + "entries": [ + { + "version": "2.6.1", + "tag": "@neo-one/logger_v2.6.1", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Add appropriate @types dependencies." + }, + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/logger-config\" from `^2.6.0` to `^2.6.1`" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/logger_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/logger-config\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/logger_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/logger-config\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-logger/CHANGELOG.md b/packages/neo-one-logger/CHANGELOG.md index b49799e2ac..1f17b04c97 100644 --- a/packages/neo-one-logger/CHANGELOG.md +++ b/packages/neo-one-logger/CHANGELOG.md @@ -1,51 +1,26 @@ -# Change Log +# Change Log - @neo-one/logger -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/logger@1.2.2...@neo-one/logger@2.3.0) (2019-10-23) +## 2.6.1 +Thu, 23 Jul 2020 22:11:12 GMT -**Note:** Version bump only for package @neo-one/logger +### Patches +- Add appropriate @types dependencies. +- Upgrade TypeScript from v3.8.3 to v3.9.5 +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes +- update package release process to take better advantage of rush tooling -## [1.2.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/logger@1.2.1...@neo-one/logger@1.2.2) (2019-10-23) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/logger +### Minor changes +- Migrate to Rush - - - -## [1.2.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/logger@1.2.0...@neo-one/logger@1.2.1) (2019-08-30) - -**Note:** Version bump only for package @neo-one/logger - - - - - -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/logger@1.1.0...@neo-one/logger@1.2.0) (2019-08-23) - - -### Features - -* **e2e:** node-bin e2e consensus test ([0671932](https://github.com/neo-one-suite/neo-one/commit/0671932)) - - - - - -# 1.1.0 (2019-08-22) - - -### Bug Fixes - -* **web:** fix logging / opencensus imports for website ([#1691](https://github.com/neo-one-suite/neo-one/issues/1691)) ([1e8a886](https://github.com/neo-one-suite/neo-one/commit/1e8a886)) - - -### Features - -* **monitor:** remove @neo-one/monitor. replace with opencensus, pino, and debug ([#1597](https://github.com/neo-one-suite/neo-one/issues/1597)) ([4b1a28f](https://github.com/neo-one-suite/neo-one/commit/4b1a28f)) diff --git a/packages/neo-one-logger/gulpfile.js b/packages/neo-one-logger/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-logger/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-logger/package.json b/packages/neo-one-logger/package.json index 69937045b2..8fa8f09b32 100644 --- a/packages/neo-one-logger/package.json +++ b/packages/neo-one-logger/package.json @@ -1,15 +1,26 @@ { "name": "@neo-one/logger", - "version": "2.3.0", + "version": "2.6.1", "description": "NEOβ€’ONE logging utility", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/logger-config": "^2.3.0", + "@neo-one/logger-config": "^2.6.1", + "@types/pino": "^5.8.9", "pino": "^5.12.6", - "pino-pretty": "^3.2.1" + "pino-pretty": "^3.2.1", + "tslib": "^1.10.0" }, "devDependencies": { - "@types/pino": "^5.8.9" - }, - "sideEffects": false + "@neo-one/build-tools": "^1.0.0", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-logger/src/loggers.ts b/packages/neo-one-logger/src/loggers.ts index 8bcd09aa5b..66801a872b 100644 --- a/packages/neo-one-logger/src/loggers.ts +++ b/packages/neo-one-logger/src/loggers.ts @@ -7,6 +7,7 @@ const createLogger = (service: string, options: pino.LoggerOptions = {}) => ? pino({ ...options, base: { service }, prettyPrint: getPretty() }) : pino( { ...options, base: { service }, prettyPrint: getPretty() }, + // @ts-ignore process.env.NODE_ENV === 'production' ? pino.extreme(1) : pino.destination(1), ); @@ -38,6 +39,7 @@ export const setGlobalLogLevel = (level: pino.LevelWithSilent) => logger.level = level; }); +// @ts-ignore export const getFinalLogger = (logger: pino.Logger) => pino.final(logger); export const createChild = ( diff --git a/packages/neo-one-logger/tsconfig.json b/packages/neo-one-logger/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-logger/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-node-bin/.npmignore b/packages/neo-one-node-bin/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-node-bin/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-node-bin/CHANGELOG.json b/packages/neo-one-node-bin/CHANGELOG.json new file mode 100644 index 0000000000..fc8d0be370 --- /dev/null +++ b/packages/neo-one-node-bin/CHANGELOG.json @@ -0,0 +1,144 @@ +{ + "name": "@neo-one/node-bin", + "entries": [ + { + "version": "3.0.0", + "tag": "@neo-one/node-bin_v3.0.0", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "major": [ + { + "comment": "3.0.0preview3-alpha release bump" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/node\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-neo-settings\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils-node\" from `^2.6.1` to `^2.6.2`" + }, + { + "comment": "Updating dependency \"@neo-one/client\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.7.0` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/node-bin_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Add appropriate @types dependencies." + }, + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "dependency": [ + { + "comment": "Dependency @neo-one/client version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Dependency @neo-one/client-common version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.6.0` to `^2.6.1`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + }, + { + "comment": "Updating dependency \"@neo-one/utils-node\" from `^2.6.0` to `^2.6.1`" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/node-bin_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-neo-settings\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils-node\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.5.0` to `^2.6.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/node-bin_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node\" from `^2.3.1` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-neo-settings\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils-node\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-node-bin/CHANGELOG.md b/packages/neo-one-node-bin/CHANGELOG.md index 9a4019b9a2..98639eaaa4 100644 --- a/packages/neo-one-node-bin/CHANGELOG.md +++ b/packages/neo-one-node-bin/CHANGELOG.md @@ -1,200 +1,37 @@ -# Change Log +# Change Log - @neo-one/node-bin -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -## [2.3.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-bin@2.3.0...@neo-one/node-bin@2.3.1) (2019-11-20) +## 3.0.0 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/node-bin +### Breaking changes +- 3.0.0preview3-alpha release bump +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT +### Patches +- Add appropriate @types dependencies. +- Upgrade TypeScript from v3.8.3 to v3.9.5 -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-bin@2.2.7...@neo-one/node-bin@2.3.0) (2019-10-23) +### Updates -**Note:** Version bump only for package @neo-one/node-bin +- bump package version for future release clarity +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes +- update package release process to take better advantage of rush tooling +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -## [2.2.7](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-bin@2.2.6...@neo-one/node-bin@2.2.7) (2019-10-23) +### Minor changes -**Note:** Version bump only for package @neo-one/node-bin +- Migrate to Rush - - - - -## [2.2.6](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-bin@2.2.5...@neo-one/node-bin@2.2.6) (2019-10-23) - -**Note:** Version bump only for package @neo-one/node-bin - - - - - -## [2.2.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-bin@2.2.4...@neo-one/node-bin@2.2.5) (2019-09-04) - -**Note:** Version bump only for package @neo-one/node-bin - - - - - -## [2.2.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-bin@2.2.3...@neo-one/node-bin@2.2.4) (2019-09-03) - -**Note:** Version bump only for package @neo-one/node-bin - - - - - -## [2.2.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-bin@2.2.2...@neo-one/node-bin@2.2.3) (2019-09-02) - -**Note:** Version bump only for package @neo-one/node-bin - - - - - -## [2.2.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-bin@2.2.1...@neo-one/node-bin@2.2.2) (2019-08-31) - -**Note:** Version bump only for package @neo-one/node-bin - - - - - -## [2.2.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-bin@2.2.0...@neo-one/node-bin@2.2.1) (2019-08-30) - -**Note:** Version bump only for package @neo-one/node-bin - - - - - -# [2.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-bin@2.1.0...@neo-one/node-bin@2.2.0) (2019-08-23) - - -### Features - -* **build:** fix bin package.jsons ([#1704](https://github.com/neo-one-suite/neo-one/issues/1704)) ([e7f9b83](https://github.com/neo-one-suite/neo-one/commit/e7f9b83)) -* **e2e:** node-bin e2e consensus test ([0671932](https://github.com/neo-one-suite/neo-one/commit/0671932)) - - - - - -# [2.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-bin@2.0.0...@neo-one/node-bin@2.1.0) (2019-08-22) - - -### Bug Fixes - -* **node:** fix shutdown process for node-bin ([0c4812a](https://github.com/neo-one-suite/neo-one/commit/0c4812a)) - - -### Features - -* **monitor:** remove @neo-one/monitor. replace with opencensus, pino, and debug ([#1597](https://github.com/neo-one-suite/neo-one/issues/1597)) ([4b1a28f](https://github.com/neo-one-suite/neo-one/commit/4b1a28f)) -* **node:** fixup node-bin error handling ([21e2e00](https://github.com/neo-one-suite/neo-one/commit/21e2e00)) - - - - - -# [2.0.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-bin@1.2.3...@neo-one/node-bin@2.0.0) (2019-07-29) - - -### chore - -* **node:** re-organize '@neo-one/node-bin' configuration layout ([1430584](https://github.com/neo-one-suite/neo-one/commit/1430584)), closes [#1102](https://github.com/neo-one-suite/neo-one/issues/1102) - - -### BREAKING CHANGES - -* **node:** old node-bin configs/.rc will almost surely not work. While I update the documentation you can refer here for a rough draft of the new layout: https://gist.github.com/danwbyrne/c6ee99309fea79d90ac3044c0e6c25fe - - - - - -## [1.2.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-bin@1.2.2...@neo-one/node-bin@1.2.3) (2019-06-20) - - -### Bug Fixes - -* **deps:** update dependency typescript to v3.5.1 ([#1365](https://github.com/neo-one-suite/neo-one/issues/1365)) ([ec89546](https://github.com/neo-one-suite/neo-one/commit/ec89546)) -* **website:** fix various website issues, some still outstanding ([659233c](https://github.com/neo-one-suite/neo-one/commit/659233c)) - - - - - -## [1.2.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-bin@1.2.1...@neo-one/node-bin@1.2.2) (2019-06-04) - - -### Bug Fixes - -* **deps:** update definitelytyped ([a8aec42](https://github.com/neo-one-suite/neo-one/commit/a8aec42)) -* **deps:** update dependency fs-extra to v8 ([b11630d](https://github.com/neo-one-suite/neo-one/commit/b11630d)) -* **deps:** update misc dependencies ([8a3107a](https://github.com/neo-one-suite/neo-one/commit/8a3107a)) - - - - - -## [1.2.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-bin@1.2.0...@neo-one/node-bin@1.2.1) (2019-04-12) - -**Note:** Version bump only for package @neo-one/node-bin - - - - - -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-bin@1.1.0...@neo-one/node-bin@1.2.0) (2019-03-27) - - -### Features - -* **node:** add node Documentation and Heroku Deployment ([da1d295](https://github.com/neo-one-suite/neo-one/commit/da1d295)) - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-bin@1.0.2...@neo-one/node-bin@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node-bin - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-bin@1.0.2-alpha.0...@neo-one/node-bin@1.0.2) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node-bin - - - - - -## 1.0.2-alpha.0 (2019-02-15) - - -### Bug Fixes - -* **deps:** update dependency @types/rc to ^0.0.2 ([7ba7775](https://github.com/neo-one-suite/neo-one/commit/7ba7775)) -* **deps:** update dependency @types/rc to v1 ([57791de](https://github.com/neo-one-suite/neo-one/commit/57791de)) -* **deps:** update dependency @types/seamless-immutable to v7.1.6 ([ef4dcca](https://github.com/neo-one-suite/neo-one/commit/ef4dcca)) -* **deps:** update dependency rxjs to v6.4.0 ([e28af2a](https://github.com/neo-one-suite/neo-one/commit/e28af2a)) - - -### Features - -* **node:** add as a default for the rpc server ([2aced7f](https://github.com/neo-one-suite/neo-one/commit/2aced7f)) -* **node:** add configuration to @neo-one/node-bin ([5bffb32](https://github.com/neo-one-suite/neo-one/commit/5bffb32)) -* **node:** add @neo-one/node-bin. ([a6a86ea](https://github.com/neo-one-suite/neo-one/commit/a6a86ea)) -* **node:** Add backup config and prepare the node for automated backups. ([523fa5b](https://github.com/neo-one-suite/neo-one/commit/523fa5b)) -* **node:** add dockerfile for building node container. ([9559d3a](https://github.com/neo-one-suite/neo-one/commit/9559d3a)) diff --git a/packages/neo-one-node-bin/bin/neo-one-node.js b/packages/neo-one-node-bin/bin/neo-one-node.js new file mode 100644 index 0000000000..5c2363d5f1 --- /dev/null +++ b/packages/neo-one-node-bin/bin/neo-one-node.js @@ -0,0 +1,2 @@ +#!/usr/bin/env node +require('../dist/cjs/neo-one-node.js'); diff --git a/packages/neo-one-node-bin/gulpfile.js b/packages/neo-one-node-bin/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-node-bin/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-node-bin/package.json b/packages/neo-one-node-bin/package.json index 79fa479f5a..d28097d4f5 100644 --- a/packages/neo-one-node-bin/package.json +++ b/packages/neo-one-node-bin/package.json @@ -1,25 +1,43 @@ { "name": "@neo-one/node-bin", - "version": "2.3.1", + "version": "3.0.0", "description": "NEOβ€’ONE NEO executable full node.", - "main": "./src/index", + "bin": { + "neo-one-node": "bin/neo-one-node.js" + }, + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/logger": "^2.3.0", - "@neo-one/node": "^2.3.1", - "@neo-one/node-neo-settings": "^2.3.0", - "@neo-one/utils": "^2.3.0", - "@neo-one/utils-node": "^2.3.0", + "@neo-one/logger": "^2.6.1", + "@neo-one/node": "^3.0.0", + "@neo-one/node-neo-settings": "^3.0.0", + "@neo-one/utils": "^3.0.0", + "@neo-one/utils-node": "^2.6.2", + "@types/yargs": "^13.0.3", "env-paths": "^2.2.0", + "execa": "^3.2.0", + "import-local": "^3.0.2", "rc": "^1.2.8", + "semver": "^6.3.0", + "source-map-support": "^0.5.13", "tslib": "^1.10.0", - "yargs": "^14.0.0" + "yargs": "^14.2.0" }, "devDependencies": { - "@neo-one/client": "^2.3.0", - "@neo-one/client-common": "^2.3.0", + "@neo-one/build-tools": "^1.0.0", + "@neo-one/client": "^3.0.0", + "@neo-one/client-common": "^3.0.0", + "@types/fs-extra": "^8.0.0", + "@types/jest": "^24.0.18", "@types/rc": "^1.1.0", "cross-fetch": "^3.0.4", - "fs-extra": "^8.1.0" - }, - "sideEffects": false + "fs-extra": "^8.1.0", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-node-bin/src/__data__/configs/consensus.ts b/packages/neo-one-node-bin/src/__data__/configs/consensus.ts index 1bd8897e33..1a694f2ef6 100644 --- a/packages/neo-one-node-bin/src/__data__/configs/consensus.ts +++ b/packages/neo-one-node-bin/src/__data__/configs/consensus.ts @@ -7,10 +7,10 @@ export const consensus = (rpcPort: number, path: string) => ({ path, blockchain: serializeSettings( createMain({ - address, + // address, standbyValidators: [standbyValidator], privateNet: true, - secondsPerBlock: 5, + millisecondsPerBlock: 5000, }), ), rpc: { diff --git a/packages/neo-one-node-bin/src/__e2e__/cmd/consensus.test.ts b/packages/neo-one-node-bin/src/__e2e__/cmd/consensus.test.ts index 02230ee5c0..e7a0a49fcb 100644 --- a/packages/neo-one-node-bin/src/__e2e__/cmd/consensus.test.ts +++ b/packages/neo-one-node-bin/src/__e2e__/cmd/consensus.test.ts @@ -1,6 +1,9 @@ +/// + import { NEOONEDataProvider } from '@neo-one/client'; import fetch from 'cross-fetch'; import fs from 'fs-extra'; +// tslint:disable-next-line: match-default-export-name import nodePath from 'path'; import { consensus as testConfig } from '../../__data__/configs'; diff --git a/packages/neo-one-node-bin/src/bin/neo-one-node.ts b/packages/neo-one-node-bin/src/bin/neo-one-node.ts index 2f87dfdd2d..50989a6f14 100644 --- a/packages/neo-one-node-bin/src/bin/neo-one-node.ts +++ b/packages/neo-one-node-bin/src/bin/neo-one-node.ts @@ -1,6 +1,5 @@ -// tslint:disable-next-line no-implicit-dependencies -import { cmd } from '@neo-one/node-bin'; import yargs from 'yargs'; +import * as cmd from '../cmd'; const { command } = cmd; // tslint:disable-next-line no-unused-expression diff --git a/packages/neo-one-node-bin/src/getOptions.ts b/packages/neo-one-node-bin/src/getOptions.ts index 099cc4e682..37a012a00b 100644 --- a/packages/neo-one-node-bin/src/getOptions.ts +++ b/packages/neo-one-node-bin/src/getOptions.ts @@ -1,6 +1,6 @@ // tslint:disable no-any import { FullNodeCreateOptions } from '@neo-one/node'; -import { createMain, createTest, deserializeSettings, serializeSettings } from '@neo-one/node-neo-settings'; +import { createMain, createPriv, createTest, deserializeSettings, serializeSettings } from '@neo-one/node-neo-settings'; import envPaths from 'env-paths'; import rc from 'rc'; @@ -15,7 +15,7 @@ const DEFAULT_OPTIONS = { host: 'localhost', }, }, - blockchain: serializeSettings(createMain()), + blockchain: serializeSettings(createTest()), }; export const getOptions = (): FullNodeCreateOptions['options'] => { @@ -25,7 +25,9 @@ export const getOptions = (): FullNodeCreateOptions['options'] => { if ((typeof blockchain as any) === 'string') { options = { ...options, - blockchain: serializeSettings((blockchain as any) === 'test' ? createTest() : createMain()) as any, + blockchain: serializeSettings( + (blockchain as any) === 'test' ? createTest() : (blockchain as any) === 'priv' ? createPriv() : createMain(), + ) as any, }; } diff --git a/packages/neo-one-node-bin/tsconfig.json b/packages/neo-one-node-bin/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-node-bin/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-node-blockchain/.npmignore b/packages/neo-one-node-blockchain/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-node-blockchain/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-node-blockchain/CHANGELOG.json b/packages/neo-one-node-blockchain/CHANGELOG.json new file mode 100644 index 0000000000..368d7163d6 --- /dev/null +++ b/packages/neo-one-node-blockchain/CHANGELOG.json @@ -0,0 +1,135 @@ +{ + "name": "@neo-one/node-blockchain", + "entries": [ + { + "version": "3.0.0", + "tag": "@neo-one/node-blockchain_v3.0.0", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "major": [ + { + "comment": "3.0.0preview3-alpha release bump" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-neo-settings\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-storage-levelup\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-vm\" from `^2.7.0` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/node-blockchain_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Add appropriate @types dependencies." + }, + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "dependency": [ + { + "comment": "Dependency @neo-one/client-common version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Dependency @neo-one/client-switch version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.6.0` to `^2.6.1`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/node-blockchain_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "remove opencensus metrics temporarily" + }, + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/node-blockchain_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + }, + { + "comment": "Upgrade TS to v3.8.1-rc" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-node-blockchain/CHANGELOG.md b/packages/neo-one-node-blockchain/CHANGELOG.md index 5af1a8794f..98e648e675 100644 --- a/packages/neo-one-node-blockchain/CHANGELOG.md +++ b/packages/neo-one-node-blockchain/CHANGELOG.md @@ -1,155 +1,39 @@ -# Change Log +# Change Log - @neo-one/node-blockchain -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-blockchain@1.3.4...@neo-one/node-blockchain@2.3.0) (2019-10-23) +## 3.0.0 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/node-blockchain +### Breaking changes +- 3.0.0preview3-alpha release bump +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT +### Patches +- Add appropriate @types dependencies. +- Upgrade TypeScript from v3.8.3 to v3.9.5 -## [1.3.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-blockchain@1.3.3...@neo-one/node-blockchain@1.3.4) (2019-10-23) +### Updates -**Note:** Version bump only for package @neo-one/node-blockchain +- bump package version for future release clarity +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes +- remove opencensus metrics temporarily +- update package release process to take better advantage of rush tooling +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -## [1.3.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-blockchain@1.3.2...@neo-one/node-blockchain@1.3.3) (2019-10-23) +### Minor changes -**Note:** Version bump only for package @neo-one/node-blockchain +- Migrate to Rush +- Upgrade TS to v3.8.1-rc - - - - -## [1.3.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-blockchain@1.3.1...@neo-one/node-blockchain@1.3.2) (2019-09-04) - -**Note:** Version bump only for package @neo-one/node-blockchain - - - - - -## [1.3.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-blockchain@1.3.0...@neo-one/node-blockchain@1.3.1) (2019-08-30) - -**Note:** Version bump only for package @neo-one/node-blockchain - - - - - -# [1.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-blockchain@1.2.0...@neo-one/node-blockchain@1.3.0) (2019-08-23) - - -### Features - -* **e2e:** node-bin e2e consensus test ([0671932](https://github.com/neo-one-suite/neo-one/commit/0671932)) - - - - - -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-blockchain@1.1.5...@neo-one/node-blockchain@1.2.0) (2019-08-22) - - -### Features - -* **monitor:** remove @neo-one/monitor. replace with opencensus, pino, and debug ([#1597](https://github.com/neo-one-suite/neo-one/issues/1597)) ([4b1a28f](https://github.com/neo-one-suite/neo-one/commit/4b1a28f)) - - - - - -## [1.1.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-blockchain@1.1.4...@neo-one/node-blockchain@1.1.5) (2019-07-29) - - -### Bug Fixes - -* **@neo-one/node-blockchain:** Fix handling of add/delete/update tracked changes ([277c00a](https://github.com/neo-one-suite/neo-one/commit/277c00a)) -* **node:** Final round of node fixes ([a88a04e](https://github.com/neo-one-suite/neo-one/commit/a88a04e)) - - - - - -## [1.1.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-blockchain@1.1.3...@neo-one/node-blockchain@1.1.4) (2019-06-20) - - -### Bug Fixes - -* **deps:** update dependency typescript to v3.5.1 ([#1365](https://github.com/neo-one-suite/neo-one/issues/1365)) ([ec89546](https://github.com/neo-one-suite/neo-one/commit/ec89546)) -* **node:** First wave of node fixes ([d50fd34](https://github.com/neo-one-suite/neo-one/commit/d50fd34)) - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-blockchain@1.1.2...@neo-one/node-blockchain@1.1.3) (2019-06-04) - - -### Bug Fixes - -* **@neo-one/types:** eliminate global types from @neo-one/types ([004330d](https://github.com/neo-one-suite/neo-one/commit/004330d)) - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-blockchain@1.1.1...@neo-one/node-blockchain@1.1.2) (2019-04-12) - -**Note:** Version bump only for package @neo-one/node-blockchain - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-blockchain@1.1.0...@neo-one/node-blockchain@1.1.1) (2019-03-27) - -**Note:** Version bump only for package @neo-one/node-blockchain - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-blockchain@1.0.2...@neo-one/node-blockchain@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node-blockchain - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-blockchain@1.0.2-alpha.0...@neo-one/node-blockchain@1.0.2) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node-blockchain - - - - - -## [1.0.2-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-blockchain@1.0.1...@neo-one/node-blockchain@1.0.2-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **build:** adjust several packages to allow emitting .d.ts files. ([27a2d88](https://github.com/neo-one-suite/neo-one/commit/27a2d88)) -* **deps:** update dependency @types/lodash to v4.14.120 ([a76dae7](https://github.com/neo-one-suite/neo-one/commit/a76dae7)) -* **deps:** update dependency rxjs to v6.4.0 ([e28af2a](https://github.com/neo-one-suite/neo-one/commit/e28af2a)) - - -### Features - -* **node:** record storage changes for each transaction ([22ef835](https://github.com/neo-one-suite/neo-one/commit/22ef835)) - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-blockchain@1.0.0...@neo-one/node-blockchain@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/node-blockchain diff --git a/packages/neo-one-node-blockchain/gulpfile.js b/packages/neo-one-node-blockchain/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-node-blockchain/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-node-blockchain/package.json b/packages/neo-one-node-blockchain/package.json index 021946388f..1f54a93d5e 100644 --- a/packages/neo-one-node-blockchain/package.json +++ b/packages/neo-one-node-blockchain/package.json @@ -1,24 +1,41 @@ { "name": "@neo-one/node-blockchain", - "version": "2.3.0", - "description": "NEOβ€’ONE NEO blockchain implementation.", - "main": "./src/index", + "version": "3.0.0", + "description": "NEOβ€’ONE Blockchain implementation", + "main": "./dist/cjs/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.3.0", - "@neo-one/client-switch": "^2.3.0", - "@neo-one/logger": "^2.3.0", - "@neo-one/node-core": "^2.3.0", - "@neo-one/utils": "^2.3.0", + "@neo-one/client-common": "^3.0.0", + "@neo-one/node-core": "^3.0.0", + "@neo-one/logger": "^2.6.1", + "@neo-one/utils": "^3.0.0", "bn.js": "^5.0.0", "js-priority-queue": "^0.1.5", "lodash": "^4.17.15", - "rxjs": "^6.5.2", - "tslib": "^1.10.0" + "lru-cache": "^5.0.0", + "rxjs": "^6.5.3" }, "devDependencies": { - "@types/bn.js": "^4.11.5", + "@neo-one/build-tools": "^1.0.0", + "@neo-one/node-neo-settings": "^3.0.0", + "@neo-one/node-storage-levelup": "^3.0.0", + "@neo-one/node-vm": "^3.0.0", + "@types/jest": "^24.0.18", "@types/js-priority-queue": "^0.0.5", - "@types/lodash": "^4.14.138" - }, - "sideEffects": false + "@types/levelup": "^3.1.1", + "@types/leveldown": "^4.0.0", + "@types/lodash": "^4.14.138", + "@types/lru-cache": "^5.1.0", + "leveldown": "^5.1.1", + "levelup": "4.1.0", + "gulp": "~4.0.2", + "tslib": "^1.10.0" + } } diff --git a/packages/neo-one-node-blockchain/src/Blockchain.ts b/packages/neo-one-node-blockchain/src/Blockchain.ts index 64b52a1d79..8c5e447830 100644 --- a/packages/neo-one-node-blockchain/src/Blockchain.ts +++ b/packages/neo-one-node-blockchain/src/Blockchain.ts @@ -1,264 +1,214 @@ -import { common, crypto, ECPoint, ScriptBuilder, UInt160, VMState } from '@neo-one/client-common'; -import { AggregationType, globalStats, MeasureUnit } from '@neo-one/client-switch'; +import { + common, + ECPoint, + ScriptBuilder, + TriggerType, + UInt160, + UInt256, + VerifyResultModel, +} from '@neo-one/client-common'; import { createChild, nodeLogger } from '@neo-one/logger'; import { - Action, + ApplicationExecuted, + ApplicationLog, Block, Blockchain as BlockchainType, + BlockchainSettings, CallReceipt, + Change, + ChangeSet, + ConsensusData, ConsensusPayload, + DeserializeWireContext, + HashIndexState, Header, - Input, - InvocationTransaction, - LogAction, - NotificationAction, - NULL_ACTION, - Output, - OutputKey, - ScriptContainerType, - SerializableInvocationData, - Settings, + Mempool, + NativeContainer, + Nep5Balance, + Notification, + RunEngineOptions, + Signers, Storage, Transaction, - TransactionData, - TriggerType, - utils, - Validator, - VerifyScriptOptions, - VerifyScriptResult, - VerifyTransactionResult, + TransactionVerificationContext, + VerifyConsensusPayloadOptions, + VerifyOptions, VM, + Witness, } from '@neo-one/node-core'; -import { Labels, utils as commonUtils } from '@neo-one/utils'; +import { Labels } from '@neo-one/utils'; import { BN } from 'bn.js'; import PriorityQueue from 'js-priority-queue'; -import { BehaviorSubject, Observable, Subject } from 'rxjs'; -import { toArray } from 'rxjs/operators'; +import { Observable, Subject } from 'rxjs'; +import { map, toArray } from 'rxjs/operators'; import { - CoinClaimedError, - CoinUnspentError, + BlockVerifyError, + ConsensusPayloadVerifyError, GenesisBlockNotRegisteredError, - InvalidClaimError, - UnknownVerifyError, - WitnessVerifyError, + RecoverBlockchainError, } from './errors'; -import { getValidators } from './getValidators'; -import { wrapExecuteScripts } from './wrapExecuteScripts'; -import { WriteBatchBlockchain } from './WriteBatchBlockchain'; +import { getNep5UpdateOptions } from './getNep5UpdateOptions'; +import { HeaderIndexCache } from './HeaderIndexCache'; +import { PersistingBlockchain } from './PersistingBlockchain'; +import { utils } from './utils'; +import { verifyWitnesses } from './verify'; -const logger = createChild(nodeLogger, { component: 'blockchain' }); +const logger = createChild(nodeLogger, { service: 'blockchain' }); export interface CreateBlockchainOptions { - readonly settings: Settings; + readonly onPersistNativeContractScript?: Buffer; + readonly postPersistNativeContractScript?: Buffer; + readonly settings: BlockchainSettings; readonly storage: Storage; + readonly native: NativeContainer; readonly vm: VM; -} -export interface BlockchainOptions extends CreateBlockchainOptions { - readonly currentBlock: BlockchainType['currentBlock'] | undefined; - readonly previousBlock: BlockchainType['previousBlock'] | undefined; - readonly currentHeader: BlockchainType['currentHeader'] | undefined; + readonly onPersist?: () => void | Promise; } -interface SpentCoin { - readonly output: Output; - readonly startHeight: number; - readonly endHeight: number; - readonly claimed: boolean; +export interface BlockchainOptions extends CreateBlockchainOptions { + // tslint:disable-next-line: readonly-array + readonly headerIndexCache: HeaderIndexCache; + readonly currentBlock?: Block; } interface Entry { readonly block: Block; readonly resolve: () => void; readonly reject: (error: Error) => void; - readonly unsafe: boolean; + readonly verify: boolean; } -const blockFailures = globalStats.createMeasureInt64('persist/failures', MeasureUnit.UNIT); -const blockCurrent = globalStats.createMeasureInt64('persist/current', MeasureUnit.UNIT); -const blockProgress = globalStats.createMeasureInt64('persist/progress', MeasureUnit.UNIT); - -const blockDurationMs = globalStats.createMeasureDouble( - 'persist/duration', - MeasureUnit.MS, - 'time to persist block in milliseconds', -); -const blockLatencySec = globalStats.createMeasureDouble( - 'persist/latency', - MeasureUnit.SEC, - "'The latency from block timestamp to persist'", -); - -const NEO_BLOCKCHAIN_PERSIST_BLOCK_DURATION_MS = globalStats.createView( - 'neo_blockchain_persist_block_duration_ms', - blockDurationMs, - AggregationType.DISTRIBUTION, - [], - 'distribution of the persist duration', - [5, 10, 25, 50, 100, 250, 500, 1000, 2500, 5000, 10000], -); -globalStats.registerView(NEO_BLOCKCHAIN_PERSIST_BLOCK_DURATION_MS); - -const NEO_BLOCKCHAIN_PERSIST_BLOCK_FAILURES_TOTAL = globalStats.createView( - 'neo_blockchain_persist_block_failures_total', - blockFailures, - AggregationType.COUNT, - [], - 'total blockchain failures', -); -globalStats.registerView(NEO_BLOCKCHAIN_PERSIST_BLOCK_FAILURES_TOTAL); - -const NEO_BLOCKCHAIN_BLOCK_INDEX_GAUGE = globalStats.createView( - 'neo_blockchain_block_index', - blockCurrent, - AggregationType.LAST_VALUE, - [], - 'the current block index', -); -globalStats.registerView(NEO_BLOCKCHAIN_BLOCK_INDEX_GAUGE); - -const NEO_BLOCKCHAIN_PERSISTING_BLOCK_INDEX_GAUGE = globalStats.createView( - 'neo_blockchain_persisting_block_index', - blockProgress, - AggregationType.LAST_VALUE, - [], - 'The current in progress persist index', -); -globalStats.registerView(NEO_BLOCKCHAIN_PERSISTING_BLOCK_INDEX_GAUGE); - -const NEO_BLOCKCHAIN_PERSIST_BLOCK_LATENCY_SECONDS = globalStats.createView( - 'neo_blockchain_persist_block_latency_seconds', - blockLatencySec, - AggregationType.DISTRIBUTION, - [], - 'The latency from block timestamp to persist', - [1, 2, 5, 7.5, 10, 12.5, 15, 17.5, 20], -); -globalStats.registerView(NEO_BLOCKCHAIN_PERSIST_BLOCK_LATENCY_SECONDS); +export const recoverHeaderIndex = async (storage: Storage) => { + const maybeHeaderHashIndex = await storage.headerHashIndex.tryGet(); + const initHeaderListIndex = + maybeHeaderHashIndex === undefined ? 0 : Math.floor(maybeHeaderHashIndex.index / utils.hashListBatchSize); + const storedHeaderCount = initHeaderListIndex * utils.hashListBatchSize; + if (storedHeaderCount !== 0) { + const { hashes: latestStoredHashes } = await storage.headerHashList.get( + storedHeaderCount - utils.hashListBatchSize, + ); + const hashIndex = await storage.headerHashIndex.get(); + let currentHashes: readonly UInt256[] = []; + if (hashIndex.index >= storedHeaderCount) { + let hash = hashIndex.hash; + const finalHash = latestStoredHashes[latestStoredHashes.length - 1]; + // tslint:disable-next-line: no-loop-statement + while (!hash.equals(finalHash)) { + currentHashes = [hash].concat(currentHashes); + const { previousHash } = await storage.blocks.get({ hashOrIndex: hash }); + hash = previousHash; + } + } + return new HeaderIndexCache({ + storage, + initStorageCount: storedHeaderCount, + initCurrentHeaderHashes: currentHashes, + }); + } + + const sortedTrimmedBlocks = await storage.blocks.all$ + .pipe( + toArray(), + map((blocks) => blocks.slice().sort(utils.blockComparator)), + ) + .toPromise(); + + return new HeaderIndexCache({ + storage, + initStorageCount: 0, + initCurrentHeaderHashes: sortedTrimmedBlocks.map((block) => block.hash), + }); +}; export class Blockchain { - public static async create({ settings, storage, vm }: CreateBlockchainOptions): Promise { - const [currentBlock, currentHeader] = await Promise.all([ - storage.block.tryGetLatest(), - storage.header.tryGetLatest(), - ]); - let previousBlock; - if (currentBlock !== undefined) { - previousBlock = await storage.block.tryGet({ hashOrIndex: currentBlock.index - 1 }); + public static async create({ + settings, + storage, + native, + vm, + onPersist, + }: CreateBlockchainOptions): Promise { + const headerIndexCache = await recoverHeaderIndex(storage); + if (headerIndexCache.length > 0) { + const currentHeaderHash = await headerIndexCache.get(headerIndexCache.length - 1); + const currentBlockTrimmed = await storage.blocks.tryGet({ hashOrIndex: currentHeaderHash }); + if (currentBlockTrimmed === undefined) { + throw new RecoverBlockchainError(headerIndexCache.length); + } + + const currentBlock = await currentBlockTrimmed.getBlock(storage.transactions); + + return new Blockchain({ + headerIndexCache, + settings, + storage, + native, + vm, + currentBlock, + onPersist, + }); } const blockchain = new Blockchain({ - currentBlock, - currentHeader, - previousBlock, + headerIndexCache, settings, storage, + native, vm, + onPersist, }); - if (currentHeader === undefined) { - await blockchain.persistHeaders([settings.genesisBlock.header]); - } - - if (currentBlock === undefined) { - await blockchain.persistBlock({ block: settings.genesisBlock }); - } + await blockchain.persistBlock({ block: settings.genesisBlock }); return blockchain; } - public readonly deserializeWireContext: BlockchainType['deserializeWireContext']; - public readonly serializeJSONContext: BlockchainType['serializeJSONContext']; - public readonly feeContext: BlockchainType['feeContext']; + public readonly deserializeWireContext: DeserializeWireContext; - private readonly settings$: BehaviorSubject; + public readonly verifyWitnesses = verifyWitnesses; + public readonly settings: BlockchainSettings; + public readonly onPersistNativeContractScript: Buffer; + public readonly postPersistNativeContractScript: Buffer; + + // tslint:disable-next-line: readonly-array + private readonly headerIndexCache: HeaderIndexCache; private readonly storage: Storage; - private mutableCurrentBlock: BlockchainType['currentBlock'] | undefined; - private mutablePreviousBlock: BlockchainType['currentBlock'] | undefined; - private mutableCurrentHeader: BlockchainType['currentHeader'] | undefined; - private mutablePersistingBlocks = false; + private readonly native: NativeContainer; + private readonly vm: VM; + private readonly onPersist: () => void | Promise; + private mutableBlockQueue: PriorityQueue = new PriorityQueue({ comparator: (a, b) => a.block.index - b.block.index, }); + private mutableCurrentBlock: Block | undefined; + private mutablePreviousBlock: Block | undefined; + private mutableCurrentHeader: Header | undefined; + private mutablePersistingBlocks = false; private mutableInQueue: Set = new Set(); - private readonly vm: VM; private mutableRunning = false; private mutableDoneRunningResolve: (() => void) | undefined; private mutableBlock$: Subject = new Subject(); public constructor(options: BlockchainOptions) { + this.headerIndexCache = options.headerIndexCache; + this.settings = options.settings; this.storage = options.storage; - this.mutableCurrentBlock = options.currentBlock; - this.mutablePreviousBlock = options.previousBlock; - this.mutableCurrentHeader = options.currentHeader; + this.native = options.native; this.vm = options.vm; - - this.settings$ = new BehaviorSubject(options.settings); - - globalStats.record([ - { - measure: blockProgress, - value: this.currentBlockIndex, - }, - { - measure: blockCurrent, - value: this.currentBlockIndex, - }, - ]); - - // tslint:disable-next-line no-this-assignment - const self = this; + this.onPersistNativeContractScript = + options.onPersistNativeContractScript ?? utils.getOnPersistNativeContractScript(); + this.postPersistNativeContractScript = + options.postPersistNativeContractScript ?? utils.getPostPersistNativeContractScript(); this.deserializeWireContext = { - get messageMagic() { - return self.settings.messageMagic; - }, - }; - - this.feeContext = { - get getOutput() { - return self.output.get; - }, - get governingToken() { - return self.settings.governingToken; - }, - get utilityToken() { - return self.settings.utilityToken; - }, - get fees() { - return self.settings.fees; - }, - get registerValidatorFee() { - return self.settings.registerValidatorFee; - }, + messageMagic: this.settings.messageMagic, + validatorsCount: this.settings.validatorsCount, }; - - this.serializeJSONContext = { - get addressVersion() { - return self.settings.addressVersion; - }, - get feeContext() { - return self.feeContext; - }, - get tryGetInvocationData() { - return self.tryGetInvocationData; - }, - get tryGetTransactionData() { - return self.tryGetTransactionData; - }, - get getUnclaimed() { - return self.getUnclaimed; - }, - get getUnspent() { - return self.getUnspent; - }, - }; - + this.mutableCurrentBlock = options.currentBlock; + this.onPersist = + options.onPersist === undefined ? () => Promise.resolve(this.vm.updateSnapshots()) : options.onPersist; this.start(); } - public get settings(): Settings { - return this.settings$.getValue(); - } - public get currentBlock(): Block { if (this.mutableCurrentBlock === undefined) { throw new GenesisBlockNotRegisteredError(); @@ -271,18 +221,14 @@ export class Blockchain { return this.mutablePreviousBlock; } - public get currentHeader(): Header { - if (this.mutableCurrentHeader === undefined) { - throw new GenesisBlockNotRegisteredError(); - } - - return this.mutableCurrentHeader; - } - public get currentBlockIndex(): number { return this.mutableCurrentBlock === undefined ? -1 : this.currentBlock.index; } + public get currentHeaderIndex(): number { + return this.headerIndexCache.length; + } + public get block$(): Observable { return this.mutableBlock$; } @@ -291,68 +237,82 @@ export class Blockchain { return this.mutablePersistingBlocks; } - public get account(): BlockchainType['account'] { - return this.storage.account; + public get verifyOptions(): VerifyOptions { + return { + vm: this.vm, + storage: this.storage, + native: this.native, + verifyWitnesses: this.verifyWitnesses, + }; } - public get accountUnclaimed(): BlockchainType['accountUnclaimed'] { - return this.storage.accountUnclaimed; + public get verifyConsensusPayloadOptions(): VerifyConsensusPayloadOptions { + return { + vm: this.vm, + storage: this.storage, + native: this.native, + verifyWitnesses: this.verifyWitnesses, + height: this.currentBlockIndex, + }; } - public get accountUnspent(): BlockchainType['accountUnspent'] { - return this.storage.accountUnspent; + public get blocks() { + return this.storage.blocks; } - public get action(): BlockchainType['action'] { - return this.storage.action; + public get nep5Balances() { + return this.storage.nep5Balances; } - public get asset(): BlockchainType['asset'] { - return this.storage.asset; + public get nep5TransfersReceived() { + return this.storage.nep5TransfersReceived; } - public get block(): BlockchainType['block'] { - return this.storage.block; + public get nep5TransfersSent() { + return this.storage.nep5TransfersSent; } - public get blockData(): BlockchainType['blockData'] { - return this.storage.blockData; + public get applicationLogs() { + return this.storage.applicationLogs; } - public get header(): BlockchainType['header'] { - return this.storage.header; + public get transactions() { + return this.storage.transactions; } - public get transaction(): BlockchainType['transaction'] { - return this.storage.transaction; + public get contracts() { + return this.storage.contracts; } - public get transactionData(): BlockchainType['transactionData'] { - return this.storage.transactionData; + public get storages() { + return this.storage.storages; } - public get output(): BlockchainType['output'] { - return this.storage.output; + public get headerHashList() { + return this.storage.headerHashList; } - public get contract(): BlockchainType['contract'] { - return this.storage.contract; + public get blockHashIndex() { + return this.storage.blockHashIndex; } - public get storageItem(): BlockchainType['storageItem'] { - return this.storage.storageItem; + public get headerHashIndex() { + return this.storage.headerHashIndex; } - public get validator(): BlockchainType['validator'] { - return this.storage.validator; + public get contractID() { + return this.storage.contractID; } - public get invocationData(): BlockchainType['invocationData'] { - return this.storage.invocationData; - } + // public get consensusState() { + // return this.storage.consensusState; + // } - public get validatorsCount(): BlockchainType['validatorsCount'] { - return this.storage.validatorsCount; + public get serializeJSONContext() { + return { + addressVersion: this.settings.addressVersion, + messageMagic: this.settings.messageMagic, + }; } public async stop(): Promise { @@ -376,16 +336,146 @@ export class Blockchain { logger.info({ name: 'neo_blockchain_stop' }, 'NEO blockchain stopped.'); } - public updateSettings(settings: Settings): void { - this.settings$.next(settings); + public async reset(): Promise { + await this.stop(); + await this.storage.reset(); + this.mutableCurrentHeader = undefined; + this.mutableCurrentBlock = undefined; + this.mutablePreviousBlock = undefined; + this.start(); + await this.persistBlock({ block: this.settings.genesisBlock }); + } + + public async verifyBlock(block: Block): Promise { + const verification = await block.verify(this.verifyOptions); + if (!verification) { + throw new BlockVerifyError(block.hashHex); + } + } + + public async verifyTransaction( + transaction: Transaction, + mempool: Mempool, + context?: TransactionVerificationContext, + ): Promise { + const containsTransaction = await this.containsTransaction(transaction.hash, mempool); + if (containsTransaction) { + return VerifyResultModel.AlreadyExists; + } + + // TODO: to save some compute time we could keep a local cache of the current blocks return values + // from native contract calls and pass those in, instead of passing the whole native container. + const verifyOptions = { + native: this.native, + vm: this.vm, + storage: this.storage, + verifyWitnesses: this.verifyWitnesses, + }; + + return transaction.verify(verifyOptions, context); + } + + public async verifyConsensusPayload(payload: ConsensusPayload) { + const verification = await payload.verify(this.verifyConsensusPayloadOptions); + if (!verification) { + throw new ConsensusPayloadVerifyError(payload.hashHex); + } + } + + public async getBlock(hashOrIndex: UInt256 | number): Promise { + const hashPromise = typeof hashOrIndex === 'number' ? this.getBlockHash(hashOrIndex) : Promise.resolve(hashOrIndex); + const hash = await hashPromise; + if (hash === undefined) { + return undefined; + } + + if (this.currentBlock.hash.equals(hash)) { + return this.currentBlock; + } + + if (this.previousBlock?.hash.equals(hash)) { + return this.previousBlock; + } + + const trimmedBlock = await this.blocks.tryGet({ hashOrIndex: hash }); + if (trimmedBlock === undefined) { + return undefined; + } + + if (!trimmedBlock.isBlock) { + return undefined; + } + + return trimmedBlock.getBlock(this.transactions); + } + + public async getBlockHash(index: number): Promise { + if (this.headerIndexCache.length <= index) { + return undefined; + } + + return this.headerIndexCache.get(index); + } + + public async getHeader(hashOrIndex: UInt256 | number): Promise
{ + const hashPromise = typeof hashOrIndex === 'number' ? this.getBlockHash(hashOrIndex) : Promise.resolve(hashOrIndex); + const hash = await hashPromise; + if (hash === undefined) { + return undefined; + } + + if (this.currentBlock.hash.equals(hash)) { + return this.currentBlock.header; + } + + if (this.previousBlock?.hash.equals(hash)) { + return this.previousBlock.header; + } + + const block = await this.blocks.tryGet({ hashOrIndex: hash }); + + return block?.header; + } + + public async getNextBlockHash(hash: UInt256): Promise { + const header = await this.getHeader(hash); + if (header === undefined) { + return undefined; + } + + return this.getBlockHash(header.index + 1); + } + + public async getValidators(): Promise { + return this.native.NEO.getValidators(this.storage); + } + + public async getNextBlockValidators(): Promise { + return this.native.NEO.getNextBlockValidators(this.storage); + } + + public async getMaxBlockSize(): Promise { + return this.native.Policy.getMaxBlockSize(this.storage); + } + + public async getMaxBlockSystemFee(): Promise { + return this.native.Policy.getMaxBlockSystemFee(this.storage); + } + + public async getMaxTransactionsPerBlock(): Promise { + return this.native.Policy.getMaxTransactionsPerBlock(this.storage); + } + + public async getFeePerByte(): Promise { + return this.native.Policy.getFeePerByte(this.storage); } public async persistBlock({ block, - unsafe = false, + verify = false, }: { readonly block: Block; - readonly unsafe?: boolean; + readonly verify?: boolean; }): Promise { // tslint:disable-next-line promise-must-complete return new Promise((resolve, reject) => { @@ -395,12 +485,11 @@ export class Blockchain { return; } this.mutableInQueue.add(block.hashHex); - this.mutableBlockQueue.queue({ block, resolve, reject, - unsafe, + verify, }); // tslint:disable-next-line no-floating-promises @@ -408,198 +497,75 @@ export class Blockchain { }); } - public async persistHeaders(_headers: readonly Header[]): Promise { - // We don't ever just persist the headers. - } + public async getVerificationCost(contractHash: UInt160, transaction: Transaction) { + const contract = await this.contracts.tryGet(contractHash); + if (contract === undefined) { + return { fee: utils.ZERO, size: 0 }; + } - public async verifyBlock(block: Block): Promise { - await block.verify({ - genesisBlock: this.settings.genesisBlock, - tryGetBlock: this.block.tryGet, - tryGetHeader: this.header.tryGet, - isSpent: this.isSpent, - getAsset: this.asset.get, - getOutput: this.output.get, - tryGetAccount: this.account.tryGet, - getValidators: this.getValidators, - standbyValidators: this.settings.standbyValidators, - getAllValidators: this.getAllValidators, - calculateClaimAmount: async (claims) => this.calculateClaimAmount(claims), - verifyScript: async (options) => this.verifyScript(options), - currentHeight: this.mutableCurrentBlock === undefined ? 0 : this.mutableCurrentBlock.index, - governingToken: this.settings.governingToken, - utilityToken: this.settings.utilityToken, - fees: this.settings.fees, - registerValidatorFee: this.settings.registerValidatorFee, - }); + return utils.verifyContract(contract, this.vm, transaction); } - public async verifyConsensusPayload(payload: ConsensusPayload): Promise { - await payload.verify({ - getValidators: async () => this.getValidators([]), - verifyScript: async (options) => this.verifyScript(options), - currentIndex: this.mutableCurrentBlock === undefined ? 0 : this.mutableCurrentBlock.index, - currentBlockHash: this.currentBlock.hash, + public testTransaction(transaction: Transaction): CallReceipt { + return this.runEngineWrapper({ + script: transaction.script, + snapshot: 'clone', + container: transaction, + gas: common.ONE_HUNDRED_FIXED8, }); } - public async verifyTransaction({ - transaction, - memPool, - }: { - readonly transaction: Transaction; - readonly memPool?: readonly Transaction[]; - }): Promise { - try { - const verifications = await transaction.verify({ - calculateClaimAmount: this.calculateClaimAmount, - isSpent: this.isSpent, - getAsset: this.asset.get, - getOutput: this.output.get, - tryGetAccount: this.account.tryGet, - standbyValidators: this.settings.standbyValidators, - getAllValidators: this.getAllValidators, - verifyScript: async (options) => this.verifyScript(options), - governingToken: this.settings.governingToken, - utilityToken: this.settings.utilityToken, - fees: this.settings.fees, - registerValidatorFee: this.settings.registerValidatorFee, - currentHeight: this.currentBlockIndex, - memPool, - }); - - return { verifications }; - } catch (error) { - if (error.code === undefined || typeof error.code !== 'string' || !error.code.includes('VERIFY')) { - throw new UnknownVerifyError(error.message); - } - - throw error; - } - } - - public async invokeScript(script: Buffer): Promise { - const transaction = new InvocationTransaction({ + public invokeScript(script: Buffer, signers?: Signers): CallReceipt { + return this.runEngineWrapper({ script, - gas: common.ONE_HUNDRED_FIXED8, + snapshot: 'main', + container: signers, }); - - return this.invokeTransaction(transaction); } - public async invokeTransaction(transaction: InvocationTransaction): Promise { - const blockchain = this.createWriteBlockchain(); + private runEngineWrapper({ + script, + snapshot, + container, + persistingBlock, + offset = 0, + gas = common.TEN_FIXED8, + }: RunEngineOptions): CallReceipt { + return this.vm.withSnapshots(({ main, clone }) => { + const handler = snapshot === 'main' ? main : clone; + if (persistingBlock !== undefined) { + handler.setPersistingBlock(persistingBlock); + } else if (!handler.hasPersistingBlock()) { + handler.setPersistingBlock(this.createDummyBlock()); + } - const mutableActions: Action[] = []; - let globalActionIndex = new BN(0); - const result = await wrapExecuteScripts(async () => - this.vm.executeScripts({ - scripts: [{ code: transaction.script }], - blockchain, - scriptContainer: { - type: ScriptContainerType.Transaction, - value: transaction, - }, - listeners: { - onLog: ({ message, scriptHash }) => { - mutableActions.push( - new LogAction({ - index: globalActionIndex, - scriptHash, - message, - }), - ); - - globalActionIndex = globalActionIndex.add(utils.ONE); - }, - onNotify: ({ args, scriptHash }) => { - mutableActions.push( - new NotificationAction({ - index: globalActionIndex, - scriptHash, - args, - }), - ); - - globalActionIndex = globalActionIndex.add(utils.ONE); - }, + return this.vm.withApplicationEngine( + { + trigger: TriggerType.Application, + container, + snapshot, + gas, }, + (engine) => { + engine.loadScript({ script: script, initialPosition: offset }); + engine.execute(); - triggerType: TriggerType.Application, - action: NULL_ACTION, - gas: transaction.gas, - skipWitnessVerify: true, - }), - ); - - return { - result, - actions: mutableActions, - }; - } - - public async reset(): Promise { - await this.stop(); - await this.storage.reset(); - this.mutableCurrentHeader = undefined; - this.mutableCurrentBlock = undefined; - this.mutablePreviousBlock = undefined; - this.start(); - await this.persistHeaders([this.settings.genesisBlock.header]); - await this.persistBlock({ block: this.settings.genesisBlock }); + return utils.getCallReceipt(engine, container); + }, + ); + }); } - public readonly getValidators = async (transactions: readonly Transaction[]): Promise => { - logger.debug({ name: 'neo_blockchain_get_validators' }); - - return getValidators(this, transactions); - }; - - public readonly calculateClaimAmount = async (claims: readonly Input[]): Promise => { - logger.debug({ name: 'neo_blockchain_calculate_claim_amount' }); - const spentCoins = await Promise.all(claims.map(async (claim) => this.tryGetSpentCoin(claim))); - - const filteredSpentCoinsIn = spentCoins.filter(commonUtils.notNull); - if (spentCoins.length !== filteredSpentCoinsIn.length) { - throw new CoinUnspentError(spentCoins.length - filteredSpentCoinsIn.length); - } - - const filteredSpentCoins = filteredSpentCoinsIn.filter((spentCoin) => { - if (spentCoin.claimed) { - throw new CoinClaimedError(common.uInt256ToString(spentCoin.output.asset), spentCoin.output.value.toString(10)); - } - if (!common.uInt256Equal(spentCoin.output.asset, this.settings.governingToken.hash)) { - throw new InvalidClaimError( - common.uInt256ToString(spentCoin.output.asset), - common.uInt256ToString(this.settings.governingToken.hash), - ); - } - + private async containsTransaction(hash: UInt256, mempool: Mempool) { + const hashHex = common.uInt256ToHex(hash); + if (mempool[hashHex] !== undefined) { return true; - }); - - return utils.calculateClaimAmount({ - coins: filteredSpentCoins.map((coin) => ({ - value: coin.output.value, - startHeight: coin.startHeight, - endHeight: coin.endHeight, - })), - - decrementInterval: this.settings.decrementInterval, - generationAmount: this.settings.generationAmount, - getSystemFee: async (index) => { - const header = await this.header.get({ - hashOrIndex: index, - }); + } - const blockData = await this.blockData.get({ - hash: header.hash, - }); + const state = await this.transactions.tryGet(hash); - return blockData.systemFee; - }, - }); - }; + return state !== undefined; + } private async persistBlocksAsync(): Promise { if (this.mutablePersistingBlocks || !this.mutableRunning) { @@ -613,47 +579,21 @@ export class Blockchain { // tslint:disable-next-line no-loop-statement while (this.mutableRunning && entry !== undefined && entry.block.index === this.currentBlockIndex + 1) { - const startTime = Date.now(); - const entryNonNull = entry; const logData = { [Labels.NEO_BLOCK_INDEX]: entry.block.index, name: 'neo_blockchain_persist_block_top_level', }; try { - await this.persistBlockInternal(entryNonNull.block, entryNonNull.unsafe); - logger.debug(logData); - globalStats.record([ - { - measure: blockDurationMs, - value: Date.now() - startTime, - }, - ]); + await this.persistBlockInternal(entryNonNull.block, entryNonNull.verify); } catch (err) { logger.error({ err, ...logData }); - globalStats.record([ - { - measure: blockFailures, - value: 1, - }, - ]); throw err; } entry.resolve(); this.mutableBlock$.next(entry.block); - globalStats.record([ - { - measure: blockCurrent, - value: entry.block.index, - }, - { - measure: blockLatencySec, - value: commonUtils.nowSeconds() - entry.block.timestamp, - }, - ]); - entry = this.cleanBlockQueue(); } @@ -674,17 +614,17 @@ export class Blockchain { } private cleanBlockQueue(): Entry | undefined { - let entry = this.dequeBlockQueue(); + let entry = this.dequeueBlockQueue(); // tslint:disable-next-line no-loop-statement while (entry !== undefined && entry.block.index <= this.currentBlockIndex) { entry.resolve(); - entry = this.dequeBlockQueue(); + entry = this.dequeueBlockQueue(); } return entry; } - private dequeBlockQueue(): Entry | undefined { + private dequeueBlockQueue(): Entry | undefined { if (this.mutableBlockQueue.length > 0) { return this.mutableBlockQueue.dequeue(); } @@ -692,282 +632,194 @@ export class Blockchain { return undefined; } - private readonly verifyScript = async ({ - scriptContainer, - hash, - witness, - }: VerifyScriptOptions): Promise => { - let { verification } = witness; - if (verification.length === 0) { - const builder = new ScriptBuilder(); - builder.emitAppCallVerification(hash); - verification = builder.build(); - } else if (!common.uInt160Equal(hash, crypto.toScriptHash(verification))) { - throw new WitnessVerifyError(); - } + private start(): void { + this.mutableBlock$ = new Subject(); + this.mutablePersistingBlocks = false; + this.mutableBlockQueue = new PriorityQueue({ + comparator: (a, b) => a.block.index - b.block.index, + }); - const blockchain = this.createWriteBlockchain(); - const mutableActions: Action[] = []; - let globalActionIndex = new BN(0); - const executeResult = await this.vm.executeScripts({ - scripts: [{ code: witness.invocation }, { code: verification }], - blockchain, - scriptContainer, - triggerType: TriggerType.Verification, - action: NULL_ACTION, - gas: utils.ONE_HUNDRED_MILLION, - listeners: { - onLog: ({ message, scriptHash }) => { - mutableActions.push( - new LogAction({ - index: globalActionIndex, - scriptHash, - message, - }), - ); + this.mutableInQueue = new Set(); + this.mutableDoneRunningResolve = undefined; + this.mutableRunning = true; + logger.info({ name: 'neo_blockchain_start' }, 'Neo blockchain started.'); + } - globalActionIndex = globalActionIndex.add(utils.ONE); - }, - onNotify: ({ args, scriptHash }) => { - mutableActions.push( - new NotificationAction({ - index: globalActionIndex, - scriptHash, - args, - }), - ); + private updateBlockMetadata(block: Block): ChangeSet { + const newHashIndexState = new HashIndexState({ hash: block.hash, index: block.index }); + const updateBlockHashIndex: Change = { + type: 'add', + change: { type: 'blockHashIndex', value: newHashIndexState }, + subType: 'update', + }; - globalActionIndex = globalActionIndex.add(utils.ONE); - }, - }, - }); - const result = { actions: mutableActions, hash, witness }; + const updateHeaderHashIndex: Change = { + type: 'add', + change: { type: 'headerHashIndex', value: newHashIndexState }, + subType: 'update', + }; - const { stack, state, errorMessage } = executeResult; - if (state === VMState.Fault) { - return { - ...result, - failureMessage: errorMessage === undefined ? 'Script execution ended in a FAULT state' : errorMessage, - }; - } + this.mutablePreviousBlock = this.mutableCurrentBlock; + this.mutableCurrentBlock = block; + this.mutableCurrentHeader = block.header; - if (stack.length !== 1) { - return { - ...result, - failureMessage: - `Verification did not return one result. This may be a bug in the ` + - `smart contract compiler or the smart contract itself. If you are using the NEOβ€’ONE compiler please file an issue. Found ${stack.length} results.`, - }; - } + return [updateBlockHashIndex, updateHeaderHashIndex]; + } - const top = stack[0]; - if (!top.asBoolean()) { - return { ...result, failureMessage: 'Verification did not succeed.' }; - } + private updateNep5Balances({ + applicationsExecuted, + block, + }: { + readonly applicationsExecuted: readonly ApplicationExecuted[]; + readonly block: Block; + }) { + const { assetKeys, transfersSent, transfersReceived } = getNep5UpdateOptions({ + applicationsExecuted, + block, + }); - return result; - }; + const nep5BalancePairs = assetKeys.map((key) => { + const script = new ScriptBuilder().emitAppCall(key.assetScriptHash, 'balanceOf', key.userScriptHash).build(); + const callReceipt = this.invokeScript(script); + const balanceBuffer = callReceipt.stack[0].getInteger().toBuffer(); - private readonly tryGetInvocationData = async ( - transaction: InvocationTransaction, - ): Promise => { - const data = await this.invocationData.tryGet({ - hash: transaction.hash, + return { key, value: new Nep5Balance({ balanceBuffer, lastUpdatedBlock: this.currentBlockIndex }) }; }); - if (data === undefined) { - return undefined; - } - - const [asset, contracts, actions] = await Promise.all([ - data.assetHash === undefined ? Promise.resolve(undefined) : this.asset.get({ hash: data.assetHash }), - Promise.all(data.contractHashes.map(async (contractHash) => this.contract.tryGet({ hash: contractHash }))), - data.actionIndexStart.eq(data.actionIndexStop) - ? Promise.resolve([]) - : this.action - .getAll$({ - indexStart: data.actionIndexStart, - indexStop: data.actionIndexStop.sub(utils.ONE), - }) - .pipe(toArray()) - .toPromise(), - ]); + const nep5BalanceChangeSet: ChangeSet = nep5BalancePairs.map(({ key, value }) => { + if (value.balance.eqn(0)) { + return { + type: 'delete', + change: { + type: 'nep5Balance', + key, + }, + }; + } - return { - asset, - contracts: contracts.filter(commonUtils.notNull), - deletedContractHashes: data.deletedContractHashes, - migratedContractHashes: data.migratedContractHashes, - voteUpdates: data.voteUpdates, - result: data.result, - actions, - storageChanges: data.storageChanges, - }; - }; - private readonly tryGetTransactionData = async (transaction: Transaction): Promise => - this.transactionData.tryGet({ hash: transaction.hash }); - private readonly getUnclaimed = async (hash: UInt160): Promise => - this.accountUnclaimed - .getAll$({ hash }) - .pipe(toArray()) - .toPromise() - .then((values) => values.map((value) => value.input)); - private readonly getUnspent = async (hash: UInt160): Promise => { - const unspent = await this.accountUnspent - .getAll$({ hash }) - .pipe(toArray()) - .toPromise(); - - return unspent.map((value) => value.input); - }; - private readonly getAllValidators = async (): Promise => - this.validator.all$.pipe(toArray()).toPromise(); - private readonly isSpent = async (input: OutputKey): Promise => { - const transactionData = await this.transactionData.tryGet({ - hash: input.hash, + return { + type: 'add', + change: { + type: 'nep5Balance', + key, + value, + }, + subType: 'update', + }; }); - return ( - transactionData !== undefined && (transactionData.endHeights[input.index] as number | undefined) !== undefined - ); - }; - private readonly tryGetSpentCoin = async (input: Input): Promise => { - const [transactionData, output] = await Promise.all([ - this.transactionData.tryGet({ hash: input.hash }), - this.output.get(input), - ]); - - if (transactionData === undefined) { - return undefined; - } - - const endHeight = transactionData.endHeights[input.index] as number | undefined; - if (endHeight === undefined) { - return undefined; - } + const nep5TransfersSentChangeSet: ChangeSet = transfersSent.map(({ key, value }) => ({ + type: 'add', + subType: 'add', + change: { + type: 'nep5TransferSent', + key, + value, + }, + })); + + const nep5TransfersReceivedChangeSet: ChangeSet = transfersReceived.map(({ key, value }) => ({ + type: 'add', + subType: 'add', + change: { + type: 'nep5TransferReceived', + key, + value, + }, + })); - const claimed = transactionData.claimed[input.index]; + return nep5BalanceChangeSet.concat(nep5TransfersReceivedChangeSet, nep5TransfersSentChangeSet); + } - return { - output, - startHeight: transactionData.startHeight, - endHeight, - claimed: !!claimed, - }; - }; + private updateApplicationLogs({ + applicationsExecuted, + block, + }: { + readonly applicationsExecuted: readonly ApplicationExecuted[]; + readonly block: Block; + }): ChangeSet { + return applicationsExecuted.map( + ({ transaction, trigger, state: vmState, gasConsumed, stack, notifications: notificationsIn }) => { + const notifications = notificationsIn.map( + ({ scriptHash, eventName, state }) => + new Notification({ + scriptHash, + eventName, + state, + }), + ); - private start(): void { - this.mutableBlock$ = new Subject(); - this.mutablePersistingBlocks = false; - this.mutableBlockQueue = new PriorityQueue({ - comparator: (a, b) => a.block.index - b.block.index, - }); + const value = new ApplicationLog({ + txid: transaction?.hash, + trigger, + vmState, + gasConsumed, + stack, + notifications, + }); - this.mutableInQueue = new Set(); - this.mutableDoneRunningResolve = undefined; - this.mutableRunning = true; - logger.info({ name: 'neo_blockchain_start' }, 'NEO blockchain started.'); - } - - // private readonly getVotes = async (transactions: readonly Transaction[]): Promise => { - // const inputs = await Promise.all( - // transactions.map(async (transaction) => - // transaction.getReferences({ - // getOutput: this.output.get, - // }), - // ), - // ).then((results) => - // results.reduce((acc, inputResults) => acc.concat(inputResults), []).map((output) => ({ - // address: output.address, - // asset: output.asset, - // value: output.value.neg(), - // })), - // ); - - // const outputs = transactions - // .reduce((acc, transaction) => acc.concat(transaction.outputs), []) - // .map((output) => ({ - // address: output.address, - // asset: output.asset, - // value: output.value, - // })); - - // const changes = _.fromPairs( - // Object.entries( - // _.groupBy( - // inputs - // .concat(outputs) - // .filter((output) => common.uInt256Equal(output.asset, this.settings.governingToken.hash)), - - // (output) => common.uInt160ToHex(output.address), - // ), - // ).map(([addressHex, addressOutputs]) => [ - // addressHex, - // addressOutputs.reduce((acc, output) => acc.add(output.value), utils.ZERO), - // ]), - // ); - - // const votes = await this.account.all$ - // .pipe( - // filter((account) => account.votes.length > 0), - // map((account) => { - // let balance = account.balances[this.settings.governingToken.hashHex]; - // balance = balance === undefined ? utils.ZERO : balance; - // const change = changes[account.hashHex]; - // balance = balance.add(change === undefined ? utils.ZERO : change); - - // return balance.lte(utils.ZERO) - // ? undefined - // : { - // publicKeys: account.votes, - // count: balance, - // }; - // }), - // toArray(), - // ) - // .toPromise(); - // if (votes.length === 0) { - // return [ - // { - // publicKeys: this.settings.standbyValidators, - // count: this.settings.governingToken.asset.amount, - // }, - // ]; - // } - - // return votes.filter(commonUtils.notNull); - // }; - - private async persistBlockInternal(block: Block, unsafe?: boolean): Promise { - globalStats.record([ - { - measure: blockProgress, - value: block.index, + return { + type: 'add', + subType: 'add', + change: { + type: 'applicationLog', + key: transaction?.hash ?? block.hash, + value, + }, + }; }, - ]); + ); + } - if (!unsafe) { + private async persistBlockInternal(block: Block, verify?: boolean): Promise { + if (verify) { await this.verifyBlock(block); } - const blockchain = this.createWriteBlockchain(); + const blockchain = this.createPersistingBlockchain(); - await blockchain.persistBlock(block); - await this.storage.commit(blockchain.getChangeSet()); + const currentHeaderCount = this.headerIndexCache.length; + if (block.index === currentHeaderCount) { + await this.headerIndexCache.push(block.hash); + } - this.mutablePreviousBlock = this.mutableCurrentBlock; - this.mutableCurrentBlock = block; - this.mutableCurrentHeader = block.header; + const { changeBatch: persistBatch, applicationsExecuted } = blockchain.persistBlock(block, currentHeaderCount); + await this.storage.commitBatch(persistBatch); + + const blockMetadataBatch = this.updateBlockMetadata(block); + await this.storage.commit(blockMetadataBatch); + + const nep5Updates = this.updateNep5Balances({ applicationsExecuted, block }); + await this.storage.commit(nep5Updates); + + const applicationLogUpdates = this.updateApplicationLogs({ applicationsExecuted, block }); + await this.storage.commit(applicationLogUpdates); + + await this.onPersist(); } - private createWriteBlockchain(): WriteBatchBlockchain { - return new WriteBatchBlockchain({ - settings: this.settings, - currentBlock: this.mutableCurrentBlock, - currentHeader: this.mutableCurrentHeader, - storage: this.storage, + private createPersistingBlockchain(): PersistingBlockchain { + return new PersistingBlockchain({ + onPersistNativeContractScript: this.onPersistNativeContractScript, + postPersistNativeContractScript: this.postPersistNativeContractScript, vm: this.vm, - getValidators: this.getValidators, + }); + } + + private createDummyBlock(): Block { + return new Block({ + version: 0, + previousHash: this.currentBlock.hash, + timestamp: this.currentBlock.timestamp.addn(this.settings.millisecondsPerBlock), + index: this.currentBlockIndex + 1, + nextConsensus: this.currentBlock.nextConsensus, + witness: new Witness({ + invocation: Buffer.from([]), + verification: Buffer.from([]), + }), + consensusData: new ConsensusData({ primaryIndex: 0, nonce: new BN(0) }), + transactions: [], + messageMagic: this.settings.messageMagic, }); } } diff --git a/packages/neo-one-node-blockchain/src/HeaderIndexCache.ts b/packages/neo-one-node-blockchain/src/HeaderIndexCache.ts new file mode 100644 index 0000000000..67635bd4e6 --- /dev/null +++ b/packages/neo-one-node-blockchain/src/HeaderIndexCache.ts @@ -0,0 +1,123 @@ +import { UInt256 } from '@neo-one/client-common'; +import { Change, HeaderHashList, Storage } from '@neo-one/node-core'; +import LRUCache from 'lru-cache'; +import { utils } from './utils'; + +export interface HeaderIndexCacheOptions { + readonly storage: Storage; + readonly initCurrentHeaderHashes: readonly UInt256[]; + readonly initStorageCount: number; +} + +export class HeaderIndexCache { + private readonly storage: Storage; + private readonly headerHashListCache = new LRUCache({ max: 10 }); + private readonly indexToHashCache = new LRUCache({ max: 10000 }); + private mutableCurrentHeaderHashes: readonly UInt256[]; + private mutableStorageCount: number; + + public constructor({ storage, initCurrentHeaderHashes, initStorageCount }: HeaderIndexCacheOptions) { + this.storage = storage; + this.mutableCurrentHeaderHashes = initCurrentHeaderHashes; + this.mutableStorageCount = initStorageCount; + } + + public get length() { + return this.mutableStorageCount + this.mutableCurrentHeaderHashes.length; + } + + public async push(hash: UInt256) { + this.mutableCurrentHeaderHashes = this.mutableCurrentHeaderHashes.concat(hash); + await this.trySaveHeaderHashList(); + } + + public async get(index: number) { + const result = await this.tryGet(index); + if (result === undefined) { + throw new Error(`Failed to find headerHash with index ${index} in Cache or Storage.`); + } + + return result; + } + + public async tryGet(index: number) { + const maybeIndexHash = this.indexToHashCache.get(index); + if (maybeIndexHash === undefined) { + return this.getHeaderHashIndex(index); + } + + return maybeIndexHash; + } + + public async dispose() { + return this.trySaveHeaderHashList(); + } + + private async getHeaderHashIndex(index: number): Promise { + const hashListHashIndex = index % 2000; + if (index - this.mutableStorageCount >= 0) { + return this.getHeaderHashIndexFromCurrent(hashListHashIndex); + } + + const hashListIndex = (index - hashListHashIndex) / 2000; + const headerHashList = await this.getHeaderHashList(hashListIndex); + if (headerHashList === undefined) { + return undefined; + } + const headerHash = headerHashList[hashListHashIndex]; + // tslint:disable-next-line: strict-type-predicates + if (headerHash !== undefined) { + this.indexToHashCache.set(index, headerHash); + } + + return headerHash; + } + + private getHeaderHashIndexFromCurrent(index: number): UInt256 | undefined { + const headerHash = this.mutableCurrentHeaderHashes[index]; + // tslint:disable-next-line: strict-type-predicates + if (headerHash !== undefined) { + this.indexToHashCache.set(index, headerHash); + } + + return headerHash; + } + + private async getHeaderHashList(index: number): Promise { + const maybeHashList = this.headerHashListCache.get(index); + if (maybeHashList === undefined) { + const hashList = await this.storage.headerHashList.tryGet(index); + const hashes = hashList?.hashes; + if (hashes !== undefined) { + this.headerHashListCache.set(index, hashes); + } + + return hashes; + } + + return maybeHashList; + } + + private async trySaveHeaderHashList(): Promise { + if (this.mutableCurrentHeaderHashes.length >= utils.hashListBatchSize) { + const slicedHashes = this.mutableCurrentHeaderHashes.slice(0, utils.hashListBatchSize); + const headerHashList = new HeaderHashList({ + hashes: slicedHashes, + }); + + const change: Change = { + type: 'add', + change: { + type: 'headerHashList', + key: this.mutableStorageCount, + value: headerHashList, + }, + subType: 'add', + }; + + await this.storage.commit([change]); + this.mutableCurrentHeaderHashes = this.mutableCurrentHeaderHashes.slice(utils.hashListBatchSize); + this.mutableStorageCount = this.mutableStorageCount + utils.hashListBatchSize; + } + } +} diff --git a/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts b/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts new file mode 100644 index 0000000000..b46a031b44 --- /dev/null +++ b/packages/neo-one-node-blockchain/src/PersistingBlockchain.ts @@ -0,0 +1,135 @@ +// tslint:disable no-array-mutation no-object-mutation +import { TriggerType, VMState, common } from '@neo-one/client-common'; +import { ApplicationExecuted, Block, SnapshotHandler, Transaction, VM } from '@neo-one/node-core'; +import { PersistNativeContractsError, PostPersistError } from './errors'; +import { utils } from './utils'; + +interface PersistingBlockchainOptions { + readonly vm: VM; + readonly onPersistNativeContractScript: Buffer; + readonly postPersistNativeContractScript: Buffer; +} + +export class PersistingBlockchain { + private readonly vm: VM; + private readonly onPersistNativeContractScript: Buffer; + private readonly postPersistNativeContractScript: Buffer; + + public constructor(options: PersistingBlockchainOptions) { + this.vm = options.vm; + this.onPersistNativeContractScript = options.onPersistNativeContractScript; + this.postPersistNativeContractScript = options.postPersistNativeContractScript; + } + + public persistBlock( + block: Block, + currentHeaderIndexCount: number, + // tslint:disable-next-line: readonly-array no-any + ): { readonly changeBatch: any[]; readonly applicationsExecuted: readonly ApplicationExecuted[] } { + return this.vm.withSnapshots(({ main, clone }) => { + if (block.index === currentHeaderIndexCount) { + main.changeHeaderHashIndex(block.index, block.hash); + } + + const appsExecuted: ApplicationExecuted[] = []; + + main.setPersistingBlock(block); + const executed = this.vm.withApplicationEngine( + { + trigger: TriggerType.OnPersist, + snapshot: 'main', + gas: common.TWENTY_FIXED8, + }, + (engine) => { + engine.loadScript({ script: this.onPersistNativeContractScript }); + const result = engine.execute(); + if (result !== VMState.HALT) { + throw new PersistNativeContractsError(); + } + + return utils.getApplicationExecuted(engine); + }, + ); + + appsExecuted.push(executed); + + main.addBlock(block); + main.clone(); + + const executedTransactions = this.persistTransactions(block, main, clone); + + main.changeBlockHashIndex(block.index, block.hash); + + const postPersistExecuted = this.postPersist(); + + return { + changeBatch: main.getChangeSet(), + applicationsExecuted: appsExecuted.concat(executedTransactions).concat(postPersistExecuted), + }; + }); + } + + private persistTransactions( + block: Block, + main: SnapshotHandler, + clone: Omit, + ): readonly ApplicationExecuted[] { + return block.transactions.reduce((acc, transaction) => { + const appExecuted = this.persistTransaction(transaction, block.index, main, clone); + + return acc.concat(appExecuted); + }, []); + } + + private persistTransaction( + transaction: Transaction, + index: number, + main: SnapshotHandler, + clone: Omit, + ): ApplicationExecuted { + clone.addTransaction(transaction, index); + clone.commit('transactions'); + + return this.vm.withApplicationEngine( + { + trigger: TriggerType.Application, + container: transaction, + snapshot: 'clone', + gas: transaction.systemFee, + }, + (engine) => { + engine.loadScript({ script: transaction.script }); + const state = engine.execute(); + if (state === VMState.HALT) { + clone.deleteTransaction(transaction.hash); + clone.addTransaction(transaction, index, VMState.HALT); + clone.commit(); + } else { + main.clone(); + } + + return utils.getApplicationExecuted(engine, transaction); + }, + ); + } + + private postPersist(): ApplicationExecuted { + return this.vm.withApplicationEngine( + { + trigger: TriggerType.PostPersist, + container: undefined, + gas: common.TWENTY_FIXED8, + snapshot: 'main', + }, + (engine) => { + engine.loadScript({ script: this.postPersistNativeContractScript }); + const result = engine.execute(); + if (result !== VMState.HALT) { + throw new PostPersistError(); + } + + return utils.getApplicationExecuted(engine); + }, + ); + } +} diff --git a/packages/neo-one-node-blockchain/src/StorageCache.ts b/packages/neo-one-node-blockchain/src/StorageCache.ts index 45e3616d61..5bbb482069 100644 --- a/packages/neo-one-node-blockchain/src/StorageCache.ts +++ b/packages/neo-one-node-blockchain/src/StorageCache.ts @@ -1,39 +1,62 @@ -// tslint:disable no-object-mutation no-dynamic-delete -import { common, UInt256 } from '@neo-one/client-common'; -import { - AddChange, - Block, - Change, - ChangeSet, - DeleteChange, - Output, - OutputKey, - ReadAllStorage, - ReadGetAllStorage, - ReadMetadataStorage, - ReadStorage, -} from '@neo-one/node-core'; -import { utils as commonUtils } from '@neo-one/utils'; -import { concat, defer, EMPTY, Observable, of as _of } from 'rxjs'; -import { concatMap } from 'rxjs/operators'; -type TrackedChange = - | { readonly type: 'add'; readonly addValue: AddValue; readonly value: Value; readonly subType: 'add' | 'update' } - | { readonly type: 'delete'; readonly key: Key }; -type GetFunc = (key: Key) => Promise; -type TryGetFunc = (key: Key) => Promise; -export interface TrackedChangeWithKey { +import { AddChange, Change, ChangeSet, DeleteChange, ReadMetadataStorage, ReadStorage } from '@neo-one/node-core'; + +interface DeleteMetadataTrackedChanged { + readonly type: 'delete'; +} +interface AddMetadataTrackedChange { + readonly type: 'add'; + readonly value: Value; + readonly subType: 'add' | 'update'; +} + +interface DeleteTrackedChange extends DeleteMetadataTrackedChanged { + readonly key: Key; +} +interface AddTrackedChange extends AddMetadataTrackedChange { + readonly key: Key; +} + +type TrackedMetadataChange = Value extends undefined + ? DeleteMetadataTrackedChanged + : AddMetadataTrackedChange; + +type TrackedChange = DeleteTrackedChange | AddTrackedChange; + +const isDeleteTrackedChange = (value: TrackedChange): value is DeleteTrackedChange => + value.type === 'delete'; + +export interface TrackedDeleteChangeWithKey { readonly type: string; readonly key: string; - readonly value: TrackedChange; + readonly value: DeleteTrackedChange; } -export type TrackedChangeSet = ReadonlyArray>; + +export interface TrackedAddChangeWithKey { + readonly type: string; + readonly key: string; + readonly value: AddTrackedChange; +} + +type TrackedChangeWithKey = TrackedDeleteChangeWithKey | TrackedAddChangeWithKey; + +export type TrackedChangeSet = ReadonlyArray>; + +type GetFunc = (key: Key) => Promise; +type TryGetFunc = (key: Key) => Promise; + +type CreateAddChangeNoKey = (value: Value) => AddChange; +type CreateAddChangeKey = (key: Key, value: Value) => AddChange; + +type CreateAddChange = Key extends undefined + ? CreateAddChangeNoKey + : CreateAddChangeKey; function createGet({ tryGetTracked, readStorage, }: { - // tslint:disable-next-line no-any - readonly tryGetTracked: (key: Key) => TrackedChange | undefined; + // tslint:disable-next-line: no-any + readonly tryGetTracked: (key: Key) => TrackedChange | undefined; readonly readStorage: () => ReadStorage; }): GetFunc { return async (key: Key): Promise => { @@ -54,8 +77,8 @@ function createTryGet({ tryGetTracked, readStorage, }: { - // tslint:disable-next-line no-any - readonly tryGetTracked: (key: Key) => TrackedChange | undefined; + // tslint:disable-next-line: no-any + readonly tryGetTracked: (key: Key) => TrackedChange | undefined; readonly readStorage: () => ReadStorage; }): TryGetFunc { return async (key: Key): Promise => { @@ -72,27 +95,27 @@ function createTryGet({ }; } -interface BaseReadStorageCacheOptions { +interface BaseReadStorageCacheOptions { readonly readStorage: () => ReadStorage; readonly name: string; - readonly createAddChange: (value: AddValue) => AddChange; + readonly createAddChange: CreateAddChange; readonly createDeleteChange?: (key: Key) => DeleteChange; - readonly onAdd?: (value: AddValue) => Promise; + readonly onAdd?: (value: Value) => Promise; } -export class BaseReadStorageCache { +class BaseReadStorageCache { public readonly get: GetFunc; public readonly tryGet: TryGetFunc; public readonly tryGetValue: TryGetFunc; - public readonly onAdd: ((value: AddValue) => Promise) | undefined; + public readonly onAdd: ((value: Value) => Promise) | undefined; public readonly name: string; // tslint:disable-next-line readonly-keyword - public readonly mutableValues: { [key: string]: TrackedChange }; + public mutableValues: { [key: string]: TrackedChange }; protected readonly readStorage: () => ReadStorage; - protected readonly createAddChange: (value: AddValue) => AddChange; + protected readonly createAddChange: CreateAddChange; protected readonly createDeleteChange: ((key: Key) => DeleteChange) | undefined; - public constructor(options: BaseReadStorageCacheOptions) { + public constructor(options: BaseReadStorageCacheOptions) { this.readStorage = options.readStorage; this.name = options.name; this.createAddChange = options.createAddChange; @@ -115,48 +138,52 @@ export class BaseReadStorageCache { public getChangeSet(): ChangeSet { const createDeleteChange = this.createDeleteChange; - return Object.values(this.mutableValues).map((value) => { - if (value.type === 'delete') { + return Object.values(this.mutableValues).map((tracked) => { + if (isDeleteTrackedChange(tracked)) { if (createDeleteChange === undefined) { throw new Error('Invalid delete'); } - return { type: 'delete', change: createDeleteChange(value.key) }; + return { type: 'delete', change: createDeleteChange(tracked.key) }; } - return { type: 'add', change: this.createAddChange(value.addValue), subType: value.subType }; + return { type: 'add', change: this.createAddChange(tracked.key, tracked.value), subType: tracked.subType }; }); } - public getTrackedChangeSet(): TrackedChangeSet { + public clearChangeSet(): void { + this.mutableValues = {}; + } + + public getTrackedChangeSet(): TrackedChangeSet { const createDeleteChange = this.createDeleteChange; - return Object.entries(this.mutableValues).map(([key, value]) => { - if (value.type === 'delete') { + return Object.entries(this.mutableValues).map(([key, tracked]) => { + if (isDeleteTrackedChange(tracked)) { if (createDeleteChange === undefined) { throw new Error('Invalid delete'); } - return { type: createDeleteChange(value.key).type, key, value }; + return { type: createDeleteChange(tracked.key).type, key, value: tracked }; } - return { type: this.createAddChange(value.addValue).type, key, value }; + return { type: this.createAddChange(tracked.key, tracked.value).type, key, value: tracked }; }); } - public tryGetTracked(_key: Key): TrackedChange | undefined { + public tryGetTracked(_key: Key): TrackedChange | undefined { throw new Error('Not Implemented'); } } -interface ReadStorageCacheOptions extends BaseReadStorageCacheOptions { +interface ReadStorageCacheOptions extends BaseReadStorageCacheOptions { readonly getKeyString: (key: Key) => string; } -class ReadStorageCache extends BaseReadStorageCache { +class ReadStorageCache extends BaseReadStorageCache { public readonly getKeyString: (key: Key) => string; - public constructor(options: ReadStorageCacheOptions) { + public constructor(options: ReadStorageCacheOptions) { super({ readStorage: options.readStorage, name: options.name, @@ -168,150 +195,27 @@ class ReadStorageCache extends BaseReadStorageCache | undefined { + public tryGetTracked(key: Key): TrackedChange | undefined { return this.mutableValues[this.getKeyString(key)]; } - public addTrackedChange(key: string, value: TrackedChange): void { + public addTrackedChange(key: string, value: TrackedChange): void { this.mutableValues[key] = value; } } -interface ReadAllStorageCacheOptions { - readonly readAllStorage: () => ReadAllStorage; - readonly name: string; - readonly createAddChange: (value: Value) => AddChange; - readonly createDeleteChange?: (key: Key) => DeleteChange; - readonly onAdd?: (value: Value) => Promise; - readonly getKeyString: (key: Key) => string; - readonly getKeyFromValue: (value: Value) => Key; -} - -class ReadAllStorageCache extends ReadStorageCache { - public readonly all$: Observable; - protected readonly readAllStorage: () => ReadAllStorage; - protected readonly getKeyFromValue: (value: Value) => Key; - - public constructor(options: ReadAllStorageCacheOptions) { - super({ - readStorage: () => ({ - get: options.readAllStorage().get, - tryGet: options.readAllStorage().tryGet, - }), - name: options.name, - getKeyString: options.getKeyString, - createAddChange: options.createAddChange, - createDeleteChange: options.createDeleteChange, - onAdd: options.onAdd, - }); - - this.readAllStorage = options.readAllStorage; - this.getKeyFromValue = options.getKeyFromValue; - - this.all$ = concat( - defer(() => - this.readAllStorage().all$.pipe( - concatMap((value) => { - const trackedChange = this.tryGetTracked(this.getKeyFromValue(value)); - - if (trackedChange !== undefined) { - return EMPTY; - } - - return _of(value); - }), - ), - ), - defer(() => - _of( - ...Object.values(this.mutableValues) - .map((value) => (value.type === 'add' ? value.value : undefined)) - .filter(commonUtils.notNull), - ), - ), - ); - } -} - -interface ReadGetAllStorageCacheOptions { - readonly readGetAllStorage: () => ReadGetAllStorage; - readonly name: string; - readonly createAddChange: (value: Value) => AddChange; - readonly createDeleteChange?: (key: Key) => DeleteChange; - readonly onAdd?: (value: Value) => Promise; - readonly getKeyString: (key: Key) => string; - readonly getKeyFromValue: (value: Value) => Key; - readonly matchesPartialKey: (value: Value, key: PartialKey) => boolean; -} - -class ReadGetAllStorageCache extends ReadStorageCache { - public readonly getAll$: (key: PartialKey) => Observable; - protected readonly readGetAllStorage: () => ReadGetAllStorage; - protected readonly getKeyFromValue: (value: Value) => Key; - protected readonly matchesPartialKey: (value: Value, key: PartialKey) => boolean; - - public constructor(options: ReadGetAllStorageCacheOptions) { - super({ - readStorage: () => ({ - get: options.readGetAllStorage().get, - tryGet: options.readGetAllStorage().tryGet, - }), - name: options.name, - getKeyString: options.getKeyString, - createAddChange: options.createAddChange, - createDeleteChange: options.createDeleteChange, - onAdd: options.onAdd, - }); - - this.readGetAllStorage = options.readGetAllStorage; - this.getKeyFromValue = options.getKeyFromValue; - this.matchesPartialKey = options.matchesPartialKey; - - this.getAll$ = (key: PartialKey): Observable => - concat( - defer(() => - this.readGetAllStorage() - .getAll$(key) - .pipe( - concatMap((value) => { - const trackedChange = this.tryGetTracked(this.getKeyFromValue(value)); - - if (trackedChange !== undefined) { - return EMPTY; - } - - return _of(value); - }), - ), - ), - defer(() => - _of( - ...Object.values(this.mutableValues) - .map((value) => - value.type === 'add' && this.matchesPartialKey(value.value, key) ? value.value : undefined, - ) - .filter(commonUtils.notNull), - ), - ), - ); - } -} -type AddFunc = (value: Value) => Promise; +type AddFunc = (key: Key, value: Value) => Promise; function createAdd({ cache, - getKeyFromValue, getKeyString, allowDupes, }: { - readonly cache: ReadStorageCache; - readonly getKeyFromValue: (value: Value) => Key; + readonly cache: ReadStorageCache; readonly getKeyString: (key: Key) => string; readonly allowDupes?: boolean; -}): AddFunc { - return async (value: Value): Promise => { - const key = getKeyFromValue(value); - +}): AddFunc { + return async (key: Key, value: Value): Promise => { if (!allowDupes) { const currentValue = await cache.tryGet(key); if (currentValue !== undefined) { @@ -324,10 +228,11 @@ function createAdd({ } const trackedChange = cache.tryGetTracked(key); + // tslint:disable-next-line: no-object-mutation cache.mutableValues[cache.getKeyString(key)] = { type: 'add', - addValue: value, value, + key, // trackedChange can only be a delete type if it's undefined, otherwise cache.tryGet above would have returned a value // In that case, we ignore the delete and register this as a storage item update // Note that we only really care about this for storage items, where allowDupes is always false @@ -335,161 +240,13 @@ function createAdd({ }; }; } -type UpdateFunc = (value: Value, update: Update) => Promise; - -function createUpdate({ - cache, - update: updateFunc, - getKeyFromValue, -}: { - readonly cache: ReadStorageCache; - readonly update: (value: Value, update: Update) => Value; - readonly getKeyFromValue: (value: Value) => Key; -}): UpdateFunc { - return async (value: Value, update: Update): Promise => { - const key = getKeyFromValue(value); - const updatedValue = updateFunc(value, update); - - const trackedChange = cache.tryGetTracked(key); - cache.mutableValues[cache.getKeyString(key)] = { - type: 'add', - addValue: updatedValue, - value: updatedValue, - subType: - // trackedChange undefined -> value must exist so it's an update - // trackedChange.type === 'delete' -> value must have previously existed, so we ignore the delete and it's an update - // trackedChange.subType === 'update' -> value must have previously existed - // otherwise -> value did not exist, we're just adding twice. - trackedChange === undefined || trackedChange.type === 'delete' || trackedChange.subType === 'update' - ? 'update' - : 'add', - }; - return updatedValue; - }; -} -type DeleteFunc = (key: Key) => Promise; - -// tslint:disable-next-line no-any -function createDelete({ cache }: { readonly cache: ReadStorageCache }): DeleteFunc { - return async (key: Key): Promise => { - const currentValue = await cache.tryGetValue(key); - if (currentValue === undefined) { - // We did not have a value before, so just delete any tracked changes as if they never occurred. - delete cache.mutableValues[cache.getKeyString(key)]; - } else { - cache.mutableValues[cache.getKeyString(key)] = { type: 'delete', key }; - } - }; -} - -interface ReadAddUpdateDeleteStorageCacheOptions - extends ReadStorageCacheOptions { - readonly update: (value: Value, update: Update) => Value; - readonly getKeyFromValue: (value: Value) => Key; -} - -export class ReadAddUpdateDeleteStorageCache extends ReadStorageCache { - public readonly add: AddFunc; - public readonly update: UpdateFunc; - public readonly delete: DeleteFunc; - - public constructor(options: ReadAddUpdateDeleteStorageCacheOptions) { - super({ - readStorage: options.readStorage, - name: options.name, - getKeyString: options.getKeyString, - createAddChange: options.createAddChange, - createDeleteChange: options.createDeleteChange, - onAdd: options.onAdd, - }); - - this.add = createAdd({ - cache: this, - getKeyFromValue: options.getKeyFromValue, - getKeyString: options.getKeyString, - }); - - this.update = createUpdate({ - cache: this, - update: options.update, - getKeyFromValue: options.getKeyFromValue, - }); - - this.delete = createDelete({ cache: this }); - } -} - -interface ReadAddUpdateStorageCacheOptions extends ReadStorageCacheOptions { - readonly update: (value: Value, update: Update) => Value; - readonly getKeyFromValue: (value: Value) => Key; +interface ReadAddStorageCacheOptions extends ReadStorageCacheOptions { readonly allowDupes?: boolean; } -export class ReadAddUpdateStorageCache extends ReadStorageCache { - public readonly add: AddFunc; - public readonly update: UpdateFunc; - - public constructor(options: ReadAddUpdateStorageCacheOptions) { - super({ - readStorage: options.readStorage, - name: options.name, - getKeyString: options.getKeyString, - createAddChange: options.createAddChange, - createDeleteChange: options.createDeleteChange, - onAdd: options.onAdd, - }); - - this.add = createAdd({ - cache: this, - getKeyFromValue: options.getKeyFromValue, - getKeyString: options.getKeyString, - allowDupes: options.allowDupes, - }); - - this.update = createUpdate({ - cache: this, - update: options.update, - getKeyFromValue: options.getKeyFromValue, - }); - } -} - -interface ReadAddDeleteStorageCacheOptions extends ReadStorageCacheOptions { - readonly getKeyFromValue: (value: Value) => Key; -} - -export class ReadAddDeleteStorageCache extends ReadStorageCache { - public readonly add: AddFunc; - public readonly delete: DeleteFunc; - - public constructor(options: ReadAddDeleteStorageCacheOptions) { - super({ - readStorage: options.readStorage, - name: options.name, - getKeyString: options.getKeyString, - createAddChange: options.createAddChange, - createDeleteChange: options.createDeleteChange, - onAdd: options.onAdd, - }); - - this.add = createAdd({ - cache: this, - getKeyFromValue: options.getKeyFromValue, - getKeyString: options.getKeyString, - }); - - this.delete = createDelete({ cache: this }); - } -} - -interface ReadAddStorageCacheOptions extends ReadStorageCacheOptions { - readonly getKeyFromValue: (value: Value) => Key; - readonly allowDupes?: boolean; -} - -export class ReadAddStorageCache extends ReadStorageCache { - public readonly add: AddFunc; +export class ReadAddStorageCache extends ReadStorageCache { + public readonly add: AddFunc; public constructor(options: ReadAddStorageCacheOptions) { super({ @@ -503,467 +260,39 @@ export class ReadAddStorageCache extends ReadStorageCache - extends ReadGetAllStorageCacheOptions { - readonly getKeyFromValue: (value: Value) => Key; -} +// interface BaseReadMetadataStorageCacheOptions { +// readonly readStorage: () => ReadMetadataStorage; +// readonly name: string; +// readonly createAddChange: CreateAddChange; +// } -export class ReadGetAllAddDeleteStorageCache extends ReadGetAllStorageCache< - Key, - PartialKey, - Value -> { - public readonly add: AddFunc; - public readonly delete: DeleteFunc; +// class BaseReadMetadataStorageCache { +// public readonly get: ReadMetadataStorage['get']; +// public readonly tryGet: ReadMetadataStorage['tryGet']; +// public readonly tryGetValue: ReadMetadataStorage['tryGet']; +// public readonly name: string; +// public readonly mutableValues: { [key: string]: TrackedChange} +// public constructor(options: BaseReadMetadataStorageCacheOptions) { - public constructor(options: ReadGetAllAddDeleteStorageCacheOptions) { - super({ - readGetAllStorage: options.readGetAllStorage, - name: options.name, - getKeyString: options.getKeyString, - createAddChange: options.createAddChange, - createDeleteChange: options.createDeleteChange, - onAdd: options.onAdd, - getKeyFromValue: options.getKeyFromValue, - matchesPartialKey: options.matchesPartialKey, - }); - - this.add = createAdd({ - cache: this, - getKeyFromValue: options.getKeyFromValue, - getKeyString: options.getKeyString, - }); - - this.delete = createDelete({ cache: this }); - } -} - -interface ReadGetAllAddUpdateDeleteStorageCacheOptions - extends ReadGetAllStorageCacheOptions { - readonly update: (value: Value, update: Update) => Value; - readonly getKeyFromValue: (value: Value) => Key; -} - -export class ReadGetAllAddUpdateDeleteStorageCache extends ReadGetAllStorageCache< - Key, - PartialKey, - Value -> { - public readonly add: AddFunc; - public readonly update: UpdateFunc; - public readonly delete: DeleteFunc; - - public constructor(options: ReadGetAllAddUpdateDeleteStorageCacheOptions) { - super({ - readGetAllStorage: options.readGetAllStorage, - name: options.name, - getKeyString: options.getKeyString, - createAddChange: options.createAddChange, - createDeleteChange: options.createDeleteChange, - onAdd: options.onAdd, - getKeyFromValue: options.getKeyFromValue, - matchesPartialKey: options.matchesPartialKey, - }); +// } +// } - this.add = createAdd({ - cache: this, - getKeyFromValue: options.getKeyFromValue, - getKeyString: options.getKeyString, - }); - - this.update = createUpdate({ - cache: this, - update: options.update, - getKeyFromValue: options.getKeyFromValue, - }); - - this.delete = createDelete({ cache: this }); - } -} - -interface ReadGetAllAddStorageCacheOptions - extends ReadGetAllStorageCacheOptions { - readonly getKeyFromValue: (value: Value) => Key; -} +// export class ReadMetaDataStorageCache extends BaseReadMetadataStorageCache { -export class ReadGetAllAddStorageCache extends ReadGetAllStorageCache { - public readonly add: AddFunc; +// } - public constructor(options: ReadGetAllAddStorageCacheOptions) { - super({ - readGetAllStorage: options.readGetAllStorage, - name: options.name, - getKeyString: options.getKeyString, - createAddChange: options.createAddChange, - createDeleteChange: options.createDeleteChange, - onAdd: options.onAdd, - getKeyFromValue: options.getKeyFromValue, - matchesPartialKey: options.matchesPartialKey, - }); +// export class ReadUpdateMetadataStorageCache extends ReadMetaDataStorageCache { +// public readonly update: (value: Value) => Promise; - this.add = createAdd({ - cache: this, - getKeyFromValue: options.getKeyFromValue, - getKeyString: options.getKeyString, - }); - } -} - -interface ReadAllAddUpdateDeleteStorageCacheOptions extends ReadAllStorageCacheOptions { - readonly update: (value: Value, update: Update) => Value; - readonly getKeyFromValue: (value: Value) => Key; -} - -export class ReadAllAddUpdateDeleteStorageCache extends ReadAllStorageCache { - public readonly add: AddFunc; - public readonly update: UpdateFunc; - public readonly delete: DeleteFunc; - - public constructor(options: ReadAllAddUpdateDeleteStorageCacheOptions) { - super({ - readAllStorage: options.readAllStorage, - name: options.name, - getKeyString: options.getKeyString, - createAddChange: options.createAddChange, - createDeleteChange: options.createDeleteChange, - onAdd: options.onAdd, - getKeyFromValue: options.getKeyFromValue, - }); - - this.add = createAdd({ - cache: this, - getKeyFromValue: options.getKeyFromValue, - getKeyString: options.getKeyString, - }); - - this.update = createUpdate({ - cache: this, - update: options.update, - getKeyFromValue: options.getKeyFromValue, - }); - - this.delete = createDelete({ cache: this }); - } -} - -interface ReadAllAddStorageCacheOptions extends ReadAllStorageCacheOptions { - readonly getKeyFromValue: (value: Value) => Key; -} - -export class ReadAllAddStorageCache extends ReadAllStorageCache { - public readonly add: AddFunc; - - public constructor(options: ReadAllAddStorageCacheOptions) { - super({ - readAllStorage: options.readAllStorage, - name: options.name, - getKeyString: options.getKeyString, - createAddChange: options.createAddChange, - createDeleteChange: options.createDeleteChange, - onAdd: options.onAdd, - getKeyFromValue: options.getKeyFromValue, - }); - - this.add = createAdd({ - cache: this, - getKeyFromValue: options.getKeyFromValue, - getKeyString: options.getKeyString, - }); - } -} - -interface BlockLikeKey { - readonly hashOrIndex: Block['hash'] | Block['index']; -} - -interface BlockLike { - readonly hash: Block['hash']; - readonly index: Block['index']; -} - -interface BlockLikeStorageCacheOptions - extends BaseReadStorageCacheOptions {} - -export class BlockLikeStorageCache extends BaseReadStorageCache { - // tslint:disable-next-line readonly-keyword - protected readonly mutableIndexValues: { [index: string]: TrackedChange }; - - public constructor(options: BlockLikeStorageCacheOptions) { - super({ - readStorage: options.readStorage, - name: options.name, - createAddChange: options.createAddChange, - }); - - this.mutableIndexValues = {}; - } - - public async add(value: Value): Promise { - const currentValue = await this.tryGet({ hashOrIndex: value.index }); - if (currentValue !== undefined) { - throw new Error('Attempted to add an already existing object.'); - } - - const addValue: TrackedChange = { type: 'add', addValue: value, value, subType: 'add' }; - this.mutableValues[common.uInt256ToString(value.hash)] = addValue; - this.mutableIndexValues[`${value.index}`] = addValue; - } - - public tryGetTracked(key: BlockLikeKey): TrackedChange | undefined { - if (typeof key.hashOrIndex !== 'number') { - return this.mutableValues[common.uInt256ToString(key.hashOrIndex)]; - } - - return this.mutableIndexValues[`${key.hashOrIndex}`]; - } - - public addTrackedChange(key: string, value: TrackedChange): void { - this.mutableValues[key] = value; - } -} - -interface OutputValue { - readonly hash: UInt256; - readonly index: number; - readonly output: Output; -} - -const getOutputValueKeyString = (key: OutputKey): string => `${common.uInt256ToHex(key.hash)}:${key.index}`; - -export class OutputStorageCache extends ReadStorageCache { - public readonly add: AddFunc; - - public constructor(readStorage: () => ReadStorage) { - super({ - readStorage, - name: 'output', - getKeyString: getOutputValueKeyString, - createAddChange: (value: OutputValue) => ({ type: 'output', value }), - }); - - this.add = async (value: OutputValue): Promise => { - const key = { hash: value.hash, index: value.index }; - - const currentValue = await this.tryGet(key); - if (currentValue !== undefined) { - throw new Error( - `Attempted to add an already existing object for key ` + `${this.name}:${this.getKeyString(key)}.`, - ); - } - - this.mutableValues[this.getKeyString(key)] = { - type: 'add', - addValue: value, - value: value.output, - subType: 'add', - }; - }; - } -} -type TrackedMetadataChange = - | { readonly type: 'add'; readonly addValue: AddValue; readonly value: Value; readonly subType: 'add' | 'update' } - | { readonly type: 'delete' }; -type GetMetadataFunc = (key?: undefined) => Promise; -type TryGetMetadataFunc = (key?: undefined) => Promise; - -function createGetMetadata({ - tryGetTracked, - readStorage, -}: { - // tslint:disable-next-line no-any - readonly tryGetTracked: () => TrackedMetadataChange | undefined; - readonly readStorage: () => ReadMetadataStorage; -}): GetFunc { - return async (): Promise => { - const trackedChange = tryGetTracked(); - if (trackedChange !== undefined) { - if (trackedChange.type === 'delete') { - throw new Error('Not found'); - } - - return trackedChange.value; - } - - return readStorage().get(); - }; -} - -function createTryGetMetadata({ - tryGetTracked, - readStorage, -}: { - // tslint:disable-next-line no-any - readonly tryGetTracked: () => TrackedMetadataChange | undefined; - readonly readStorage: () => ReadMetadataStorage; -}): TryGetMetadataFunc { - return async (): Promise => { - const trackedChange = tryGetTracked(); - if (trackedChange !== undefined) { - if (trackedChange.type === 'delete') { - return undefined; - } - - return trackedChange.value; - } - - return readStorage().tryGet(); - }; -} - -interface BaseReadMetadataStorageCacheOptions { - readonly readStorage: () => ReadMetadataStorage; - readonly name: string; - readonly createAddChange: (value: AddValue) => AddChange; - readonly createDeleteChange?: () => DeleteChange; - readonly onAdd?: (value: AddValue) => Promise; -} - -export class BaseReadMetadataStorageCache { - public readonly get: GetMetadataFunc; - public readonly tryGet: TryGetMetadataFunc; - public mutableValue: TrackedMetadataChange | undefined; - public readonly onAdd: ((value: AddValue) => Promise) | undefined; - protected readonly readStorage: () => ReadMetadataStorage; - protected readonly name: string; - protected readonly createAddChange: (value: AddValue) => AddChange; - protected readonly createDeleteChange: (() => DeleteChange) | undefined; - - public constructor(options: BaseReadMetadataStorageCacheOptions) { - this.readStorage = options.readStorage; - this.name = options.name; - this.createAddChange = options.createAddChange; - this.createDeleteChange = options.createDeleteChange; - this.onAdd = options.onAdd; - - this.get = createGetMetadata({ - readStorage: this.readStorage, - tryGetTracked: this.tryGetTracked.bind(this), - }); - - this.tryGet = createTryGetMetadata({ - readStorage: this.readStorage, - tryGetTracked: this.tryGetTracked.bind(this), - }); - } - - public getChangeSet(): ChangeSet { - const createDeleteChange = this.createDeleteChange; - const value = this.mutableValue; - if (value === undefined) { - return []; - } - - if (value.type === 'delete') { - if (createDeleteChange === undefined) { - throw new Error('Invalid delete'); - } - - return [{ type: 'delete', change: createDeleteChange() }]; - } - - return [{ type: 'add', change: this.createAddChange(value.addValue), subType: value.subType }]; - } - - public getTrackedChangeSet(): TrackedChangeSet { - const createDeleteChange = this.createDeleteChange; - const value = this.mutableValue; - if (value === undefined) { - return []; - } - - if (value.type === 'delete') { - if (createDeleteChange === undefined) { - throw new Error('Invalid delete'); - } - - return [{ type: createDeleteChange().type, key: 'metadata', value: { ...value, key: 'metadata' } }]; - } - - return [{ type: this.createAddChange(value.addValue).type, key: 'metadata', value }]; - } - - public tryGetTracked(): TrackedMetadataChange | undefined { - return this.mutableValue; - } - - public addTrackedChange(_key: string, value: TrackedMetadataChange): void { - this.mutableValue = value; - } -} - -class ReadMetadataStorageCache extends BaseReadMetadataStorageCache {} - -function createAddMetadata({ - cache, -}: { - readonly cache: ReadMetadataStorageCache; -}): AddFunc { - return async (value: Value): Promise => { - if (cache.onAdd !== undefined) { - await cache.onAdd(value); - } - - cache.mutableValue = { - type: 'add', - addValue: value, - value, - subType: 'add', - }; - }; -} - -function createUpdateMetadata({ - cache, - update: updateFunc, -}: { - readonly cache: ReadMetadataStorageCache; - readonly update: (value: Value, update: Update) => Value; -}): UpdateFunc { - return async (value: Value, update: Update): Promise => { - const updatedValue = updateFunc(value, update); - cache.mutableValue = { - type: 'add', - addValue: updatedValue, - value: updatedValue, - subType: 'update', - }; - - return updatedValue; - }; -} - -interface ReadAddUpdateMetadataStorageCacheOptions - extends BaseReadMetadataStorageCacheOptions { - readonly update: (value: Value, update: Update) => Value; -} - -export class ReadAddUpdateMetadataStorageCache extends ReadMetadataStorageCache { - public readonly add: AddFunc; - public readonly update: UpdateFunc; - - public constructor(options: ReadAddUpdateMetadataStorageCacheOptions) { - super({ - readStorage: options.readStorage, - name: options.name, - createAddChange: options.createAddChange, - createDeleteChange: options.createDeleteChange, - onAdd: options.onAdd, - }); - - this.add = createAddMetadata({ - cache: this, - }); - - this.update = createUpdateMetadata({ - cache: this, - update: options.update, - }); - } -} +// public constructor(options: ReadUpdateMetadataStorageCacheOptions) { +// super({ +// readStorage: +// }) +// } +// } diff --git a/packages/neo-one-node-blockchain/src/ValidatorCache.ts b/packages/neo-one-node-blockchain/src/ValidatorCache.ts deleted file mode 100644 index f42aa3c22e..0000000000 --- a/packages/neo-one-node-blockchain/src/ValidatorCache.ts +++ /dev/null @@ -1,169 +0,0 @@ -import { common, ECPoint, UInt160, UInt256, utils } from '@neo-one/client-common'; -import { Account, Validator, ValidatorsCount, ValidatorsCountUpdate, ValidatorUpdate } from '@neo-one/node-core'; -import { BN } from 'bn.js'; -import _ from 'lodash'; -import { toArray } from 'rxjs/operators'; -import { Blockchain } from './Blockchain'; - -export class ValidatorCache { - private readonly blockchain: Blockchain; - // tslint:disable-next-line readonly-keyword - private readonly mutableAccounts: { [key: string]: Account }; - // tslint:disable-next-line readonly-keyword - private readonly mutableValidators: { [key: string]: Validator | undefined }; - private mutableValidatorsCount: ValidatorsCount | undefined; - - public constructor(blockchain: Blockchain) { - this.blockchain = blockchain; - this.mutableAccounts = {}; - this.mutableValidators = {}; - } - - public async getAccount(hash: UInt160): Promise { - let account = this.mutableAccounts[common.uInt160ToHex(hash)] as Account | undefined; - if (account === undefined) { - account = await this.blockchain.account.tryGet({ hash }); - } - - if (account === undefined) { - account = new Account({ hash }); - } - - this.mutableAccounts[common.uInt160ToHex(hash)] = account; - - return account; - } - - public async updateAccountBalance(hash: UInt160, asset: UInt256, value: BN): Promise { - const assetHex = common.uInt256ToHex(asset); - await this.getAccount(hash); - const hashHex = common.uInt160ToHex(hash); - const account = this.mutableAccounts[hashHex]; - const balance = account.balances[assetHex]; - this.mutableAccounts[hashHex] = account.update({ - balances: { - ...account.balances, - [assetHex]: value.add(balance === undefined ? utils.ZERO : balance), - }, - }); - } - - public async getValidator(publicKey: ECPoint): Promise { - const publicKeyHex = common.ecPointToHex(publicKey); - - let validator = this.mutableValidators[publicKeyHex]; - if (validator === undefined) { - validator = await this.blockchain.validator.tryGet({ publicKey }); - } - - if (validator === undefined) { - validator = new Validator({ publicKey }); - } - - this.mutableValidators[publicKeyHex] = validator; - - return validator; - } - - public async addValidator(validator: Validator): Promise { - this.mutableValidators[common.ecPointToHex(validator.publicKey)] = validator; - } - - public async deleteValidator(publicKey: ECPoint): Promise { - this.mutableValidators[common.ecPointToHex(publicKey)] = undefined; - } - - public async updateValidatorVotes(publicKey: ECPoint, value: BN): Promise { - await this.getValidator(publicKey); - const publicKeyHex = common.ecPointToHex(publicKey); - const validator = this.mutableValidators[publicKeyHex]; - if (validator === undefined) { - throw new Error('For Flow'); - } - - this.mutableValidators[publicKeyHex] = validator.update({ - votes: validator.votes.add(value), - }); - } - - public async updateValidator(publicKey: ECPoint, update: ValidatorUpdate): Promise { - await this.getValidator(publicKey); - const publicKeyHex = common.ecPointToHex(publicKey); - const validator = this.mutableValidators[publicKeyHex]; - if (validator === undefined) { - throw new Error('For Flow'); - } - - const newValidator = validator.update(update); - this.mutableValidators[publicKeyHex] = newValidator; - - return newValidator; - } - - public async getAllValidators(): Promise { - const validators = await this.blockchain.validator.all$.pipe(toArray()).toPromise(); - const mutablePublicKeyToValidator = _.fromPairs( - validators.map((validator) => [common.ecPointToHex(validator.publicKey), validator]), - ); - - Object.entries(this.mutableValidators).forEach(([publicKey, validator]) => { - const publicKeyHex = common.ecPointToHex(publicKey); - if (validator === undefined) { - // tslint:disable-next-line no-dynamic-delete - delete mutablePublicKeyToValidator[publicKeyHex]; - } else { - mutablePublicKeyToValidator[publicKeyHex] = validator; - } - }); - - return Object.values(mutablePublicKeyToValidator); - } - - public async getValidatorsCount(): Promise { - let validatorsCount = this.mutableValidatorsCount; - if (validatorsCount === undefined) { - validatorsCount = await this.blockchain.validatorsCount.tryGet(); - } - - if (validatorsCount === undefined) { - validatorsCount = new ValidatorsCount(); - } - - this.mutableValidatorsCount = validatorsCount; - - return validatorsCount; - } - - public async updateValidatorsCountVotes(index: number, value: BN): Promise { - await this.getValidatorsCount(); - const validatorsCount = this.mutableValidatorsCount; - if (validatorsCount === undefined) { - throw new Error('For Flow'); - } - - const votes = validatorsCount.votes[index]; - - this.mutableValidatorsCount = validatorsCount.update({ - votes: validatorsCount.votes - .slice(0, index) - .concat((votes === undefined ? utils.ZERO : votes).add(value)) - .concat(validatorsCount.votes.slice(index + 1)), - }); - } - - public async addValidatorsCount(validatorsCount: ValidatorsCount): Promise { - this.mutableValidatorsCount = validatorsCount; - } - - public async updateValidatorsCount(update: ValidatorsCountUpdate): Promise { - await this.getValidatorsCount(); - const validatorsCount = this.mutableValidatorsCount; - if (validatorsCount === undefined) { - throw new Error('For Flow'); - } - - this.mutableValidatorsCount = validatorsCount.update(update); - - return this.mutableValidatorsCount; - } -} diff --git a/packages/neo-one-node-blockchain/src/WriteBatchBlockchain.ts b/packages/neo-one-node-blockchain/src/WriteBatchBlockchain.ts deleted file mode 100644 index 324527d32b..0000000000 --- a/packages/neo-one-node-blockchain/src/WriteBatchBlockchain.ts +++ /dev/null @@ -1,1018 +0,0 @@ -// tslint:disable no-array-mutation no-object-mutation -import { common, ECPoint, UInt160, UInt256, utils } from '@neo-one/client-common'; -import { - Account, - AccountKey, - AccountUnclaimed, - AccountUnclaimedKey, - AccountUnclaimedsKey, - AccountUnspent, - AccountUnspentKey, - AccountUnspentsKey, - AccountUpdate, - Action, - ActionKey, - ActionsKey, - Asset, - AssetKey, - AssetUpdate, - Block, - BlockchainStorage, - BlockData, - BlockDataKey, - ChangeSet, - ClaimTransaction, - Contract, - ContractKey, - ContractTransaction, - EnrollmentTransaction, - Header, - Input, - InvocationData, - InvocationDataKey, - InvocationResultSuccess, - InvocationTransaction, - IssueTransaction, - LogAction, - MinerTransaction, - NotificationAction, - Output, - PublishTransaction, - RegisterTransaction, - ScriptContainerType, - StateTransaction, - StorageChangeAdd, - StorageChangeDelete, - StorageChangeModify, - StorageItem, - StorageItemKey, - StorageItemsKey, - StorageItemUpdate, - Transaction, - TransactionData, - TransactionDataKey, - TransactionDataUpdate, - TransactionKey, - TransactionType, - TriggerType, - Validator, - ValidatorKey, - ValidatorsCount, - ValidatorsCountUpdate, - ValidatorUpdate, - VM, - WriteBlockchain, -} from '@neo-one/node-core'; -import { utils as commonUtils } from '@neo-one/utils'; -import { BN } from 'bn.js'; -import _ from 'lodash'; -import { GenesisBlockNotRegisteredError } from './errors'; -import { AccountChanges, getDescriptorChanges, ValidatorChanges, ValidatorsCountChanges } from './getValidators'; -import { - BlockLikeStorageCache, - OutputStorageCache, - ReadAddDeleteStorageCache, - ReadAddStorageCache, - ReadAddUpdateMetadataStorageCache, - ReadAddUpdateStorageCache, - ReadAllAddUpdateDeleteStorageCache, - ReadGetAllAddDeleteStorageCache, - ReadGetAllAddStorageCache, - ReadGetAllAddUpdateDeleteStorageCache, - TrackedChangeSet, -} from './StorageCache'; -import { wrapExecuteScripts } from './wrapExecuteScripts'; - -interface WriteBatchBlockchainOptions { - readonly settings: WriteBlockchain['settings']; - readonly currentBlock: WriteBlockchain['currentBlock'] | undefined; - readonly currentHeader: WriteBlockchain['currentHeader'] | undefined; - readonly storage: BlockchainStorage; - readonly vm: VM; - readonly getValidators: WriteBlockchain['getValidators']; -} - -interface Caches { - readonly account: ReadAllAddUpdateDeleteStorageCache; - readonly accountUnspent: ReadGetAllAddDeleteStorageCache; - readonly accountUnclaimed: ReadGetAllAddDeleteStorageCache< - AccountUnclaimedKey, - AccountUnclaimedsKey, - AccountUnclaimed - >; - readonly action: ReadGetAllAddStorageCache; - readonly asset: ReadAddUpdateStorageCache; - readonly block: BlockLikeStorageCache; - readonly blockData: ReadAddStorageCache; - readonly header: BlockLikeStorageCache
; - readonly transaction: ReadAddStorageCache; - readonly transactionData: ReadAddUpdateStorageCache; - readonly output: OutputStorageCache; - readonly contract: ReadAddDeleteStorageCache; - readonly storageItem: ReadGetAllAddUpdateDeleteStorageCache< - StorageItemKey, - StorageItemsKey, - StorageItem, - StorageItemUpdate - >; - readonly validator: ReadAllAddUpdateDeleteStorageCache; - readonly invocationData: ReadAddStorageCache; - readonly validatorsCount: ReadAddUpdateMetadataStorageCache; -} - -interface InputClaim { - readonly type: 'claim' | 'input'; - readonly hash: UInt256; - readonly input: Input; -} - -interface OutputWithInput { - readonly output: Output; - readonly input: Input; -} - -export class WriteBatchBlockchain { - public readonly settings: WriteBlockchain['settings']; - public readonly account: ReadAllAddUpdateDeleteStorageCache; - public readonly accountUnspent: ReadGetAllAddDeleteStorageCache< - AccountUnspentKey, - AccountUnspentsKey, - AccountUnspent - >; - public readonly accountUnclaimed: ReadGetAllAddDeleteStorageCache< - AccountUnclaimedKey, - AccountUnclaimedsKey, - AccountUnclaimed - >; - public readonly action: ReadGetAllAddStorageCache; - public readonly asset: ReadAddUpdateStorageCache; - public readonly block: BlockLikeStorageCache; - public readonly blockData: ReadAddStorageCache; - public readonly header: BlockLikeStorageCache
; - public readonly transaction: ReadAddStorageCache; - public readonly transactionData: ReadAddUpdateStorageCache< - TransactionDataKey, - TransactionData, - TransactionDataUpdate - >; - public readonly output: OutputStorageCache; - public readonly contract: ReadAddDeleteStorageCache; - public readonly storageItem: ReadGetAllAddUpdateDeleteStorageCache< - StorageItemKey, - StorageItemsKey, - StorageItem, - StorageItemUpdate - >; - public readonly validator: ReadAllAddUpdateDeleteStorageCache; - public readonly invocationData: ReadAddStorageCache; - public readonly validatorsCount: ReadAddUpdateMetadataStorageCache; - public readonly getValidators: WriteBlockchain['getValidators']; - private readonly currentBlockInternal: WriteBlockchain['currentBlock'] | undefined; - private readonly currentHeaderInternal: WriteBlockchain['currentHeader'] | undefined; - private readonly storage: BlockchainStorage; - private readonly vm: VM; - private readonly caches: Caches; - - public constructor(options: WriteBatchBlockchainOptions) { - this.settings = options.settings; - this.currentBlockInternal = options.currentBlock; - this.currentHeaderInternal = options.currentHeader; - this.storage = options.storage; - this.vm = options.vm; - this.getValidators = options.getValidators; - - const output = new OutputStorageCache(() => this.storage.output); - this.caches = { - account: new ReadAllAddUpdateDeleteStorageCache({ - name: 'account', - readAllStorage: () => this.storage.account, - update: (value, update) => value.update(update), - getKeyFromValue: (value) => ({ hash: value.hash }), - getKeyString: (key) => common.uInt160ToString(key.hash), - createAddChange: (value) => ({ type: 'account', value }), - createDeleteChange: (key) => ({ type: 'account', key }), - }), - accountUnspent: new ReadGetAllAddDeleteStorageCache({ - name: 'accountUnspent', - readGetAllStorage: () => this.storage.accountUnspent, - getKeyFromValue: (value) => ({ hash: value.hash, input: value.input }), - getKeyString: (key) => - `${common.uInt160ToString(key.hash)}:${common.uInt256ToString(key.input.hash)}:${key.input.index}`, - matchesPartialKey: (value, key) => common.uInt160Equal(value.hash, key.hash), - createAddChange: (value) => ({ type: 'accountUnspent', value }), - createDeleteChange: (key) => ({ type: 'accountUnspent', key }), - }), - accountUnclaimed: new ReadGetAllAddDeleteStorageCache({ - name: 'accountUnclaimed', - readGetAllStorage: () => this.storage.accountUnclaimed, - getKeyFromValue: (value) => ({ hash: value.hash, input: value.input }), - getKeyString: (key) => - `${common.uInt160ToString(key.hash)}:${common.uInt256ToString(key.input.hash)}:${key.input.index}`, - matchesPartialKey: (value, key) => common.uInt160Equal(value.hash, key.hash), - createAddChange: (value) => ({ type: 'accountUnclaimed', value }), - createDeleteChange: (key) => ({ type: 'accountUnclaimed', key }), - }), - action: new ReadGetAllAddStorageCache({ - name: 'action', - readGetAllStorage: () => this.storage.action, - getKeyFromValue: (value) => ({ - index: value.index, - }), - getKeyString: (key) => key.index.toString(10), - matchesPartialKey: (value, key) => - (key.indexStart === undefined || value.index.gte(key.indexStart)) && - (key.indexStop === undefined || value.index.lte(key.indexStop)), - createAddChange: (value) => ({ type: 'action', value }), - }), - asset: new ReadAddUpdateStorageCache({ - name: 'asset', - readStorage: () => this.storage.asset, - update: (value, update) => value.update(update), - getKeyFromValue: (value) => ({ hash: value.hash }), - getKeyString: (key) => common.uInt256ToString(key.hash), - createAddChange: (value) => ({ type: 'asset', value }), - }), - block: new BlockLikeStorageCache({ - name: 'block', - readStorage: () => ({ - get: this.storage.block.get, - tryGet: this.storage.block.tryGet, - }), - createAddChange: (value) => ({ type: 'block', value }), - }), - blockData: new ReadAddStorageCache({ - name: 'blockData', - readStorage: () => this.storage.blockData, - getKeyFromValue: (value) => ({ hash: value.hash }), - getKeyString: (key) => common.uInt256ToString(key.hash), - createAddChange: (value) => ({ type: 'blockData', value }), - }), - header: new BlockLikeStorageCache({ - name: 'header', - readStorage: () => ({ - get: this.storage.header.get, - tryGet: this.storage.header.tryGet, - }), - createAddChange: (value) => ({ type: 'header', value }), - }), - transaction: new ReadAddStorageCache({ - name: 'transaction', - readStorage: () => this.storage.transaction, - getKeyFromValue: (value) => ({ hash: value.hash }), - getKeyString: (key) => common.uInt256ToString(key.hash), - createAddChange: (value) => ({ type: 'transaction', value }), - onAdd: async (value) => { - await Promise.all( - value.outputs.map(async (out, index) => output.add({ hash: value.hash, index, output: out })), - ); - }, - allowDupes: true, - }), - transactionData: new ReadAddUpdateStorageCache({ - name: 'transactionData', - readStorage: () => this.storage.transactionData, - update: (value, update) => value.update(update), - getKeyFromValue: (value) => ({ hash: value.hash }), - getKeyString: (key) => common.uInt256ToString(key.hash), - createAddChange: (value) => ({ type: 'transactionData', value }), - allowDupes: true, - }), - output, - contract: new ReadAddDeleteStorageCache({ - name: 'contract', - readStorage: () => this.storage.contract, - getKeyFromValue: (value) => ({ hash: value.hash }), - getKeyString: (key) => common.uInt160ToString(key.hash), - createAddChange: (value) => ({ type: 'contract', value }), - createDeleteChange: (key) => ({ type: 'contract', key }), - }), - storageItem: new ReadGetAllAddUpdateDeleteStorageCache({ - name: 'storageItem', - readGetAllStorage: () => this.storage.storageItem, - update: (value, update) => value.update(update), - getKeyFromValue: (value) => ({ - hash: value.hash, - key: value.key, - }), - getKeyString: (key) => `${common.uInt160ToString(key.hash)}:${key.key.toString('hex')}`, - matchesPartialKey: (value, key) => - (key.hash === undefined || common.uInt160Equal(value.hash, key.hash)) && - (key.prefix === undefined || key.prefix.every((byte, idx) => value.key[idx] === byte)), - createAddChange: (value) => ({ type: 'storageItem', value }), - createDeleteChange: (key) => ({ type: 'storageItem', key }), - }), - validator: new ReadAllAddUpdateDeleteStorageCache({ - name: 'validator', - readAllStorage: () => this.storage.validator, - getKeyFromValue: (value) => ({ publicKey: value.publicKey }), - getKeyString: (key) => common.ecPointToString(key.publicKey), - createAddChange: (value) => ({ type: 'validator', value }), - update: (value, update) => value.update(update), - createDeleteChange: (key) => ({ type: 'validator', key }), - }), - invocationData: new ReadAddStorageCache({ - name: 'invocationData', - readStorage: () => this.storage.invocationData, - getKeyFromValue: (value) => ({ hash: value.hash }), - getKeyString: (key) => common.uInt256ToString(key.hash), - createAddChange: (value) => ({ type: 'invocationData', value }), - }), - validatorsCount: new ReadAddUpdateMetadataStorageCache({ - name: 'validatorsCount', - readStorage: () => this.storage.validatorsCount, - createAddChange: (value) => ({ type: 'validatorsCount', value }), - update: (value, update) => value.update(update), - }), - }; - - this.account = this.caches.account; - this.accountUnspent = this.caches.accountUnspent; - this.accountUnclaimed = this.caches.accountUnclaimed; - this.action = this.caches.action; - this.asset = this.caches.asset; - this.block = this.caches.block; - this.blockData = this.caches.blockData; - this.header = this.caches.header; - this.transaction = this.caches.transaction; - this.transactionData = this.caches.transactionData; - this.output = this.caches.output; - this.contract = this.caches.contract; - this.storageItem = this.caches.storageItem; - this.validator = this.caches.validator; - this.invocationData = this.caches.invocationData; - this.validatorsCount = this.caches.validatorsCount; - } - - public get currentBlock(): Block { - if (this.currentBlockInternal === undefined) { - throw new GenesisBlockNotRegisteredError(); - } - - return this.currentBlockInternal; - } - - public get currentBlockIndex(): number { - return this.currentBlockInternal === undefined ? 0 : this.currentBlockInternal.index; - } - - public get currentHeader(): Header { - if (this.currentHeaderInternal === undefined) { - throw new GenesisBlockNotRegisteredError(); - } - - return this.currentHeaderInternal; - } - - public getChangeSet(): ChangeSet { - return Object.values(this.caches).reduce((acc, cache) => acc.concat(cache.getChangeSet()), []); - } - - // tslint:disable-next-line no-any - public getTrackedChangeSet(): TrackedChangeSet { - // tslint:disable-next-line no-any - return Object.values(this.caches).reduce>( - (acc, cache) => acc.concat(cache.getTrackedChangeSet()), - [], - ); - } - - public async persistBlock(block: Block): Promise { - const [maybePrevBlockData, outputContractsList] = await Promise.all([ - block.index === 0 ? Promise.resolve(undefined) : this.blockData.get({ hash: block.previousHash }), - Promise.all( - [ - ...new Set( - block.transactions.reduce( - (acc, transaction) => - acc.concat(transaction.outputs.map((output) => common.uInt160ToString(output.address))), - - [], - ), - ), - ].map(async (hash) => this.contract.tryGet({ hash: common.stringToUInt160(hash) })), - ), - - this.block.add(block), - this.header.add(block.header), - ]); - - const prevBlockData = - maybePrevBlockData === undefined - ? { - lastGlobalTransactionIndex: utils.NEGATIVE_ONE, - lastGlobalActionIndex: utils.NEGATIVE_ONE, - systemFee: utils.ZERO, - } - : { - lastGlobalTransactionIndex: maybePrevBlockData.lastGlobalTransactionIndex, - lastGlobalActionIndex: maybePrevBlockData.lastGlobalActionIndex, - systemFee: maybePrevBlockData.systemFee, - }; - - const outputContracts: { [key: string]: Contract | undefined } = {}; - outputContractsList.filter(commonUtils.notNull).forEach((outputContract) => { - outputContracts[outputContract.hashHex] = outputContract; - }); - - const [utxo, rest] = _.partition( - block.transactions.map<[number, Transaction]>((transaction, idx) => [idx, transaction]), - // tslint:disable-next-line no-unused - ([idx, transaction]) => - ((transaction.type === TransactionType.Claim && transaction instanceof ClaimTransaction) || - (transaction.type === TransactionType.Contract && transaction instanceof ContractTransaction) || - (transaction.type === TransactionType.Miner && transaction instanceof MinerTransaction)) && - !transaction.outputs.some((output) => outputContracts[common.uInt160ToString(output.address)] !== undefined), - ); - - const [globalActionIndex] = await Promise.all([ - rest.length > 0 - ? this.persistTransactions( - block, - // tslint:disable-next-line no-any - rest as any, - prevBlockData.lastGlobalTransactionIndex, - prevBlockData.lastGlobalActionIndex, - ) - : Promise.resolve(prevBlockData.lastGlobalActionIndex), - utxo.length > 0 - ? // tslint:disable-next-line no-any - this.persistUTXOTransactions(block, utxo as any, prevBlockData.lastGlobalTransactionIndex) - : Promise.resolve(), - ]); - - await this.blockData.add( - new BlockData({ - hash: block.hash, - lastGlobalTransactionIndex: prevBlockData.lastGlobalTransactionIndex.add(new BN(block.transactions.length)), - - lastGlobalActionIndex: globalActionIndex, - systemFee: prevBlockData.systemFee.add( - block.getSystemFee({ - getOutput: this.output.get, - governingToken: this.settings.governingToken, - utilityToken: this.settings.utilityToken, - fees: this.settings.fees, - registerValidatorFee: this.settings.registerValidatorFee, - }), - ), - }), - ); - } - - private async persistUTXOTransactions( - block: Block, - transactions: ReadonlyArray, - lastGlobalTransactionIndex: BN, - ): Promise { - const inputs = []; - const claims = []; - const outputWithInputs = []; - // tslint:disable-next-line no-unused no-loop-statement no-dead-store - for (const idxAndTransaction of transactions) { - const transaction = idxAndTransaction[1]; - inputs.push(...transaction.inputs); - if (transaction.type === TransactionType.Claim && transaction instanceof ClaimTransaction) { - claims.push(...transaction.claims); - } - outputWithInputs.push(...this.getOutputWithInput(transaction)); - } - await Promise.all([ - Promise.all( - // tslint:disable-next-line no-unused - transactions.map(async ([idx, transaction]) => this.transaction.add(transaction)), - ), - Promise.all( - transactions.map(async ([idx, transaction]) => - this.transactionData.add( - new TransactionData({ - hash: transaction.hash, - startHeight: block.index, - blockHash: block.hash, - index: idx, - globalIndex: lastGlobalTransactionIndex.add(new BN(idx + 1)), - }), - ), - ), - ), - - this.updateAccounts(inputs, claims, outputWithInputs), - this.updateCoins(inputs, claims, block), - ]); - } - - private async persistTransactions( - block: Block, - transactions: ReadonlyArray, - lastGlobalTransactionIndex: BN, - lastGlobalActionIndex: BN, - ): Promise { - let globalActionIndex = lastGlobalActionIndex.add(utils.ONE); - // tslint:disable-next-line no-loop-statement - for (const [idx, transaction] of transactions) { - globalActionIndex = await this.persistTransaction( - block, - transaction, - idx, - lastGlobalTransactionIndex, - globalActionIndex, - ); - } - - return globalActionIndex.sub(utils.ONE); - } - - private async persistTransaction( - block: Block, - transactionIn: Transaction, - transactionIndex: number, - lastGlobalTransactionIndex: BN, - globalActionIndexIn: BN, - ): Promise { - let globalActionIndex = globalActionIndexIn; - const transaction = transactionIn; - const claims = - transaction.type === TransactionType.Claim && transaction instanceof ClaimTransaction ? transaction.claims : []; - let accountChanges = {}; - let validatorChanges = {}; - let validatorsCountChanges: ValidatorsCountChanges = []; - if (transaction.type === TransactionType.State && transaction instanceof StateTransaction) { - ({ accountChanges, validatorChanges, validatorsCountChanges } = await getDescriptorChanges({ - transactions: [transaction], - getAccount: async (hash) => - this.account.tryGet({ hash }).then((account) => (account === undefined ? new Account({ hash }) : account)), - - governingTokenHash: this.settings.governingToken.hashHex, - })); - } - await Promise.all([ - this.transaction.add(transaction), - this.transactionData.add( - new TransactionData({ - hash: transaction.hash, - blockHash: block.hash, - startHeight: block.index, - index: transactionIndex, - globalIndex: lastGlobalTransactionIndex.add(new BN(transactionIndex + 1)), - }), - ), - - this.updateAccounts(transaction.inputs, claims, this.getOutputWithInput(transaction), accountChanges), - - this.updateCoins(transaction.inputs, claims, block), - this.processStateTransaction(validatorChanges, validatorsCountChanges), - ]); - - if (transaction.type === TransactionType.Register && transaction instanceof RegisterTransaction) { - await this.asset.add( - new Asset({ - hash: transaction.hash, - type: transaction.asset.type, - name: transaction.asset.name, - amount: transaction.asset.amount, - precision: transaction.asset.precision, - owner: transaction.asset.owner, - admin: transaction.asset.admin, - issuer: transaction.asset.admin, - expiration: this.currentBlockIndex + 2 * 2000000, - isFrozen: false, - }), - ); - } else if (transaction.type === TransactionType.Issue && transaction instanceof IssueTransaction) { - const results = await Promise.all( - Object.entries( - transaction.getTransactionResults({ - getOutput: this.output.get, - }), - ), - ); - - await Promise.all( - results.map(async ([assetHex, value]) => { - const hash = common.stringToUInt256(assetHex); - const asset = await this.asset.get({ hash }); - await this.asset.update(asset, { - available: asset.available.add(value.neg()), - }); - }), - ); - } else if (transaction.type === TransactionType.Enrollment && transaction instanceof EnrollmentTransaction) { - await this.validator.add( - new Validator({ - publicKey: transaction.publicKey, - }), - ); - } else if (transaction.type === TransactionType.Publish && transaction instanceof PublishTransaction) { - const contract = await this.contract.tryGet({ - hash: transaction.contract.hash, - }); - - if (contract === undefined) { - await this.contract.add(transaction.contract); - } - } else if (transaction.type === TransactionType.Invocation && transaction instanceof InvocationTransaction) { - const temporaryBlockchain = new WriteBatchBlockchain({ - settings: this.settings, - currentBlock: this.currentBlockInternal, - currentHeader: this.currentHeader, - // tslint:disable-next-line no-any - storage: this as any, - vm: this.vm, - getValidators: this.getValidators, - }); - - const migratedContractHashes: Array = []; - const voteUpdates: Array]> = []; - const actions: Array = []; - const result = await wrapExecuteScripts(async () => - this.vm.executeScripts({ - scripts: [{ code: transaction.script }], - blockchain: temporaryBlockchain, - scriptContainer: { - type: ScriptContainerType.Transaction, - value: transaction, - }, - - triggerType: TriggerType.Application, - action: { - blockIndex: block.index, - blockHash: block.hash, - transactionIndex, - transactionHash: transaction.hash, - }, - - gas: transaction.gas, - listeners: { - onLog: ({ message, scriptHash }) => { - actions.push( - new LogAction({ - index: globalActionIndex, - scriptHash, - message, - }), - ); - - globalActionIndex = globalActionIndex.add(utils.ONE); - }, - onNotify: ({ args, scriptHash }) => { - actions.push( - new NotificationAction({ - index: globalActionIndex, - scriptHash, - args, - }), - ); - - globalActionIndex = globalActionIndex.add(utils.ONE); - }, - onMigrateContract: ({ from, to }) => { - migratedContractHashes.push([from, to] as const); - }, - onSetVotes: ({ address, votes }) => { - voteUpdates.push([address, votes] as const); - }, - }, - - persistingBlock: block, - }), - ); - - const addActionsPromise = Promise.all(actions.map(async (action) => this.action.add(action))); - - if (result instanceof InvocationResultSuccess) { - const assetChangeSet = temporaryBlockchain.asset.getChangeSet(); - const assetHash = assetChangeSet - .map((change) => - change.type === 'add' && change.change.type === 'asset' ? change.change.value.hash : undefined, - ) - .find((value) => value !== undefined); - - const contractsChangeSet = temporaryBlockchain.contract.getChangeSet(); - const contractHashes = contractsChangeSet - .map((change) => - change.type === 'add' && change.change.type === 'contract' ? change.change.value.hash : undefined, - ) - .filter(commonUtils.notNull); - - const deletedContractHashes = contractsChangeSet - .map((change) => - change.type === 'delete' && change.change.type === 'contract' ? change.change.key.hash : undefined, - ) - .filter(commonUtils.notNull); - - const storageChanges = temporaryBlockchain.storageItem - .getChangeSet() - .map((change) => { - const addChange = - change.type === 'add' && change.change.type === 'storageItem' - ? { value: change.change.value, subType: change.subType } - : undefined; - if (addChange !== undefined) { - const options = { - hash: addChange.value.hash, - key: addChange.value.key, - value: addChange.value.value, - }; - - return addChange.subType === 'add' ? new StorageChangeAdd(options) : new StorageChangeModify(options); - } - - const deleteChange = - change.type === 'delete' && change.change.type === 'storageItem' ? change.change.key : undefined; - if (deleteChange !== undefined) { - return new StorageChangeDelete(deleteChange); - } - - return undefined; - }) - .filter(commonUtils.notNull); - - temporaryBlockchain.getTrackedChangeSet().forEach((change) => { - this.caches[change.type as keyof Caches].addTrackedChange(change.key, change.value); - }); - await Promise.all([ - this.invocationData.add( - new InvocationData({ - hash: transaction.hash, - assetHash, - contractHashes, - deletedContractHashes, - migratedContractHashes, - voteUpdates, - blockIndex: block.index, - transactionIndex, - actionIndexStart: globalActionIndexIn, - actionIndexStop: globalActionIndex, - result, - storageChanges, - }), - ), - addActionsPromise, - ]); - } else { - await Promise.all([ - this.invocationData.add( - new InvocationData({ - hash: transaction.hash, - assetHash: undefined, - contractHashes: [], - deletedContractHashes: [], - migratedContractHashes: [], - voteUpdates: [], - blockIndex: block.index, - transactionIndex, - actionIndexStart: globalActionIndexIn, - actionIndexStop: globalActionIndex, - result, - storageChanges: [], - }), - ), - addActionsPromise, - ]); - } - } - - return globalActionIndex; - } - - private async processStateTransaction( - validatorChanges: ValidatorChanges, - validatorsCountChanges: ValidatorsCountChanges, - ): Promise { - const validatorsCount = await this.validatorsCount.tryGet(); - const validatorsCountVotes = validatorsCount === undefined ? [] : [...validatorsCount.votes]; - // tslint:disable-next-line no-loop-statement - for (const [index, value] of validatorsCountChanges.entries()) { - validatorsCountVotes[index] = value; - } - - await Promise.all([ - Promise.all( - Object.entries(validatorChanges).map(async ([publicKeyHex, { registered, votes }]) => { - const publicKey = common.hexToECPoint(publicKeyHex); - const validator = await this.validator.tryGet({ publicKey }); - if (validator === undefined) { - await this.validator.add( - new Validator({ - publicKey, - registered, - votes, - }), - ); - } else if ( - ((registered !== undefined && !registered) || (registered === undefined && !validator.registered)) && - ((votes !== undefined && votes.eq(utils.ZERO)) || (votes === undefined && validator.votes.eq(utils.ZERO))) - ) { - await this.validator.delete({ publicKey: validator.publicKey }); - } else { - await this.validator.update(validator, { votes, registered }); - } - }), - ), - validatorsCount === undefined - ? this.validatorsCount.add( - new ValidatorsCount({ - votes: validatorsCountVotes, - }), - ) - : (async () => { - await this.validatorsCount.update(validatorsCount, { - votes: validatorsCountVotes, - }); - })(), - ]); - } - - private async updateAccounts( - inputs: readonly Input[], - claims: readonly Input[], - outputs: readonly OutputWithInput[], - accountChanges: AccountChanges = {}, - ): Promise { - const [inputOutputs, claimOutputs] = await Promise.all([ - this.getInputOutputs(inputs), - this.getInputOutputs(claims), - ]); - - const addressValues = Object.entries( - _.groupBy( - inputOutputs - .map<[UInt160, UInt256, BN]>(({ output }) => [output.address, output.asset, output.value.neg()]) - .concat(outputs.map<[UInt160, UInt256, BN]>(({ output }) => [output.address, output.asset, output.value])), - ([address]) => common.uInt160ToHex(address), - ), - ); - - const addressSpent = this.groupByAddress(inputOutputs); - const addressClaimed = _.mapValues(this.groupByAddress(claimOutputs), (values) => values.map(({ input }) => input)); - - const addressOutputs = _.groupBy(outputs, (output) => common.uInt160ToHex(output.output.address)); - - await Promise.all( - addressValues.map(async ([address, values]) => { - const spent = addressSpent[address] as readonly OutputWithInput[] | undefined; - const claimed = addressClaimed[address] as readonly Input[] | undefined; - const outs = addressOutputs[address] as readonly OutputWithInput[] | undefined; - const changes = accountChanges[address] as readonly ECPoint[] | undefined; - await this.updateAccount( - common.hexToUInt160(address), - // tslint:disable-next-line no-unused - values.map(([_address, asset, value]) => [asset, value] as const), - spent === undefined ? [] : spent, - claimed === undefined ? [] : claimed, - outs === undefined ? [] : outs, - changes === undefined ? [] : changes, - ); - }), - ); - } - - private getOutputWithInput(transaction: Transaction): readonly OutputWithInput[] { - return transaction.outputs.map((output, index) => ({ - output, - input: new Input({ hash: transaction.hash, index }), - })); - } - - private async getInputOutputs( - inputs: readonly Input[], - ): Promise< - ReadonlyArray<{ - readonly input: Input; - readonly output: Output; - }> - > { - return Promise.all( - inputs.map(async (input) => { - const output = await this.output.get(input); - - return { input, output }; - }), - ); - } - - private groupByAddress( - inputOutputs: readonly OutputWithInput[], - ): { readonly [key: string]: readonly OutputWithInput[] } { - return _.groupBy(inputOutputs, ({ output }) => common.uInt160ToHex(output.address)); - } - - private async updateAccount( - address: UInt160, - values: ReadonlyArray, - spent: readonly OutputWithInput[], - claimed: readonly Input[], - outputs: readonly OutputWithInput[], - votes: readonly ECPoint[], - ): Promise { - const account = await this.account.tryGet({ hash: address }); - - const balances = values.reduce<{ [asset: string]: BN }>( - (acc, [asset, value]) => { - const key = common.uInt256ToHex(asset); - if ((acc[key] as BN | undefined) === undefined) { - acc[key] = utils.ZERO; - } - acc[key] = acc[key].add(value); - - return acc; - }, - account === undefined - ? {} - : Object.entries(account.balances).reduce<{ [asset: string]: BN }>((acc, [key, value]) => { - if (value === undefined) { - return { - ...acc, - [key]: utils.ZERO, - }; - } - - return { - ...acc, - [key]: value, - }; - }, {}), - ); - - const promises = []; - promises.push( - ...spent.map(async ({ input }) => - this.accountUnspent.delete({ - hash: address, - input, - }), - ), - ); - - promises.push( - ...outputs.map(async ({ input }) => this.accountUnspent.add(new AccountUnspent({ hash: address, input }))), - ); - - promises.push( - ...claimed.map(async (input) => - this.accountUnclaimed.delete({ - hash: address, - input, - }), - ), - ); - - promises.push( - ...spent - .filter(({ output }) => common.uInt256Equal(output.asset, this.settings.governingToken.hash)) - .map(async ({ input }) => this.accountUnclaimed.add(new AccountUnclaimed({ hash: address, input }))), - ); - - if (account === undefined) { - promises.push( - this.account.add( - new Account({ - hash: address, - balances, - votes, - }), - ), - ); - } else { - promises.push( - this.account.update(account, { balances, votes }).then(async (newAccount) => { - if (newAccount.isDeletable()) { - await this.account.delete({ hash: address }); - } - }), - ); - } - - await Promise.all(promises); - } - - private async updateCoins(inputs: readonly Input[], claims: readonly Input[], block: Block): Promise { - const inputClaims = inputs - .map((input) => ({ type: 'input', input, hash: input.hash })) - .concat(claims.map((input) => ({ type: 'claim', input, hash: input.hash }))); - - const hashInputClaims = Object.entries(_.groupBy(inputClaims, ({ hash }) => common.uInt256ToHex(hash))); - - await Promise.all( - hashInputClaims.map(async ([hash, values]) => this.updateCoin(common.hexToUInt256(hash), values, block)), - ); - } - - private async updateCoin(hash: UInt256, inputClaims: readonly InputClaim[], block: Block): Promise { - const spentCoins = await this.transactionData.get({ hash }); - const endHeights = { ...spentCoins.endHeights }; - const claimed = { ...spentCoins.claimed }; - // tslint:disable-next-line no-loop-statement - for (const inputClaim of inputClaims) { - if (inputClaim.type === 'input') { - endHeights[inputClaim.input.index] = block.index; - } else { - claimed[inputClaim.input.index] = true; - } - } - - await this.transactionData.update(spentCoins, { - endHeights, - claimed, - }); - } -} diff --git a/packages/neo-one-node-blockchain/src/__tests__/Blockchain.test.ts b/packages/neo-one-node-blockchain/src/__tests__/Blockchain.test.ts index c3dd73413a..723b941d9f 100644 --- a/packages/neo-one-node-blockchain/src/__tests__/Blockchain.test.ts +++ b/packages/neo-one-node-blockchain/src/__tests__/Blockchain.test.ts @@ -1,151 +1,212 @@ -// tslint:disable no-any no-object-mutation -import { common, utils } from '@neo-one/client-common'; -import { - AttributeUsage, - BooleanContractParameter, - InvocationTransaction, - UInt160Attribute, - Witness, -} from '@neo-one/node-core'; +// // tslint:disable no-any no-object-mutation +// import { Transaction, Witness } from '@neo-one/node-core'; +// import { BN } from 'bn.js'; import { of as _of } from 'rxjs'; -import { settings } from '../__data__'; -import { Blockchain } from '../Blockchain'; - -const createBlockchain = async ({ vm, storage }: { readonly vm: any; readonly storage: any }) => - Blockchain.create({ - settings, - storage, - vm, - }); - -describe('Blockchain', () => { - let storage: any; - let vm: any; - beforeEach(() => { - const tryNotFound = () => jest.fn(() => undefined); - const notFound = () => - jest.fn(async () => { - throw new Error('Not found'); - }); - storage = { - account: { - all$: _of([]), - tryGet: tryNotFound(), - get: notFound(), - }, - - accountUnspent: { - tryGet: tryNotFound(), - get: notFound(), - }, - - accountUnclaimed: { - tryGet: tryNotFound(), - get: notFound(), - }, +// import { settings } from '../__data__'; +// import { Blockchain } from '../Blockchain'; - action: { - tryGet: tryNotFound(), - get: notFound(), - }, +import { main } from '@neo-one/node-neo-settings'; +import { Dispatcher } from '@neo-one/node-vm'; +import { Blockchain } from '../Blockchain'; - asset: { - tryGet: tryNotFound(), - get: notFound(), - }, +// const createBlockchain = async ({ vm, storage }: { readonly vm: any; readonly storage: any }) => +// Blockchain.create({ +// settings, +// storage, +// vm, +// }); + +// describe.skip('Blockchain', () => { +// let storage: any; +// let vm: any; +// beforeEach(() => { +// const tryNotFound = () => jest.fn(() => undefined); +// const notFound = () => +// jest.fn(async () => { +// throw new Error('Not found'); +// }); +// storage = { +// account: { +// all$: _of([]), +// tryGet: tryNotFound(), +// get: notFound(), +// }, + +// accountUnspent: { +// tryGet: tryNotFound(), +// get: notFound(), +// }, + +// accountUnclaimed: { +// tryGet: tryNotFound(), +// get: notFound(), +// }, + +// action: { +// tryGet: tryNotFound(), +// get: notFound(), +// }, + +// asset: { +// tryGet: tryNotFound(), +// get: notFound(), +// }, + +// block: { +// tryGetLatest: jest.fn(async () => settings.genesisBlock), +// tryGet: tryNotFound(), +// get: notFound(), +// }, + +// blockData: { +// tryGet: tryNotFound(), +// get: notFound(), +// }, + +// header: { +// tryGetLatest: jest.fn(async () => settings.genesisBlock.header), +// tryGet: tryNotFound(), +// get: notFound(), +// }, + +// transaction: { +// tryGet: tryNotFound(), +// get: notFound(), +// }, + +// transactionData: { +// tryGet: tryNotFound(), +// get: notFound(), +// }, + +// output: { +// tryGet: tryNotFound(), +// get: notFound(), +// }, + +// contract: { +// tryGet: tryNotFound(), +// get: notFound(), +// }, + +// storageItem: { +// tryGet: tryNotFound(), +// get: notFound(), +// }, + +// validator: { +// all$: _of([]), +// tryGet: tryNotFound(), +// get: notFound(), +// }, + +// invocationData: { +// tryGet: tryNotFound(), +// get: notFound(), +// }, + +// validatorsCount: { +// tryGet: tryNotFound(), +// get: notFound(), +// }, +// }; + +// vm = {}; +// }); +// describe('verifyTransaction', () => { +// test('should throw error on invalid script', async () => { +// const blockchain = await createBlockchain({ vm, storage }); + +// const result = await blockchain.verifyTransaction({ +// transaction: new Transaction({ +// script: Buffer.alloc(1, 0), +// attributes: [], + +// witnesses: [ +// new Witness({ +// invocation: Buffer.alloc(0, 0), +// verification: Buffer.alloc(0, 0), +// }), +// ], +// systemFee: new BN(0), +// networkFee: new BN(0), +// validUntilBlock: 100000, +// nonce: 0, +// }), +// }); +// const verifyResult = result.verifications.find(({ failureMessage }) => failureMessage !== undefined); +// expect(verifyResult).toBeDefined(); +// if (verifyResult !== undefined) { +// expect(verifyResult.failureMessage).toEqual('Verification did not succeed.'); +// } +// }); +// }); +// }); + +test('Blockchain', async () => { + const tryNotFound = () => jest.fn(() => Promise.resolve(undefined)); + const notFound = () => + jest.fn(async () => { + throw new Error('Not found'); + }); + const empty$ = _of(); + const changeSet = []; + // tslint:disable-next-line: no-any + const commit = async (changes: any) => { + // tslint:disable-next-line: no-array-mutation + changeSet.push(changes); - block: { - tryGetLatest: jest.fn(async () => settings.genesisBlock), + return Promise.resolve(); + }; + const close = jest.fn(); + const reset = jest.fn(); + const dispatcher = new Dispatcher(); + const blockchain = await Blockchain.create({ + vm: dispatcher, + settings: main(), + storage: { + commit, + close, + reset, + blocks: { tryGet: tryNotFound(), get: notFound(), + all$: empty$ as any, }, - blockData: { + transactions: { tryGet: tryNotFound(), get: notFound(), }, - header: { - tryGetLatest: jest.fn(async () => settings.genesisBlock.header), + contracts: { tryGet: tryNotFound(), get: notFound(), }, - transaction: { + storages: { tryGet: tryNotFound(), get: notFound(), }, - transactionData: { + headerHashList: { tryGet: tryNotFound(), get: notFound(), + all$: empty$ as any, }, - - output: { - tryGet: tryNotFound(), + blockHashIndex: { get: notFound(), - }, - - contract: { tryGet: tryNotFound(), - get: notFound(), }, - - storageItem: { - tryGet: tryNotFound(), + headerHashIndex: { get: notFound(), - }, - - validator: { - all$: _of([]), tryGet: tryNotFound(), - get: notFound(), }, - invocationData: { - tryGet: tryNotFound(), + contractID: { get: notFound(), - }, - - validatorsCount: { tryGet: tryNotFound(), - get: notFound(), }, - }; - - vm = {}; - }); - describe('verifyTransaction', () => { - test('should throw error on invalid script', async () => { - const blockchain = await createBlockchain({ vm, storage }); - vm.executeScripts = jest.fn(() => ({ - stack: [new BooleanContractParameter(false)], - })); - - const result = await blockchain.verifyTransaction({ - transaction: new InvocationTransaction({ - script: Buffer.alloc(1, 0), - gas: utils.ZERO, - attributes: [ - new UInt160Attribute({ - usage: AttributeUsage.Script, - value: common.ZERO_UINT160, - }), - ], - - scripts: [ - new Witness({ - invocation: Buffer.alloc(0, 0), - verification: Buffer.alloc(0, 0), - }), - ], - }), - }); - const verifyResult = result.verifications.find(({ failureMessage }) => failureMessage !== undefined); - expect(verifyResult).toBeDefined(); - if (verifyResult !== undefined) { - expect(verifyResult.failureMessage).toEqual('Verification did not succeed.'); - } - }); + }, }); }); diff --git a/packages/neo-one-node-blockchain/src/__tests__/BlockchainE2E.test.ts b/packages/neo-one-node-blockchain/src/__tests__/BlockchainE2E.test.ts new file mode 100644 index 0000000000..089b60cd65 --- /dev/null +++ b/packages/neo-one-node-blockchain/src/__tests__/BlockchainE2E.test.ts @@ -0,0 +1,31 @@ +// this should be an e2e actually but zoom zoom +import { main } from '@neo-one/node-neo-settings'; +import { storage as levelupStorage } from '@neo-one/node-storage-levelup'; +import { Dispatcher } from '@neo-one/node-vm'; +import LevelDOWN from 'leveldown'; +import LevelUp from 'levelup'; +import { Blockchain } from '../Blockchain'; + +describe('blockchain persist genesis block test', () => { + test('test', async () => { + const blockchainSettings = main(); + const genesisHash = blockchainSettings.genesisBlock.hash; + const levelDBPath = '/Users/danielbyrne/Desktop/test-location'; + const db = LevelUp(LevelDOWN(levelDBPath)); + const storage = levelupStorage({ + db, + context: { messageMagic: blockchainSettings.messageMagic }, + }); + + const dispatcher = new Dispatcher({ levelDBPath }); + + const blockchain = await Blockchain.create({ + settings: blockchainSettings, + storage, + vm: dispatcher, + }); + + const genesis = await blockchain.blocks.tryGet({ hashOrIndex: genesisHash }); + expect(genesis).toBeDefined(); + }); +}); diff --git a/packages/neo-one-node-blockchain/src/__tests__/StorageCache.test.ts b/packages/neo-one-node-blockchain/src/__tests__/StorageCache.test.ts index 82a0e6224b..a87403a7d9 100644 --- a/packages/neo-one-node-blockchain/src/__tests__/StorageCache.test.ts +++ b/packages/neo-one-node-blockchain/src/__tests__/StorageCache.test.ts @@ -2,7 +2,7 @@ import { common } from '@neo-one/client-common'; import { StorageFlags, StorageItem, StorageItemKey, StorageItemsKey, StorageItemUpdate } from '@neo-one/node-core'; import { ReadGetAllAddUpdateDeleteStorageCache } from '../StorageCache'; -describe('StorageCache', () => { +describe.skip('StorageCache', () => { const hash = common.asUInt160(Buffer.from('197ff6783d512a740d42f4cc4f5572955fa44c95', 'hex')); const key = common.asUInt160(Buffer.from('f3812db982f3b0089a21a278988efeec6a027b25', 'hex')); diff --git a/packages/neo-one-node-blockchain/src/errors.ts b/packages/neo-one-node-blockchain/src/errors.ts index 029038c2e3..9d0f8c3884 100644 --- a/packages/neo-one-node-blockchain/src/errors.ts +++ b/packages/neo-one-node-blockchain/src/errors.ts @@ -16,7 +16,32 @@ export const CoinClaimedError = makeErrorWithCode( 'COIN_CLAIMED', (asset: string, value: string) => `Coin with asset: ${asset}, value: ${value} is already claimed.`, ); -export const CoinUnspentError = makeErrorWithCode( - 'COIN_UNSPENT', - (unspentCoins: number) => `${unspentCoins} coins unspent.`, +export const BlockVerifyError = makeErrorWithCode( + 'BLOCK_VERIFICATION_FAILED', + (hash: string) => `Block with hash: ${hash} failed to verify.`, +); +export const ConsensusPayloadVerifyError = makeErrorWithCode( + 'CONSENSUS_PAYLOAD_VERIFICATION_FAILED', + (hash: string) => `ConsensusPayload with hash: ${hash} failed to verify`, +); +export const PersistNativeContractsError = makeErrorWithCode( + 'PERSIST_NATIVE_CONTRACTS_FAILED', + () => 'Engine state !== HALT when persisting native contract scripts', +); +export const PostPersistError = makeErrorWithCode( + 'POST_PERSIST_SCRIPT_FAILED', + () => 'Engine state !== HALT when running post persist scripts', +); +export const ContractStateFetchError = makeErrorWithCode( + 'FETCH_CONTRACT_FAILED', + (hash: string) => `failed to fetch contract state with hash: ${hash} from storage.`, +); +export const ContractMethodError = makeErrorWithCode( + 'GET_CONTRACT_METHOD_FAILED', + (method: string, hash: string) => `failed to fetch method ${method} from contract manifest at hash: ${hash}.`, +); +export const RecoverBlockchainError = makeErrorWithCode( + 'BLOCKCHAIN_RECOVERY_FAILED', + (index: number) => + `headerIndex storage returned ${index} blocks, however we failed to find the latest block in storage.`, ); diff --git a/packages/neo-one-node-blockchain/src/getNep5UpdateOptions.ts b/packages/neo-one-node-blockchain/src/getNep5UpdateOptions.ts new file mode 100644 index 0000000000..ba2ce55b4f --- /dev/null +++ b/packages/neo-one-node-blockchain/src/getNep5UpdateOptions.ts @@ -0,0 +1,151 @@ +import { common, VMState } from '@neo-one/client-common'; +import { + ApplicationExecuted, + Block, + isByteStringStackItem, + isIntegerStackItem, + Nep5BalanceKey, + Nep5Transfer, + Nep5TransferKey, +} from '@neo-one/node-core'; +import { utils } from './utils'; + +export interface Nep5TransferReturn { + readonly key: Nep5TransferKey; + readonly value: Nep5Transfer; +} + +export interface Nep5UpdateOptions { + readonly assetKeys: readonly Nep5BalanceKey[]; + readonly transfersSent: readonly Nep5TransferReturn[]; + readonly transfersReceived: readonly Nep5TransferReturn[]; +} + +export function getNep5UpdateOptions({ + applicationsExecuted, + block, +}: { + readonly applicationsExecuted: readonly ApplicationExecuted[]; + readonly block: Block; +}): Nep5UpdateOptions { + let transferIndex = 0; + const nep5BalancesChanged = new Set(); + const mutableNep5BalancesChangedKeys: Nep5BalanceKey[] = []; + const mutableTransfersSent: Nep5TransferReturn[] = []; + const mutableTransfersReceived: Nep5TransferReturn[] = []; + + applicationsExecuted.forEach((appExecuted) => { + if (appExecuted.state === VMState.FAULT) { + return; + } + + appExecuted.notifications.forEach((notifyEventArgs) => { + const { container, scriptHash, eventName, state: stateItems } = notifyEventArgs; + + if (stateItems.length === 0) { + return; + } + if (eventName !== 'Transfer') { + return; + } + if (stateItems.length < 3) { + return; + } + if (!stateItems[0].isNull && !isByteStringStackItem(stateItems[0])) { + return; + } + if (!stateItems[1].isNull && !isByteStringStackItem(stateItems[1])) { + return; + } + const amountItem = stateItems[2]; + if (!(isByteStringStackItem(amountItem) || isIntegerStackItem(amountItem))) { + return; + } + const fromBytes = stateItems[0].isNull ? undefined : stateItems[0].getBuffer(); + if (fromBytes !== undefined && fromBytes.length !== common.UINT160_BUFFER_BYTES) { + return; + } + const toBytes = stateItems[1].isNull ? undefined : stateItems[1].getBuffer(); + if (toBytes !== undefined && toBytes.length !== common.UINT160_BUFFER_BYTES) { + return; + } + if (fromBytes === undefined && toBytes === undefined) { + return; + } + let from = common.ZERO_UINT160; + let to = common.ZERO_UINT160; + + if (fromBytes !== undefined) { + from = common.bufferToUInt160(fromBytes); + const fromKey = new Nep5BalanceKey({ userScriptHash: from, assetScriptHash: scriptHash }); + const fromKeyString = fromKey.serializeWire().toString('hex'); + // No need to check address balance for every single transfer. Just need to check new balances for + // addresses that we know have transferred assets + + // mutableNep5BalancesChangedKeys will be used to run scripts to check storage for new balance of each address + // whose balance we know has changed based on the transfers we know happened + if (!nep5BalancesChanged.has(fromKeyString)) { + nep5BalancesChanged.add(fromKeyString); + mutableNep5BalancesChangedKeys.push(fromKey); + } + } + + if (toBytes !== undefined) { + to = common.bufferToUInt160(toBytes); + const toKey = new Nep5BalanceKey({ userScriptHash: to, assetScriptHash: scriptHash }); + const toKeyString = toKey.serializeWire().toString('hex'); + if (!nep5BalancesChanged.has(toKeyString)) { + nep5BalancesChanged.add(toKeyString); + mutableNep5BalancesChangedKeys.push(toKey); + } + } + + if (utils.isTransaction(container)) { + const amount = amountItem.getInteger(); + const txHash = container.hash; + + if (!from.equals(common.ZERO_UINT160)) { + mutableTransfersSent.push({ + key: new Nep5TransferKey({ + userScriptHash: from, + timestampMS: block.timestamp, + assetScriptHash: scriptHash, + blockTransferNotificationIndex: transferIndex, + }), + value: new Nep5Transfer({ + userScriptHash: to, + txHash, + blockIndex: block.index, + amountBuffer: amount.toBuffer(), + }), + }); + } + + if (!to.equals(common.ZERO_UINT160)) { + mutableTransfersReceived.push({ + key: new Nep5TransferKey({ + userScriptHash: to, + timestampMS: block.timestamp, + assetScriptHash: scriptHash, + blockTransferNotificationIndex: transferIndex, + }), + value: new Nep5Transfer({ + userScriptHash: from, + txHash, + blockIndex: block.index, + amountBuffer: amount.toBuffer(), + }), + }); + } + + transferIndex += 1; + } + }); + }); + + return { + assetKeys: mutableNep5BalancesChangedKeys, + transfersSent: mutableTransfersSent, + transfersReceived: mutableTransfersReceived, + }; +} diff --git a/packages/neo-one-node-blockchain/src/getValidators.ts b/packages/neo-one-node-blockchain/src/getValidators.ts deleted file mode 100644 index 70c51b2600..0000000000 --- a/packages/neo-one-node-blockchain/src/getValidators.ts +++ /dev/null @@ -1,359 +0,0 @@ -// tslint:disable no-object-mutation no-array-mutation no-loop-statement -import { common, ECPoint, UInt160, UInt256Hex } from '@neo-one/client-common'; -import { - Account, - BinaryReader, - Output, - StateDescriptor, - StateTransaction, - Transaction, - TransactionType, - utils, - Validator, - ValidatorKey, - ValidatorsCount, - ValidatorsCountUpdate, - ValidatorUpdate, -} from '@neo-one/node-core'; -import { BN } from 'bn.js'; -import _ from 'lodash'; -import { Blockchain } from './Blockchain'; -import { ValidatorCache } from './ValidatorCache'; - -const processOutput = async ( - blockchain: Blockchain, - cache: ValidatorCache, - output: Output, - negative: boolean, -): Promise => { - let { value } = output; - if (negative) { - value = value.neg(); - } - const [account] = await Promise.all([ - cache.getAccount(output.address), - cache.updateAccountBalance(output.address, output.asset, value), - ]); - - if (common.uInt256Equal(output.asset, blockchain.settings.governingToken.hash) && account.votes.length > 0) { - await Promise.all([ - Promise.all(account.votes.map(async (publicKey) => cache.updateValidatorVotes(publicKey, value))), - - cache.updateValidatorsCountVotes(account.votes.length - 1, value), - ]); - } -}; - -const processTransaction = async ( - blockchain: Blockchain, - cache: ValidatorCache, - transaction: Transaction, -): Promise => { - let allOutputs = await Promise.all( - transaction.inputs.map(async (input) => { - const output = await blockchain.output.get(input); - - return { output, negative: true }; - }), - ); - - allOutputs = allOutputs.concat(transaction.outputs.map((output) => ({ output, negative: false }))); - - await Promise.all(allOutputs.map(async ({ output, negative }) => processOutput(blockchain, cache, output, negative))); - - const accountHashes = [...new Set(allOutputs.map(({ output }) => common.uInt160ToHex(output.address)))].map((hash) => - common.hexToUInt160(hash), - ); - const touchedValidators = await Promise.all( - accountHashes.map(async (hash) => { - const account = await cache.getAccount(hash); - - return account.votes; - }), - ); - - const touchedValidatorsSet = [ - ...new Set( - touchedValidators.reduce( - (acc, votes) => acc.concat(votes.map((vote) => common.ecPointToHex(vote))), - [], - ), - ), - ].map((publicKey) => common.hexToECPoint(publicKey)); - await Promise.all( - touchedValidatorsSet.map(async (publicKey) => { - const validator = await cache.getValidator(publicKey); - if (!validator.registered && validator.votes.eq(utils.ZERO)) { - await cache.deleteValidator(publicKey); - } - }), - ); -}; - -// tslint:disable readonly-keyword readonly-array -export interface AccountChanges { - [hash: string]: readonly ECPoint[]; -} -export interface ValidatorVotesChanges { - [hash: string]: BN; -} -export interface ValidatorRegisteredChanges { - [hash: string]: boolean; -} -interface ValidatorChange { - readonly registered?: boolean; - readonly votes?: BN; -} -export interface ValidatorChanges { - [hash: string]: ValidatorChange; -} -export type ValidatorsCountChanges = BN[]; -// tslint:enable readonly-keyword readonly-array - -export const getDescriptorChanges = async ({ - transactions, - getAccount, - governingTokenHash, -}: { - readonly transactions: readonly StateTransaction[]; - readonly getAccount: (hash: UInt160) => Promise; - readonly governingTokenHash: UInt256Hex; -}): Promise<{ - readonly accountChanges: AccountChanges; - readonly validatorChanges: ValidatorChanges; - readonly validatorsCountChanges: ValidatorsCountChanges; -}> => { - const accountChanges: AccountChanges = {}; - const validatorVotesChanges: ValidatorVotesChanges = {}; - const validatorRegisteredChanges: ValidatorRegisteredChanges = {}; - const validatorsCountChanges: ValidatorsCountChanges = []; - const allDescriptors = transactions.reduce( - (acc, transaction) => acc.concat(transaction.descriptors), - [], - ); - - const accountDescriptors = allDescriptors.filter((descriptor) => descriptor.type === 0x40); - - const groupedAccountDescriptors = Object.entries( - _.groupBy(accountDescriptors, (descriptor) => common.uInt160ToHex(common.bufferToUInt160(descriptor.key))), - ); - - await Promise.all( - groupedAccountDescriptors.map(async ([hash, descriptors]) => { - const account = await getAccount(common.hexToUInt160(hash)); - const balance = account.getBalance(governingTokenHash); - - // tslint:disable-next-line no-loop-statement - for (const vote of account.votes) { - const voteHex = common.ecPointToHex(vote); - validatorVotesChanges[voteHex] = ((validatorVotesChanges[voteHex] as BN | undefined) === undefined - ? utils.ZERO - : validatorVotesChanges[voteHex] - ).sub(balance); - } - - const descriptor = descriptors[descriptors.length - 1]; - const reader = new BinaryReader(descriptor.value); - const votes = reader.readArray(() => reader.readECPoint()); - if (votes.length !== account.votes.length) { - if (account.votes.length > 0) { - validatorsCountChanges[account.votes.length - 1] = ((validatorsCountChanges[account.votes.length - 1] as - | BN - | undefined) === undefined - ? utils.ZERO - : validatorsCountChanges[account.votes.length - 1] - ).sub(balance); - } - - if (votes.length > 0) { - validatorsCountChanges[votes.length - 1] = ((validatorsCountChanges[votes.length - 1] as BN | undefined) === - undefined - ? utils.ZERO - : validatorsCountChanges[votes.length - 1] - ).add(balance); - } - } - - accountChanges[hash] = votes; - for (const vote of votes) { - const voteHex = common.ecPointToHex(vote); - validatorVotesChanges[voteHex] = ((validatorVotesChanges[voteHex] as BN | undefined) === undefined - ? utils.ZERO - : validatorVotesChanges[voteHex] - ).add(balance); - } - }), - ); - - const validatorDescriptors = allDescriptors.filter((descriptor) => descriptor.type === 0x48); - - for (const descriptor of validatorDescriptors) { - const publicKey = common.bufferToECPoint(descriptor.key); - validatorRegisteredChanges[common.ecPointToHex(publicKey)] = descriptor.value.some((byte) => byte !== 0); - } - - const validatorChanges: ValidatorChanges = {}; - for (const [publicKey, votes] of Object.entries(validatorVotesChanges)) { - validatorChanges[publicKey] = { votes }; - } - - for (const [publicKey, registered] of Object.entries(validatorRegisteredChanges)) { - const current = - (validatorChanges[publicKey] as ValidatorChange | undefined) === undefined ? {} : validatorChanges[publicKey]; - validatorChanges[publicKey] = { - registered, - votes: current.votes, - }; - } - - return { - accountChanges, - validatorChanges, - validatorsCountChanges, - }; -}; - -export const processStateTransaction = async ({ - validatorChanges, - validatorsCountChanges, - tryGetValidatorsCount, - addValidatorsCount, - updateValidatorsCount, - tryGetValidator, - addValidator, - deleteValidator, - updateValidator, -}: { - readonly validatorChanges: ValidatorChanges; - readonly validatorsCountChanges: ValidatorsCountChanges; - readonly tryGetValidatorsCount: () => Promise; - readonly addValidatorsCount: (validatorsCount: ValidatorsCount) => Promise; - readonly updateValidatorsCount: (validatorsCount: ValidatorsCount, update: ValidatorsCountUpdate) => Promise; - - readonly tryGetValidator: (key: ValidatorKey) => Promise; - readonly addValidator: (validator: Validator) => Promise; - readonly deleteValidator: (key: ValidatorKey) => Promise; - readonly updateValidator: (validator: Validator, update: ValidatorUpdate) => Promise; -}): Promise => { - const validatorsCount = await tryGetValidatorsCount(); - const mutableValidatorsCountVotes = validatorsCount === undefined ? [] : [...validatorsCount.votes]; - [...validatorsCountChanges.entries()].forEach(([index, value]) => { - mutableValidatorsCountVotes[index] = value; - }); - - await Promise.all([ - Promise.all( - Object.entries(validatorChanges).map(async ([publicKeyHex, { registered, votes }]) => { - const publicKey = common.hexToECPoint(publicKeyHex); - const validator = await tryGetValidator({ publicKey }); - if (validator === undefined) { - await addValidator( - new Validator({ - publicKey, - registered, - votes, - }), - ); - } else if ( - ((registered !== undefined && !registered) || (registered === undefined && !validator.registered)) && - ((votes !== undefined && votes.eq(utils.ZERO)) || (votes === undefined && validator.votes.eq(utils.ZERO))) - ) { - await deleteValidator({ publicKey: validator.publicKey }); - } else { - await updateValidator(validator, { votes, registered }); - } - }), - ), - validatorsCount === undefined - ? addValidatorsCount( - new ValidatorsCount({ - votes: mutableValidatorsCountVotes, - }), - ) - : updateValidatorsCount(validatorsCount, { - votes: mutableValidatorsCountVotes, - }), - ]); -}; - -export const getValidators = async ( - blockchain: Blockchain, - transactions: readonly Transaction[], -): Promise => { - const cache = new ValidatorCache(blockchain); - await Promise.all(transactions.map(async (transaction) => processTransaction(blockchain, cache, transaction))); - - const { validatorChanges, validatorsCountChanges } = await getDescriptorChanges({ - transactions: transactions.filter( - (transaction): transaction is StateTransaction => - transaction.type === TransactionType.State && transaction instanceof StateTransaction, - ), - - getAccount: async (hash) => cache.getAccount(hash), - governingTokenHash: blockchain.settings.governingToken.hashHex, - }); - - await processStateTransaction({ - validatorChanges, - validatorsCountChanges, - tryGetValidatorsCount: async () => cache.getValidatorsCount(), - addValidatorsCount: async (value) => cache.addValidatorsCount(value), - updateValidatorsCount: async (update) => { - await cache.updateValidatorsCount(update); - }, - tryGetValidator: async (key) => cache.getValidator(key.publicKey), - addValidator: async (validator) => cache.addValidator(validator), - deleteValidator: async (key) => cache.deleteValidator(key.publicKey), - updateValidator: async (value, update) => cache.updateValidator(value.publicKey, update), - }); - - const [validatorsCount, validators] = await Promise.all([cache.getValidatorsCount(), cache.getAllValidators()]); - - const numValidators = Math.max( - utils.weightedAverage( - utils - .weightedFilter( - validatorsCount.votes - .map((votes, count) => ({ count, votes: votes === undefined ? utils.ZERO : votes })) - .filter(({ votes }) => votes.gt(utils.ZERO)), - 0.25, - 0.75, - ({ count }) => new BN(count), - ) - .map(([{ count }, weight]) => ({ value: count, weight })), - ), - - blockchain.settings.standbyValidators.length, - ); - - const standbyValidatorsSet = new Set( - blockchain.settings.standbyValidators.map((publicKey) => common.ecPointToHex(publicKey)), - ); - - const validatorsPublicKeySet = new Set( - _.take( - validators - .filter( - (validator) => - (validator.registered && validator.votes.gt(utils.ZERO)) || - standbyValidatorsSet.has(common.ecPointToHex(validator.publicKey)), - ) - .sort((aValidator, bValidator) => - aValidator.votes.eq(bValidator.votes) - ? common.ecPointCompare(aValidator.publicKey, bValidator.publicKey) - : -aValidator.votes.cmp(bValidator.votes), - ) - .map((validator) => common.ecPointToHex(validator.publicKey)), - numValidators, - ), - ); - - const standbyValidatorsArray = [...standbyValidatorsSet]; - for (let i = 0; i < standbyValidatorsArray.length && validatorsPublicKeySet.size < numValidators; i += 1) { - validatorsPublicKeySet.add(standbyValidatorsArray[i]); - } - - const validatorsPublicKeys = [...validatorsPublicKeySet].map((hex) => common.hexToECPoint(hex)); - - return validatorsPublicKeys.sort((aKey, bKey) => common.ecPointCompare(aKey, bKey)); -}; diff --git a/packages/neo-one-node-blockchain/src/index.ts b/packages/neo-one-node-blockchain/src/index.ts index 526c861eb9..1d0dd9bd23 100644 --- a/packages/neo-one-node-blockchain/src/index.ts +++ b/packages/neo-one-node-blockchain/src/index.ts @@ -1,2 +1 @@ -// tslint:disable-next-line export-name -export { Blockchain } from './Blockchain'; +export * from './Blockchain'; diff --git a/packages/neo-one-node-blockchain/src/utils.ts b/packages/neo-one-node-blockchain/src/utils.ts new file mode 100644 index 0000000000..886f2d9daa --- /dev/null +++ b/packages/neo-one-node-blockchain/src/utils.ts @@ -0,0 +1,113 @@ +import { common, InvalidFormatError, IOHelper, ScriptBuilder, TriggerType, VMState } from '@neo-one/client-common'; +import { + ApplicationEngine, + BlockBase, + CallFlags, + ContractState, + Notification, + Transaction, + utils as coreUtils, + Verifiable, + VM, +} from '@neo-one/node-core'; +import { ScriptVerifyError } from './errors'; + +const hashListBatchSize = 2000; + +const getOnPersistNativeContractScript = coreUtils.lazy(() => { + const builder = new ScriptBuilder(); + builder.emitSysCall('System.Contract.NativeOnPersist'); + + return builder.build(); +}); + +const getPostPersistNativeContractScript = coreUtils.lazy(() => { + const builder = new ScriptBuilder(); + builder.emitSysCall('System.Contract.NativePostPersist'); + + return builder.build(); +}); + +// tslint:disable-next-line: no-any +const isTransaction = (value: any): value is Transaction => value?.type === 'Transaction'; + +const getApplicationExecuted = (engine: ApplicationEngine, container?: Verifiable) => ({ + transaction: isTransaction(container) ? container : undefined, + trigger: engine.trigger, + state: engine.state, + gasConsumed: engine.gasConsumed, + stack: engine.resultStack, + notifications: engine.notifications.map((item) => Notification.fromStackItem(item, container)), + logs: engine.logs, +}); + +const getCallReceipt = (engine: ApplicationEngine, container?: Verifiable) => ({ + state: engine.state, + gasConsumed: engine.gasConsumed, + stack: engine.resultStack, + notifications: engine.notifications.map((item) => Notification.fromStackItem(item, container)), + logs: engine.logs, +}); + +const verifyContract = async (contract: ContractState, vm: VM, transaction: Transaction) => { + const verify = contract.manifest.abi.getMethod('verify'); + if (verify === undefined) { + throw new InvalidFormatError(`the smart contract ${contract.scriptHash} does not have a verify method`); + } + + const init = contract.manifest.abi.getMethod('_initialize'); + const gas = vm.withApplicationEngine( + { + trigger: TriggerType.Verification, + container: transaction, + snapshot: 'clone', + gas: common.TWENTY_FIXED8, + }, + (engine) => { + engine.loadScript({ + script: contract.script, + flags: CallFlags.None, + initialPosition: init ? init.offset : verify.offset, + }); + + engine.loadScript({ script: Buffer.from([]), flags: CallFlags.None }); + const result = engine.execute(); + + if (result === VMState.FAULT) { + throw new ScriptVerifyError(`contract ${contract.scriptHash} returned FAULT state`); + } + + if (engine.resultStack.length !== 1 || !engine.resultStack[0].getBoolean()) { + throw new ScriptVerifyError(`contract ${contract.scriptHash} returns false`); + } + + return engine.gasConsumed; + }, + ); + + return { fee: gas, size: IOHelper.sizeOfUInt8 * 2 }; +}; + +const blockComparator = ({ index: aIndex }: TBlock, { index: bIndex }: TBlock) => { + if (aIndex > bIndex) { + return 1; + } + + if (aIndex < bIndex) { + return -1; + } + + return 0; +}; + +export const utils = { + ...coreUtils, + hashListBatchSize, + getApplicationExecuted, + getCallReceipt, + getOnPersistNativeContractScript, + getPostPersistNativeContractScript, + verifyContract, + blockComparator, + isTransaction, +}; diff --git a/packages/neo-one-node-blockchain/src/verify.ts b/packages/neo-one-node-blockchain/src/verify.ts new file mode 100644 index 0000000000..84005df5cc --- /dev/null +++ b/packages/neo-one-node-blockchain/src/verify.ts @@ -0,0 +1,157 @@ +import { common, TriggerType, UInt160, VMState } from '@neo-one/client-common'; +import { + BlockchainStorage, + CallFlags, + ContractMethodDescriptor, + ExecuteScriptResult, + NativeContainer, + SerializableContainer, + Verifiable, + VM, +} from '@neo-one/node-core'; +import { BN } from 'bn.js'; +import { ContractMethodError, ContractStateFetchError, WitnessVerifyError } from './errors'; + +const maxVerificationGas = common.fixed8FromDecimal('0.5'); + +interface ApplicationEngineVerifyOptions { + readonly verification: Buffer; + readonly offset: number; + readonly init?: ContractMethodDescriptor; +} + +const getApplicationEngineVerifyOptions = async ( + verification: Buffer, + storage: BlockchainStorage, + hash: UInt160, + scriptHash: UInt160, +): Promise => { + if (verification.length === 0) { + const contractState = await storage.contracts.tryGet(hash); + if (contractState === undefined) { + throw new ContractStateFetchError(common.uInt160ToHex(hash)); + } + const methodDescriptor = contractState.manifest.abi.getMethod('verify'); + if (methodDescriptor === undefined) { + throw new ContractMethodError('verify', common.uInt160ToHex(hash)); + } + + return { + verification: contractState.script, + offset: methodDescriptor.offset, + init: contractState.manifest.abi.getMethod('_initialize'), + }; + } + + // tslint:disable-next-line: possible-timing-attack TODO: look into this `possible-timing-attack` warning + if (!hash.equals(scriptHash)) { + throw new WitnessVerifyError(); + } + + return { + verification, + offset: 0, + }; +}; + +export const verifyWithApplicationEngine = ( + vm: VM, + verifiable: Verifiable & SerializableContainer, + verification: Buffer, + index: number, + gas: BN, + offset: number, + init?: ContractMethodDescriptor, +): ExecuteScriptResult => + vm.withApplicationEngine( + { trigger: TriggerType.Verification, container: verifiable, snapshot: 'clone', gas }, + (engine) => { + engine.loadScript({ script: verification, flags: CallFlags.None, initialPosition: init ? init.offset : offset }); + engine.loadScript({ script: verifiable.witnesses[index].invocation, flags: CallFlags.None }); + + const state = engine.execute(); + if (state === VMState.FAULT) { + return { result: false, gas }; + } + + const stack = engine.resultStack; + if (stack.length !== 1 || !stack[0].getBoolean()) { + return { result: false, gas }; + } + + return { result: true, gas: gas.sub(engine.gasConsumed) }; + }, + ); + +export const tryVerifyHash = async ( + vm: VM, + hash: UInt160, + index: number, + storage: BlockchainStorage, + verifiable: Verifiable & SerializableContainer, + gas: BN, +): Promise => { + const { verification: verificationScript, scriptHash } = verifiable.witnesses[index]; + try { + const { verification, offset, init } = await getApplicationEngineVerifyOptions( + verificationScript, + storage, + hash, + scriptHash, + ); + + return verifyWithApplicationEngine(vm, verifiable, verification, index, gas, offset, init); + } catch { + return { gas, result: false }; + } +}; + +export const verifyWitnesses = async ( + vm: VM, + verifiable: Verifiable & SerializableContainer, + storage: BlockchainStorage, + native: NativeContainer, + gasIn: BN, +): Promise => { + if (gasIn.ltn(0)) { + return false; + } + + const gas = gasIn.gt(maxVerificationGas) ? maxVerificationGas : gasIn; + + let hashes: readonly UInt160[]; + try { + hashes = await verifiable.getScriptHashesForVerifying({ storage, native }); + } catch { + return false; + } + + if (hashes.length !== verifiable.witnesses.length) { + return false; + } + + const { next, previous } = await hashes + .slice(1) + .reduce; readonly previous: boolean }>>( + async (acc, hash, index) => { + const { next: accNext, previous: accPrevious } = await acc; + const { result, gas: newGas } = await accNext; + if (!result) { + return { + next: Promise.resolve({ result: false, gas: newGas }), + previous: false, + }; + } + + return { + next: tryVerifyHash(vm, hash, index, storage, verifiable, newGas), + previous: accPrevious && result, + }; + }, + Promise.resolve({ next: tryVerifyHash(vm, hashes[0], 0, storage, verifiable, gas), previous: true }), + ); + + const { result: finalResult } = await next; + + return finalResult && previous; +}; diff --git a/packages/neo-one-node-blockchain/src/wrapExecuteScripts.ts b/packages/neo-one-node-blockchain/src/wrapExecuteScripts.ts deleted file mode 100644 index 4a77c87bfe..0000000000 --- a/packages/neo-one-node-blockchain/src/wrapExecuteScripts.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { utils, VMState } from '@neo-one/client-common'; -import { - ExecuteScriptsResult, - InvocationResult, - InvocationResultError, - InvocationResultSuccess, -} from '@neo-one/node-core'; - -export const wrapExecuteScripts = async (execute: () => Promise): Promise => { - try { - const result = await execute(); - if (result.state === VMState.Halt) { - return new InvocationResultSuccess({ - gasConsumed: result.gasConsumed, - gasCost: result.gasCost, - stack: result.stack, - }); - } - - return new InvocationResultError({ - gasConsumed: result.gasConsumed, - gasCost: result.gasCost, - stack: result.stack, - message: result.errorMessage === undefined ? 'Unknown Error' : result.errorMessage, - }); - } catch (error) { - return new InvocationResultError({ - gasConsumed: utils.ZERO, - gasCost: utils.ZERO, - stack: [], - message: error.message, - }); - } -}; diff --git a/packages/neo-one-node-blockchain/tsconfig.json b/packages/neo-one-node-blockchain/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-node-blockchain/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-node-browser-worker/package.json b/packages/neo-one-node-browser-worker/package.json index b93d07eb4e..101292dad9 100644 --- a/packages/neo-one-node-browser-worker/package.json +++ b/packages/neo-one-node-browser-worker/package.json @@ -3,11 +3,21 @@ "version": "2.3.0", "description": "NEOβ€’ONE node browser workers.", "main": "./src/index", + "scripts": { + "build": "", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { "@neo-one/node-browser": "^2.3.0", "@neo-one/worker": "^2.3.0", - "core-js": "^3.1.4", + "core-js": "^3.2.1", + "file-loader": "^5.0.2", "regenerator-runtime": "^0.13.3" }, - "sideEffects": false + "devDependencies": { + "@neo-one/build-tools": "^1.0.0" + } } diff --git a/packages/neo-one-node-browser-worker/tsconfig.json b/packages/neo-one-node-browser-worker/tsconfig.json new file mode 100644 index 0000000000..588ef5ff4b --- /dev/null +++ b/packages/neo-one-node-browser-worker/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.static.json" +} diff --git a/packages/neo-one-node-browser/package.json b/packages/neo-one-node-browser/package.json index e930082631..04510b3bd3 100644 --- a/packages/neo-one-node-browser/package.json +++ b/packages/neo-one-node-browser/package.json @@ -3,26 +3,34 @@ "version": "2.3.0", "description": "NEOβ€’ONE Node for browsers.", "main": "./src/index", + "scripts": { + "build": "", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.3.0", - "@neo-one/client-core": "^2.3.0", - "@neo-one/node-blockchain": "^2.3.0", - "@neo-one/node-core": "^2.3.0", - "@neo-one/node-neo-settings": "^2.3.0", - "@neo-one/node-protocol": "^2.3.0", - "@neo-one/node-rpc-handler": "^2.3.0", - "@neo-one/node-storage-levelup": "^2.3.0", - "@neo-one/node-vm": "^2.3.0", - "@neo-one/utils": "^2.3.0", - "level-js": "^5.0.0", - "levelup": "^4.1.0", + "@neo-one/client-common": "^3.0.0", + "@neo-one/client-core": "^3.0.0", + "@neo-one/node-blockchain": "^3.0.0", + "@neo-one/node-core": "^3.0.0", + "@neo-one/node-neo-settings": "^3.0.0", + "@neo-one/node-protocol": "^3.0.0", + "@neo-one/node-rpc-handler": "^3.0.0", + "@neo-one/node-storage-levelup": "^3.0.0", + "@neo-one/node-vm": "^3.0.0", + "@neo-one/utils": "^3.0.0", + "core-js": "^3.2.1", + "level-js": "5.0.0", + "levelup": "4.1.0", "memdown": "^5.0.0", "tslib": "^1.10.0" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", "@types/level-js": "^4.0.1", "@types/levelup": "^3.1.1", "@types/memdown": "^3.0.0" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-node-browser/tsconfig.json b/packages/neo-one-node-browser/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-node-browser/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-node-consensus/.npmignore b/packages/neo-one-node-consensus/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-node-consensus/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-node-consensus/CHANGELOG.json b/packages/neo-one-node-consensus/CHANGELOG.json new file mode 100644 index 0000000000..c86d42784f --- /dev/null +++ b/packages/neo-one-node-consensus/CHANGELOG.json @@ -0,0 +1,106 @@ +{ + "name": "@neo-one/node-consensus", + "entries": [ + { + "version": "2.7.1", + "tag": "@neo-one/node-consensus_v2.7.1", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/node-consensus_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Add appropriate @types dependencies." + }, + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "dependency": [ + { + "comment": "Dependency @neo-one/client-common version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.6.0` to `^2.6.1`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/node-consensus_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/node-consensus_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-node-consensus/CHANGELOG.md b/packages/neo-one-node-consensus/CHANGELOG.md index 9f9ef0354c..4e3046d94e 100644 --- a/packages/neo-one-node-consensus/CHANGELOG.md +++ b/packages/neo-one-node-consensus/CHANGELOG.md @@ -1,148 +1,35 @@ -# Change Log +# Change Log - @neo-one/node-consensus -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-consensus@1.3.3...@neo-one/node-consensus@2.3.0) (2019-10-23) +## 2.7.1 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/node-consensus +*Version update only* +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT +### Patches +- Add appropriate @types dependencies. +- Upgrade TypeScript from v3.8.3 to v3.9.5 +### Updates -## [1.3.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-consensus@1.3.2...@neo-one/node-consensus@1.3.3) (2019-10-23) +- bump package version for future release clarity -**Note:** Version bump only for package @neo-one/node-consensus +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes +- update package release process to take better advantage of rush tooling +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT +### Minor changes -## [1.3.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-consensus@1.3.1...@neo-one/node-consensus@1.3.2) (2019-09-04) +- Migrate to Rush -**Note:** Version bump only for package @neo-one/node-consensus - - - - - -## [1.3.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-consensus@1.3.0...@neo-one/node-consensus@1.3.1) (2019-08-30) - -**Note:** Version bump only for package @neo-one/node-consensus - - - - - -# [1.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-consensus@1.2.0...@neo-one/node-consensus@1.3.0) (2019-08-23) - - -### Features - -* **e2e:** node-bin e2e consensus test ([0671932](https://github.com/neo-one-suite/neo-one/commit/0671932)) - - - - - -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-consensus@1.1.5...@neo-one/node-consensus@1.2.0) (2019-08-22) - - -### Bug Fixes - -* **cypress:** update cypress tests and website ([4337441](https://github.com/neo-one-suite/neo-one/commit/4337441)) - - -### Features - -* **monitor:** remove @neo-one/monitor. replace with opencensus, pino, and debug ([#1597](https://github.com/neo-one-suite/neo-one/issues/1597)) ([4b1a28f](https://github.com/neo-one-suite/neo-one/commit/4b1a28f)) - - - - - -## [1.1.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-consensus@1.1.4...@neo-one/node-consensus@1.1.5) (2019-07-29) - -**Note:** Version bump only for package @neo-one/node-consensus - - - - - -## [1.1.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-consensus@1.1.3...@neo-one/node-consensus@1.1.4) (2019-06-20) - - -### Bug Fixes - -* **deps:** update dependency typescript to v3.5.1 ([#1365](https://github.com/neo-one-suite/neo-one/issues/1365)) ([ec89546](https://github.com/neo-one-suite/neo-one/commit/ec89546)) - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-consensus@1.1.2...@neo-one/node-consensus@1.1.3) (2019-06-04) - - -### Bug Fixes - -* **@neo-one/types:** eliminate global types from @neo-one/types ([004330d](https://github.com/neo-one-suite/neo-one/commit/004330d)) -* **deps:** update misc dependencies ([0c9bdde](https://github.com/neo-one-suite/neo-one/commit/0c9bdde)) - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-consensus@1.1.1...@neo-one/node-consensus@1.1.2) (2019-04-12) - -**Note:** Version bump only for package @neo-one/node-consensus - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-consensus@1.1.0...@neo-one/node-consensus@1.1.1) (2019-03-27) - - -### Bug Fixes - -* **deps:** update dependency @reactivex/ix-es2015-cjs to v2.5.2 ([bb4047b](https://github.com/neo-one-suite/neo-one/commit/bb4047b)) -* **deps:** update dependency bignumber.js to v8.1.1 ([2d6f93a](https://github.com/neo-one-suite/neo-one/commit/2d6f93a)) - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-consensus@1.0.2...@neo-one/node-consensus@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node-consensus - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-consensus@1.0.2-alpha.0...@neo-one/node-consensus@1.0.2) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node-consensus - - - - - -## [1.0.2-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-consensus@1.0.1...@neo-one/node-consensus@1.0.2-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **deps:** update dependency @reactivex/ix-es2015-cjs and @reactivex/ix-esnext-esm to v2.5.1 ([b16cb09](https://github.com/neo-one-suite/neo-one/commit/b16cb09)) -* **deps:** update dependency @types/lodash to v4.14.120 ([a76dae7](https://github.com/neo-one-suite/neo-one/commit/a76dae7)) -* **deps:** update dependency rxjs to v6.4.0 ([e28af2a](https://github.com/neo-one-suite/neo-one/commit/e28af2a)) -* **reactivex:** downgrade and pin reactivex dependencies ([a9ee114](https://github.com/neo-one-suite/neo-one/commit/a9ee114)) - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-consensus@1.0.0...@neo-one/node-consensus@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/node-consensus diff --git a/packages/neo-one-node-consensus/gulpfile.js b/packages/neo-one-node-consensus/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-node-consensus/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-node-consensus/package.json b/packages/neo-one-node-consensus/package.json index af16138019..a9767e417d 100644 --- a/packages/neo-one-node-consensus/package.json +++ b/packages/neo-one-node-consensus/package.json @@ -1,22 +1,34 @@ { "name": "@neo-one/node-consensus", - "version": "2.3.0", + "version": "2.7.1", "description": "NEOβ€’ONE NEO consensus protocol.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.3.0", - "@neo-one/logger": "^2.3.0", - "@neo-one/node-core": "^2.3.0", - "@neo-one/utils": "^2.3.0", + "@neo-one/client-common": "^3.0.0", + "@neo-one/logger": "^2.6.1", + "@neo-one/node-core": "^3.0.0", + "@neo-one/utils": "^3.0.0", "@reactivex/ix-es2015-cjs": "^2.5.3", + "@reactivex/ix-esnext-esm": "^2.5.3", + "@types/bn.js": "^4.11.5", "bignumber.js": "^9.0.0", "bn.js": "^5.0.0", "lodash": "^4.17.15", "tslib": "^1.10.0" }, "devDependencies": { - "@types/bn.js": "^4.11.5", - "@types/lodash": "^4.14.138" - }, - "sideEffects": false + "@neo-one/build-tools": "^1.0.0", + "@types/jest": "^24.0.18", + "@types/lodash": "^4.14.138", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-node-consensus/src/Consensus.ts b/packages/neo-one-node-consensus/src/Consensus.ts index e082a2f3ab..894cb88321 100644 --- a/packages/neo-one-node-consensus/src/Consensus.ts +++ b/packages/neo-one-node-consensus/src/Consensus.ts @@ -1,18 +1,17 @@ /// -import { common, crypto, ECPoint, PrivateKey, UInt160 } from '@neo-one/client-common'; +import { common, crypto, ECPoint, PrivateKey, UInt160, UInt256Hex } from '@neo-one/client-common'; import { createChild, nodeLogger } from '@neo-one/logger'; -import { ConsensusPayload, Node, Transaction } from '@neo-one/node-core'; +import { ConsensusContext, ConsensusPayload, Node, Transaction } from '@neo-one/node-core'; import { composeDisposables, Disposable, noopDisposable, utils as commonUtils } from '@neo-one/utils'; import { AsyncIterableX } from '@reactivex/ix-es2015-cjs/asynciterable/asynciterablex'; import { scan } from '@reactivex/ix-es2015-cjs/asynciterable/pipe/scan'; import { initializeNewConsensus } from './common'; -import { ConsensusContext } from './ConsensusContext'; import { ConsensusQueue } from './ConsensusQueue'; -import { Context } from './context'; import { handleConsensusPayload } from './handleConsensusPayload'; import { handlePersistBlock } from './handlePersistBlock'; import { handleTransactionReceived } from './handleTransactionReceived'; import { runConsensus } from './runConsensus'; +import { TimerContext } from './TimerContext'; import { Event, Result } from './types'; const logger = createChild(nodeLogger, { component: 'consensus' }); @@ -35,8 +34,9 @@ export class Consensus { private mutableTimer: number | undefined; private readonly options: InternalOptions; private readonly node: Node; - private mutableConsensusContext: ConsensusContext; + private mutableTimerContext: TimerContext; private mutableStartPromise: Promise | undefined; + private readonly knownHashes = new Set(); public constructor({ options, node }: { readonly options: Options; readonly node: Node }) { this.mutableQueue = new ConsensusQueue(); @@ -52,7 +52,7 @@ export class Consensus { }; this.node = node; - this.mutableConsensusContext = new ConsensusContext(); + this.mutableTimerContext = new TimerContext(); } public async start(): Promise { @@ -102,12 +102,12 @@ export class Consensus { } public nowSeconds(): number { - return this.mutableConsensusContext.nowSeconds(); + return this.mutableTimerContext.nowSeconds(); } public async fastForwardOffset(seconds: number): Promise { if (this.options.privateNet) { - this.mutableConsensusContext.fastForwardOffset(seconds); + this.mutableTimerContext.fastForwardOffset(seconds); } else { throw new Error('Can only fast forward on a private network.'); } @@ -115,7 +115,7 @@ export class Consensus { public async fastForwardToTime(seconds: number): Promise { if (this.options.privateNet) { - this.mutableConsensusContext.fastForwardToTime(seconds); + this.mutableTimerContext.fastForwardToTime(seconds); } else { throw new Error('Can only fast forward on a private network.'); } @@ -131,7 +131,7 @@ export class Consensus { } public async reset(): Promise { - this.mutableConsensusContext = new ConsensusContext(); + this.mutableTimerContext = new TimerContext(); } public async resume(): Promise { @@ -156,29 +156,34 @@ export class Consensus { const initialResult = await initializeNewConsensus({ blockchain: this.node.blockchain, publicKey: options.publicKey, - consensusContext: this.mutableConsensusContext, + privateKey: options.privateKey, + timerContext: this.mutableTimerContext, + verificationContext: this.node.getNewVerificationContext(), }); await AsyncIterableX.from(this.mutableQueue) .pipe( - scan(async (context: Context, event: Event) => { + scan(async (context: ConsensusContext, event: Event) => { let result; switch (event.type) { case 'handlePersistBlock': result = await handlePersistBlock({ + context, blockchain: this.node.blockchain, - publicKey: options.publicKey, - consensusContext: this.mutableConsensusContext, + privateKey: options.privateKey, + timerContext: this.mutableTimerContext, }); + this.knownHashes.clear(); break; case 'handleConsensusPayload': result = await handleConsensusPayload({ context, node: this.node, + knownHashes: this.knownHashes, privateKey: options.privateKey, payload: event.payload, - consensusContext: this.mutableConsensusContext, + timerContext: this.mutableTimerContext, }); break; @@ -186,9 +191,10 @@ export class Consensus { result = await handleTransactionReceived({ context, node: this.node, + privateNet: this.options.privateNet, privateKey: options.privateKey, transaction: event.transaction, - consensusContext: this.mutableConsensusContext, + timerContext: this.mutableTimerContext, }); break; @@ -197,7 +203,7 @@ export class Consensus { context, node: this.node, options, - consensusContext: this.mutableConsensusContext, + timerContext: this.mutableTimerContext, }).catch((err) => { if (event.promise !== undefined) { event.promise.reject(err); @@ -223,20 +229,20 @@ export class Consensus { logger.info({ name: 'neo_consensus_stop' }, 'Consensus stopped.'); } - private handleResult(result: Result): Context { - if (result.timerSeconds !== undefined) { - this.handleTimer(result.timerSeconds); + private handleResult(result: Result): ConsensusContext { + if (result.timerMS !== undefined) { + this.handleTimer(result.timerMS); } return result.context; } - private handleTimer(mutableTimerSeconds: number): void { + private handleTimer(mutableTimerMS: number): void { this.clearTimer(); this.mutableTimer = setTimeout( () => this.mutableQueue.write({ type: 'timer' }), - mutableTimerSeconds * MS_IN_SECOND, - // tslint:disable-next-line no-any + mutableTimerMS, + // tslint:disable-next-line no-any no-useless-cast ) as any; } diff --git a/packages/neo-one-node-consensus/src/ConsensusContext.ts b/packages/neo-one-node-consensus/src/TimerContext.ts similarity index 81% rename from packages/neo-one-node-consensus/src/ConsensusContext.ts rename to packages/neo-one-node-consensus/src/TimerContext.ts index 2fdb70dca4..5daddb452f 100644 --- a/packages/neo-one-node-consensus/src/ConsensusContext.ts +++ b/packages/neo-one-node-consensus/src/TimerContext.ts @@ -1,6 +1,6 @@ import { utils } from '@neo-one/utils'; -export class ConsensusContext { +export class TimerContext { private mutableFastForwardSeconds: number; public constructor() { @@ -11,6 +11,10 @@ export class ConsensusContext { return utils.nowSeconds() + this.mutableFastForwardSeconds; } + public nowMilliseconds(): number { + return Date.now() + this.mutableFastForwardSeconds * 1000; + } + public fastForwardOffset(seconds: number) { if (seconds >= 0) { this.mutableFastForwardSeconds += seconds; diff --git a/packages/neo-one-node-consensus/src/__data__/context.ts b/packages/neo-one-node-consensus/src/__data__/context.ts index 60c44ac16a..03c3c11d53 100644 --- a/packages/neo-one-node-consensus/src/__data__/context.ts +++ b/packages/neo-one-node-consensus/src/__data__/context.ts @@ -1,66 +1,53 @@ -import { common } from '@neo-one/client-common'; -import _ from 'lodash'; -import { cloneBlockSent, cloneInitial, Context } from '../context'; +import { common, UInt160 } from '@neo-one/client-common'; +import { ConsensusContext, NativeContractStorageContext, TransactionVerificationContext } from '@neo-one/node-core'; +import { BN } from 'bn.js'; import { keys } from './keys'; const validators = keys.map(({ publicKey }) => publicKey); const previousHash = common.stringToUInt256('0xd42561e3d30e15be6400b6df2f328e02d2bf6354c41dce433bc57687c82144bf'); -const expectedView = _.range(0, 7).map(() => 0); -const blockReceivedTimeSeconds = 1513018010; +const blockReceivedTimeMS = 1513018010000; const viewNumber = 0; const primaryIndex = 1; const blockIndex = primaryIndex; const backupIndex = 2; -const backupContext = new Context({ - type: 'backup', - previousHash, - blockIndex, - viewNumber, - myIndex: backupIndex, - primaryIndex, - expectedView, - validators, - blockReceivedTimeSeconds, -}); +const getBackupContext = (getGasBalance: (storage: NativeContractStorageContext, sender: UInt160) => Promise) => + new ConsensusContext({ + blockOptions: { + previousHash, + index: blockIndex, + consensusData: { primaryIndex }, + }, + viewNumber, + myIndex: backupIndex, + validators, + blockReceivedTimeMS, + verificationContext: new TransactionVerificationContext({ getGasBalance }), + }); const backupPrivateKey = keys[backupIndex].privateKey; -const primaryContext = new Context({ - type: 'primary', - previousHash, - blockIndex, - viewNumber, - myIndex: primaryIndex, - primaryIndex, - expectedView, - validators, - blockReceivedTimeSeconds, -}); +const getPrimaryContext = (getGasBalance: (storage: NativeContractStorageContext, sender: UInt160) => Promise) => + new ConsensusContext({ + blockOptions: { + previousHash, + index: blockIndex, + consensusData: { primaryIndex }, + }, + viewNumber, + myIndex: primaryIndex, + validators, + blockReceivedTimeMS, + verificationContext: new TransactionVerificationContext({ getGasBalance }), + }); const primaryPrivateKey = keys[primaryIndex].privateKey; -const blockSentBackupContext = cloneBlockSent(backupContext); -const initialBackupContext = cloneInitial(backupContext, { - type: 'backup', - viewNumber, - primaryIndex, -}); - -const blockSentPrimaryContext = cloneBlockSent(primaryContext); -const initialPrimaryContext = cloneInitial(primaryContext, { - type: 'primary', - viewNumber, - primaryIndex, -}); - export const context = { backupPrivateKey, primaryPrivateKey, previousHash, - blockSentBackupContext, - initialBackupContext, - blockSentPrimaryContext, - initialPrimaryContext, + getBackupContext, + getPrimaryContext, }; diff --git a/packages/neo-one-node-consensus/src/__tests__/consensus/handleConsensusPayload.test.ts b/packages/neo-one-node-consensus/src/__tests__/consensus/handleConsensusPayload.test.ts index f95e99c349..815c289ff1 100644 --- a/packages/neo-one-node-consensus/src/__tests__/consensus/handleConsensusPayload.test.ts +++ b/packages/neo-one-node-consensus/src/__tests__/consensus/handleConsensusPayload.test.ts @@ -1,65 +1,144 @@ // wallaby.skip -import { PrivateKey } from '@neo-one/client-common'; +import { common, crypto, Op, PrivateKey, ScriptBuilder, UInt256Hex, WitnessScopeModel } from '@neo-one/client-common'; import { + Block, ChangeViewConsensusMessage, - ConsensusMessage, - ConsensusPayload, - UnsignedConsensusPayload, + ChangeViewReason, + ConsensusContext, + ConsensusData, + Contract, + Signer, + Transaction, + TransactionVerificationContext, + Witness, } from '@neo-one/node-core'; -import { context } from '../../__data__'; -import { ConsensusContext } from '../../ConsensusContext'; -import { Context } from '../../context'; +import { BN } from 'bn.js'; +import { context, keys } from '../../__data__'; import { handleConsensusPayload } from '../../handleConsensusPayload'; +import { makeSignedPayload } from '../../makePayload'; +import { TimerContext } from '../../TimerContext'; -const consensusContext = new ConsensusContext(); - -const makePayload = ({ - context: contextIn, - consensusMessage, - privateKey, -}: { - readonly context: Context; - readonly consensusMessage: ConsensusMessage; - readonly privateKey: PrivateKey; -}) => - ConsensusPayload.sign( - new UnsignedConsensusPayload({ - version: contextIn.version, - previousHash: contextIn.previousHash, - blockIndex: contextIn.blockIndex, - validatorIndex: contextIn.myIndex, - consensusMessage, - }), - - privateKey, - ); +const timerContext = new TimerContext(); describe('handleConsensusPayload', () => { // tslint:disable-next-line no-any let node = {} as any; + const getGasBalance = jest.fn(() => Promise.resolve(new BN(0))); + let backupContext: ConsensusContext; + let primaryContext: ConsensusContext; + let knownHashes: Set; + const blockchain = { + getNextBlockValidators: jest.fn(() => keys.map(({ publicKey }) => publicKey)), + getValidators: jest.fn(() => keys.map(({ publicKey }) => publicKey)), + deserializeWireContext: { + messageMagic: 2345123, + }, + }; beforeEach(() => { - // tslint:disable-next-line no-any - node = {} as any; + node = { + getNewTransactionVerificationContext: jest.fn(() => new TransactionVerificationContext({ getGasBalance })), + blockchain, + // tslint:disable-next-line no-any + } as any; + backupContext = context.getBackupContext(getGasBalance); + primaryContext = context.getPrimaryContext(getGasBalance); + knownHashes = new Set(); }); test('updates the expected view on new view number', async () => { + const payload = await makeSignedPayload({ + node, + context: backupContext, + consensusMessage: new ChangeViewConsensusMessage({ + viewNumber: backupContext.viewNumber, + timestamp: new BN(Date.now()), + reason: ChangeViewReason.ChangeAgreement, + }), + + privateKey: context.backupPrivateKey, + }); + const result = await handleConsensusPayload({ - context: context.initialBackupContext, + context: backupContext, node, + knownHashes, privateKey: context.backupPrivateKey, - payload: makePayload({ - context: context.blockSentPrimaryContext, + payload: await makeSignedPayload({ + node, + context: backupContext, consensusMessage: new ChangeViewConsensusMessage({ - viewNumber: context.blockSentPrimaryContext.viewNumber, - newViewNumber: context.blockSentPrimaryContext.viewNumber + 1, + viewNumber: backupContext.viewNumber, + timestamp: new BN(Date.now()), + reason: ChangeViewReason.ChangeAgreement, }), - privateKey: context.primaryPrivateKey, + privateKey: context.backupPrivateKey, }), - consensusContext, + timerContext, }); - expect(result.context.expectedView[context.blockSentPrimaryContext.myIndex]).toEqual(1); + console.log(result); + }); + + test.only('settings help', () => { + const privateKeyString = 'e35fa5d1652c4c65e296c86e63a3da6939bc471b741845be636e2daa320dc770'; + const privateKey = common.stringToPrivateKey(privateKeyString); + const publicKey = crypto.privateKeyToPublicKey(privateKey); + const publicKeyString = common.ecPointToHex(publicKey); + + // console.log({ privateKey: privateKeyString, publicKey: publicKeyString }); + + const standbyValidators = [publicKey]; + + const consensusAddress = crypto.getConsensusAddress(standbyValidators); + + const deployWitness = new Witness({ + invocation: Buffer.from([]), + verification: Buffer.from([Op.PUSH1]), + }); + + const scriptBuilder = new ScriptBuilder(); + scriptBuilder.emitSysCall('Neo.Native.Deploy'); + const script = scriptBuilder.build(); + + const deployTransaction = new Transaction({ + version: 0, + script, + systemFee: new BN(0), + networkFee: new BN(0), + signers: [ + new Signer({ + account: crypto.hash160(Buffer.from([Op.PUSH1])), + scopes: WitnessScopeModel.None, + }), + ], + attributes: [], + witnesses: [deployWitness], + validUntilBlock: 0, + messageMagic: 7630401, + }); + + const consensusData = new ConsensusData({ + primaryIndex: 0, + nonce: new BN(2083236893), + }); + + const genesisBlock = new Block({ + previousHash: common.ZERO_UINT256, + timestamp: new BN(Date.now()), + index: 0, + nextConsensus: consensusAddress, + witness: deployWitness, + consensusData, + transactions: [deployTransaction], + messageMagic: 7630401, + }); + + console.log(deployTransaction.hash); + console.log(consensusData); + + const serializedBlock = genesisBlock.serializeWire(); + console.log(serializedBlock.toString('hex')); }); }); diff --git a/packages/neo-one-node-consensus/src/checkPayload.ts b/packages/neo-one-node-consensus/src/checkPayload.ts new file mode 100644 index 0000000000..c288148f52 --- /dev/null +++ b/packages/neo-one-node-consensus/src/checkPayload.ts @@ -0,0 +1,96 @@ +import { common, PrivateKey } from '@neo-one/client-common'; +import { ChangeViewReason, ConsensusContext, Node } from '@neo-one/node-core'; +import { requestChangeView } from './common'; +import { createBlock, getExpectedBlockSize, getExpectedBlockSystemFee } from './context'; +import { makeCommit, makePrepareResponse } from './makePayload'; +import { TimerContext } from './TimerContext'; +import { Result } from './types'; + +export const checkCommits = async (contextIn: ConsensusContext, node: Node) => { + let context = contextIn; + if ( + context.commitPayloads.filter((p) => p?.consensusMessage.viewNumber === context.viewNumber).length >= context.M && + context.transactionHashes?.every((hash) => context.transactions[common.uInt256ToHex(hash)] !== undefined) + ) { + const { context: newContext, block } = await createBlock(context, node.blockchain); + context = newContext; + await node.relayBlock(block); + } + + return context; +}; + +export const checkPreparations = async (contextIn: ConsensusContext, node: Node, privateKey: PrivateKey) => { + let context = contextIn; + if ( + context.preparationPayloads.filter((p) => p !== undefined).length >= context.M && + context.transactionHashes?.every((hash) => context.transactions[common.uInt256ToHex(hash)] !== undefined) + ) { + const { context: newContext, payload } = await makeCommit({ context, node, privateKey }); + context = newContext; + + // TODO: find out if we need to be doing this + // await saveContext(context); + node.relayConsensusPayload(payload); + await checkCommits(context, node); + } + + return { context }; +}; + +export const checkPrepareResponse = async ({ + context: contextIn, + node, + privateKey, + timerContext, + isRecovering, +}: { + readonly context: ConsensusContext; + readonly node: Node; + readonly privateKey: PrivateKey; + readonly timerContext: TimerContext; + readonly isRecovering: boolean; +}): Promise => { + let context = contextIn; + if (Object.keys(context.transactions).length === context.transactionHashes?.length) { + if (context.isPrimary || context.watchOnly) { + return { context }; + } + + const [maxBlockSize, maxSystemFee] = await Promise.all([ + node.blockchain.getMaxBlockSize(), + node.blockchain.getMaxBlockSystemFee(), + ]); + + if (getExpectedBlockSize(context) > maxBlockSize) { + return requestChangeView({ + node, + privateKey, + context, + timerContext, + reason: ChangeViewReason.BlockRejectedByPolicy, + isRecovering, + }); + } + + if (getExpectedBlockSystemFee(context) > maxSystemFee) { + return requestChangeView({ + node, + privateKey, + context, + timerContext, + reason: ChangeViewReason.BlockRejectedByPolicy, + isRecovering, + }); + } + + const { context: newContext, payload } = await makePrepareResponse({ context, node, privateKey }); + context = newContext; + node.relayConsensusPayload(payload); + + const { context: preparationsContext } = await checkPreparations(context, node, privateKey); + context = preparationsContext; + } + + return { context }; +}; diff --git a/packages/neo-one-node-consensus/src/common.ts b/packages/neo-one-node-consensus/src/common.ts index b782126d16..930169c095 100644 --- a/packages/neo-one-node-consensus/src/common.ts +++ b/packages/neo-one-node-consensus/src/common.ts @@ -1,325 +1,231 @@ -import { common, crypto, ECPoint, PrivateKey } from '@neo-one/client-common'; +import { ECPoint, PrivateKey, VerifyResultModel } from '@neo-one/client-common'; import { Blockchain, ChangeViewConsensusMessage, - ConsensusMessage, - ConsensusPayload, + ChangeViewReason, + ConsensusContext, Node, - PrepareResponseConsensusMessage, Transaction, - UnsignedConsensusPayload, - Witness, + TransactionVerificationContext, } from '@neo-one/node-core'; -import { utils as commonUtils } from '@neo-one/utils'; import _ from 'lodash'; -import { ConsensusContext } from './ConsensusContext'; -import { - BlockSentContext, - cloneBlockSent, - cloneInitial, - Context, - HeaderContext, - InitialContext, - RequestReceivedContext, - SignatureSentContext, - Type, - ViewChangingContext, -} from './context'; +import { checkPreparations, checkPrepareResponse } from './checkPayload'; +import { getInitialContext, reset } from './context'; +import { makeChangeView, makePrepareRequest, makeRecoveryRequest } from './makePayload'; +import { TimerContext } from './TimerContext'; import { Result } from './types'; -export const signAndRelay = ({ +export const sendPrepareRequest = async ({ node, privateKey, - context, - consensusMessage, + context: contextIn, }: { readonly node: Node; readonly privateKey: PrivateKey; - readonly context: Context; - readonly consensusMessage: ConsensusMessage; -}) => { - const payload = ConsensusPayload.sign( - new UnsignedConsensusPayload({ - version: context.version, - previousHash: context.previousHash, - blockIndex: context.blockIndex, - validatorIndex: context.myIndex, - consensusMessage, - }), - - privateKey, - ); + readonly context: ConsensusContext; +}): Promise => { + let context = contextIn; + const { context: prepareRequestContext, payload } = await makePrepareRequest({ node, privateKey, context }); + context = prepareRequestContext; node.relayConsensusPayload(payload); -}; -export const getInitialContextAdd = ({ - blockchain, - publicKey, - validators, - blockReceivedTimeSeconds, -}: { - readonly blockchain: Blockchain; - readonly publicKey: ECPoint; - readonly validators: readonly ECPoint[]; - readonly blockReceivedTimeSeconds?: number; -}) => { - const blockIndex = blockchain.currentBlock.index + 1; - const primaryIndex = blockIndex % validators.length; - const myIndex = _.findIndex(validators, (validator) => common.ecPointEqual(validator, publicKey)); + if (context.validators.length === 1) { + const { context: checkPreparationContext } = await checkPreparations(context, node, privateKey); + context = checkPreparationContext; + } - return { - type: primaryIndex === myIndex ? 'primary' : 'backup', - previousHash: blockchain.currentBlock.hash, - blockIndex, - viewNumber: 0, - myIndex, - primaryIndex, - expectedView: _.range(0, validators.length).map(() => 0), - validators, - blockReceivedTimeSeconds, - }; + // TODO: it seems to me anything we would send the node here it already knows about + // since our mempool isn't as disjointed like C# land. + // if ((context.transactionHashes ?? 0) > 0) { + // node.sendInv(/*...*/); + // } + + return { context }; }; -function initializeConsensusCommon({ +export const requestRecovery = async ({ + node, + privateKey, context, - blockchain, - consensusContext, }: { - readonly context: TContext; - readonly blockchain: Blockchain; - readonly consensusContext: ConsensusContext; -}): Result { - if (context.myIndex < 0) { - return { context }; - } - - if (context.type === 'primary') { - return { - context, - timerSeconds: Math.max( - 0, - blockchain.settings.secondsPerBlock - (consensusContext.nowSeconds() - context.blockReceivedTimeSeconds), - ), - }; + readonly node: Node; + readonly privateKey: PrivateKey; + readonly context: ConsensusContext; +}) => { + if (context.blockBuilder.index === node.blockchain.currentHeaderIndex + 1) { + const payload = await makeRecoveryRequest({ node, context, privateKey }); + node.relayConsensusPayload(payload); } - - const { secondsPerBlock } = blockchain.settings; - - return { - context, - // tslint:disable-next-line no-bitwise - timerSeconds: secondsPerBlock << (context.viewNumber + 1), - }; -} - -export const initializeNewConsensus = async ({ - blockchain, - publicKey, - consensusContext, -}: { - readonly blockchain: Blockchain; - readonly publicKey: ECPoint; - readonly consensusContext: ConsensusContext; -}): Promise> => { - const validators = await blockchain.getValidators([]); - const blockReceivedTimeSeconds = blockchain.currentBlock.timestamp; - const blockIndex = blockchain.currentBlock.index + 1; - const primaryIndex = blockIndex % validators.length; - const myIndex = _.findIndex(validators, (validator) => common.ecPointEqual(validator, publicKey)); - - const context = new InitialContext({ - type: primaryIndex === myIndex ? 'primary' : 'backup', - previousHash: blockchain.currentBlock.hash, - blockIndex, - viewNumber: 0, - myIndex, - primaryIndex, - expectedView: _.range(0, validators.length).map(() => 0), - validators, - blockReceivedTimeSeconds, - }); - - return initializeConsensusCommon({ context, blockchain, consensusContext }); }; -const getPrimaryIndexType = ({ +export const checkExpectedView = ({ context, viewNumber, }: { - readonly context: Context; + readonly context: ConsensusContext; readonly viewNumber: number; -}): { - readonly type: Type; - readonly primaryIndex: number; -} => { - let primaryIndex = (context.blockIndex - viewNumber) % context.validators.length; - if (primaryIndex < 0) { - primaryIndex += context.validators.length; - } - - return { - type: primaryIndex === context.myIndex ? 'primary' : 'backup', - primaryIndex, - }; -}; +}) => + context.viewNumber < viewNumber || + context.changeViewPayloads.filter( + (p) => p !== undefined && p.getDeserializedMessage().newViewNumber >= viewNumber, + ).length >= context.M; -export const initializeConsensus = ({ +export const requestChangeView = async ({ node, context: contextIn, - viewNumber, - consensusContext, + timerContext, + privateKey, + reason, + isRecovering, }: { readonly node: Node; - readonly context: Context; - readonly viewNumber: number; - readonly consensusContext: ConsensusContext; -}): Result => { - if (viewNumber <= 0) { - throw new Error('Programming error'); - } - const { blockchain } = node; + readonly context: ConsensusContext; + readonly timerContext: TimerContext; + readonly privateKey: PrivateKey; + readonly reason: ChangeViewReason; + readonly isRecovering: boolean; +}): Promise => { let context = contextIn; - let primaryIndex = (context.blockIndex - viewNumber) % context.validators.length; - if (primaryIndex < 0) { - primaryIndex += context.validators.length; + if (context.watchOnly) { + return { context }; } - const type = primaryIndex === context.myIndex ? 'primary' : 'backup'; - context = - type === 'primary' && context instanceof SignatureSentContext - ? context.clone({ type, primaryIndex, viewNumber }) - : cloneInitial(context, { type, primaryIndex, viewNumber }); - return initializeConsensusCommon({ blockchain, context, consensusContext }); -}; + const expectedView = context.viewNumber + 1; + if (context.countCommitted + context.countFailed > context.F) { + await requestRecovery({ node, privateKey, context }); -export async function checkSignatures({ - node, - context, -}: { - readonly node: Node; - readonly context: TContext; -}): Promise> { - const signaturesLength = context.signatures.filter((p) => p !== undefined).length; + return { context }; + } - if ( - signaturesLength >= context.M && - context.transactionHashes.every((hash) => context.transactions[hash] !== undefined) - ) { - const mutablePublicKeyToSignature: { [key: string]: Buffer } = {}; - // tslint:disable-next-line no-loop-statement - for (let i = 0, j = 0; i < context.validators.length && j < context.M; i += 1) { - const validator = context.validators[i]; - const signature = context.signatures[i]; - if (signature !== undefined) { - mutablePublicKeyToSignature[common.ecPointToHex(validator)] = signature; - j += 1; - } - } - const script = crypto.createMultiSignatureWitness( - context.M, - context.validators, - mutablePublicKeyToSignature, - Witness, - ); + const { context: changeViewContext, payload } = await makeChangeView({ + node, + context, + privateKey, + reason, + }); - const block = context.header.clone({ - transactions: context.transactionHashes.map((hash) => context.transactions[hash]).filter(commonUtils.notNull), - script, - }); + context = changeViewContext; + + node.relayConsensusPayload(payload); - await node.relayBlock(block); + if (checkExpectedView({ context, viewNumber: expectedView }) && !context.watchOnly) { + const message = context.changeViewPayloads[context.myIndex]?.getDeserializedMessage(); + if (message === undefined || message.newViewNumber < expectedView) { + const { context: moreChangeViewContext, payload: changeViewPayload } = await makeChangeView({ + node, + privateKey, + context, + reason: ChangeViewReason.ChangeAgreement, + }); + context = moreChangeViewContext; + node.relayConsensusPayload(changeViewPayload); + } - return { context: cloneBlockSent(context) }; + return initializeConsensus({ + blockchain: node.blockchain, + privateKey, + context, + viewNumber: expectedView, + timerContext, + isRecovering, + }); } return { context }; -} +}; -export const signAndRelayChangeView = ({ - node, +export async function initializeConsensus({ + blockchain, privateKey, - context, + context: contextIn, + timerContext, + viewNumber, + isRecovering, }: { - readonly node: Node; + readonly blockchain: Blockchain; readonly privateKey: PrivateKey; - readonly context: Context; -}) => { - signAndRelay({ - node, + readonly context: ConsensusContext; + readonly timerContext: TimerContext; + readonly viewNumber: number; + readonly isRecovering: boolean; +}): Promise { + const { context } = await reset({ + blockchain, privateKey, + context: contextIn, + viewNumber, + }); + + if (context.watchOnly) { + return { context }; + } + + return initializeConsensusCommon({ context, - consensusMessage: new ChangeViewConsensusMessage({ - viewNumber: context.viewNumber, - newViewNumber: context.expectedView[context.myIndex], - }), + blockchain, + timerContext, + isRecovering, }); -}; +} -export const checkExpectedView = ({ +function initializeConsensusCommon({ context, - viewNumber, -}: { - readonly context: Context; - readonly viewNumber: number; -}) => context.viewNumber !== viewNumber && context.expectedView.filter((p) => p === viewNumber).length >= context.M; - -export const initializeConsensusInitial = ({ blockchain, - context, - viewNumber, - consensusContext, + timerContext, + isRecovering, }: { + readonly context: ConsensusContext; readonly blockchain: Blockchain; - readonly context: Context; - readonly viewNumber: number; - readonly consensusContext: ConsensusContext; -}): Result => { - const { primaryIndex, type } = getPrimaryIndexType({ context, viewNumber }); + readonly timerContext: TimerContext; + readonly isRecovering: boolean; +}): Result { + const { millisecondsPerBlock } = blockchain.settings; - return initializeConsensusCommon({ - blockchain, - context: cloneInitial(context, { type, primaryIndex, viewNumber }), - consensusContext, - }); -}; - -export const incrementExpectedView = (context: Context): readonly number[] => { - const mutableExpectedView = [...context.expectedView]; - mutableExpectedView[context.myIndex] += 1; + if (context.isPrimary && !isRecovering) { + return { + context, + timerMS: Math.max(0, millisecondsPerBlock - (timerContext.nowMilliseconds() - context.blockReceivedTimeMS)), + }; + } - return mutableExpectedView; -}; + return { + context, + // tslint:disable-next-line no-bitwise + timerMS: millisecondsPerBlock << (context.viewNumber + 1), + }; +} -const requestChangeViewBackup = ({ - context: contextIn, - node, +export async function initializeNewConsensus({ + blockchain, + publicKey, privateKey, - consensusContext, + timerContext, + verificationContext, }: { - readonly context: RequestReceivedContext; - readonly node: Node; + readonly blockchain: Blockchain; + readonly publicKey: ECPoint; readonly privateKey: PrivateKey; - readonly consensusContext: ConsensusContext; -}): Result => { - const context = contextIn.cloneViewChanging({ - expectedView: incrementExpectedView(contextIn), + readonly timerContext: TimerContext; + readonly verificationContext: TransactionVerificationContext; +}) { + const validators = await blockchain.getValidators(); + const initialContext = getInitialContext({ + blockchain, + publicKey, + validators, + verificationContext, }); - signAndRelayChangeView({ context, node, privateKey }); - - const viewNumber = context.expectedView[context.myIndex]; - if (checkExpectedView({ context, viewNumber })) { - return initializeConsensusInitial({ - blockchain: node.blockchain, - context, - viewNumber, - consensusContext, - }); - } - - return { context }; -}; + return initializeConsensus({ + blockchain, + privateKey, + context: initialContext, + timerContext, + viewNumber: initialContext.viewNumber, + isRecovering: false, + }); +} export const addTransaction = async ({ context: contextIn, @@ -327,36 +233,45 @@ export const addTransaction = async ({ privateKey, transaction, verify, - consensusContext, + timerContext, + isRecovering, }: { - readonly context: RequestReceivedContext; + readonly context: ConsensusContext; readonly node: Node; readonly privateKey: PrivateKey; readonly transaction: Transaction; readonly verify: boolean; - readonly consensusContext: ConsensusContext; -}): Promise< - Result -> => { + readonly timerContext: TimerContext; + readonly isRecovering: boolean; +}): Promise => { let context = contextIn; const { blockchain } = node; - const tx = await blockchain.transaction.tryGet({ hash: transaction.hash }); + const tx = await blockchain.transactions.tryGet(transaction.hash); if (tx !== undefined) { return { context }; } if (verify) { - let verified = true; - try { - const { verifications } = await blockchain.verifyTransaction({ - transaction, - memPool: Object.values(context.transactions).filter(commonUtils.notNull), + const result = await blockchain.verifyTransaction(transaction, context.transactions, context.verificationContext); + + if (result === VerifyResultModel.PolicyFail) { + return requestChangeView({ + context, + node, + privateKey, + timerContext, + reason: ChangeViewReason.TxRejectedByPolicy, + isRecovering, }); - verified = verifications.every(({ failureMessage }) => failureMessage === undefined); - } catch { - verified = false; } - if (!verified) { - return { context }; + if (result !== VerifyResultModel.Succeed) { + return requestChangeView({ + context, + node, + privateKey, + timerContext, + reason: ChangeViewReason.TxInvalid, + isRecovering, + }); } } @@ -367,39 +282,13 @@ export const addTransaction = async ({ }, }); - const transactionsLength = Object.values(context.transactions).length; - if (context.transactionHashes.length === transactionsLength) { - const validators = await blockchain.getValidators(Object.values(context.transactions).filter(commonUtils.notNull)); - - const consensusAddress = crypto.getConsensusAddress(validators); - if (common.uInt160Equal(consensusAddress, context.header.nextConsensus)) { - const mutableSignatures = [...context.signatures]; - mutableSignatures[context.myIndex] = crypto.sign({ - message: context.header.message, - privateKey, - }); - - const newContext = context.cloneSignatureSent({ signatures: mutableSignatures }); - signAndRelay({ - node, - context: newContext, - privateKey, - consensusMessage: new PrepareResponseConsensusMessage({ - viewNumber: newContext.viewNumber, - signature: commonUtils.nullthrows(mutableSignatures[newContext.myIndex]), - }), - }); - - return checkSignatures({ node, context: newContext }); - } - - return requestChangeViewBackup({ - context, - node, - privateKey, - consensusContext, - }); - } + context.verificationContext.addTransaction(transaction); - return { context }; + return checkPrepareResponse({ + context, + node, + privateKey, + timerContext, + isRecovering, + }); }; diff --git a/packages/neo-one-node-consensus/src/context/BlockSentContext.ts b/packages/neo-one-node-consensus/src/context/BlockSentContext.ts deleted file mode 100644 index 8ae5c3efe1..0000000000 --- a/packages/neo-one-node-consensus/src/context/BlockSentContext.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Context } from './Context'; - -export class BlockSentContext extends Context { - public cloneExpectedView({ expectedView }: { readonly expectedView: readonly number[] }): BlockSentContext { - return new BlockSentContext({ - type: this.type, - previousHash: this.previousHash, - blockIndex: this.blockIndex, - viewNumber: this.viewNumber, - myIndex: this.myIndex, - primaryIndex: this.primaryIndex, - expectedView, - validators: this.validators, - blockReceivedTimeSeconds: this.blockReceivedTimeSeconds, - }); - } -} diff --git a/packages/neo-one-node-consensus/src/context/Context.ts b/packages/neo-one-node-consensus/src/context/Context.ts deleted file mode 100644 index 5c8bc658ba..0000000000 --- a/packages/neo-one-node-consensus/src/context/Context.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { common, ECPoint, UInt256 } from '@neo-one/client-common'; -import { Type } from './types'; - -export interface ContextAdd { - readonly type: Type; - readonly previousHash: UInt256; - readonly blockIndex: number; - readonly viewNumber: number; - readonly myIndex: number; - readonly primaryIndex: number; - readonly expectedView: readonly number[]; - readonly validators: readonly ECPoint[]; - readonly blockReceivedTimeSeconds: number; -} - -// tslint:disable-next-line no-any -export class Context = Context> { - public readonly version: number; - public readonly type: Type; - public readonly previousHash: UInt256; - public readonly blockIndex: number; - public readonly viewNumber: number; - public readonly myIndex: number; - public readonly primaryIndex: number; - public readonly expectedView: readonly number[]; - public readonly validators: readonly ECPoint[]; - public readonly blockReceivedTimeSeconds: number; - - public constructor({ - type, - previousHash, - blockIndex, - viewNumber, - myIndex, - primaryIndex, - expectedView, - validators, - blockReceivedTimeSeconds, - }: ContextAdd) { - this.version = 0; - this.type = type; - this.previousHash = previousHash; - this.blockIndex = blockIndex; - this.viewNumber = viewNumber; - this.myIndex = myIndex; - this.primaryIndex = primaryIndex; - this.expectedView = expectedView; - this.validators = validators; - this.blockReceivedTimeSeconds = blockReceivedTimeSeconds; - } - - public get M(): number { - return Math.floor(this.validators.length - (this.validators.length - 1) / 3); - } - - public cloneExpectedView(_options: { readonly expectedView: readonly number[] }): TTHis { - throw new Error('Not Implemented'); - } - - public toJSON(): object { - return { - class: this.constructor.name, - version: this.version, - type: this.type, - previousHash: common.uInt256ToString(this.previousHash), - blockIndex: this.blockIndex, - viewNumber: this.viewNumber, - myIndex: this.myIndex, - primaryIndex: this.primaryIndex, - expectedView: [...this.expectedView], - validators: this.validators.map((validator) => common.ecPointToString(validator)), - - blockReceivedTimeSeconds: this.blockReceivedTimeSeconds, - }; - } -} diff --git a/packages/neo-one-node-consensus/src/context/HeaderContext.ts b/packages/neo-one-node-consensus/src/context/HeaderContext.ts deleted file mode 100644 index 4f43faba1d..0000000000 --- a/packages/neo-one-node-consensus/src/context/HeaderContext.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { common, ECPoint, UInt160, UInt256, UInt256Hex } from '@neo-one/client-common'; -import { Block, MerkleTree } from '@neo-one/node-core'; -import { BN } from 'bn.js'; -import { Context } from './Context'; -import { Transactions, Type } from './types'; - -interface HeaderContextAdd { - readonly type: Type; - readonly viewNumber: number; - readonly myIndex: number; - readonly primaryIndex: number; - readonly expectedView: readonly number[]; - readonly validators: readonly ECPoint[]; - readonly blockReceivedTimeSeconds: number; - readonly transactions: Transactions; - readonly signatures: ReadonlyArray; - readonly header: - | { - readonly type: 'new'; - readonly previousHash: UInt256; - readonly transactionHashes: readonly UInt256Hex[]; - readonly blockIndex: number; - readonly nonce: BN; - readonly timestamp: number; - readonly nextConsensus: UInt160; - } - | { - readonly type: 'existing'; - readonly block: Block; - readonly transactionHashes: readonly UInt256Hex[]; - }; -} - -// tslint:disable-next-line no-any -export class HeaderContext = HeaderContext> extends Context { - public readonly transactions: Transactions; - public readonly transactionHashes: readonly UInt256Hex[]; - public readonly transactionHashesSet: Set; - public readonly signatures: ReadonlyArray; - public readonly header: Block; - - public constructor({ - type, - viewNumber, - myIndex, - primaryIndex, - expectedView, - validators, - blockReceivedTimeSeconds, - transactions, - signatures, - header, - }: HeaderContextAdd) { - const previousHash = header.type === 'existing' ? header.block.previousHash : header.previousHash; - const transactionHashes = header.transactionHashes; - const blockIndex = header.type === 'existing' ? header.block.index : header.blockIndex; - const nonce = header.type === 'existing' ? header.block.consensusData : header.nonce; - const timestamp = header.type === 'existing' ? header.block.timestamp : header.timestamp; - const nextConsensus = header.type === 'existing' ? header.block.nextConsensus : header.nextConsensus; - super({ - type, - previousHash, - blockIndex, - viewNumber, - myIndex, - primaryIndex, - expectedView, - validators, - blockReceivedTimeSeconds, - }); - - this.transactions = transactions; - this.transactionHashes = transactionHashes; - this.transactionHashesSet = new Set(transactionHashes); - this.signatures = signatures; - if (header.type === 'existing') { - this.header = header.block; - } else { - this.header = new Block({ - version: this.version, - previousHash: this.previousHash, - merkleRoot: MerkleTree.computeRoot(this.transactionHashes.map((hash) => common.hexToUInt256(hash))), - - timestamp, - index: this.blockIndex, - consensusData: nonce, - nextConsensus, - transactions: [], - }); - } - } - - public cloneSignatures(_options: { readonly signatures: ReadonlyArray }): T { - throw new Error('Not Implemented'); - } - - public toJSON(): object { - return { - ...super.toJSON(), - transactionHashes: this.transactionHashes.map((hash) => common.uInt256ToString(hash)), - - signatures: this.signatures.map((signature) => - signature === undefined ? 'undefined' : signature.toString('hex'), - ), - }; - } -} diff --git a/packages/neo-one-node-consensus/src/context/InitialContext.ts b/packages/neo-one-node-consensus/src/context/InitialContext.ts deleted file mode 100644 index 67984e3d5b..0000000000 --- a/packages/neo-one-node-consensus/src/context/InitialContext.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Context } from './Context'; - -export class InitialContext extends Context { - public cloneExpectedView({ expectedView }: { readonly expectedView: readonly number[] }): InitialContext { - return new InitialContext({ - type: this.type, - previousHash: this.previousHash, - blockIndex: this.blockIndex, - viewNumber: this.viewNumber, - myIndex: this.myIndex, - primaryIndex: this.primaryIndex, - expectedView, - validators: this.validators, - blockReceivedTimeSeconds: this.blockReceivedTimeSeconds, - }); - } -} diff --git a/packages/neo-one-node-consensus/src/context/RequestReceivedContext.ts b/packages/neo-one-node-consensus/src/context/RequestReceivedContext.ts deleted file mode 100644 index 38ee009339..0000000000 --- a/packages/neo-one-node-consensus/src/context/RequestReceivedContext.ts +++ /dev/null @@ -1,156 +0,0 @@ -import { ECPoint, UInt160, UInt256, UInt256Hex } from '@neo-one/client-common'; -import { Block } from '@neo-one/node-core'; -import { BN } from 'bn.js'; -import { HeaderContext } from './HeaderContext'; -import { SignatureSentContext } from './SignatureSentContext'; -import { Transactions } from './types'; -import { ViewChangingContext } from './ViewChangingContext'; - -interface RequestReceivedContextAdd { - readonly viewNumber: number; - readonly myIndex: number; - readonly primaryIndex: number; - readonly expectedView: readonly number[]; - readonly validators: readonly ECPoint[]; - readonly blockReceivedTimeSeconds: number; - readonly transactions: Transactions; - readonly signatures: ReadonlyArray; - readonly header: - | { - readonly type: 'new'; - readonly previousHash: UInt256; - readonly transactionHashes: readonly UInt256Hex[]; - readonly blockIndex: number; - readonly nonce: BN; - readonly timestamp: number; - readonly nextConsensus: UInt160; - } - | { - readonly type: 'existing'; - readonly block: Block; - readonly transactionHashes: readonly UInt256Hex[]; - }; -} - -export class RequestReceivedContext extends HeaderContext { - public constructor({ - viewNumber, - myIndex, - primaryIndex, - expectedView, - validators, - blockReceivedTimeSeconds, - transactions, - signatures, - header, - }: RequestReceivedContextAdd) { - super({ - type: 'backup', - viewNumber, - myIndex, - primaryIndex, - expectedView, - validators, - blockReceivedTimeSeconds, - transactions, - signatures, - header, - }); - } - - public clone({ transactions }: { readonly transactions: Transactions }): RequestReceivedContext { - return new RequestReceivedContext({ - viewNumber: this.viewNumber, - myIndex: this.myIndex, - primaryIndex: this.primaryIndex, - expectedView: this.expectedView, - validators: this.validators, - blockReceivedTimeSeconds: this.blockReceivedTimeSeconds, - transactions, - header: { - type: 'existing', - block: this.header, - transactionHashes: this.transactionHashes, - }, - - signatures: this.signatures, - }); - } - - public cloneViewChanging({ expectedView }: { readonly expectedView: readonly number[] }): ViewChangingContext { - return new ViewChangingContext({ - previousHash: this.previousHash, - blockIndex: this.blockIndex, - viewNumber: this.viewNumber, - myIndex: this.myIndex, - primaryIndex: this.primaryIndex, - expectedView, - validators: this.validators, - blockReceivedTimeSeconds: this.blockReceivedTimeSeconds, - }); - } - - public cloneSignatureSent({ - signatures, - }: { - readonly signatures: ReadonlyArray; - }): SignatureSentContext { - return new SignatureSentContext({ - type: this.type, - viewNumber: this.viewNumber, - myIndex: this.myIndex, - primaryIndex: this.primaryIndex, - expectedView: this.expectedView, - validators: this.validators, - blockReceivedTimeSeconds: this.blockReceivedTimeSeconds, - transactions: this.transactions, - header: { - type: 'existing', - block: this.header, - transactionHashes: this.transactionHashes, - }, - - signatures, - }); - } - - public cloneExpectedView({ expectedView }: { readonly expectedView: readonly number[] }): RequestReceivedContext { - return new RequestReceivedContext({ - viewNumber: this.viewNumber, - myIndex: this.myIndex, - primaryIndex: this.primaryIndex, - expectedView, - validators: this.validators, - blockReceivedTimeSeconds: this.blockReceivedTimeSeconds, - transactions: this.transactions, - signatures: this.signatures, - header: { - type: 'existing', - block: this.header, - transactionHashes: this.transactionHashes, - }, - }); - } - - public cloneSignatures({ - signatures, - }: { - readonly signatures: ReadonlyArray; - }): RequestReceivedContext { - return new RequestReceivedContext({ - viewNumber: this.viewNumber, - myIndex: this.myIndex, - primaryIndex: this.primaryIndex, - expectedView: this.expectedView, - validators: this.validators, - blockReceivedTimeSeconds: this.blockReceivedTimeSeconds, - transactions: this.transactions, - signatures, - header: { - type: 'existing', - block: this.header, - transactionHashes: this.transactionHashes, - }, - }); - } -} diff --git a/packages/neo-one-node-consensus/src/context/RequestSentContext.ts b/packages/neo-one-node-consensus/src/context/RequestSentContext.ts deleted file mode 100644 index 1f52d3230b..0000000000 --- a/packages/neo-one-node-consensus/src/context/RequestSentContext.ts +++ /dev/null @@ -1,98 +0,0 @@ -import { ECPoint, UInt160, UInt256, UInt256Hex } from '@neo-one/client-common'; -import { Block } from '@neo-one/node-core'; -import { BN } from 'bn.js'; -import { HeaderContext } from './HeaderContext'; -import { Transactions } from './types'; - -interface RequestSentContextAdd { - readonly viewNumber: number; - readonly myIndex: number; - readonly primaryIndex: number; - readonly expectedView: readonly number[]; - readonly validators: readonly ECPoint[]; - readonly blockReceivedTimeSeconds: number; - readonly transactions: Transactions; - readonly signatures: ReadonlyArray; - readonly header: - | { - readonly type: 'new'; - readonly previousHash: UInt256; - readonly transactionHashes: readonly UInt256Hex[]; - readonly blockIndex: number; - readonly nonce: BN; - readonly timestamp: number; - readonly nextConsensus: UInt160; - } - | { - readonly type: 'existing'; - readonly block: Block; - readonly transactionHashes: readonly UInt256Hex[]; - }; -} - -export class RequestSentContext extends HeaderContext { - public constructor({ - viewNumber, - myIndex, - primaryIndex, - expectedView, - validators, - blockReceivedTimeSeconds, - transactions, - signatures, - header, - }: RequestSentContextAdd) { - super({ - type: 'primary', - viewNumber, - myIndex, - primaryIndex, - expectedView, - validators, - blockReceivedTimeSeconds, - transactions, - signatures, - header, - }); - } - - public cloneExpectedView({ expectedView }: { readonly expectedView: readonly number[] }): RequestSentContext { - return new RequestSentContext({ - viewNumber: this.viewNumber, - myIndex: this.myIndex, - primaryIndex: this.primaryIndex, - expectedView, - validators: this.validators, - blockReceivedTimeSeconds: this.blockReceivedTimeSeconds, - transactions: this.transactions, - signatures: this.signatures, - header: { - type: 'existing', - block: this.header, - transactionHashes: this.transactionHashes, - }, - }); - } - - public cloneSignatures({ - signatures, - }: { - readonly signatures: ReadonlyArray; - }): RequestSentContext { - return new RequestSentContext({ - viewNumber: this.viewNumber, - myIndex: this.myIndex, - primaryIndex: this.primaryIndex, - expectedView: this.expectedView, - validators: this.validators, - blockReceivedTimeSeconds: this.blockReceivedTimeSeconds, - transactions: this.transactions, - signatures, - header: { - type: 'existing', - block: this.header, - transactionHashes: this.transactionHashes, - }, - }); - } -} diff --git a/packages/neo-one-node-consensus/src/context/SignatureSentContext.ts b/packages/neo-one-node-consensus/src/context/SignatureSentContext.ts deleted file mode 100644 index b7a292f36b..0000000000 --- a/packages/neo-one-node-consensus/src/context/SignatureSentContext.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { HeaderContext } from './HeaderContext'; -import { RequestSentContext } from './RequestSentContext'; -import { Type } from './types'; - -export class SignatureSentContext extends HeaderContext { - public clone({ - type, - primaryIndex, - viewNumber, - }: { - readonly type: Type; - readonly primaryIndex: number; - readonly viewNumber: number; - }): SignatureSentContext { - return new SignatureSentContext({ - type, - viewNumber, - myIndex: this.myIndex, - primaryIndex, - expectedView: this.expectedView, - validators: this.validators, - blockReceivedTimeSeconds: this.blockReceivedTimeSeconds, - transactions: this.transactions, - signatures: this.signatures, - header: { - type: 'existing', - block: this.header, - transactionHashes: this.transactionHashes, - }, - }); - } - - public cloneExpectedView({ expectedView }: { readonly expectedView: readonly number[] }): SignatureSentContext { - return new SignatureSentContext({ - type: this.type, - viewNumber: this.viewNumber, - myIndex: this.myIndex, - primaryIndex: this.primaryIndex, - expectedView, - validators: this.validators, - blockReceivedTimeSeconds: this.blockReceivedTimeSeconds, - transactions: this.transactions, - signatures: this.signatures, - header: { - type: 'existing', - block: this.header, - transactionHashes: this.transactionHashes, - }, - }); - } - - public cloneSignatures({ - signatures, - }: { - readonly signatures: ReadonlyArray; - }): SignatureSentContext { - return new SignatureSentContext({ - type: this.type, - viewNumber: this.viewNumber, - myIndex: this.myIndex, - primaryIndex: this.primaryIndex, - expectedView: this.expectedView, - validators: this.validators, - blockReceivedTimeSeconds: this.blockReceivedTimeSeconds, - transactions: this.transactions, - signatures, - header: { - type: 'existing', - block: this.header, - transactionHashes: this.transactionHashes, - }, - }); - } - - public cloneRequestSent(): RequestSentContext { - return new RequestSentContext({ - viewNumber: this.viewNumber, - myIndex: this.myIndex, - primaryIndex: this.primaryIndex, - expectedView: this.expectedView, - validators: this.validators, - blockReceivedTimeSeconds: this.blockReceivedTimeSeconds, - transactions: this.transactions, - signatures: this.signatures, - header: { - type: 'existing', - block: this.header, - transactionHashes: this.transactionHashes, - }, - }); - } -} diff --git a/packages/neo-one-node-consensus/src/context/ViewChangingContext.ts b/packages/neo-one-node-consensus/src/context/ViewChangingContext.ts deleted file mode 100644 index 283a3131a1..0000000000 --- a/packages/neo-one-node-consensus/src/context/ViewChangingContext.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { ECPoint, UInt256 } from '@neo-one/client-common'; -import { Context } from './Context'; - -interface ViewChangingContextAdd { - readonly previousHash: UInt256; - readonly blockIndex: number; - readonly viewNumber: number; - readonly myIndex: number; - readonly primaryIndex: number; - readonly expectedView: readonly number[]; - readonly validators: readonly ECPoint[]; - readonly blockReceivedTimeSeconds: number; -} - -export class ViewChangingContext extends Context { - public constructor({ - previousHash, - blockIndex, - viewNumber, - myIndex, - primaryIndex, - expectedView, - validators, - blockReceivedTimeSeconds, - }: ViewChangingContextAdd) { - super({ - type: 'backup', - previousHash, - blockIndex, - viewNumber, - myIndex, - primaryIndex, - expectedView, - validators, - blockReceivedTimeSeconds, - }); - } - - public cloneExpectedView({ expectedView }: { readonly expectedView: readonly number[] }): ViewChangingContext { - return new ViewChangingContext({ - previousHash: this.previousHash, - blockIndex: this.blockIndex, - viewNumber: this.viewNumber, - myIndex: this.myIndex, - primaryIndex: this.primaryIndex, - expectedView, - validators: this.validators, - blockReceivedTimeSeconds: this.blockReceivedTimeSeconds, - }); - } -} diff --git a/packages/neo-one-node-consensus/src/context/cloneBlockSent.ts b/packages/neo-one-node-consensus/src/context/cloneBlockSent.ts deleted file mode 100644 index f3cdcb3686..0000000000 --- a/packages/neo-one-node-consensus/src/context/cloneBlockSent.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { BlockSentContext } from './BlockSentContext'; -import { Context } from './Context'; - -export function cloneBlockSent(context: Context): BlockSentContext { - return new BlockSentContext({ - type: context.type, - previousHash: context.previousHash, - blockIndex: context.blockIndex, - viewNumber: context.viewNumber, - myIndex: context.myIndex, - primaryIndex: context.primaryIndex, - expectedView: context.expectedView, - validators: context.validators, - blockReceivedTimeSeconds: context.blockReceivedTimeSeconds, - }); -} diff --git a/packages/neo-one-node-consensus/src/context/cloneInitial.ts b/packages/neo-one-node-consensus/src/context/cloneInitial.ts deleted file mode 100644 index 26ffa491f7..0000000000 --- a/packages/neo-one-node-consensus/src/context/cloneInitial.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { ECPoint, UInt256 } from '@neo-one/client-common'; -import { Context } from './Context'; -import { InitialContext } from './InitialContext'; -import { Type } from './types'; - -export function cloneInitial( - context: Context, - { - type, - previousHash, - blockIndex, - viewNumber, - myIndex, - primaryIndex, - expectedView, - validators, - blockReceivedTimeSeconds, - }: { - readonly type: Type; - readonly previousHash?: UInt256; - readonly blockIndex?: number; - readonly viewNumber: number; - readonly myIndex?: number; - readonly primaryIndex: number; - readonly expectedView?: readonly number[]; - readonly validators?: readonly ECPoint[]; - readonly blockReceivedTimeSeconds?: number; - }, -): InitialContext { - return new InitialContext({ - type, - previousHash: previousHash === undefined ? context.previousHash : previousHash, - blockIndex: blockIndex === undefined ? context.blockIndex : blockIndex, - viewNumber, - myIndex: myIndex === undefined ? context.myIndex : myIndex, - primaryIndex, - expectedView: expectedView === undefined ? context.expectedView : expectedView, - validators: validators === undefined ? context.validators : validators, - blockReceivedTimeSeconds: - blockReceivedTimeSeconds === undefined ? context.blockReceivedTimeSeconds : blockReceivedTimeSeconds, - }); -} diff --git a/packages/neo-one-node-consensus/src/context/common.ts b/packages/neo-one-node-consensus/src/context/common.ts new file mode 100644 index 0000000000..195722e46c --- /dev/null +++ b/packages/neo-one-node-consensus/src/context/common.ts @@ -0,0 +1,342 @@ +import { + AccountContract, + common, + crypto, + ECPoint, + IOHelper, + PrivateKey, + ScriptBuilder, + UInt256, +} from '@neo-one/client-common'; +import { + Blockchain, + BlockchainStorage, + ChangeViewConsensusMessage, + CommitConsensusMessage, + ConsensusContext, + ContractParametersContext, + getBlockScriptHashesForVerifying, + getM, + MerkleTree, + Node, + Transaction, + TransactionVerificationContext, + Witness, +} from '@neo-one/node-core'; +import { utils } from '@neo-one/utils'; +import { BN } from 'bn.js'; +import _ from 'lodash'; +import { Result } from '../types'; +import { Transactions } from './types'; + +export const getExpectedBlockSizeWithoutTransactions = (context: ConsensusContext, expectedTransactions: number) => { + const blockSizeInit = + IOHelper.sizeOfUInt32LE + + IOHelper.sizeOfUInt256 + + IOHelper.sizeOfUInt256 + + IOHelper.sizeOfUInt64LE + + IOHelper.sizeOfUInt32LE + + IOHelper.sizeOfUInt160 + + IOHelper.sizeOfUInt8 + + context.witnessSize; + + return ( + blockSizeInit + context.blockBuilder.getConsensusData().size + IOHelper.sizeOfVarUIntLE(expectedTransactions + 1) + ); +}; + +export const getExpectedBlockSize = (context: ConsensusContext) => { + const transactionValues = Object.values(context.transactions); + + return ( + getExpectedBlockSizeWithoutTransactions(context, transactionValues.length) + + transactionValues.reduce((acc, tx) => acc + (tx?.size ?? 0), 0) + ); +}; + +export const getExpectedBlockSystemFee = (context: ConsensusContext) => + Object.values(context.transactions).reduce((acc, tx) => acc.add(tx?.systemFee ?? new BN(0)), new BN(0)); + +const getPrimaryIndex = ({ + context, + viewNumber, +}: { + readonly context: ConsensusContext; + readonly viewNumber: number; +}): number => { + let primaryIndex = (utils.nullthrows(context.blockBuilder.index) - viewNumber) % context.validators.length; + if (primaryIndex < 0) { + primaryIndex += context.validators.length; + } + + return primaryIndex; +}; + +export const createBlock = async (contextIn: ConsensusContext, storage: BlockchainStorage) => { + let { context } = ensureHeader(contextIn); + const contract = AccountContract.createMultiSigContract(context.M, context.validators); + const scriptHashOptions = { + previousHash: utils.nullthrows(context.blockBuilder.previousHash), + witness: context.blockBuilder.witness, + }; + const scriptHashes = await getBlockScriptHashesForVerifying(scriptHashOptions, storage); + if (scriptHashes === [undefined]) { + // getBlockScriptHashesForVerifying can only return this when prevHash = UINT256_ZERO, so on genesis block + // when a witness SHOULD already be defined on the block. + throw new Error(); + } + const sc = new ContractParametersContext(scriptHashes.filter(utils.notNull)); + // tslint:disable-next-line: no-loop-statement + for (let i = 0, j = 0; i < context.validators.length && j < context.M; i += 1) { + const commitPayload = context.commitPayloads[i]; + if (commitPayload === undefined) { + continue; + } + + if (commitPayload.consensusMessage.viewNumber !== context.viewNumber) { + continue; + } + + const validator = context.validators[i]; + const signature = commitPayload.getDeserializedMessage().signature; + sc.addSignature(contract, validator, signature); + j += 1; + } + + const witness = sc.getWitnesses()[0]; + const transactions = context.transactionHashes + ?.map((p) => context.transactions[common.uInt256ToHex(p)]) + .filter(utils.notNull); + if (transactions === undefined) { + throw new Error('this should have already been defined'); + } + context = context.clone({ blockOptions: { witness, transactions } }); + + return { context, block: context.blockBuilder.getBlock() }; +}; + +export const ensureHeader = (contextIn: ConsensusContext) => { + let context = contextIn; + if (context.transactionHashes === undefined) { + return { context, block: undefined }; + } + + if (context.blockBuilder.merkleRoot === undefined) { + const consensusData = context.blockBuilder.getConsensusData(); + const merkleRoot = MerkleTree.computeRoot([consensusData.hash].concat(context.transactionHashes)); + context = context.clone({ blockOptions: { merkleRoot } }); + } + + return { context, block: context.blockBuilder }; +}; + +export const ensureMaxBlockLimitation = async ( + node: Node, + context: ConsensusContext, + transactionsIn: readonly Transaction[], +) => { + const [maxBlockSize, maxBlockSystemFee, maxTransactionsPerBlock] = await Promise.all([ + node.blockchain.getMaxBlockSize(), + node.blockchain.getMaxBlockSystemFee(), + node.blockchain.getMaxTransactionsPerBlock(), + ]); + + const txs = transactionsIn.slice(0, maxTransactionsPerBlock); + const newVerificationContext = node.getNewVerificationContext(); + + const { hashes, transactions } = txs.reduce<{ + readonly hashes: readonly UInt256[]; + readonly transactions: Transactions; + readonly blockSize: number; + readonly blockSystemFee: BN; + }>( + (acc, transaction) => { + const newBlockSize = acc.blockSize + transaction.size; + if (newBlockSize > maxBlockSize) { + return { + ...acc, + blockSize: newBlockSize, + }; + } + + const newBlockSystemFee = acc.blockSystemFee.add(transaction.systemFee); + if (newBlockSystemFee.gt(maxBlockSystemFee)) { + return { + ...acc, + blockSize: newBlockSize, + blockSystemFee: newBlockSystemFee, + }; + } + + newVerificationContext.addTransaction(transaction); + + return { + hashes: acc.hashes.concat([transaction.hash]), + transactions: { + ...acc.transactions, + [transaction.hashHex]: transaction, + }, + blockSize: newBlockSize, + blockSystemFee: newBlockSystemFee, + }; + }, + { + hashes: [], + transactions: {}, + blockSize: getExpectedBlockSizeWithoutTransactions(context, txs.length), + blockSystemFee: new BN(0), + }, + ); + + return { + context: context.clone({ + transactionHashes: hashes, + transactions, + verificationContext: newVerificationContext, + }), + }; +}; + +export const reset = async ({ + blockchain, + privateKey, + context, + viewNumber, +}: { + readonly blockchain: Blockchain; + readonly privateKey: PrivateKey; + readonly context: ConsensusContext; + readonly viewNumber: number; +}): Promise => { + if (viewNumber === 0) { + const [validators, nextValidators] = await Promise.all([ + blockchain.getValidators(), + blockchain.getNextBlockValidators(), + ]); + + const initialBlockOptions = { + previousHash: blockchain.currentBlock.hash, + index: blockchain.currentBlockIndex + 1, + nextConsensus: crypto.getConsensusAddress(validators), + merkleRoot: undefined, + messageMagic: blockchain.settings.messageMagic, + }; + + const previousValidators = context.validators; + let witnessSize = context.witnessSize; + if (witnessSize === 0 || previousValidators.length !== nextValidators.length) { + const builder = new ScriptBuilder(); + _.range(getM(nextValidators.length)).forEach(() => { + builder.emitPush(Buffer.alloc(64)); + }); + + witnessSize = new Witness({ + invocation: builder.build(), + verification: crypto.createMultiSignatureRedeemScript(getM(nextValidators.length), nextValidators), + }).size; + } + + const changeViewPayloads = _.range(nextValidators.length).map(() => undefined); + const lastChangeViewPayloads = _.range(nextValidators.length).map(() => undefined); + const commitPayloads = _.range(nextValidators.length).map(() => undefined); + let lastSeenMessage = context.lastSeenMessage; + if (context.lastSeenMessage.length === 0) { + lastSeenMessage = _.range(nextValidators.length).map(() => -1); + } + + const publicKey = crypto.privateKeyToPublicKey(privateKey); + const myIndex = nextValidators.findIndex((validator) => validator.equals(publicKey)); + + return { + context: context.clone({ + blockOptions: initialBlockOptions, + validators: nextValidators, + witnessSize, + myIndex, + changeViewPayloads, + lastChangeViewPayloads, + commitPayloads, + lastSeenMessage, + }), + }; + } + { + const mutableLastChangeViewPayloads = [...context.lastChangeViewPayloads]; + _.range(mutableLastChangeViewPayloads.length).forEach((i) => { + // tslint:disable-next-line: prefer-conditional-expression + if ( + (context.changeViewPayloads[i]?.getDeserializedMessage().newViewNumber ?? -1) >= + viewNumber + ) { + mutableLastChangeViewPayloads[i] = context.changeViewPayloads[i]; + } else { + mutableLastChangeViewPayloads[i] = undefined; + } + }); + + const primaryIndex = getPrimaryIndex({ context, viewNumber }); + const newBlockOptions = { + consensusData: { + primaryIndex, + }, + merkleRoot: undefined, + timestamp: new BN(0), + transactions: undefined, + }; + + const preparationPayloads = _.range(context.validators.length).map(() => undefined); + + const mutableLastSeenMessage = [...context.lastSeenMessage]; + if (context.myIndex >= 0) { + mutableLastSeenMessage[context.myIndex] = utils.nullthrows(context.blockBuilder?.index); + } + + return { + context: context.clone({ + viewNumber, + lastChangeViewPayloads: mutableLastChangeViewPayloads, + blockOptions: newBlockOptions, + transactionHashes: undefined, + preparationPayloads, + lastSeenMessage: mutableLastSeenMessage, + }), + }; + } +}; + +// TODO: not convinced we need to reload this that often +export const saveContext = async (context: ConsensusContext) => {}; + +// TODO: pickup here, everything SHOULD be set up correctly, now we just need to +// sort out how it all goes together and then starts +export const getInitialContext = ({ + blockchain, + publicKey, + validators, + verificationContext, +}: { + readonly blockchain: Blockchain; + readonly publicKey: ECPoint; + readonly validators: readonly ECPoint[]; + readonly verificationContext: TransactionVerificationContext; +}): ConsensusContext => { + const blockIndex = blockchain.currentBlock.index + 1; + const primaryIndex = blockIndex % validators.length; + const myIndex = _.findIndex(validators, (validator) => common.ecPointEqual(validator, publicKey)); + + const blockOptions = { + version: 0, + index: blockIndex, + consensusData: { primaryIndex }, + }; + + return new ConsensusContext({ + myIndex, + verificationContext, + viewNumber: 0, + blockOptions, + validators, + witnessSize: 0, + blockReceivedTimeMS: Date.now(), + }); +}; diff --git a/packages/neo-one-node-consensus/src/context/index.ts b/packages/neo-one-node-consensus/src/context/index.ts index 119c64ca1f..88e541acad 100644 --- a/packages/neo-one-node-consensus/src/context/index.ts +++ b/packages/neo-one-node-consensus/src/context/index.ts @@ -1,11 +1,2 @@ -export * from './Context'; -export * from './BlockSentContext'; -export * from './HeaderContext'; -export * from './InitialContext'; -export * from './RequestReceivedContext'; -export * from './RequestSentContext'; -export * from './SignatureSentContext'; -export * from './ViewChangingContext'; export * from './types'; -export * from './cloneBlockSent'; -export * from './cloneInitial'; +export * from './common'; diff --git a/packages/neo-one-node-consensus/src/context/types.ts b/packages/neo-one-node-consensus/src/context/types.ts index a09ddb73ae..0973eaf55e 100644 --- a/packages/neo-one-node-consensus/src/context/types.ts +++ b/packages/neo-one-node-consensus/src/context/types.ts @@ -2,4 +2,3 @@ import { Transaction } from '@neo-one/node-core'; export interface Transactions { readonly [hash: string]: Transaction | undefined; } -export type Type = 'backup' | 'primary'; diff --git a/packages/neo-one-node-consensus/src/handleConsensusPayload.ts b/packages/neo-one-node-consensus/src/handleConsensusPayload.ts index bf65db160f..07f681f184 100644 --- a/packages/neo-one-node-consensus/src/handleConsensusPayload.ts +++ b/packages/neo-one-node-consensus/src/handleConsensusPayload.ts @@ -1,208 +1,568 @@ -import { common, crypto, PrivateKey } from '@neo-one/client-common'; +import { common, crypto, PrivateKey, UInt256Hex } from '@neo-one/client-common'; import { ChangeViewConsensusMessage, + ChangeViewReason, + CommitConsensusMessage, + ConsensusContext, ConsensusMessageType, ConsensusPayload, Node, PrepareRequestConsensusMessage, PrepareResponseConsensusMessage, - Transaction, + RecoveryConsensusMessage, } from '@neo-one/node-core'; import { utils as commonUtils } from '@neo-one/utils'; -import { addTransaction, checkExpectedView, checkSignatures, initializeConsensus } from './common'; -import { ConsensusContext } from './ConsensusContext'; -import { Context, HeaderContext, RequestReceivedContext } from './context'; +import _ from 'lodash'; +import { checkCommits, checkPreparations, checkPrepareResponse } from './checkPayload'; +import { addTransaction, checkExpectedView, initializeConsensus, sendPrepareRequest } from './common'; +import { ensureHeader } from './context'; +import { makeChangeView, makeRecovery } from './makePayload'; +import { TimerContext } from './TimerContext'; import { Result } from './types'; -const handleChangeView = ({ +const handleChangeView = async ({ context: contextIn, node, + knownHashes, payload, - consensusContext, + privateKey, + timerContext, message, + isRecovering, }: { - readonly context: Context; + readonly context: ConsensusContext; readonly node: Node; + readonly knownHashes: Set; readonly payload: ConsensusPayload; - readonly consensusContext: ConsensusContext; + readonly privateKey: PrivateKey; + readonly timerContext: TimerContext; readonly message: ChangeViewConsensusMessage; -}): Result => { + readonly isRecovering: boolean; +}): Promise => { let context = contextIn; const viewNumber = message.newViewNumber; - if (viewNumber > context.expectedView[payload.validatorIndex]) { - const mutableExpectedView = [...context.expectedView]; - mutableExpectedView[payload.validatorIndex] = viewNumber; - context = context.cloneExpectedView({ expectedView: mutableExpectedView }); - if (checkExpectedView({ context, viewNumber })) { - return initializeConsensus({ - node, - context, - viewNumber, - consensusContext, - }); + + if (viewNumber <= context.viewNumber) { + const { context: recoveryContext } = await handleRecoveryRequest({ + context, + node, + privateKey, + payload, + knownHashes, + }); + context = recoveryContext; + } + + if (context.commitSent) { + return { context }; + } + + const expectedView = + context.changeViewPayloads[payload.validatorIndex]?.getDeserializedMessage() + .newViewNumber ?? 0; + if (viewNumber <= expectedView) { + return { context }; + } + + const mutableChangeViewPayloads = [...context.changeViewPayloads]; + mutableChangeViewPayloads[payload.validatorIndex] = payload; + context = context.clone({ + changeViewPayloads: mutableChangeViewPayloads, + }); + + if (checkExpectedView({ context, viewNumber })) { + if (!context.watchOnly) { + const viewMessage = context.changeViewPayloads[context.myIndex]?.getDeserializedMessage< + ChangeViewConsensusMessage + >(); + // tslint:disable-next-line: strict-type-predicates + if (viewMessage === undefined || viewMessage.newViewNumber < viewNumber) { + const { context: changeViewContext, payload: changeViewPayload } = await makeChangeView({ + node, + context, + privateKey, + reason: ChangeViewReason.ChangeAgreement, + }); + context = changeViewContext; + node.relayConsensusPayload(changeViewPayload); + } } + + return initializeConsensus({ + blockchain: node.blockchain, + privateKey, + context, + viewNumber, + timerContext, + isRecovering, + }); } return { context }; }; -const TEN_MINUTES_IN_SECONDS = 10 * 60; +const TEN_MINUTES_IN_MILLISECONDS = 10 * 60 * 1000; const handlePrepareRequest = async ({ context: contextIn, node, privateKey, payload, - consensusContext, + timerContext, message, + isRecovering, }: { - readonly context: Context; + readonly context: ConsensusContext; readonly node: Node; readonly privateKey: PrivateKey; readonly payload: ConsensusPayload; - readonly consensusContext: ConsensusContext; + readonly timerContext: TimerContext; readonly message: PrepareRequestConsensusMessage; -}): Promise> => { + readonly isRecovering: boolean; +}): Promise => { let context = contextIn; if ( - context.type !== 'backup' || - context instanceof RequestReceivedContext || - payload.validatorIndex !== context.primaryIndex || - payload.timestamp > consensusContext.nowSeconds() + TEN_MINUTES_IN_SECONDS + context.requestSentOrReceived || + context.notAcceptingPayloadsDueToViewChanging || + payload.validatorIndex !== context.blockBuilder.consensusData?.primaryIndex || + message.viewNumber !== context.viewNumber || + message.timestamp.gtn(timerContext.nowMilliseconds() + TEN_MINUTES_IN_MILLISECONDS) ) { return { context }; } - const header = await node.blockchain.header.get({ - hashOrIndex: context.previousHash, - }); + const header = await node.blockchain.getHeader(commonUtils.nullthrows(context.blockBuilder.previousHash)); + if (header === undefined) { + return { context }; + } - if (payload.timestamp <= header.timestamp) { + if (message.timestamp <= header.timestamp) { return { context }; } - const mutableSignatures = []; - mutableSignatures[payload.validatorIndex] = message.signature; - const newContext = new RequestReceivedContext({ - viewNumber: context.viewNumber, - myIndex: context.myIndex, - primaryIndex: context.primaryIndex, - expectedView: context.expectedView, - validators: context.validators, - blockReceivedTimeSeconds: context.blockReceivedTimeSeconds, - transactions: {}, - signatures: mutableSignatures, - header: { - type: 'new', - previousHash: context.previousHash, - transactionHashes: message.transactionHashes.map((hash) => common.uInt256ToHex(hash)), + const maybeStates = await Promise.all(message.transactionHashes.map(node.blockchain.transactions.tryGet)); + if (maybeStates.some((value) => value !== undefined)) { + return { context }; + } - blockIndex: context.blockIndex, + const newPreparationPayloads = context.preparationPayloads.map((p) => { + if (p?.getDeserializedMessage().preparationHash.equals(payload.hash)) { + return p; + } + + return undefined; + }); + + const mutablePreparationPayloads = [...newPreparationPayloads]; + mutablePreparationPayloads[payload.validatorIndex] = payload; + + const tempContextOptions = { + timestamp: message.timestamp, + consensusData: { nonce: message.nonce, - timestamp: payload.timestamp, - nextConsensus: message.nextConsensus, }, - }); + transactionHashes: message.transactionHashes, + transactions: {}, + verificationContext: node.getNewVerificationContext(), + preparationPayloads: mutablePreparationPayloads, + }; + + const { context: headerContext, block } = ensureHeader(context.clone(tempContextOptions)); + context = headerContext; + const hashData = block?.getBlock().message; + if (hashData === undefined) { + throw new Error('block should have hashData'); + } - const verified = crypto.verify({ - message: newContext.header.message, - signature: message.signature, - publicKey: context.validators[payload.validatorIndex], + const newCommitPayloads = [...context.commitPayloads].map((p, idx) => { + if ( + p?.consensusMessage.viewNumber === context.viewNumber && + !crypto.verify({ + message: hashData, + signature: p.getDeserializedMessage().signature, + publicKey: context.validators[idx], + }) + ) { + return undefined; + } + + return p; }); - if (!verified) { - return { context }; + context = context.clone({ commitPayloads: newCommitPayloads }); + + if (context.transactionHashes === undefined) { + throw new Error('we set this explicitly'); } - let nextContext = newContext; - // tslint:disable-next-line no-loop-statement - for (const hash of newContext.transactionHashes.slice(1)) { - const transaction = node.memPool[hash] as Transaction | undefined; - if (transaction !== undefined) { - const res = await addTransaction({ - context: nextContext, - node, - privateKey, - transaction, - verify: false, - consensusContext, - }); + if (context.transactionHashes?.length === 0) { + return checkPrepareResponse({ + context, + node, + privateKey, + timerContext, + isRecovering, + }); + } + + let nextContext = context; + // tslint:disable-next-line: no-loop-statement + for (const hash of context.transactionHashes) { + const maybeTransaction = node.memPool[common.uInt256ToHex(hash)]; + // tslint:disable-next-line: strict-type-predicates + if (maybeTransaction !== undefined) { + try { + const { context: txContext } = await addTransaction({ + context: nextContext, + node, + privateKey, + transaction: maybeTransaction, + verify: false, + timerContext, + isRecovering, + }); - if (!(res.context instanceof RequestReceivedContext)) { - return res; + nextContext = txContext; + } catch { + return { context: nextContext }; } - // eslint-disable-next-line - nextContext = res.context; + } else { + throw new Error('yep guess we need to implement the mempool stuff'); } } - const result = await addTransaction({ - context: nextContext, - node, - privateKey, - transaction: message.minerTransaction, - verify: true, - consensusContext, - }); - - if (!(result.context instanceof RequestReceivedContext)) { - return result; + if (Object.values(context.transactions).length < context.transactionHashes.length) { + throw new Error('is this actually happening tho?'); } - // eslint-disable-next-line - context = result.context; + node.syncMemPool(); return { context }; }; +const handleCommit = async ({ + context: contextIn, + node, + payload, + commit, +}: { + readonly context: ConsensusContext; + readonly node: Node; + readonly payload: ConsensusPayload; + readonly commit: CommitConsensusMessage; +}) => { + let context = contextIn; + const idx = payload.validatorIndex; + const existingCommitPayload = context.commitPayloads[idx]; + if (!existingCommitPayload?.hash.equals(payload.hash)) { + return { context }; + } + + const mutableExistingCommitPayloads = [...context.commitPayloads]; + if (commit.viewNumber === context.viewNumber) { + const { context: newContext, block } = ensureHeader(context); + context = newContext; + const message = block?.getBlock().message; + if (message === undefined) { + mutableExistingCommitPayloads[idx] = payload; + context = context.clone({ commitPayloads: mutableExistingCommitPayloads }); + } else if ( + crypto.verify({ message, signature: commit.signature, publicKey: context.validators[payload.validatorIndex] }) + ) { + mutableExistingCommitPayloads[idx] = payload; + context = context.clone({ commitPayloads: mutableExistingCommitPayloads }); + const checkCommitsContext = await checkCommits(context, node); + context = checkCommitsContext; + } + + return { context }; + } + + mutableExistingCommitPayloads[idx] = payload; + context = context.clone({ commitPayloads: mutableExistingCommitPayloads }); + + return { context }; +}; + const handlePrepareResponse = async ({ - context, + context: contextIn, node, + privateKey, payload, message, }: { - readonly context: Context; + readonly context: ConsensusContext; readonly node: Node; + readonly privateKey: PrivateKey; readonly payload: ConsensusPayload; readonly message: PrepareResponseConsensusMessage; -}): Promise> => { +}): Promise => { + let context = contextIn; if ( - context instanceof HeaderContext && - context.signatures[payload.validatorIndex] === undefined && - crypto.verify({ - message: context.header.message, - signature: message.signature, - publicKey: context.validators[payload.validatorIndex], - }) + message.viewNumber !== context.viewNumber || + context.preparationPayloads[payload.validatorIndex] !== undefined || + context.notAcceptingPayloadsDueToViewChanging ) { - const mutableSignatures = [...context.signatures]; - mutableSignatures[payload.validatorIndex] = message.signature; - const newContext = context.cloneSignatures({ signatures: mutableSignatures }); + return { context }; + } + + const index = context.blockBuilder.consensusData?.primaryIndex; + if (index === undefined) { + return { context }; + } + + const prepPayload = context.preparationPayloads[index]; + + if (prepPayload !== undefined && !message.preparationHash.equals(prepPayload.hash)) { + return { context }; + } + + const mutablePreparationPayloads = [...context.preparationPayloads]; + mutablePreparationPayloads[payload.validatorIndex] = payload; + context = context.clone({ preparationPayloads: mutablePreparationPayloads }); + if (context.watchOnly || context.commitSent) { + return { context }; + } - return checkSignatures({ context: newContext, node }); + if (context.requestSentOrReceived) { + return checkPreparations(context, node, privateKey); } return { context }; }; +const handleRecoveryRequest = async ({ + node, + privateKey, + context: contextIn, + payload, + knownHashes, +}: { + readonly node: Node; + readonly privateKey: PrivateKey; + readonly context: ConsensusContext; + readonly payload: ConsensusPayload; + readonly knownHashes: Set; +}): Promise => { + const context = contextIn; + if (knownHashes.has(payload.hashHex)) { + return { context }; + } + knownHashes.add(payload.hashHex); + + if (context.watchOnly) { + return { context }; + } + + if (!context.commitSent) { + const shouldSendRecovery = _.range(1, context.M + 1).some((i) => { + const chosenIndex = (payload.validatorIndex + i) % context.validators.length; + + return chosenIndex === context.myIndex; + }); + + if (!shouldSendRecovery) { + return { context }; + } + } + + const recoveryPayload = await makeRecovery({ context, node, privateKey }); + + node.relayConsensusPayload(recoveryPayload); + + return { context }; +}; + +const handleRecoveryMessage = async ({ + node, + context: contextIn, + knownHashes, + privateKey, + payload, + message, + timerContext, +}: { + readonly node: Node; + readonly context: ConsensusContext; + readonly knownHashes: Set; + readonly privateKey: PrivateKey; + readonly payload: ConsensusPayload; + readonly message: RecoveryConsensusMessage; + readonly timerContext: TimerContext; +}): Promise => { + let context = contextIn; + if (message.viewNumber > context.viewNumber) { + if (context.commitSent) { + return { context }; + } + + const changeViewPayloads = message.getChangeViewPayloads(context, payload); + const { context: postChangeViewsContext } = await reverifyAndProcessPayloads({ + context, + node, + knownHashes, + privateKey, + payloads: changeViewPayloads, + timerContext, + }); + + context = postChangeViewsContext; + } + + if ( + message.viewNumber === context.viewNumber && + !context.notAcceptingPayloadsDueToViewChanging && + !context.commitSent + ) { + if (!context.requestSentOrReceived) { + const prepareRequestPayload = message.getPrepareRequestPayload(context, payload); + if (prepareRequestPayload !== undefined) { + const { context: postPrepareRequestContext } = await reverifyAndProcessPayload({ + context, + node, + knownHashes, + privateKey, + payload: prepareRequestPayload, + timerContext, + }); + + context = postPrepareRequestContext; + } else if (context.isPrimary) { + const { context: prepareRequestContext } = await sendPrepareRequest({ node, privateKey, context }); + context = prepareRequestContext; + } + } + + const prepareResponsePayloads = message.getPrepareResponsePayloads(context, payload); + const { context: postPrepareResponsesContext } = await reverifyAndProcessPayloads({ + context, + node, + knownHashes, + privateKey, + payloads: prepareResponsePayloads, + timerContext, + }); + + context = postPrepareResponsesContext; + } + + if (message.viewNumber <= context.viewNumber) { + const commitPayloads = message.getCommitPayloads(context, payload); + const { context: postCommitsContext } = await reverifyAndProcessPayloads({ + context, + node, + knownHashes, + privateKey, + payloads: commitPayloads, + timerContext, + }); + + context = postCommitsContext; + } + + return { context }; +}; + +interface ReverifyPayloadResult { + readonly context: ConsensusContext; + readonly verified: boolean; +} + +const reverifyAndProcessPayload = async ({ + context, + node, + knownHashes, + privateKey, + payload, + timerContext, +}: { + readonly context: ConsensusContext; + readonly node: Node; + readonly knownHashes: Set; + readonly privateKey: PrivateKey; + readonly payload: ConsensusPayload; + readonly timerContext: TimerContext; +}): Promise => { + const { blockchain } = node; + try { + await blockchain.verifyConsensusPayload(payload); + } catch { + return { context, verified: false }; + } + + const result = await handleConsensusPayload({ + context, + node, + knownHashes, + privateKey, + payload, + timerContext, + isRecovering: true, + }); + + return { context: result.context, verified: true }; +}; + +const reverifyAndProcessPayloads = async ({ + context: contextIn, + node, + knownHashes, + privateKey, + payloads, + timerContext, +}: { + readonly context: ConsensusContext; + readonly node: Node; + readonly knownHashes: Set; + readonly privateKey: PrivateKey; + readonly payloads: readonly ConsensusPayload[]; + readonly timerContext: TimerContext; +}): Promise<{ readonly context: ConsensusContext; readonly valid: number }> => { + let valid = 0; + let context = contextIn; + // tslint:disable-next-line: no-loop-statement + for (const p of payloads) { + const { context: nextContext, verified } = await reverifyAndProcessPayload({ + context, + node, + knownHashes, + privateKey, + payload: p, + timerContext, + }); + + if (verified) { + valid += 1; + } + + context = nextContext; + } + + return { context, valid }; +}; + export const handleConsensusPayload = async ({ context, node, + knownHashes, privateKey, payload, - consensusContext, + timerContext, + isRecovering = false, }: { - readonly context: Context; + readonly context: ConsensusContext; readonly node: Node; + readonly knownHashes: Set; readonly privateKey: PrivateKey; readonly payload: ConsensusPayload; - readonly consensusContext: ConsensusContext; -}): Promise> => { + readonly timerContext: TimerContext; + readonly isRecovering?: boolean; +}): Promise => { const { consensusMessage } = payload; if ( payload.validatorIndex === context.myIndex || - payload.version !== context.version || - !common.uInt256Equal(payload.previousHash, context.previousHash) || - payload.blockIndex !== context.blockIndex || + payload.version !== context.blockBuilder.version || + !common.uInt256Equal(payload.previousHash, context.blockBuilder.previousHash ?? common.ZERO_UINT256) || + payload.blockIndex !== (context.blockBuilder.index ?? -1) || payload.validatorIndex >= context.validators.length || (consensusMessage.type !== ConsensusMessageType.ChangeView && consensusMessage.viewNumber !== context.viewNumber) ) { @@ -215,8 +575,11 @@ export const handleConsensusPayload = async ({ context, node, payload, - consensusContext, - message: consensusMessage, + privateKey, + timerContext, + knownHashes, + message: consensusMessage as ChangeViewConsensusMessage, + isRecovering, }); case ConsensusMessageType.PrepareRequest: @@ -225,20 +588,50 @@ export const handleConsensusPayload = async ({ node, privateKey, payload, - consensusContext, - message: consensusMessage, + timerContext, + message: consensusMessage as PrepareRequestConsensusMessage, + isRecovering, }); case ConsensusMessageType.PrepareResponse: return handlePrepareResponse({ context, node, + privateKey, + payload, + message: consensusMessage as PrepareResponseConsensusMessage, + }); + + case ConsensusMessageType.Commit: + return handleCommit({ + context, + node, + payload, + commit: consensusMessage as CommitConsensusMessage, + }); + + case ConsensusMessageType.RecoveryRequest: + return handleRecoveryRequest({ + node, + privateKey, + context, + payload, + knownHashes, + }); + + case ConsensusMessageType.RecoveryMessage: + return handleRecoveryMessage({ + node, + context, + knownHashes, + privateKey, payload, - message: consensusMessage, + message: consensusMessage as RecoveryConsensusMessage, + timerContext, }); default: - commonUtils.assertNever(consensusMessage); + commonUtils.assertNever(consensusMessage.type); throw new Error('For TS'); } }; diff --git a/packages/neo-one-node-consensus/src/handlePersistBlock.ts b/packages/neo-one-node-consensus/src/handlePersistBlock.ts index 2dd4a41b54..c5895728f2 100644 --- a/packages/neo-one-node-consensus/src/handlePersistBlock.ts +++ b/packages/neo-one-node-consensus/src/handlePersistBlock.ts @@ -1,21 +1,30 @@ -import { ECPoint } from '@neo-one/client-common'; -import { Blockchain } from '@neo-one/node-core'; -import { initializeNewConsensus } from './common'; -import { ConsensusContext } from './ConsensusContext'; -import { InitialContext } from './context'; +import { PrivateKey } from '@neo-one/client-common'; +import { Blockchain, ConsensusContext } from '@neo-one/node-core'; +import { initializeConsensus } from './common'; +import { TimerContext } from './TimerContext'; import { Result } from './types'; export const handlePersistBlock = async ({ blockchain, - publicKey, - consensusContext, + privateKey, + context: contextIn, + timerContext, }: { readonly blockchain: Blockchain; - readonly publicKey: ECPoint; - readonly consensusContext: ConsensusContext; -}): Promise> => - initializeNewConsensus({ + readonly privateKey: PrivateKey; + readonly context: ConsensusContext; + readonly timerContext: TimerContext; +}): Promise => { + let context = contextIn; + const newTime = Date.now(); + context = context.clone({ blockReceivedTimeMS: newTime }); + + return initializeConsensus({ + context, blockchain, - publicKey, - consensusContext, + privateKey, + timerContext, + viewNumber: 0, + isRecovering: false, }); +}; diff --git a/packages/neo-one-node-consensus/src/handleTransactionReceived.ts b/packages/neo-one-node-consensus/src/handleTransactionReceived.ts index 22d0e30e5b..56347597d0 100644 --- a/packages/neo-one-node-consensus/src/handleTransactionReceived.ts +++ b/packages/neo-one-node-consensus/src/handleTransactionReceived.ts @@ -1,25 +1,47 @@ import { PrivateKey } from '@neo-one/client-common'; -import { Node, Transaction } from '@neo-one/node-core'; +import { ConsensusContext, Node, Transaction } from '@neo-one/node-core'; import { addTransaction } from './common'; -import { ConsensusContext } from './ConsensusContext'; -import { Context, RequestReceivedContext } from './context'; +import { TimerContext } from './TimerContext'; import { Result } from './types'; export const handleTransactionReceived = async ({ context, node, privateKey, + privateNet, transaction, - consensusContext, + timerContext, }: { - readonly context: Context; + readonly context: ConsensusContext; readonly node: Node; readonly privateKey: PrivateKey; + readonly privateNet: boolean; readonly transaction: Transaction; - readonly consensusContext: ConsensusContext; -}): Promise> => { + readonly timerContext: TimerContext; +}): Promise => { + // TODO: temporary workaround for private net development. + if (privateNet) { + if (context.blockSent) { + return { context }; + } + + return addTransaction({ + context, + node, + privateKey, + transaction, + verify: true, + timerContext, + isRecovering: false, + }); + } + if ( - !(context instanceof RequestReceivedContext) || + !context.isBackup || + context.notAcceptingPayloadsDueToViewChanging || + !context.requestSentOrReceived || + context.responseSent || + context.blockSent || context.transactions[transaction.hashHex] !== undefined || !context.transactionHashesSet.has(transaction.hashHex) ) { @@ -32,6 +54,7 @@ export const handleTransactionReceived = async ({ privateKey, transaction, verify: true, - consensusContext, + timerContext, + isRecovering: false, }); }; diff --git a/packages/neo-one-node-consensus/src/makePayload.ts b/packages/neo-one-node-consensus/src/makePayload.ts new file mode 100644 index 0000000000..36f076261b --- /dev/null +++ b/packages/neo-one-node-consensus/src/makePayload.ts @@ -0,0 +1,295 @@ +import { common, crypto, PrivateKey, UInt256, utils as commonUtils } from '@neo-one/client-common'; +import { + ChangeViewConsensusMessage, + ChangeViewPayloadCompact, + ChangeViewReason, + CommitConsensusMessage, + CommitPayloadCompact, + ConsensusContext, + ConsensusMessage, + ConsensusPayload, + Node, + PreparationPayloadCompact, + PrepareRequestConsensusMessage, + PrepareResponseConsensusMessage, + RecoveryConsensusMessage, + RecoveryRequestConsensusMessage, + UnsignedConsensusPayload, +} from '@neo-one/node-core'; +import { utils } from '@neo-one/utils'; +import { BN } from 'bn.js'; +import _ from 'lodash'; +import { ensureHeader, ensureMaxBlockLimitation } from './context'; + +const getPreparationHash = (preparationPayloads: readonly ConsensusPayload[]): UInt256 => { + // tslint:disable-next-line: no-array-mutation + const result = Object.entries( + _.groupBy(preparationPayloads, (p) => + common.uInt256ToHex(p.getDeserializedMessage().preparationHash), + ), + ).sort(([, { length: aLength }], [, { length: bLength }]) => utils.numCompDescending(aLength, bLength))[0]; + + // tslint:disable-next-line: strict-type-predicates + if (result === undefined) { + return common.ZERO_UINT256; + } + + return common.hexToUInt256(result[0]); +}; + +export const makeSignedPayload = async ({ + node, + privateKey, + context, + consensusMessage, +}: { + readonly node: Node; + readonly privateKey: PrivateKey; + readonly context: ConsensusContext; + readonly consensusMessage: ConsensusMessage; +}) => { + const validators = await node.blockchain.getNextBlockValidators(); + + return ConsensusPayload.sign( + new UnsignedConsensusPayload({ + version: context.blockBuilder.version ?? 0, + previousHash: utils.nullthrows(context.blockBuilder.previousHash), + blockIndex: utils.nullthrows(context.blockBuilder.index), + validatorIndex: context.myIndex, + consensusMessage, + messageMagic: node.blockchain.deserializeWireContext.messageMagic, + }), + privateKey, + validators, + node.blockchain.deserializeWireContext.messageMagic, + ); +}; + +export const makeCommit = async ({ + context: contextIn, + node, + privateKey, +}: { + readonly context: ConsensusContext; + readonly node: Node; + readonly privateKey: PrivateKey; +}) => { + let context = contextIn; + const maybePayload = context.commitPayloads[context.myIndex]; + if (maybePayload) { + return { context, payload: maybePayload }; + } + + const { context: newContext, block } = ensureHeader(context); + context = newContext; + if (block === undefined) { + throw new Error(); + } + + const signature = crypto.sign({ message: context.blockBuilder.getBlock().message, privateKey }); + const signedPayload = await makeSignedPayload({ + node, + privateKey, + context, + consensusMessage: new CommitConsensusMessage({ viewNumber: context.viewNumber, signature }), + }); + + const mutablePayloads = [...context.commitPayloads]; + mutablePayloads[context.myIndex] = signedPayload; + + context = context.clone({ commitPayloads: mutablePayloads }); + + return { context, payload: signedPayload }; +}; + +export const makePrepareResponse = async ({ + context: contextIn, + node, + privateKey, +}: { + readonly context: ConsensusContext; + readonly node: Node; + readonly privateKey: PrivateKey; +}) => { + let context = contextIn; + const payload = context.preparationPayloads[utils.nullthrows(context.blockBuilder?.consensusData?.primaryIndex)]; + if (payload === undefined) { + // TODO + throw new Error(); + } + const preparationHash = payload.hash; + + const signedPayload = await makeSignedPayload({ + node, + privateKey, + context, + consensusMessage: new PrepareResponseConsensusMessage({ + viewNumber: context.viewNumber, + preparationHash, + }), + }); + + const mutablePreparationPayloads = [...context.preparationPayloads]; + mutablePreparationPayloads[context.myIndex] = signedPayload; + context = context.clone({ preparationPayloads: mutablePreparationPayloads }); + + return { context, payload: signedPayload }; +}; + +export const makeRecovery = async ({ + context: contextIn, + node, + privateKey, +}: { + readonly context: ConsensusContext; + readonly node: Node; + readonly privateKey: PrivateKey; +}) => { + const context = contextIn; + + const prepareRequestMessage = + context.transactionHashes !== undefined + ? new PrepareRequestConsensusMessage({ + viewNumber: context.viewNumber, + timestamp: utils.nullthrows(context.blockBuilder.timestamp), + nonce: utils.nullthrows(context.blockBuilder.consensusData?.nonce), + transactionHashes: context.transactionHashes, + }) + : undefined; + + const changeViewMessages = _.fromPairs( + _.take( + context.lastChangeViewPayloads + .filter(utils.notNull) + .map((p) => [p.validatorIndex, ChangeViewPayloadCompact.fromPayload(p)]), + context.M, + ), + ); + + const filteredPreparationPayloads = context.preparationPayloads.filter(utils.notNull); + + const preparationHash = + context.transactionHashes === undefined ? getPreparationHash(filteredPreparationPayloads) : undefined; + + const preparationMessages = _.fromPairs( + filteredPreparationPayloads.map((p) => [p.validatorIndex, PreparationPayloadCompact.fromPayload(p)]), + ); + + const commitMessages = context.commitSent + ? _.fromPairs( + context.commitPayloads + .filter(utils.notNull) + .map((p) => [p.validatorIndex, CommitPayloadCompact.fromPayload(p)]), + ) + : {}; + + return makeSignedPayload({ + node, + privateKey, + context, + consensusMessage: new RecoveryConsensusMessage({ + viewNumber: context.viewNumber, + changeViewMessages, + prepareRequestMessage, + preparationHash, + preparationMessages, + commitMessages, + }), + }); +}; + +export const makePrepareRequest = async ({ + node, + privateKey, + context: contextIn, +}: { + readonly node: Node; + readonly privateKey: PrivateKey; + readonly context: ConsensusContext; +}) => { + let context = contextIn; + const nonce = commonUtils.randomUInt(); + + const { context: maxBlockContext } = await ensureMaxBlockLimitation(node, context, Object.values(node.memPool)); + context = maxBlockContext; + + const previousHeader = await node.blockchain.getHeader(utils.nullthrows(context.blockBuilder.previousHash)); + + if (previousHeader === undefined) { + // TODO + throw new Error('expected this to be defined'); + } + + const timestamp = BN.max(new BN(Date.now()), previousHeader.timestamp.addn(1)); + context = context.clone({ blockOptions: { timestamp, consensusData: { nonce: new BN(nonce) } } }); + + const preparationPayload = await makeSignedPayload({ + node, + privateKey, + context, + consensusMessage: new PrepareRequestConsensusMessage({ + viewNumber: context.viewNumber, + timestamp, + nonce: new BN(nonce), + transactionHashes: context.transactionHashes ?? [], + }), + }); + + const mutablePreparationPayloads = [...context.preparationPayloads]; + mutablePreparationPayloads[context.myIndex] = preparationPayload; + + context = context.clone({ preparationPayloads: mutablePreparationPayloads }); + + return { context, payload: preparationPayload }; +}; + +export const makeRecoveryRequest = async ({ + node, + context, + privateKey, +}: { + readonly node: Node; + readonly context: ConsensusContext; + readonly privateKey: PrivateKey; +}): Promise => { + const consensusMessage = new RecoveryRequestConsensusMessage({ + viewNumber: context.viewNumber, + timestamp: new BN(Date.now()), + }); + + return makeSignedPayload({ + node, + context, + privateKey, + consensusMessage, + }); +}; + +export const makeChangeView = async ({ + node, + privateKey, + context: contextIn, + reason, +}: { + readonly node: Node; + readonly context: ConsensusContext; + readonly privateKey: PrivateKey; + readonly reason: ChangeViewReason; +}) => { + const context = contextIn; + const payload = await makeSignedPayload({ + node, + privateKey, + context, + consensusMessage: new ChangeViewConsensusMessage({ + viewNumber: context.viewNumber, + reason, + timestamp: new BN(Date.now()), + }), + }); + + const mutableChangeViewPayloads = [...context.changeViewPayloads]; + mutableChangeViewPayloads[context.myIndex] = payload; + + return { context: context.clone({ changeViewPayloads: mutableChangeViewPayloads }), payload }; +}; diff --git a/packages/neo-one-node-consensus/src/runConsensus.ts b/packages/neo-one-node-consensus/src/runConsensus.ts index a56d90662c..98e652b83b 100644 --- a/packages/neo-one-node-consensus/src/runConsensus.ts +++ b/packages/neo-one-node-consensus/src/runConsensus.ts @@ -1,216 +1,197 @@ -import { common, crypto, PrivateKey, UInt160 } from '@neo-one/client-common'; -import { - Block, - MinerTransaction, - Node, - Output, - PrepareRequestConsensusMessage, - Transaction, - utils, -} from '@neo-one/node-core'; -import { utils as commonUtils } from '@neo-one/utils'; -import BigNumber from 'bignumber.js'; -import { BN } from 'bn.js'; -import _ from 'lodash'; -import { - checkExpectedView, - checkSignatures, - incrementExpectedView, - initializeConsensusInitial, - signAndRelay, - signAndRelayChangeView, -} from './common'; +import { Block, ChangeViewReason, ConsensusContext, Node } from '@neo-one/node-core'; +import { checkCommits } from './checkPayload'; +import { requestChangeView, sendPrepareRequest } from './common'; import { InternalOptions } from './Consensus'; -import { ConsensusContext } from './ConsensusContext'; -import { Context, RequestSentContext, SignatureSentContext } from './context'; +import { makeRecovery } from './makePayload'; +import { TimerContext } from './TimerContext'; import { Result } from './types'; -const createMinerTransaction = async ({ - node, - feeAddress, - transactions, - nonce, -}: { - readonly node: Node; - readonly feeAddress: UInt160; - readonly transactions: readonly Transaction[]; - readonly nonce: BN; -}) => { - const networkFee = await Block.calculateNetworkFee(node.blockchain.feeContext, transactions); - - const outputs = networkFee.isZero() - ? [] - : [ - new Output({ - asset: node.blockchain.settings.utilityToken.hash, - value: networkFee, - address: feeAddress, - }), - ]; - - return new MinerTransaction({ - nonce: nonce.mod(utils.UINT_MAX.addn(1)).toNumber(), - outputs, - }); -}; - -const requestChangeView = ({ +export const runConsensus = async ({ context: contextIn, node, - privateKey, - consensusContext, + options: { privateKey, privateNet }, + timerContext, }: { - readonly context: Context; + readonly context: ConsensusContext; readonly node: Node; - readonly privateKey: PrivateKey; - readonly consensusContext: ConsensusContext; -}): Result => { + readonly options: InternalOptions; + readonly timerContext: TimerContext; +}): Promise => { let context = contextIn; - - context = context.cloneExpectedView({ - expectedView: incrementExpectedView(context), - }); - - signAndRelayChangeView({ context, node, privateKey }); - - const viewNumber = context.expectedView[context.myIndex]; - if (checkExpectedView({ context, viewNumber })) { - return initializeConsensusInitial({ - blockchain: node.blockchain, + if (privateNet) { + const { context: privateNetContext } = await sendPrepareRequest({ + node, + privateKey, context, - viewNumber, - consensusContext, }); - } - const { secondsPerBlock } = node.blockchain.settings; + return { context: privateNetContext, timerMS: node.blockchain.settings.millisecondsPerBlock }; + } + if (context.watchOnly || context.blockSent) { + return { context }; + } - return { - context, - // tslint:disable-next-line no-bitwise - timerSeconds: secondsPerBlock << (viewNumber + 1), - }; -}; + if (context.isPrimary && !context.requestSentOrReceived) { + const { context: sendPrepareRequestContext } = await sendPrepareRequest({ + node, + privateKey, + context, + }); -export const runConsensus = async ({ - context, - node, - options: { privateKey, feeAddress, privateNet }, - consensusContext, -}: { - readonly context: Context; - readonly node: Node; - readonly options: InternalOptions; - readonly consensusContext: ConsensusContext; -}): Promise> => { - if (context.type === 'primary' && !(context instanceof RequestSentContext)) { - let requestSentContext: RequestSentContext; - if (context instanceof SignatureSentContext) { - requestSentContext = context.cloneRequestSent(); + context = sendPrepareRequestContext; + } else if ((context.isPrimary && context.requestSentOrReceived) || context.isBackup) { + if (context.commitSent) { + const recoveryPayload = await makeRecovery({ node, context, privateKey }); + node.relayConsensusPayload(recoveryPayload); } else { - const nonce = utils.randomUInt64(); - let mutableTransactions = Object.values(node.memPool); - const minerTransaction = await createMinerTransaction({ - node, - feeAddress, - transactions: mutableTransactions, - nonce, - }); - - if (mutableTransactions.length >= node.blockchain.settings.maxTransactionsPerBlock) { - const mutableNetworkFees = await Promise.all( - mutableTransactions.map>(async (transaction) => { - const networkFee = await transaction.getNetworkFee(node.blockchain.feeContext); - - return [transaction, new BigNumber(networkFee.toString(10))]; - }), - ); - - mutableNetworkFees.sort(([first, a], [second, b]) => b.div(second.size).comparedTo(a.div(first.size))); - mutableTransactions = _.take(mutableNetworkFees, node.blockchain.settings.maxTransactionsPerBlock - 1) - // tslint:disable-next-line no-unused - .map(([transaction, _unused]) => transaction); + let block: Block | undefined; + try { + block = context.blockBuilder.getBlock(); + } catch { + // do nothing; } - mutableTransactions.unshift(minerTransaction); - const [previousHeader, validators] = await Promise.all([ - node.blockchain.header.get({ hashOrIndex: context.previousHash }), - node.blockchain.getValidators(mutableTransactions), - ]); - - const newContext = new RequestSentContext({ - viewNumber: context.viewNumber, - myIndex: context.myIndex, - primaryIndex: context.primaryIndex, - expectedView: context.expectedView, - validators: context.validators, - blockReceivedTimeSeconds: context.blockReceivedTimeSeconds, - transactions: mutableTransactions.reduce<{ [key: string]: Transaction }>( - (acc, transaction) => ({ - ...acc, - [transaction.hashHex]: transaction, - }), - {}, - ), - signatures: [], - header: { - type: 'new', - previousHash: context.previousHash, - transactionHashes: mutableTransactions.map((transaction) => transaction.hashHex), - - blockIndex: context.blockIndex, - nonce, - timestamp: Math.max(consensusContext.nowSeconds(), previousHeader.timestamp + 1), - - nextConsensus: crypto.getConsensusAddress(validators), - }, - }); - const mutableSignatures = []; - mutableSignatures[newContext.myIndex] = crypto.sign({ - message: newContext.header.message, + const reason = + block !== undefined && (context.transactionHashes?.length ?? 0) > Object.values(context.transactions).length + ? ChangeViewReason.TxNotFound + : ChangeViewReason.Timeout; + + const { context: requestChangeViewContext } = await requestChangeView({ + node, + context, + timerContext, privateKey, + reason, + isRecovering: false, }); - requestSentContext = newContext.cloneSignatures({ signatures: mutableSignatures }); + context = requestChangeViewContext; } - - if (privateNet) { - return checkSignatures({ node, context: requestSentContext }); - } - - signAndRelay({ - context: requestSentContext, - node, - privateKey, - consensusMessage: new PrepareRequestConsensusMessage({ - viewNumber: requestSentContext.viewNumber, - nonce: requestSentContext.header.consensusData, - nextConsensus: requestSentContext.header.nextConsensus, - transactionHashes: requestSentContext.transactionHashes.map((hash) => common.hexToUInt256(hash)), - minerTransaction: commonUtils.nullthrows( - requestSentContext.transactions[requestSentContext.transactionHashes[0]], - ) as MinerTransaction, - signature: commonUtils.nullthrows(requestSentContext.signatures[requestSentContext.myIndex]), - }), - }); - - const { secondsPerBlock } = node.blockchain.settings; - - return { - context: requestSentContext, - // tslint:disable-next-line no-bitwise - timerSeconds: secondsPerBlock << (requestSentContext.viewNumber + 1), - }; - } - - if (context instanceof RequestSentContext || context.type === 'backup') { - return requestChangeView({ - context, - node, - privateKey, - consensusContext, - }); } return { context }; }; + +// export const runConsensusOld = async ({ +// context, +// node, +// options: { privateKey, privateNet }, +// timerContext, +// }: { +// readonly context: ConsensusContext; +// readonly node: Node; +// readonly options: InternalOptions; +// readonly timerContext: TimerContext; +// }): Promise => { +// if (context.type === 'primary' && !(context instanceof RequestSentContext)) { +// let requestSentContext: RequestSentContext; +// if (context instanceof SignatureSentContext) { +// requestSentContext = context.cloneRequestSent(); +// } else { +// const newNonce = utils.randomUInt64(); +// let mutableTransactions = Object.values(node.memPool); + +// if (mutableTransactions.length >= node.blockchain.settings.memoryPoolMaxTransactions) { +// const mutableNetworkFees = await Promise.all( +// mutableTransactions.map>(async (transaction) => { +// const networkFee = await transaction.getNetworkFee(node.blockchain.feeContext); + +// return [transaction, new BigNumber(networkFee.toString(10))]; +// }), +// ); + +// mutableNetworkFees.sort(([first, a], [second, b]) => b.div(second.size).comparedTo(a.div(first.size))); +// mutableTransactions = _.take(mutableNetworkFees, node.blockchain.settings.memoryPoolMaxTransactions - 1) +// // tslint:disable-next-line no-unused +// .map(([transaction, _unused]) => transaction); +// } +// const [previousHeader, validators] = await Promise.all([ +// node.blockchain.getHeader(context.previousHash), +// node.blockchain.getValidators(), +// ]); + +// if (previousHeader === undefined) { +// // TODO: real error or implementy `getHeader` and `tryGetHeader` separately. +// throw new Error('we expect previousHeader to be defined always'); +// } + +// const newContext = new RequestSentContext({ +// viewNumber: context.viewNumber, +// myIndex: context.myIndex, +// primaryIndex: context.primaryIndex, +// expectedView: context.expectedView, +// validators: context.validators, +// blockReceivedTimeMS: context.blockReceivedTimeMS, +// verificationContext: context.verificationContext, +// transactions: mutableTransactions.reduce<{ [key: string]: Transaction }>( +// (acc, transaction) => ({ +// ...acc, +// [transaction.hashHex]: transaction, +// }), +// {}, +// ), +// signatures: [], +// header: { +// type: 'new', +// previousHash: context.previousHash, +// transactionHashes: mutableTransactions.map((transaction) => transaction.hashHex), + +// blockIndex: context.blockIndex, +// nonce: newNonce, +// timestamp: Math.max(timerContext.nowMilliseconds(), previousHeader.timestamp.toNumber() + 1), + +// nextConsensus: crypto.getConsensusAddress(validators), +// }, +// }); + +// const mutableSignatures = []; +// mutableSignatures[newContext.myIndex] = crypto.sign({ +// message: newContext.header.message, +// privateKey, +// }); + +// requestSentContext = newContext.cloneSignatures({ signatures: mutableSignatures }); +// } + +// if (privateNet) { +// return checkSignatures({ node, context: requestSentContext }); +// } + +// const nonce = requestSentContext.header.consensusData?.nonce; +// if (nonce === undefined) { +// // TODO: real error +// throw new Error('we expect nonce to be defined'); +// } + +// signAndRelay({ +// context: requestSentContext, +// node, +// privateKey, +// consensusMessage: new PrepareRequestConsensusMessage({ +// viewNumber: requestSentContext.viewNumber, +// nonce, +// transactionHashes: requestSentContext.transactionHashes.map((hash) => common.hexToUInt256(hash)), +// // signature: commonUtils.nullthrows(requestSentContext.signatures[requestSentContext.myIndex]), +// }), +// }); + +// const { millisecondsPerBlock } = node.blockchain.settings; + +// return { +// context: requestSentContext, +// // tslint:disable-next-line no-bitwise +// timerSeconds: secondsPerBlock << (requestSentContext.viewNumber + 1), +// }; +// } + +// if (context instanceof RequestSentContext || context.type === 'backup') { +// return requestChangeView({ +// context, +// node, +// privateKey, +// timerContext, +// }); +// } + +// return { context }; +// }; diff --git a/packages/neo-one-node-consensus/src/types.ts b/packages/neo-one-node-consensus/src/types.ts index 21c6902165..71bd113ec2 100644 --- a/packages/neo-one-node-consensus/src/types.ts +++ b/packages/neo-one-node-consensus/src/types.ts @@ -1,11 +1,10 @@ -import { ConsensusPayload, Transaction } from '@neo-one/node-core'; -import { ConsensusContext } from './ConsensusContext'; -import { Context } from './context'; +import { ConsensusContext, ConsensusPayload, Transaction } from '@neo-one/node-core'; +import { TimerContext } from './TimerContext'; -export interface Result { - readonly context: TContext; - readonly consensusContext?: ConsensusContext; - readonly timerSeconds?: number; +export interface Result { + readonly context: ConsensusContext; + readonly timerContext?: TimerContext; + readonly timerMS?: number; } export type Event = | { readonly type: 'handlePersistBlock' } diff --git a/packages/neo-one-node-consensus/tsconfig-output.json b/packages/neo-one-node-consensus/tsconfig-output.json new file mode 100644 index 0000000000..a12b8c8059 --- /dev/null +++ b/packages/neo-one-node-consensus/tsconfig-output.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.cjs.json", + "compilerOptions": { + "target": "es2017" + }, + "compileOnSave": false +} \ No newline at end of file diff --git a/packages/neo-one-node-consensus/tsconfig.json b/packages/neo-one-node-consensus/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-node-consensus/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-node-core/.npmignore b/packages/neo-one-node-core/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-node-core/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-node-core/CHANGELOG.json b/packages/neo-one-node-core/CHANGELOG.json new file mode 100644 index 0000000000..5cdbe08a31 --- /dev/null +++ b/packages/neo-one-node-core/CHANGELOG.json @@ -0,0 +1,116 @@ +{ + "name": "@neo-one/node-core", + "entries": [ + { + "version": "3.0.0", + "tag": "@neo-one/node-core_v3.0.0", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "major": [ + { + "comment": "3.0.0preview3-alpha release bump" + } + ], + "none": [ + { + "comment": "3.0.0preview3.1 release bump" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/node-core_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Add appropriate @types dependencies." + }, + { + "comment": "fixup utxo invocation transactions" + }, + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "dependency": [ + { + "comment": "Dependency @neo-one/client-common version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Dependency @neo-one/client-full-common version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/node-core_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full-common\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/node-core_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + }, + { + "comment": "Upgrade TS to v3.8.1-rc" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full-common\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-node-core/CHANGELOG.md b/packages/neo-one-node-core/CHANGELOG.md index 7aa84476d4..e2881f5fbc 100644 --- a/packages/neo-one-node-core/CHANGELOG.md +++ b/packages/neo-one-node-core/CHANGELOG.md @@ -1,145 +1,43 @@ -# Change Log +# Change Log - @neo-one/node-core -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-core@1.2.3...@neo-one/node-core@2.3.0) (2019-10-23) +## 3.0.0 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/node-core +### Breaking changes +- 3.0.0preview3-alpha release bump +### Updates +- 3.0.0preview3.1 release bump +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT -## [1.2.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-core@1.2.2...@neo-one/node-core@1.2.3) (2019-10-23) +### Patches -**Note:** Version bump only for package @neo-one/node-core +- Add appropriate @types dependencies. +- fixup utxo invocation transactions +- Upgrade TypeScript from v3.8.3 to v3.9.5 +### Updates +- bump package version for future release clarity +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes -## [1.2.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-core@1.2.1...@neo-one/node-core@1.2.2) (2019-09-04) +- update package release process to take better advantage of rush tooling -**Note:** Version bump only for package @neo-one/node-core +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT +### Minor changes +- Migrate to Rush +- Upgrade TS to v3.8.1-rc - - -## [1.2.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-core@1.2.0...@neo-one/node-core@1.2.1) (2019-08-30) - -**Note:** Version bump only for package @neo-one/node-core - - - - - -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-core@1.1.5...@neo-one/node-core@1.2.0) (2019-08-22) - - -### Bug Fixes - -* **core, protocol:** describe InvalidFormat errors ([ea9db1b](https://github.com/neo-one-suite/neo-one/commit/ea9db1b)) - - -### Features - -* **monitor:** remove @neo-one/monitor. replace with opencensus, pino, and debug ([#1597](https://github.com/neo-one-suite/neo-one/issues/1597)) ([4b1a28f](https://github.com/neo-one-suite/neo-one/commit/4b1a28f)) - - - - - -## [1.1.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-core@1.1.4...@neo-one/node-core@1.1.5) (2019-07-29) - -**Note:** Version bump only for package @neo-one/node-core - - - - - -## [1.1.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-core@1.1.3...@neo-one/node-core@1.1.4) (2019-06-20) - - -### Bug Fixes - -* **deps:** update dependency typescript to v3.5.1 ([#1365](https://github.com/neo-one-suite/neo-one/issues/1365)) ([ec89546](https://github.com/neo-one-suite/neo-one/commit/ec89546)) -* **node:** First wave of node fixes ([d50fd34](https://github.com/neo-one-suite/neo-one/commit/d50fd34)) - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-core@1.1.2...@neo-one/node-core@1.1.3) (2019-06-04) - - -### Bug Fixes - -* **@neo-one/types:** eliminate global types from @neo-one/types ([004330d](https://github.com/neo-one-suite/neo-one/commit/004330d)) -* **deps:** update misc dependencies ([0c9bdde](https://github.com/neo-one-suite/neo-one/commit/0c9bdde)) - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-core@1.1.1...@neo-one/node-core@1.1.2) (2019-04-12) - -**Note:** Version bump only for package @neo-one/node-core - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-core@1.1.0...@neo-one/node-core@1.1.1) (2019-03-27) - - -### Bug Fixes - -* **deps:** update dependency bignumber.js to v8.1.1 ([2d6f93a](https://github.com/neo-one-suite/neo-one/commit/2d6f93a)) - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-core@1.0.2...@neo-one/node-core@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node-core - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-core@1.0.2-alpha.0...@neo-one/node-core@1.0.2) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node-core - - - - - -## [1.0.2-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-core@1.0.1...@neo-one/node-core@1.0.2-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **@neo-one/node-core:** Add missing dependency @types/through ([6f202a7](https://github.com/neo-one-suite/neo-one/commit/6f202a7)) -* **@neo-one/node-core:** check number of bytes in BinaryReader ([ecbb23c](https://github.com/neo-one-suite/neo-one/commit/ecbb23c)) -* **@neo-one/node-vm:** sort witness script hashes ([a5f682b](https://github.com/neo-one-suite/neo-one/commit/a5f682b)) -* **build:** adjust several packages to allow emitting .d.ts files. ([27a2d88](https://github.com/neo-one-suite/neo-one/commit/27a2d88)) -* **deps:** update dependency @types/lodash to v4.14.120 ([a76dae7](https://github.com/neo-one-suite/neo-one/commit/a76dae7)) -* **deps:** update dependency rxjs to v6.4.0 ([e28af2a](https://github.com/neo-one-suite/neo-one/commit/e28af2a)) -* **utils:** update type definition ([ed3733a](https://github.com/neo-one-suite/neo-one/commit/ed3733a)) - - -### Features - -* **node:** record storage changes for each transaction ([22ef835](https://github.com/neo-one-suite/neo-one/commit/22ef835)) - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-core@1.0.0...@neo-one/node-core@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/node-core diff --git a/packages/neo-one-node-core/gulpfile.js b/packages/neo-one-node-core/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-node-core/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-node-core/package.json b/packages/neo-one-node-core/package.json index a720105ec2..f1878d634a 100644 --- a/packages/neo-one-node-core/package.json +++ b/packages/neo-one-node-core/package.json @@ -1,23 +1,32 @@ { "name": "@neo-one/node-core", - "version": "2.3.0", - "description": "NEOβ€’ONE core node types.", - "main": "./src/index", + "version": "3.0.0", + "description": "NEOβ€’ONE core types for node packages", + "main": "./dist/cjs/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.3.0", - "@neo-one/client-full-common": "^2.3.0", - "@neo-one/utils": "^2.3.0", + "@neo-one/client-common": "^3.0.0", + "@neo-one/client-full-common": "^3.0.0", + "@neo-one/utils": "^3.0.0", "bignumber.js": "^9.0.0", "bn.js": "^5.0.0", "lodash": "^4.17.15", - "rxjs": "^6.5.2", - "through": "^2.3.8", - "tslib": "^1.10.0" + "rxjs": "^6.5.3", + "through": "^2.3.8" }, "devDependencies": { - "@types/bn.js": "^4.11.5", + "@neo-one/build-tools": "^1.0.0", + "@types/jest": "^24.0.18", "@types/lodash": "^4.14.138", - "@types/through": "^0.0.29" - }, - "sideEffects": false + "@types/through": "^0.0.30", + "gulp": "~4.0.2", + "tslib": "^1.10.0" + } } diff --git a/packages/neo-one-node-core/src/Account.ts b/packages/neo-one-node-core/src/Account.ts deleted file mode 100644 index d36a411807..0000000000 --- a/packages/neo-one-node-core/src/Account.ts +++ /dev/null @@ -1,165 +0,0 @@ -import { - AccountJSON, - BinaryWriter, - common, - ECPoint, - IOHelper, - JSONHelper, - UInt160, - UInt160Hex, - UInt256Hex, -} from '@neo-one/client-common'; -import { BaseState } from '@neo-one/client-full-common'; -import { BN } from 'bn.js'; -import _ from 'lodash'; -import { Equals, EquatableKey } from './Equatable'; -import { - createSerializeWire, - DeserializeWireBaseOptions, - DeserializeWireOptions, - SerializableJSON, - SerializableWire, - SerializeJSONContext, - SerializeWire, -} from './Serializable'; -import { BinaryReader, utils } from './utils'; - -export interface AccountKey { - readonly hash: UInt160; -} -export interface AccountAdd { - readonly version?: number; - readonly hash: UInt160; - readonly isFrozen?: boolean; - readonly votes?: readonly ECPoint[]; - readonly balances?: { readonly [AssetHash in string]?: BN }; -} - -export interface AccountUpdate { - readonly isFrozen?: boolean; - readonly votes?: readonly ECPoint[]; - readonly balances?: AccountAdd['balances']; -} - -export class Account extends BaseState - implements SerializableWire, SerializableJSON, EquatableKey { - public static deserializeWireBase(options: DeserializeWireBaseOptions): Account { - const { reader } = options; - const version = reader.readUInt8(); - const hash = reader.readUInt160(); - const isFrozen = reader.readBoolean(); - const votes = reader.readArray(() => reader.readECPoint()); - const balances = reader.readObject(() => { - const key = common.uInt256ToHex(reader.readUInt256()); - const value = reader.readFixed8(); - - return { key, value }; - }); - - return new Account({ - version, - hash, - isFrozen, - votes, - balances, - }); - } - - public static deserializeWire(options: DeserializeWireOptions): Account { - return this.deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); - } - - public readonly hash: UInt160; - public readonly hashHex: UInt160Hex; - public readonly isFrozen: boolean; - public readonly votes: readonly ECPoint[]; - public readonly balances: { readonly [AssetHash in string]?: BN }; - public readonly equals: Equals = utils.equals(Account, this, (other) => common.uInt160Equal(this.hash, other.hash)); - public readonly toKeyString = utils.toKeyString(Account, () => this.hashHex); - public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - private readonly sizeInternal: () => number; - - public constructor({ version, hash, isFrozen = false, votes = [], balances = {} }: AccountAdd) { - super({ version }); - this.hash = hash; - this.hashHex = common.uInt160ToHex(hash); - this.isFrozen = isFrozen; - this.votes = votes; - this.balances = balances; - this.sizeInternal = utils.lazy( - () => - IOHelper.sizeOfUInt8 + - IOHelper.sizeOfUInt160 + - IOHelper.sizeOfBoolean + - IOHelper.sizeOfArray(this.votes, (vote) => IOHelper.sizeOfECPoint(vote)) + - IOHelper.sizeOfObject(this.balances, () => IOHelper.sizeOfUInt256 + IOHelper.sizeOfFixed8), - ); - } - - public get size(): number { - return this.sizeInternal(); - } - - public isDeletable(): boolean { - const balances = Object.values(this.balances); - - return ( - !this.isFrozen && - this.votes.length === 0 && - (balances.length === 0 || balances.every((value) => value !== undefined && value.lte(utils.ZERO))) - ); - } - - public getBalance(asset: UInt256Hex): BN { - const balance = this.balances[asset]; - - return balance === undefined ? utils.ZERO : balance; - } - - public update({ isFrozen = this.isFrozen, votes = this.votes, balances = this.balances }: AccountUpdate): Account { - return new Account({ - hash: this.hash, - isFrozen, - votes, - balances, - }); - } - - public serializeWireBase(writer: BinaryWriter): void { - writer.writeUInt8(this.version); - writer.writeUInt160(this.hash); - writer.writeBoolean(this.isFrozen); - writer.writeArray(this.votes, (vote) => { - writer.writeECPoint(vote); - }); - const balances = _.pickBy(this.balances, (value) => value !== undefined && value.gt(utils.ZERO)) as { - [assetHash: string]: BN; - }; - writer.writeObject(balances, (key: string, value) => { - writer.writeUInt256(common.stringToUInt256(key)); - writer.writeFixed8(value); - }); - } - - public async serializeJSON(context: SerializeJSONContext): Promise { - const [unspent, unclaimed] = await Promise.all([context.getUnspent(this.hash), context.getUnclaimed(this.hash)]); - - return { - version: this.version, - script_hash: JSONHelper.writeUInt160(this.hash), - frozen: this.isFrozen, - votes: this.votes.map((vote) => JSONHelper.writeECPoint(vote)), - balances: Object.entries(this.balances).map(([asset, value]) => ({ - asset: JSONHelper.writeUInt256(asset), - // tslint:disable-next-line no-non-null-assertion - value: JSONHelper.writeFixed8(value!), - })), - - unspent: unspent.map((input) => input.serializeJSON(context)), - unclaimed: unclaimed.map((input) => input.serializeJSON(context)), - }; - } -} diff --git a/packages/neo-one-node-core/src/AccountInput.ts b/packages/neo-one-node-core/src/AccountInput.ts deleted file mode 100644 index 1746be496f..0000000000 --- a/packages/neo-one-node-core/src/AccountInput.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { - BinaryWriter, - common, - createSerializeWire, - IOHelper, - SerializableWire, - SerializeWire, - UInt160, - UInt160Hex, -} from '@neo-one/client-common'; -import { Equals, Equatable } from './Equatable'; -import { DeserializeWireBaseOptions, DeserializeWireOptions } from './Serializable'; -import { Input } from './transaction'; -import { BinaryReader, utils } from './utils'; - -export interface AccountInputKey { - readonly hash: UInt160; - readonly input: Input; -} - -export interface AccountInputsKey { - readonly hash: UInt160; -} - -export interface AccountInputAdd { - readonly hash: UInt160; - readonly input: Input; -} - -export class AccountInput implements Equatable, SerializableWire { - public static deserializeWireBase(options: DeserializeWireBaseOptions): AccountInput { - const { reader } = options; - const hash = reader.readUInt160(); - const input = Input.deserializeWireBase(options); - - return new AccountInput({ hash, input }); - } - - public static deserializeWire(options: DeserializeWireOptions): AccountInput { - return this.deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); - } - - public readonly hash: UInt160; - public readonly hashHex: UInt160Hex; - public readonly input: Input; - public readonly equals: Equals = utils.equals( - AccountInput, - this, - (other) => common.uInt160Equal(this.hash, other.hash) && this.input.equals(other.input), - ); - public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - private readonly sizeInternal: () => number; - - public constructor({ hash, input }: AccountInputAdd) { - this.hash = hash; - this.hashHex = common.uInt160ToHex(hash); - this.input = input; - this.sizeInternal = utils.lazy(() => IOHelper.sizeOfUInt160 + this.input.size); - } - - public get size(): number { - return this.sizeInternal(); - } - - public serializeWireBase(writer: BinaryWriter): void { - writer.writeUInt160(this.hash); - this.input.serializeWireBase(writer); - } -} diff --git a/packages/neo-one-node-core/src/AccountUnclaimed.ts b/packages/neo-one-node-core/src/AccountUnclaimed.ts deleted file mode 100644 index 441ff5b0ef..0000000000 --- a/packages/neo-one-node-core/src/AccountUnclaimed.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { AccountInput, AccountInputAdd, AccountInputKey, AccountInputsKey } from './AccountInput'; - -export type AccountUnclaimedAdd = AccountInputAdd; -export type AccountUnclaimedKey = AccountInputKey; -export type AccountUnclaimedsKey = AccountInputsKey; - -export class AccountUnclaimed extends AccountInput {} diff --git a/packages/neo-one-node-core/src/AccountUnspent.ts b/packages/neo-one-node-core/src/AccountUnspent.ts deleted file mode 100644 index 47024a55c4..0000000000 --- a/packages/neo-one-node-core/src/AccountUnspent.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { AccountInput, AccountInputAdd, AccountInputKey, AccountInputsKey } from './AccountInput'; - -export type AccountUnspentAdd = AccountInputAdd; -export type AccountUnspentKey = AccountInputKey; -export type AccountUnspentsKey = AccountInputsKey; - -export class AccountUnspent extends AccountInput {} diff --git a/packages/neo-one-node-core/src/ApplicationLog.ts b/packages/neo-one-node-core/src/ApplicationLog.ts new file mode 100644 index 0000000000..898a4aaab1 --- /dev/null +++ b/packages/neo-one-node-core/src/ApplicationLog.ts @@ -0,0 +1,81 @@ +import { + ApplicationLogJSON, + BinaryWriter, + createSerializeWire, + JSONHelper, + SerializableWire, + SerializeWire, + toTriggerTypeJSON, + toVMStateJSON, + TriggerType, + UInt256, + VMState, +} from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import { Notification } from './Notification'; +import { DeserializeWireBaseOptions, DeserializeWireOptions } from './Serializable'; +import { StackItem, stackItemToJSON } from './StackItems'; +import { BinaryReader } from './utils'; + +export interface ApplicationLogAdd { + readonly txid?: UInt256; + readonly trigger: TriggerType; + readonly vmState: VMState; + readonly gasConsumed: BN; + readonly stack: readonly StackItem[]; + readonly notifications: readonly Notification[]; +} + +export class ApplicationLog implements SerializableWire { + public static deserializeWireBase(options: DeserializeWireBaseOptions): ApplicationLogJSON { + const { reader } = options; + + return JSON.parse(reader.readVarString()); + } + + public static deserializeWire(options: DeserializeWireOptions): ApplicationLogJSON { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } + + public readonly txid?: UInt256; + public readonly trigger: TriggerType; + public readonly vmState: VMState; + public readonly gasConsumed: BN; + public readonly stack: readonly StackItem[]; + public readonly notifications: readonly Notification[]; + public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + + public constructor({ txid, trigger, vmState, gasConsumed, stack, notifications }: ApplicationLogAdd) { + this.txid = txid; + this.trigger = trigger; + this.vmState = vmState; + this.gasConsumed = gasConsumed; + this.stack = stack; + this.notifications = notifications; + } + + public serializeJSON(): ApplicationLogJSON { + let stack; + try { + stack = this.stack.map((item) => stackItemToJSON(item, undefined)); + } catch { + stack = 'error: recursive reference'; + } + + return { + txid: this.txid ? JSONHelper.writeUInt256(this.txid) : undefined, + trigger: toTriggerTypeJSON(this.trigger), + vmstate: toVMStateJSON(this.vmState), + gasconsumed: this.gasConsumed.toString(), + stack, + notifications: this.notifications.map((n) => n.serializeJSON()), + }; + } + + public serializeWireBase(writer: BinaryWriter): void { + writer.writeVarString(JSON.stringify(this.serializeJSON())); + } +} diff --git a/packages/neo-one-node-core/src/Asset.ts b/packages/neo-one-node-core/src/Asset.ts deleted file mode 100644 index 37a572db6c..0000000000 --- a/packages/neo-one-node-core/src/Asset.ts +++ /dev/null @@ -1,290 +0,0 @@ -import { - AssetJSON, - BinaryWriter, - common, - crypto, - ECPoint, - IOHelper, - JSONHelper, - UInt160, - UInt256, - UInt256Hex, -} from '@neo-one/client-common'; -import { BaseState } from '@neo-one/client-full-common'; -import { makeErrorWithCode } from '@neo-one/utils'; -import { BN } from 'bn.js'; -import { assertAssetType, AssetType, toJSONAssetType } from './AssetType'; -import { Equals, EquatableKey } from './Equatable'; -import { - createSerializeWire, - DeserializeWireBaseOptions, - DeserializeWireOptions, - SerializableJSON, - SerializableWire, - SerializeJSONContext, - SerializeWire, -} from './Serializable'; -import { BinaryReader, utils } from './utils'; - -export const InvalidAssetError = makeErrorWithCode('INVALID_ASSET', (message: string) => message); - -export interface AssetKey { - readonly hash: UInt256; -} -export interface AssetAdd { - readonly version?: number; - readonly hash: UInt256; - readonly type: AssetType; - readonly name: string; - readonly amount: BN; - readonly available?: BN; - readonly precision: number; - readonly feeMode?: number; - readonly fee?: BN; - readonly feeAddress?: UInt160; - readonly owner: ECPoint; - readonly admin: UInt160; - readonly issuer: UInt160; - readonly expiration: number; - readonly isFrozen?: boolean; -} - -export interface AssetUpdate { - readonly available?: BN; - readonly expiration?: number; - readonly isFrozen?: boolean; -} - -const NAME_MAX_LENGTH = 1024; -const PRECISION_MAX = 8; - -export class Asset extends BaseState implements SerializableWire, SerializableJSON, EquatableKey { - public static deserializeWireBase({ reader }: DeserializeWireBaseOptions): Asset { - const version = reader.readUInt8(); - const hash = reader.readUInt256(); - const type = assertAssetType(reader.readUInt8()); - const name = reader.readVarString(); - const amount = reader.readFixed8(); - const available = reader.readFixed8(); - const precision = reader.readUInt8(); - reader.readUInt8(); // FeeMode - const fee = reader.readFixed8(); - const feeAddress = reader.readUInt160(); - const owner = reader.readECPoint(); - const admin = reader.readUInt160(); - const issuer = reader.readUInt160(); - const expiration = reader.readUInt32LE(); - const isFrozen = reader.readBoolean(); - - return new Asset({ - version, - hash, - type, - name, - amount, - available, - precision, - fee, - feeAddress, - owner, - admin, - issuer, - expiration, - isFrozen, - }); - } - - public static deserializeWire(options: DeserializeWireOptions): Asset { - return this.deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); - } - - public readonly hash: UInt256; - public readonly hashHex: UInt256Hex; - public readonly type: AssetType; - public readonly name: string; - public readonly amount: BN; - public readonly available: BN; - public readonly precision: number; - public readonly feeMode: number; - public readonly fee: BN; - public readonly feeAddress: UInt160; - public readonly owner: ECPoint; - public readonly admin: UInt160; - public readonly issuer: UInt160; - public readonly expiration: number; - public readonly isFrozen: boolean; - public readonly equals: Equals = utils.equals(Asset, this, (other) => common.uInt256Equal(this.hash, other.hash)); - public readonly toKeyString = utils.toKeyString(Asset, () => this.hashHex); - public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - private readonly sizeInternal: () => number; - - public constructor({ - version, - hash, - type, - name, - amount, - available = utils.ZERO, - precision, - feeMode = 0, - fee = utils.ZERO, - feeAddress = common.ZERO_UINT160, - owner, - admin, - issuer, - expiration, - isFrozen = false, - }: AssetAdd) { - super({ version }); - // tslint:disable-next-line - verifyAsset({ name, type, amount, precision }); - this.hash = hash; - this.hashHex = common.uInt256ToHex(hash); - this.type = type; - this.name = name; - this.amount = amount; - this.available = available; - this.precision = precision; - this.feeMode = feeMode; - this.fee = fee; - this.feeAddress = feeAddress; - this.owner = owner; - this.admin = admin; - this.issuer = issuer; - this.expiration = expiration; - this.isFrozen = isFrozen; - this.sizeInternal = utils.lazy( - () => - IOHelper.sizeOfUInt8 + - IOHelper.sizeOfUInt256 + - IOHelper.sizeOfUInt8 + - IOHelper.sizeOfVarString(this.name) + - IOHelper.sizeOfFixed8 + - IOHelper.sizeOfFixed8 + - IOHelper.sizeOfUInt8 + - IOHelper.sizeOfUInt8 + - IOHelper.sizeOfFixed8 + - IOHelper.sizeOfUInt160 + - IOHelper.sizeOfECPoint(this.owner) + - IOHelper.sizeOfUInt160 + - IOHelper.sizeOfUInt160 + - IOHelper.sizeOfUInt32LE + - IOHelper.sizeOfBoolean, - ); - } - public get size(): number { - return this.sizeInternal(); - } - - public update({ - available = this.available, - expiration = this.expiration, - isFrozen = this.isFrozen, - }: AssetUpdate): Asset { - return new Asset({ - hash: this.hash, - type: this.type, - name: this.name, - amount: this.amount, - precision: this.precision, - fee: this.fee, - feeAddress: this.feeAddress, - owner: this.owner, - admin: this.admin, - issuer: this.issuer, - available, - expiration, - isFrozen, - }); - } - - public serializeWireBase(writer: BinaryWriter): void { - writer.writeUInt8(this.version); - writer.writeUInt256(this.hash); - writer.writeUInt8(this.type); - writer.writeVarString(this.name); - writer.writeFixed8(this.amount); - writer.writeFixed8(this.available); - writer.writeUInt8(this.precision); - writer.writeUInt8(this.feeMode); - writer.writeFixed8(this.fee); - writer.writeUInt160(this.feeAddress); - writer.writeECPoint(this.owner); - writer.writeUInt160(this.admin); - writer.writeUInt160(this.issuer); - writer.writeUInt32LE(this.expiration); - writer.writeBoolean(this.isFrozen); - } - - public serializeJSON(context: SerializeJSONContext): AssetJSON { - let name = this.name; - try { - name = JSON.parse(name); - } catch { - // Ignore errors - } - - return { - version: this.version, - id: JSONHelper.writeUInt256(this.hash), - type: toJSONAssetType(this.type), - name, - amount: JSONHelper.writeFixed8(this.amount), - available: JSONHelper.writeFixed8(this.available), - precision: this.precision, - owner: JSONHelper.writeECPoint(this.owner), - admin: crypto.scriptHashToAddress({ - addressVersion: context.addressVersion, - scriptHash: this.admin, - }), - - issuer: crypto.scriptHashToAddress({ - addressVersion: context.addressVersion, - scriptHash: this.issuer, - }), - - expiration: this.expiration, - frozen: this.isFrozen, - }; - } -} - -export const verifyAsset = ({ - name, - type, - amount, - precision, -}: { - readonly name: AssetAdd['name']; - readonly type: AssetAdd['type']; - readonly amount: AssetAdd['amount']; - readonly precision: AssetAdd['precision']; -}) => { - if (type === AssetType.CreditFlag || type === AssetType.DutyFlag) { - throw new InvalidAssetError(`Asset type cannot be CREDIT_FLAG or DUTY_FLAG, received: ${type}`); - } - - const nameBuffer = Buffer.from(name, 'utf8'); - if (nameBuffer.length > NAME_MAX_LENGTH) { - throw new InvalidAssetError(`Name too long. Max: ${NAME_MAX_LENGTH}, Received: ${nameBuffer.length}`); - } - - if (amount.lte(utils.ZERO) && !amount.eq(common.NEGATIVE_SATOSHI_FIXED8)) { - throw new InvalidAssetError(`Amount must be greater than 0. (received ${amount})`); - } - - if (type === AssetType.Invoice && !amount.eq(common.NEGATIVE_SATOSHI_FIXED8)) { - throw new InvalidAssetError('Invoice assets must have unlimited amount.'); - } - - if (precision > PRECISION_MAX) { - throw new InvalidAssetError(`Max precision is 8. Received: ${precision}`); - } - - if (!amount.eq(utils.NEGATIVE_SATOSHI) && !amount.mod(utils.TEN.pow(utils.EIGHT.subn(precision))).eq(utils.ZERO)) { - throw new InvalidAssetError('Invalid precision for amount.'); - } -}; diff --git a/packages/neo-one-node-core/src/AssetType.ts b/packages/neo-one-node-core/src/AssetType.ts deleted file mode 100644 index ccb7ad5fa6..0000000000 --- a/packages/neo-one-node-core/src/AssetType.ts +++ /dev/null @@ -1 +0,0 @@ -export { AssetTypeModel as AssetType, assertAssetType, toJSONAssetType } from '@neo-one/client-common'; diff --git a/packages/neo-one-node-core/src/Block.ts b/packages/neo-one-node-core/src/Block.ts index 4d30410391..36e478830d 100644 --- a/packages/neo-one-node-core/src/Block.ts +++ b/packages/neo-one-node-core/src/Block.ts @@ -2,114 +2,108 @@ import { BinaryWriter, BlockJSON, common, - crypto, - ECPoint, + createSerializeWire, InvalidFormatError, IOHelper, - TransactionJSON, - UInt160, UInt256, } from '@neo-one/client-common'; -import { BN } from 'bn.js'; -import { Account, AccountKey } from './Account'; -import { Asset, AssetKey } from './Asset'; -import { BlockBase } from './BlockBase'; +import _ from 'lodash'; +import { BlockBase, BlockBaseAdd } from './BlockBase'; +import { ConsensusData } from './ConsensusData'; import { MerkleTree } from './crypto'; -import { VerifyError } from './errors'; -import { Header, HeaderKey } from './Header'; -import { ScriptContainerType } from './ScriptContainer'; +import { Header } from './Header'; import { DeserializeWireBaseOptions, DeserializeWireOptions, + SerializableContainer, SerializableJSON, - SerializableWire, SerializeJSONContext, } from './Serializable'; -import { - deserializeTransactionWireBase, - FeeContext, - Input, - Output, - OutputKey, - RegisterTransaction, - Transaction, - TransactionType, -} from './transaction'; +import { Transaction } from './transaction'; +import { TrimmedBlock } from './TrimmedBlock'; import { BinaryReader, utils } from './utils'; -import { Validator } from './Validator'; -import { VerifyScript } from './vm'; import { Witness } from './Witness'; -export interface BlockAdd { - readonly version?: number; - readonly previousHash: UInt256; +export interface BlockAdd extends Omit { readonly merkleRoot?: UInt256; - readonly timestamp: number; - readonly index: number; - readonly consensusData: BN; - readonly nextConsensus: UInt160; - readonly script?: Witness; - readonly hash?: UInt256; + readonly consensusData?: ConsensusData; readonly transactions: readonly Transaction[]; + readonly messageMagic: number; } -export interface BlockKey { - readonly hashOrIndex: UInt256 | number; -} - -export interface BlockVerifyOptions { - readonly genesisBlock: Block; - readonly tryGetBlock: (block: BlockKey) => Promise; - readonly tryGetHeader: (header: HeaderKey) => Promise
; - readonly isSpent: (key: OutputKey) => Promise; - readonly getAsset: (key: AssetKey) => Promise; - readonly getOutput: (key: OutputKey) => Promise; - readonly tryGetAccount: (key: AccountKey) => Promise; - readonly getValidators: (transactions: readonly Transaction[]) => Promise; - readonly standbyValidators: readonly ECPoint[]; - readonly getAllValidators: () => Promise; - readonly calculateClaimAmount: (inputs: readonly Input[]) => Promise; - readonly verifyScript: VerifyScript; - readonly currentHeight: number; - readonly governingToken: RegisterTransaction; - readonly utilityToken: RegisterTransaction; - readonly fees: { [K in TransactionType]?: BN }; - readonly registerValidatorFee: BN; - readonly completely?: boolean; -} - -export class Block extends BlockBase implements SerializableWire, SerializableJSON { - public static async calculateNetworkFee(context: FeeContext, transactions: readonly Transaction[]): Promise { - const fees = await Promise.all(transactions.map(async (transaction) => transaction.getNetworkFee(context))); - - return fees.reduce((acc, fee) => acc.add(fee), utils.ZERO); - } +// export interface BlockVerifyOptions { +// readonly genesisBlock: Block; +// readonly tryGetBlock: (block: BlockKey) => Promise; +// readonly tryGetHeader: (header: HeaderKey) => Promise
; +// readonly isSpent: (key: OutputKey) => Promise; +// readonly getAsset: (key: AssetKey) => Promise; +// readonly getOutput: (key: OutputKey) => Promise; +// readonly tryGetAccount: (key: AccountKey) => Promise; +// readonly getValidators: (transactions: readonly Transaction[]) => Promise; +// readonly standbyValidators: readonly ECPoint[]; +// readonly getAllValidators: () => Promise; +// readonly calculateClaimAmount: (inputs: readonly Input[]) => Promise; +// readonly verifyScript: VerifyScript; +// readonly currentHeight: number; +// readonly governingToken: RegisterTransaction; +// readonly utilityToken: RegisterTransaction; +// readonly fees: { [K in TransactionType]?: BN }; +// readonly registerValidatorFee: BN; +// readonly completely?: boolean; +// } + +type TransactionOrConsensusData = Transaction | ConsensusData; +const getCombinedModels = ( + transactions: readonly Transaction[], + consensusData?: ConsensusData, +): readonly TransactionOrConsensusData[] => { + const init: TransactionOrConsensusData[] = consensusData ? [consensusData] : []; + + return init.concat(transactions); +}; + +export class Block extends BlockBase implements SerializableContainer, SerializableJSON { + public static readonly MaxContentsPerBlock = utils.USHORT_MAX; + public static readonly MaxTransactionsPerBlock = utils.USHORT_MAX.subn(1); + // public static async calculateNetworkFee(context: FeeContext, transactions: readonly Transaction[]): Promise { + // const fees = await Promise.all(transactions.map(async (transaction) => transaction.getNetworkFee(context))); + + // return fees.reduce((acc, fee) => acc.add(fee), utils.ZERO); + // } public static deserializeWireBase(options: DeserializeWireBaseOptions): Block { const { reader } = options; - const blockBase = super.deserializeBlockBaseWireBase(options); - const transactions = reader.readArray(() => deserializeTransactionWireBase(options), 0x10000); + const blockBase = super.deserializeWireBase(options); + const count = reader.readVarUIntLE(this.MaxContentsPerBlock).toNumber(); + if (count === 0) { + throw new InvalidFormatError('Expected count to be greater than 0'); + } + const consensusData = ConsensusData.deserializeWireBase(options); + const transactions = _.range(count - 1).map(() => Transaction.deserializeWireBase(options)); - if (transactions.length === 0) { - throw new InvalidFormatError('Expected at least one transcaction in the block'); + if (transactions.length !== count - 1) { + throw new InvalidFormatError(`Expected ${count - 1} transactions on the block, found: ${transactions.length}`); } - const merkleRoot = MerkleTree.computeRoot(transactions.map((transaction) => transaction.hash)); + const merkleRoot = MerkleTree.computeRoot( + [consensusData.hash].concat(transactions.map((transaction) => transaction.hash)), + ); if (!common.uInt256Equal(merkleRoot, blockBase.merkleRoot)) { throw new InvalidFormatError('Invalid merkle root'); } - return new this({ + return new Block({ version: blockBase.version, previousHash: blockBase.previousHash, merkleRoot: blockBase.merkleRoot, timestamp: blockBase.timestamp, index: blockBase.index, - consensusData: blockBase.consensusData, + consensusData, nextConsensus: blockBase.nextConsensus, - script: blockBase.script, + witness: blockBase.witness, transactions, + messageMagic: options.context.messageMagic, }); } @@ -119,10 +113,12 @@ export class Block extends BlockBase implements SerializableWire, Seriali reader: new BinaryReader(options.buffer), }); } - + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + public readonly serializeUnsigned = createSerializeWire(super.serializeUnsignedBase.bind(this)); public readonly transactions: readonly Transaction[]; + public readonly consensusData?: ConsensusData; protected readonly sizeExclusive = utils.lazy(() => - IOHelper.sizeOfArray(this.transactions, (transaction) => transaction.size), + IOHelper.sizeOfArray(getCombinedModels(this.transactions, this.consensusData), (model) => model.size), ); private readonly headerInternal = utils.lazy( () => @@ -132,12 +128,16 @@ export class Block extends BlockBase implements SerializableWire, Seriali merkleRoot: this.merkleRoot, timestamp: this.timestamp, index: this.index, - consensusData: this.consensusData, nextConsensus: this.nextConsensus, - script: this.script, + witness: this.witness, + messageMagic: this.messageMagic, }), ); + private readonly allHashesInternal = utils.lazy(() => + getCombinedModels(this.transactions, this.consensusData).map((model) => model.hash), + ); + public constructor({ version, previousHash, @@ -145,10 +145,11 @@ export class Block extends BlockBase implements SerializableWire, Seriali index, consensusData, nextConsensus, - script, + witness, hash, transactions, - merkleRoot = MerkleTree.computeRoot(transactions.map((transaction) => transaction.hash)), + messageMagic, + merkleRoot = MerkleTree.computeRoot(getCombinedModels(transactions, consensusData).map((model) => model.hash)), }: BlockAdd) { super({ version, @@ -156,25 +157,30 @@ export class Block extends BlockBase implements SerializableWire, Seriali merkleRoot, timestamp, index, - consensusData, nextConsensus, - script, + witness, hash, + messageMagic, }); this.transactions = transactions; + this.consensusData = consensusData; } public get header(): Header { return this.headerInternal(); } + public get allHashes(): readonly UInt256[] { + return this.allHashesInternal(); + } + public clone({ transactions, - script, + witness, }: { readonly transactions: readonly Transaction[]; - readonly script: Witness; + readonly witness: Witness; }): Block { return new Block({ version: this.version, @@ -184,171 +190,41 @@ export class Block extends BlockBase implements SerializableWire, Seriali index: this.index, consensusData: this.consensusData, nextConsensus: this.nextConsensus, + messageMagic: this.messageMagic, transactions, - script, + witness, }); } - public async getNetworkFee(context: FeeContext): Promise { - return Block.calculateNetworkFee(context, this.transactions); - } - - public getSystemFee(context: FeeContext): BN { - return this.transactions.reduce((acc, transaction) => acc.add(transaction.getSystemFee(context)), utils.ZERO); - } - - public async verify(options: BlockVerifyOptions): Promise { - const { completely = false } = options; - - if ( - this.transactions.length === 0 || - this.transactions[0].type !== TransactionType.Miner || - this.transactions.slice(1).some((transaction) => transaction.type === TransactionType.Miner) - ) { - throw new VerifyError('Invalid miner transaction in block.'); - } - - await Promise.all([this.verifyBase(options), completely ? this.verifyComplete(options) : Promise.resolve()]); - } - public serializeWireBase(writer: BinaryWriter): void { super.serializeWireBase(writer); - writer.writeArray(this.transactions, (transaction) => transaction.serializeWireBase(writer)); + writer.writeArray(getCombinedModels(this.transactions, this.consensusData), (model) => + model.serializeWireBase(writer), + ); } - public async serializeJSON(context: SerializeJSONContext): Promise { - const blockBaseJSON = super.serializeBlockBaseJSON(context); + public serializeJSON(context: SerializeJSONContext): BlockJSON { + const blockBaseJSON = super.serializeJSON(context); return { - version: blockBaseJSON.version, - hash: blockBaseJSON.hash, - previousblockhash: blockBaseJSON.previousblockhash, - merkleroot: blockBaseJSON.merkleroot, - time: blockBaseJSON.time, - index: blockBaseJSON.index, - nonce: blockBaseJSON.nonce, - nextconsensus: blockBaseJSON.nextconsensus, - script: blockBaseJSON.script, - tx: await Promise.all( - this.transactions.map( - (transaction) => transaction.serializeJSON(context) as TransactionJSON | PromiseLike, - ), - ), - size: blockBaseJSON.size, - confirmations: blockBaseJSON.confirmations, + ...blockBaseJSON, + consensusdata: this.consensusData ? this.consensusData.serializeJSON() : undefined, + tx: this.transactions.map((transaction) => transaction.serializeJSON()), }; } - private async verifyBase({ - genesisBlock, - tryGetBlock, - tryGetHeader, - verifyScript, - }: BlockVerifyOptions): Promise { - if (common.uInt256Equal(this.hash, genesisBlock.hash)) { - return; - } - - const existingBlock = await tryGetBlock({ hashOrIndex: this.hash }); - if (existingBlock !== undefined) { - return; - } - - const previousHeader = await tryGetHeader({ - hashOrIndex: this.previousHash, - }); - - if (previousHeader === undefined) { - throw new VerifyError('Previous header does not exist.'); - } - - if (previousHeader.index + 1 !== this.index) { - throw new VerifyError('Previous index + 1 does not match index.'); - } - - if (previousHeader.timestamp >= this.timestamp) { - throw new VerifyError('Previous timestamp is greater than block.'); - } - - const { failureMessage } = await verifyScript({ - scriptContainer: { type: ScriptContainerType.Block, value: this }, - hash: previousHeader.nextConsensus, - witness: this.script, - }); - - if (failureMessage !== undefined) { - throw new VerifyError(failureMessage); - } - } - - private async verifyComplete(options: BlockVerifyOptions): Promise { - await Promise.all([ - this.verifyConsensus(options), - this.verifyTransactions(options), - this.verifyNetworkFee(options), - ]); - } - - private async verifyConsensus({ getValidators }: BlockVerifyOptions): Promise { - const validators = await getValidators(this.transactions); - if (!common.uInt160Equal(this.nextConsensus, crypto.getConsensusAddress(validators))) { - throw new VerifyError('Invalid next consensus address'); - } - } - - private async verifyTransactions(options: BlockVerifyOptions): Promise { - const results = await Promise.all( - this.transactions.map(async (transaction) => - transaction.verify({ - isSpent: options.isSpent, - getAsset: options.getAsset, - getOutput: options.getOutput, - tryGetAccount: options.tryGetAccount, - calculateClaimAmount: options.calculateClaimAmount, - standbyValidators: options.standbyValidators, - getAllValidators: options.getAllValidators, - verifyScript: options.verifyScript, - currentHeight: options.currentHeight, - governingToken: options.governingToken, - utilityToken: options.utilityToken, - fees: options.fees, - registerValidatorFee: options.registerValidatorFee, - }), - ), - ); - const failureResults = results.filter((verifyResults) => - verifyResults.some(({ failureMessage }) => failureMessage !== undefined), - ); - if (failureResults.length > 0) { - const failureResult = failureResults[0].find(({ failureMessage }) => failureMessage !== undefined); - if (failureResult !== undefined && failureResult.failureMessage !== undefined) { - throw new VerifyError(failureResult.failureMessage); - } - } - } - - private async verifyNetworkFee(options: BlockVerifyOptions): Promise { - const networkFee = await this.getNetworkFee({ - getOutput: options.getOutput, - governingToken: options.governingToken, - utilityToken: options.utilityToken, - fees: options.fees, - registerValidatorFee: options.registerValidatorFee, + public trim(): TrimmedBlock { + return new TrimmedBlock({ + version: this.version, + previousHash: this.previousHash, + merkleRoot: this.merkleRoot, + timestamp: this.timestamp, + index: this.index, + nextConsensus: this.nextConsensus, + witness: this.witness, + hashes: this.allHashes, + consensusData: this.consensusData, + messageMagic: this.messageMagic, }); - - const minerTransaction = this.transactions.find((transaction) => transaction.type === TransactionType.Miner); - - if (minerTransaction === undefined) { - throw new VerifyError('Missing miner transaction'); - } - - const minerTransactionNetworkFee = minerTransaction.outputs.reduce( - (acc, output) => acc.add(output.value), - utils.ZERO, - ); - - if (!networkFee.eq(minerTransactionNetworkFee)) { - throw new VerifyError('Miner output does not equal network fee.'); - } } } diff --git a/packages/neo-one-node-core/src/BlockBase.ts b/packages/neo-one-node-core/src/BlockBase.ts index 8f3d73aad1..94a1ab7f97 100644 --- a/packages/neo-one-node-core/src/BlockBase.ts +++ b/packages/neo-one-node-core/src/BlockBase.ts @@ -3,6 +3,7 @@ import { BlockBaseJSON, common, crypto, + getHashData, InvalidFormatError, IOHelper, JSONHelper, @@ -13,42 +14,84 @@ import { import { BN } from 'bn.js'; import { Equals, EquatableKey } from './Equatable'; import { UnsignedBlockError } from './errors'; -import { Header, HeaderKey } from './Header'; -import { createSerializeWire, DeserializeWireBaseOptions, SerializeJSONContext, SerializeWire } from './Serializable'; +import { + createSerializeWire, + DeserializeWireBaseOptions, + SerializableContainer, + SerializableContainerType, + SerializeJSONContext, + SerializeWire, +} from './Serializable'; +import { BlockchainStorage } from './Storage'; import { utils } from './utils'; +import { Verifiable, VerifyOptions } from './Verifiable'; import { Witness } from './Witness'; -export interface BlockGetScriptHashesForVerifyingOptions { - readonly getHeader: (key: HeaderKey) => Promise
; -} - export interface BlockBaseAdd { readonly version?: number; readonly previousHash: UInt256; readonly merkleRoot: UInt256; - readonly timestamp: number; + readonly timestamp: BN; readonly index: number; - readonly consensusData: BN; readonly nextConsensus: UInt160; - readonly script?: Witness; + readonly messageMagic: number; + readonly witness?: Witness; readonly hash?: UInt256; } -export abstract class BlockBase implements EquatableKey { - public static deserializeBlockBaseWireBase(options: DeserializeWireBaseOptions): BlockBaseAdd { +export const getBlockScriptHashesForVerifying = async ( + block: { + readonly previousHash: UInt256; + readonly witness?: Witness; + }, + storage: BlockchainStorage, +) => { + if (block.previousHash === common.ZERO_UINT256) { + return [block.witness?.scriptHash]; + } + + const prevBlock = await storage.blocks.tryGet({ hashOrIndex: block.previousHash }); + const prevHeader = prevBlock?.header; + if (prevHeader === undefined) { + // TODO: implement this as a makeError InvalidStorageHeaderFetch + throw new Error(`previous header hash ${block.previousHash} did not return a valid Header from storage`); + } + + return [prevHeader.nextConsensus]; +}; + +export abstract class BlockBase implements EquatableKey, SerializableContainer, Verifiable { + public static deserializeWireBase(options: DeserializeWireBaseOptions): BlockBaseAdd { + const { version, previousHash, merkleRoot, timestamp, index, nextConsensus } = this.deserializeWireBaseUnsigned( + options, + ); + const { reader } = options; + + const witnesses = reader.readArray(() => Witness.deserializeWireBase(options)); + if (witnesses.length !== 1) { + throw new InvalidFormatError(`Expected exactly 1 witness, found: ${witnesses.length}`); + } + + return { + version, + previousHash, + merkleRoot, + timestamp, + index, + nextConsensus, + witness: witnesses[0], + messageMagic: options.context.messageMagic, + }; + } + public static deserializeWireBaseUnsigned(options: DeserializeWireBaseOptions): BlockBaseAdd { const { reader } = options; const version = reader.readUInt32LE(); const previousHash = reader.readUInt256(); const merkleRoot = reader.readUInt256(); - const timestamp = reader.readUInt32LE(); + const timestamp = reader.readUInt64LE(); const index = reader.readUInt32LE(); - const consensusData = reader.readUInt64LE(); const nextConsensus = reader.readUInt160(); - if (reader.readUInt8() !== 1) { - throw new InvalidFormatError(`Expected BinaryReader\'s readUInt8(0) to be 1. Received: ${reader.readUInt8()}`); - } - const script = Witness.deserializeWireBase(options); return { version, @@ -56,54 +99,56 @@ export abstract class BlockBase implements EquatableKey { merkleRoot, timestamp, index, - consensusData, nextConsensus, - script, + messageMagic: options.context.messageMagic, }; } + public readonly type: SerializableContainerType = 'Block'; public readonly version: number; public readonly previousHash: UInt256; public readonly merkleRoot: UInt256; - public readonly timestamp: number; + public readonly timestamp: BN; public readonly index: number; - public readonly consensusData: BN; public readonly nextConsensus: UInt160; - // tslint:disable-next-line no-any - public readonly equals: Equals = utils.equals(this.constructor as any, this, (other: any) => - common.uInt256Equal(this.hash, other.hash), - ); - public readonly toKeyString = utils.toKeyString(BlockBase, () => this.hashHex); + public readonly messageMagic: number; public readonly getScriptHashesForVerifying = utils.lazyAsync( - async ({ getHeader }: BlockGetScriptHashesForVerifyingOptions) => { - if (this.index === 0) { - return new Set([common.uInt160ToHex(crypto.toScriptHash(this.script.verification))]); + async (context: { readonly storage: BlockchainStorage }) => { + if (this.previousHash === common.ZERO_UINT256) { + return [this.witness.scriptHash]; } - const previousHeader = await getHeader({ - hashOrIndex: this.previousHash, - }); + const prevBlock = await context.storage.blocks.tryGet({ hashOrIndex: this.previousHash }); + const prevHeader = prevBlock?.header; + if (prevHeader === undefined) { + // TODO: implement this as a makeError InvalidStorageHeaderFetch + throw new Error(`previous header hash ${this.previousHash} did not return a valid Header from storage`); + } - return new Set([common.uInt160ToHex(previousHeader.nextConsensus)]); + return [prevHeader.nextConsensus]; }, ); - public readonly serializeUnsigned: SerializeWire = createSerializeWire(this.serializeUnsignedBase.bind(this)); - public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + // tslint:disable-next-line no-any + public readonly equals: Equals = utils.equals(this.constructor as any, this, (other: any) => + common.uInt256Equal(this.hash, other.hash), + ); + public readonly toKeyString = utils.toKeyString(BlockBase, () => this.hashHex); + public readonly serializeUnsigned: SerializeWire = createSerializeWire(this.serializeUnsignedBase); + public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase); private readonly hashInternal: () => UInt256; private readonly hashHexInternal = utils.lazy(() => common.uInt256ToHex(this.hash)); - private readonly messageInternal = utils.lazy(() => this.serializeUnsigned()); - private readonly scriptInternal: Witness | undefined; + private readonly messageInternal = utils.lazy(() => getHashData(this.serializeUnsigned(), this.messageMagic)); + private readonly witnessInternal: Witness | undefined; private readonly sizeInternal = utils.lazy( () => IOHelper.sizeOfUInt32LE + IOHelper.sizeOfUInt256 + IOHelper.sizeOfUInt256 + - IOHelper.sizeOfUInt32LE + - IOHelper.sizeOfUInt32LE + IOHelper.sizeOfUInt64LE + + IOHelper.sizeOfUInt32LE + IOHelper.sizeOfUInt160 + IOHelper.sizeOfUInt8 + - this.script.size + + this.witness.size + this.sizeExclusive(), ); @@ -113,19 +158,19 @@ export abstract class BlockBase implements EquatableKey { merkleRoot, timestamp, index, - consensusData, nextConsensus, - script, + witness, hash, + messageMagic, }: BlockBaseAdd) { this.version = version; this.previousHash = previousHash; this.merkleRoot = merkleRoot; this.timestamp = timestamp; this.index = index; - this.consensusData = consensusData; this.nextConsensus = nextConsensus; - this.scriptInternal = script; + this.witnessInternal = witness; + this.messageMagic = messageMagic; const hashIn = hash; this.hashInternal = hashIn === undefined ? utils.lazy(() => crypto.hash256(this.message)) : () => hashIn; } @@ -146,49 +191,78 @@ export abstract class BlockBase implements EquatableKey { return this.sizeInternal(); } - public get script(): Witness { - if (this.scriptInternal === undefined) { + public get witness(): Witness { + if (this.witnessInternal === undefined) { throw new UnsignedBlockError(common.uInt256ToString(this.hash)); } - return this.scriptInternal; + return this.witnessInternal; + } + + public get witnesses(): readonly Witness[] { + return [this.witness]; } public serializeUnsignedBase(writer: BinaryWriter): void { writer.writeUInt32LE(this.version); writer.writeUInt256(this.previousHash); writer.writeUInt256(this.merkleRoot); - writer.writeUInt32LE(this.timestamp); + writer.writeUInt64LE(this.timestamp); writer.writeUInt32LE(this.index); - writer.writeUInt64LE(this.consensusData); writer.writeUInt160(this.nextConsensus); } public serializeWireBase(writer: BinaryWriter): void { this.serializeUnsignedBase(writer); writer.writeUInt8(1); - this.script.serializeWireBase(writer); + this.witness.serializeWireBase(writer); } - public serializeBlockBaseJSON(context: SerializeJSONContext): BlockBaseJSON { + public serializeJSON(context: SerializeJSONContext): BlockBaseJSON { return { version: this.version, hash: JSONHelper.writeUInt256(this.hash), size: this.size, previousblockhash: JSONHelper.writeUInt256(this.previousHash), merkleroot: JSONHelper.writeUInt256(this.merkleRoot), - time: this.timestamp, + time: this.timestamp.toNumber(), index: this.index, - nonce: JSONHelper.writeUInt64LE(this.consensusData), nextconsensus: crypto.scriptHashToAddress({ addressVersion: context.addressVersion, scriptHash: this.nextConsensus, }), + witnesses: [this.witness.serializeJSON()], + }; + } - script: this.script.serializeJSON(context), - confirmations: 0, + public serializeJSONVerbose( + context: SerializeJSONContext, + verbose: { readonly confirmations: number; readonly nextblockhash?: UInt256Hex }, + ): BlockBaseJSON { + return { + ...this.serializeJSON(context), + confirmations: verbose.confirmations, + nextblockhash: verbose.nextblockhash, }; } + public async verify({ vm, storage, verifyWitnesses, native }: VerifyOptions): Promise { + const prevBlock = await storage.blocks.tryGet({ hashOrIndex: this.previousHash }); + const prevHeader = prevBlock?.header; + if (prevHeader === undefined) { + return false; + } + + if (prevHeader.index + 1 !== this.index) { + return false; + } + + if (prevHeader.timestamp.gte(this.timestamp)) { + return false; + } + + return verifyWitnesses(vm, this, storage, native, utils.ONE); + } + protected readonly sizeExclusive: () => number = () => 0; } diff --git a/packages/neo-one-node-core/src/BlockData.ts b/packages/neo-one-node-core/src/BlockData.ts deleted file mode 100644 index dd0e436f18..0000000000 --- a/packages/neo-one-node-core/src/BlockData.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { - BinaryWriter, - common, - createSerializeWire, - IOHelper, - SerializableWire, - SerializeWire, - UInt256, - UInt256Hex, -} from '@neo-one/client-common'; -import { BN } from 'bn.js'; -import { Equals, Equatable } from './Equatable'; -import { DeserializeWireBaseOptions, DeserializeWireOptions } from './Serializable'; -import { BinaryReader, utils } from './utils'; - -export interface BlockDataKey { - readonly hash: UInt256; -} - -export interface BlockDataAdd { - readonly hash: UInt256; - readonly lastGlobalTransactionIndex: BN; - readonly lastGlobalActionIndex: BN; - readonly systemFee: BN; -} - -export class BlockData implements Equatable, SerializableWire { - public static deserializeWireBase({ reader }: DeserializeWireBaseOptions): BlockData { - const hash = reader.readUInt256(); - const lastGlobalTransactionIndex = reader.readInt64LE(); - const lastGlobalActionIndex = reader.readInt64LE(); - const systemFee = reader.readFixed8(); - - return new this({ - hash, - systemFee, - lastGlobalTransactionIndex, - lastGlobalActionIndex, - }); - } - - public static deserializeWire(options: DeserializeWireOptions): BlockData { - return this.deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); - } - - public readonly hash: UInt256; - public readonly hashHex: UInt256Hex; - public readonly lastGlobalTransactionIndex: BN; - public readonly lastGlobalActionIndex: BN; - public readonly systemFee: BN; - public readonly equals: Equals = utils.equals(BlockData, this, (other) => common.uInt256Equal(this.hash, other.hash)); - public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - private readonly sizeInternal: () => number; - - public constructor({ hash, lastGlobalTransactionIndex, lastGlobalActionIndex, systemFee }: BlockDataAdd) { - this.hash = hash; - this.hashHex = common.uInt256ToHex(hash); - this.lastGlobalTransactionIndex = lastGlobalTransactionIndex; - this.lastGlobalActionIndex = lastGlobalActionIndex; - this.systemFee = systemFee; - this.sizeInternal = utils.lazy(() => IOHelper.sizeOfUInt256 + IOHelper.sizeOfFixed8); - } - - public get size(): number { - return this.sizeInternal(); - } - - public serializeWireBase(writer: BinaryWriter): void { - writer.writeUInt256(this.hash); - writer.writeInt64LE(this.lastGlobalTransactionIndex); - writer.writeInt64LE(this.lastGlobalActionIndex); - writer.writeFixed8(this.systemFee); - } -} diff --git a/packages/neo-one-node-core/src/Blockchain.ts b/packages/neo-one-node-core/src/Blockchain.ts index 88e40af427..cc3ff5fefb 100644 --- a/packages/neo-one-node-core/src/Blockchain.ts +++ b/packages/neo-one-node-core/src/Blockchain.ts @@ -1,188 +1,70 @@ -import { ECPoint } from '@neo-one/client-common'; +import { ECPoint, UInt160, UInt256, VerifyResultModel } from '@neo-one/client-common'; import { BN } from 'bn.js'; import { Observable } from 'rxjs'; -import { Account, AccountKey, AccountUpdate } from './Account'; -import { AccountUnclaimed, AccountUnclaimedKey, AccountUnclaimedsKey } from './AccountUnclaimed'; -import { AccountUnspent, AccountUnspentKey, AccountUnspentsKey } from './AccountUnspent'; -import { Action, ActionKey, ActionsKey } from './action'; -import { Asset, AssetKey, AssetUpdate } from './Asset'; -import { Block, BlockKey } from './Block'; -import { BlockData, BlockDataKey } from './BlockData'; -import { CallReceipt } from './CallReceipt'; -import { Contract, ContractKey } from './Contract'; -import { Header, HeaderKey } from './Header'; -import { InvocationData, InvocationDataKey } from './InvocationData'; +import { Block } from './Block'; +import { Header } from './Header'; import { ConsensusPayload } from './payload'; import { DeserializeWireContext, SerializeJSONContext } from './Serializable'; -import { Settings } from './Settings'; -import { StorageItem, StorageItemKey, StorageItemsKey, StorageItemUpdate } from './StorageItem'; -import { - FeeContext, - Input, - InvocationTransaction, - Output, - OutputKey, - Transaction, - TransactionKey, -} from './transaction'; -import { TransactionData, TransactionDataKey, TransactionDataUpdate } from './TransactionData'; -import { Validator, ValidatorKey } from './Validator'; -import { ValidatorsCount, ValidatorsCountUpdate } from './ValidatorsCount'; -import { VerifyScriptResult } from './vm'; - -export interface ReadMetadataStorage { - readonly get: () => Promise; - readonly tryGet: () => Promise; -} - -export interface ReadStorage { - readonly get: (key: Key) => Promise; - readonly tryGet: (key: Key) => Promise; -} - -export interface ReadAllStorage extends ReadStorage { - readonly all$: Observable; -} - -export interface ReadGetAllStorage extends ReadStorage { - readonly getAll$: (key: PartialKey) => Observable; -} - -export interface AddMetadataStorage { - readonly add: (add: Value) => Promise; -} - -export interface AddStorage { - readonly add: (add: Value) => Promise; -} - -export interface AddUpdateMetadataStorage extends AddMetadataStorage { - readonly update: (value: Value, update: Update) => Promise; -} - -export interface AddUpdateStorage extends AddStorage { - readonly update: (value: Value, update: Update) => Promise; -} - -export interface DeleteMetadataStorage { - readonly delete: () => Promise; -} - -export interface DeleteStorage { - readonly delete: (key: Key) => Promise; -} - -export interface AddUpdateDeleteMetadataStorage - extends AddUpdateMetadataStorage, - DeleteMetadataStorage {} -export interface AddDeleteStorage extends AddStorage, DeleteStorage {} -export interface AddUpdateDeleteStorage - extends AddUpdateStorage, - DeleteStorage {} - -interface ReadAddStorage extends ReadStorage, AddStorage {} -interface ReadAddDeleteStorage extends ReadStorage, AddStorage, DeleteStorage {} -interface ReadAddUpdateMetadataStorage - extends ReadMetadataStorage, - AddUpdateMetadataStorage {} -interface ReadAddUpdateStorage extends ReadStorage, AddUpdateStorage {} -interface ReadGetAllAddDeleteStorage - extends ReadGetAllStorage, - AddDeleteStorage {} -interface ReadAllAddStorage extends ReadAllStorage, AddStorage {} -interface ReadAllAddUpdateDeleteStorage - extends ReadAllStorage, - AddUpdateDeleteStorage {} - -interface ReadGetAllAddStorage - extends ReadGetAllStorage, - AddStorage {} -interface ReadGetAllAddUpdateDeleteStorage - extends ReadGetAllStorage, - AddUpdateDeleteStorage {} - -export interface BlockchainStorage { - readonly account: ReadAllStorage; - readonly accountUnclaimed: ReadGetAllStorage; - readonly accountUnspent: ReadGetAllStorage; - readonly action: ReadGetAllStorage; - readonly asset: ReadStorage; - readonly block: ReadStorage; - readonly blockData: ReadStorage; - readonly header: ReadStorage; - readonly transaction: ReadStorage; - readonly transactionData: ReadStorage; - readonly output: ReadStorage; - readonly contract: ReadStorage; - readonly storageItem: ReadGetAllStorage; - readonly validator: ReadAllStorage; - readonly invocationData: ReadStorage; - readonly validatorsCount: ReadMetadataStorage; -} - -export interface VerifyTransactionResult { - readonly verifications: readonly VerifyScriptResult[]; +import { BlockchainSettings } from './Settings'; +import { Signers } from './Signers'; +import { BlockchainStorage } from './Storage'; +import { Transaction } from './transaction'; +import { TransactionVerificationContext } from './TransactionVerificationContext'; +import { VerifyOptions, VerifyWitnesses } from './Verifiable'; +import { CallReceipt } from './vm'; + +export interface Mempool { + readonly [k: string]: Transaction | undefined; } export interface Blockchain extends BlockchainStorage { - readonly settings: Settings; + readonly settings: BlockchainSettings; readonly deserializeWireContext: DeserializeWireContext; readonly serializeJSONContext: SerializeJSONContext; - readonly feeContext: FeeContext; readonly currentBlock: Block; readonly previousBlock: Block | undefined; - readonly currentHeader: Header; + readonly currentHeaderIndex: number; readonly currentBlockIndex: number; readonly block$: Observable; readonly isPersistingBlock: boolean; + readonly verifyOptions: VerifyOptions; + readonly onPersistNativeContractScript: Buffer; - readonly persistBlock: (options: { readonly block: Block; readonly unsafe?: boolean }) => Promise; - readonly persistHeaders: (headers: readonly Header[]) => Promise; + readonly persistBlock: (options: { readonly block: Block; readonly verify?: boolean }) => Promise; + readonly verifyWitnesses: VerifyWitnesses; readonly verifyBlock: (block: Block) => Promise; - readonly verifyTransaction: (param0: { - readonly transaction: Transaction; - readonly memPool?: readonly Transaction[]; - }) => Promise; + readonly verifyTransaction: ( + transaction: Transaction, + mempool: Mempool, + context?: TransactionVerificationContext, + ) => Promise; readonly verifyConsensusPayload: (payload: ConsensusPayload) => Promise; - readonly getValidators: (transactions: readonly Transaction[]) => Promise; - - readonly invokeScript: (script: Buffer) => Promise; - readonly invokeTransaction: (transaction: InvocationTransaction) => Promise; - readonly calculateClaimAmount: (inputs: readonly Input[]) => Promise; - - readonly updateSettings: (settings: Settings) => void; + readonly getBlock: (hashOrIndex: UInt256 | number) => Promise; + readonly getHeader: (hashOrIndex: UInt256 | number) => Promise
; + readonly getBlockHash: (index: number) => Promise; + readonly getNextBlockHash: (hash: UInt256) => Promise; + + readonly getValidators: () => Promise; + readonly getNextBlockValidators: () => Promise; + readonly getMaxBlockSize: () => Promise; + readonly getMaxBlockSystemFee: () => Promise; + readonly getMaxTransactionsPerBlock: () => Promise; + readonly getFeePerByte: () => Promise; + + readonly invokeScript: (script: Buffer, signers?: Signers) => CallReceipt; + readonly testTransaction: (transaction: Transaction) => CallReceipt; + readonly getVerificationCost: ( + contractHash: UInt160, + transaction: Transaction, + ) => Promise<{ + readonly fee: BN; + readonly size: number; + }>; + + // readonly updateSettings: (settings: BlockchainSettings) => void; readonly stop: () => Promise; readonly reset: () => Promise; } - -export interface WriteBlockchain { - readonly settings: Blockchain['settings']; - readonly currentBlock: Blockchain['currentBlock']; - readonly currentHeader: Blockchain['currentHeader']; - readonly currentBlockIndex: number; - readonly getValidators: Blockchain['getValidators']; - readonly account: ReadAllAddUpdateDeleteStorage; - readonly accountUnclaimed: ReadGetAllAddDeleteStorage; - readonly accountUnspent: ReadGetAllAddDeleteStorage; - readonly action: ReadGetAllAddStorage; - readonly asset: ReadAddUpdateStorage; - readonly block: ReadAddStorage; - readonly blockData: ReadAddStorage; - readonly header: ReadAddStorage; - readonly transaction: ReadAddStorage; - readonly transactionData: ReadAddUpdateStorage; - readonly output: Blockchain['output']; - readonly contract: ReadAddDeleteStorage; - readonly storageItem: ReadGetAllAddUpdateDeleteStorage< - StorageItemKey, - StorageItemsKey, - StorageItem, - StorageItemUpdate - >; - readonly validator: ReadAllAddStorage; - readonly invocationData: ReadAddStorage; - readonly validatorsCount: ReadAddUpdateMetadataStorage; -} diff --git a/packages/neo-one-node-core/src/CallFlags.ts b/packages/neo-one-node-core/src/CallFlags.ts new file mode 100644 index 0000000000..47c7fd88a5 --- /dev/null +++ b/packages/neo-one-node-core/src/CallFlags.ts @@ -0,0 +1,10 @@ +export enum CallFlags { + None = 0, + ReadStates = 0b00000001, + WriteStates = 0b00000010, + AllowCall = 0b00000100, + AllowNotify = 0b00001000, + States = ReadStates | WriteStates, + ReadOnly = ReadStates | AllowCall, + All = States | AllowCall | AllowNotify, +} diff --git a/packages/neo-one-node-core/src/CallReceipt.ts b/packages/neo-one-node-core/src/CallReceipt.ts deleted file mode 100644 index 8e350056c5..0000000000 --- a/packages/neo-one-node-core/src/CallReceipt.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Action } from './action'; -import { InvocationResult } from './invocationResult'; - -export interface CallReceipt { - readonly result: InvocationResult; - readonly actions: readonly Action[]; -} diff --git a/packages/neo-one-node-core/src/ConsensusData.ts b/packages/neo-one-node-core/src/ConsensusData.ts new file mode 100644 index 0000000000..30815dcd0b --- /dev/null +++ b/packages/neo-one-node-core/src/ConsensusData.ts @@ -0,0 +1,61 @@ +import { BinaryWriter, ConsensusDataJSON, crypto, IOHelper, JSONHelper, UInt256 } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import { + createSerializeWire, + DeserializeWireBaseOptions, + SerializableJSON, + SerializableWire, + SerializeWire, +} from './Serializable'; +import { utils } from './utils'; + +export interface ConsensusDataAdd { + readonly primaryIndex: number; + readonly nonce: BN; +} + +export class ConsensusData implements SerializableWire, SerializableJSON { + public static deserializeWireBase(options: DeserializeWireBaseOptions): ConsensusData { + const { reader, context } = options; + const primaryIndex = reader.readVarUIntLE(context.validatorsCount - 1).toNumber(); + const nonce = reader.readUInt64LE(); + + return new this({ + primaryIndex, + nonce, + }); + } + + public readonly primaryIndex: number; + public readonly nonce: BN; + public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + public readonly sizeInternal = utils.lazy( + () => IOHelper.sizeOfVarUIntLE(this.primaryIndex) + IOHelper.sizeOfUInt64LE, + ); + + public constructor({ primaryIndex, nonce }: ConsensusDataAdd) { + this.primaryIndex = primaryIndex; + this.nonce = nonce; + } + public readonly hashInternal = () => crypto.hash256(this.serializeWire()); + + public get hash(): UInt256 { + return this.hashInternal(); + } + + public get size(): number { + return this.sizeInternal(); + } + + public serializeWireBase(writer: BinaryWriter): void { + writer.writeVarUIntLE(this.primaryIndex); + writer.writeUInt64LE(this.nonce); + } + + public serializeJSON() { + return { + primary: this.primaryIndex, + nonce: JSONHelper.writeUInt64LE(this.nonce), + }; + } +} diff --git a/packages/neo-one-node-core/src/Contract.ts b/packages/neo-one-node-core/src/Contract.ts deleted file mode 100644 index 37e6681ed4..0000000000 --- a/packages/neo-one-node-core/src/Contract.ts +++ /dev/null @@ -1,154 +0,0 @@ -import { - assertContractParameterType, - common, - ContractJSON, - IOHelper, - JSONHelper, - toJSONContractParameterType, - UInt160, -} from '@neo-one/client-common'; -import { assertContractPropertyState, ContractModel } from '@neo-one/client-full-common'; -import { ContractParameterType } from './contractParameter'; -import { ContractPropertyState } from './ContractPropertyState'; -import { Equals, EquatableKey } from './Equatable'; -import { - DeserializeWireBaseOptions, - DeserializeWireOptions, - SerializableJSON, - SerializeJSONContext, -} from './Serializable'; -import { BinaryReader, utils } from './utils'; - -export interface ContractKey { - readonly hash: UInt160; -} -export interface ContractAdd { - readonly hash?: UInt160; - readonly version?: number; - readonly script: Buffer; - readonly parameterList: readonly ContractParameterType[]; - readonly returnType: ContractParameterType; - readonly contractProperties: ContractPropertyState; - readonly name: string; - readonly codeVersion: string; - readonly author: string; - readonly email: string; - readonly description: string; -} - -export class Contract extends ContractModel implements SerializableJSON, EquatableKey { - public static deserializeWireBase(options: DeserializeWireBaseOptions): Contract { - return deserializeContractWireBase({ - context: options.context, - reader: options.reader, - }); - } - - public static deserializeWire(options: DeserializeWireOptions): Contract { - return this.deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); - } - - public readonly equals: Equals = utils.equals(Contract, this, (other) => common.uInt160Equal(this.hash, other.hash)); - public readonly toKeyString = utils.toKeyString(Contract, () => this.hashHex); - private readonly contractSizeInternal = utils.lazy(() => - sizeOfContract({ - script: this.script, - parameterList: this.parameterList, - name: this.name, - codeVersion: this.codeVersion, - author: this.author, - email: this.email, - description: this.description, - }), - ); - - public get size(): number { - return this.contractSizeInternal(); - } - - public serializeJSON(_context: SerializeJSONContext): ContractJSON { - return { - version: this.version, - hash: JSONHelper.writeUInt160(this.hash), - script: JSONHelper.writeBuffer(this.script), - parameters: this.parameterList.map(toJSONContractParameterType), - - returntype: toJSONContractParameterType(this.returnType), - name: this.name, - code_version: this.codeVersion, - author: this.author, - email: this.email, - description: this.description, - properties: { - storage: this.hasStorage, - dynamic_invoke: this.hasDynamicInvoke, - payable: this.payable, - }, - }; - } -} - -export const sizeOfContract = ({ - script, - parameterList, - name, - codeVersion, - author, - email, - description, - publishVersion, -}: { - readonly script: Buffer; - readonly parameterList: readonly ContractParameterType[]; - readonly name: string; - readonly codeVersion: string; - readonly author: string; - readonly email: string; - readonly description: string; - readonly publishVersion?: number; -}) => - IOHelper.sizeOfVarBytesLE(script) + - IOHelper.sizeOfVarBytesLE(Buffer.from(parameterList as ContractParameterType[])) + - IOHelper.sizeOfUInt8 + - (publishVersion === undefined ? IOHelper.sizeOfBoolean : 0) + - IOHelper.sizeOfVarString(name) + - IOHelper.sizeOfVarString(codeVersion) + - IOHelper.sizeOfVarString(author) + - IOHelper.sizeOfVarString(email) + - IOHelper.sizeOfVarString(description); - -export const deserializeContractWireBase = ({ - reader, - publishVersion, -}: { - readonly publishVersion?: number; -} & DeserializeWireBaseOptions): Contract => { - const script = reader.readVarBytesLE(); - const parameterList = [...reader.readVarBytesLE()].map(assertContractParameterType); - - const returnType = assertContractParameterType(reader.readUInt8()); - const contractProperties = - publishVersion === undefined || publishVersion >= 1 - ? assertContractPropertyState(reader.readUInt8()) - : ContractPropertyState.NoProperty; - const name = reader.readVarString(252); - const codeVersion = reader.readVarString(252); - const author = reader.readVarString(252); - const email = reader.readVarString(252); - const description = reader.readVarString(65536); - - return new Contract({ - script, - parameterList, - returnType, - contractProperties, - name, - codeVersion, - author, - email, - description, - }); -}; diff --git a/packages/neo-one-node-core/src/ContractIDState.ts b/packages/neo-one-node-core/src/ContractIDState.ts new file mode 100644 index 0000000000..8d36d1dac4 --- /dev/null +++ b/packages/neo-one-node-core/src/ContractIDState.ts @@ -0,0 +1,45 @@ +import { BinaryWriter, InvalidFormatError, IOHelper } from '@neo-one/client-common'; +import { + createSerializeWire, + DeserializeWireBaseOptions, + DeserializeWireOptions, + SerializableWire, +} from './Serializable'; +import { BinaryReader } from './utils'; + +export interface ContractIDStateAdd { + readonly nextId: number; +} + +export class ContractIDState implements SerializableWire { + public static deserializeWireBase(options: DeserializeWireBaseOptions): ContractIDState { + const { reader } = options; + const nextId = reader.readUInt32LE(); + if (nextId < 0) { + throw new InvalidFormatError(); + } + + return new this({ + nextId, + }); + } + + public static deserializeWire(options: DeserializeWireOptions): ContractIDState { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } + + public readonly nextId: number; + public readonly size = IOHelper.sizeOfUInt32LE; + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + + public constructor({ nextId }: ContractIDStateAdd) { + this.nextId = nextId; + } + + public serializeWireBase(writer: BinaryWriter) { + writer.writeUInt32LE(this.nextId); + } +} diff --git a/packages/neo-one-node-core/src/ContractParametersContext.ts b/packages/neo-one-node-core/src/ContractParametersContext.ts new file mode 100644 index 0000000000..281839ce8a --- /dev/null +++ b/packages/neo-one-node-core/src/ContractParametersContext.ts @@ -0,0 +1,405 @@ +import { + common, + ContractParameterTypeModel, + crypto, + ECPoint, + ECPointHex, + InvalidFormatError, + ScriptBuilder, + UInt160, + UInt160Hex, +} from '@neo-one/client-common'; +import { utils } from '@neo-one/utils'; +import _ from 'lodash'; +import { Contract } from './Contract'; +import { Witness } from './Witness'; + +export class ContractParametersContext { + public readonly scriptHashes: readonly UInt160[]; + private mutableContextItems: { readonly [k in UInt160Hex]: ContextItem | undefined }; + + public constructor(scriptHashes: readonly UInt160[]) { + this.scriptHashes = scriptHashes; + this.mutableContextItems = {}; + } + + public get contextItems() { + return this.mutableContextItems; + } + + public get completed() { + if (Object.keys(this.contextItems).length < this.scriptHashes.length) { + return false; + } + + return Object.values(this.contextItems).every( + (p) => p !== undefined && p.parameters.every((q) => q.value !== undefined), + ); + } + + // tslint:disable-next-line: no-any + public addWithIndex(contract: Contract, index: number, parameter: any) { + const itemInit = this.createItemInternal(contract); + if (itemInit === undefined) { + return false; + } + + const mutableParameters = [...itemInit.parameters]; + const targetParam = mutableParameters[index]; + targetParam.setValue(parameter); + mutableParameters[index] = targetParam; + + const item = itemInit.clone({ parameters: mutableParameters }); + this.addItemInternal(common.uInt160ToHex(contract.scriptHash), item); + + return true; + } + + // tslint:disable-next-line: no-any + public add(contract: Contract, parameters: readonly any[]) { + const itemInit = this.createItemInternal(contract); + if (itemInit === undefined) { + return false; + } + + const mutableParameters = itemInit.parameters.map((param, idx) => { + param.setValue(parameters[idx]); + + return param; + }); + + const item = itemInit.clone({ parameters: mutableParameters }); + this.addItemInternal(common.uInt160ToHex(contract.scriptHash), item); + + return true; + } + + public addSignature(contract: Contract, publicKey: ECPoint, signature: Buffer) { + const scriptHashHex = common.uInt160ToHex(contract.scriptHash); + const publicKeyHex = common.ecPointToHex(publicKey); + const multiResult = crypto.isMultiSigContractWithResult(contract.script); + if (multiResult.result) { + const { points } = multiResult; + let item = this.createItemInternal(contract); + if (item === undefined) { + return false; + } + + if (item.signatures === undefined) { + item = item.clone({ signatures: {} }); + } + + if (item.signatures === undefined) { + throw new Error('for TS'); + } + + if (item.signatures[publicKeyHex]) { + return false; + } + + if (!points.some((pt) => pt.equals(publicKey))) { + return false; + } + + const newSignatures = { + ...item.signatures, + [publicKeyHex]: signature, + }; + + item = item.clone({ signatures: newSignatures }); + this.addItemInternal(scriptHashHex, item); + + if (Object.values(newSignatures).length === contract.parameterList.length) { + const keyDict = _.fromPairs(points.map((p, idx) => [common.ecPointToHex(p), idx])); + const signatures = Object.entries(newSignatures) + .map(([key, value]) => ({ + signature: value, + index: keyDict[key], + })) + .sort((a, b) => { + if (a.index < b.index) { + return 1; + } + if (b.index < a.index) { + return -1; + } + + return 0; + }) + .map((val) => val.signature) + .filter(utils.notNull); + + signatures.forEach((sig, idx) => { + if (!this.addWithIndex(contract, idx, sig)) { + // TODO + throw new Error(); + } + }); + + item = item.clone({ signatures: undefined }); + this.addItemInternal(scriptHashHex, item); + } + + return true; + } + { + let index = -1; + contract.parameterList.forEach((param, idx) => { + if (param === ContractParameterTypeModel.Signature) { + if (index >= 0) { + throw new Error('not supported'); + } + + index = idx; + } + }); + if (index === -1) { + return false; + } + + return this.addWithIndex(contract, index, signature); + } + } + + public getWitnesses(): readonly Witness[] { + if (!this.completed) { + // TODO + throw new Error(); + } + + return this.scriptHashes.map((hash) => { + const item = this.contextItems[common.uInt160ToHex(hash)]; + if (item === undefined) { + throw new Error('should be defined'); + } + const builder = new ScriptBuilder(); + // tslint:disable-next-line: no-loop-statement + for (let j = item?.parameters.length - 1; j >= 0; j -= 1) { + emitPushContractParameter(builder, item.parameters[j]); + } + + return new Witness({ + invocation: builder.build(), + verification: item.script, + }); + }); + } + + private createItemInternal(contract: Contract) { + const scriptHashHex = common.uInt160ToHex(contract.scriptHash); + const maybeItem = this.contextItems[scriptHashHex]; + if (maybeItem) { + return maybeItem; + } + + if (!this.scriptHashes.some((hash) => hash.equals(contract.scriptHash))) { + return undefined; + } + + return ContextItem.fromContract(contract); + } + + private addItemInternal(key: UInt160Hex, item: ContextItem) { + const currentItems = this.contextItems; + this.mutableContextItems = { + ...currentItems, + [key]: item, + }; + } +} + +interface ContextItemAdd { + readonly script: Buffer; + readonly parameters: readonly ContractParameter[]; + readonly signatures?: { readonly [k in ECPointHex]: Buffer | undefined }; +} + +class ContextItem { + public static fromContract(contract: Contract) { + return new ContextItem({ + script: contract.script, + parameters: contract.parameterList.map((p) => new ContractParameter(p)), + }); + } + public readonly script: Buffer; + public readonly parameters: readonly ContractParameter[]; + public readonly signatures?: { readonly [k in ECPointHex]: Buffer | undefined }; + + public constructor({ script, parameters, signatures }: ContextItemAdd) { + this.script = script; + this.parameters = parameters; + this.signatures = signatures; + } + + public clone({ script, parameters, signatures }: Partial) { + return new ContextItem({ + script: script ?? this.script, + signatures: signatures ?? this.signatures, + parameters: parameters ?? this.parameters, + }); + } +} + +class ContractParameter { + public readonly type: ContractParameterTypeModel; + // tslint:disable-next-line: no-any + public mutableValue: any; + + public constructor(type: ContractParameterTypeModel) { + this.type = type; + switch (type) { + case ContractParameterTypeModel.Signature: + this.mutableValue = Buffer.alloc(64); + break; + case ContractParameterTypeModel.Boolean: + this.mutableValue = false; + break; + case ContractParameterTypeModel.Integer: + this.mutableValue = 0; + break; + case ContractParameterTypeModel.Hash160: + this.mutableValue = common.ZERO_UINT160; + break; + case ContractParameterTypeModel.Hash256: + this.mutableValue = common.ZERO_UINT256; + break; + case ContractParameterTypeModel.ByteArray: + this.mutableValue = []; + break; + case ContractParameterTypeModel.PublicKey: + this.mutableValue = common.ECPOINT_INFINITY; + break; + case ContractParameterTypeModel.String: + this.mutableValue = ''; + break; + case ContractParameterTypeModel.Array: + this.mutableValue = []; + break; + case ContractParameterTypeModel.Map: + this.mutableValue = []; + break; + default: + throw new Error('For TS'); + } + } + + public get value() { + return this.mutableValue; + } + + // tslint:disable-next-line: no-any + public setValue(value: any) { + switch (this.type) { + case ContractParameterTypeModel.Signature: + case ContractParameterTypeModel.ByteArray: + if (!Buffer.isBuffer(value)) { + throw new InvalidFormatError(); + } + this.mutableValue = value; + break; + + case ContractParameterTypeModel.Boolean: + if (!(typeof value === 'boolean')) { + throw new InvalidFormatError(); + } + this.mutableValue = value; + break; + + case ContractParameterTypeModel.Integer: + if (!(typeof value === 'number')) { + throw new InvalidFormatError(); + } + + this.mutableValue = value; + break; + + case ContractParameterTypeModel.Hash160: + if (!common.isUInt160(value)) { + throw new InvalidFormatError(); + } + this.mutableValue = value; + break; + + case ContractParameterTypeModel.Hash256: + if (!common.isUInt256(value)) { + throw new InvalidFormatError(); + } + this.mutableValue = value; + break; + + case ContractParameterTypeModel.PublicKey: + if (!common.isECPoint(value)) { + throw new InvalidFormatError(); + } + this.mutableValue = value; + break; + + case ContractParameterTypeModel.String: + if (!(typeof value === 'string')) { + throw new InvalidFormatError(); + } + this.mutableValue = value; + break; + + case ContractParameterTypeModel.Array: + case ContractParameterTypeModel.Map: + if (!Array.isArray(value)) { + throw new InvalidFormatError(); + } + this.mutableValue = value; + break; + + default: + throw new Error('For TS'); + } + } +} + +const emitPushContractParameter = (builder: ScriptBuilder, param: ContractParameter) => { + switch (param.type) { + case ContractParameterTypeModel.Signature: + case ContractParameterTypeModel.ByteArray: + builder.emitPush(param.value); + break; + + case ContractParameterTypeModel.Boolean: + builder.emitPushBoolean(param.value); + break; + + case ContractParameterTypeModel.Integer: + builder.emitPushInt(param.value); + break; + + case ContractParameterTypeModel.Hash160: + builder.emitPushUInt160(param.value); + break; + + case ContractParameterTypeModel.Hash256: + builder.emitPushUInt256(param.value); + break; + + case ContractParameterTypeModel.PublicKey: + builder.emitPushECPoint(param.value); + break; + + case ContractParameterTypeModel.String: + builder.emitPushString(param.value); + break; + + case ContractParameterTypeModel.Array: + const parameters = param.value as readonly ContractParameter[]; + // tslint:disable-next-line: no-loop-statement + for (let i = parameters.length - 1; i >= 0; i--) { + emitPushContractParameter(builder, parameters[i]); + } + builder.emitPushInt(parameters.length); + builder.emitOp('PACK'); + + break; + + default: + throw new Error(); + } + + return builder; +}; diff --git a/packages/neo-one-node-core/src/ContractPropertyState.ts b/packages/neo-one-node-core/src/ContractPropertyState.ts deleted file mode 100644 index c6412a5336..0000000000 --- a/packages/neo-one-node-core/src/ContractPropertyState.ts +++ /dev/null @@ -1 +0,0 @@ -export { ContractPropertyStateModel as ContractPropertyState } from '@neo-one/client-full-common'; diff --git a/packages/neo-one-node-core/src/ContractState.ts b/packages/neo-one-node-core/src/ContractState.ts new file mode 100644 index 0000000000..a630a6c903 --- /dev/null +++ b/packages/neo-one-node-core/src/ContractState.ts @@ -0,0 +1,63 @@ +import { common, ContractJSON, IOHelper, JSONHelper, UInt160 } from '@neo-one/client-common'; +import { ContractStateModel } from '@neo-one/client-full-common'; +import { ContractManifest } from './manifest'; +import { utils } from './utils'; +import { StackItem } from './StackItems'; +import { assertArrayStackItem } from 'dist/cjs'; + +export interface ContractStateAdd { + readonly id: number; + readonly updateCounter: number; + readonly hash: UInt160; + readonly script: Buffer; + readonly manifest: ContractManifest; +} + +export type ContractKey = UInt160; + +export class ContractState extends ContractStateModel { + public static fromStackItem(stackItem: StackItem): ContractState { + const { array } = assertArrayStackItem(stackItem); + const id = array[0].getInteger().toNumber(); + const updateCounter = array[1].getInteger().toNumber(); + const hash = common.bufferToUInt160(array[2].getBuffer()); + const script = array[3].getBuffer(); + const manifest = ContractManifest.parseBytes(array[4].getBuffer()); + + return new ContractState({ + id, + updateCounter, + hash, + script, + manifest, + }); + } + + private readonly sizeInternal = utils.lazy( + () => IOHelper.sizeOfUInt32LE + IOHelper.sizeOfVarBytesLE(this.script) + this.manifest.size, + ); + + public get size() { + return this.sizeInternal(); + } + + public clone() { + return new ContractState({ + id: this.id, + updateCounter: this.updateCounter, + hash: this.hash, + script: this.script, + manifest: this.manifest, + }); + } + + public serializeJSON(): ContractJSON { + return { + id: this.id, + updatecounter: this.updateCounter, + hash: JSONHelper.writeUInt160(this.hash), + script: JSONHelper.writeBase64Buffer(this.script), + manifest: this.manifest.serializeJSON(), + }; + } +} diff --git a/packages/neo-one-node-core/src/DesignationRole.ts b/packages/neo-one-node-core/src/DesignationRole.ts new file mode 100644 index 0000000000..720e58f1a9 --- /dev/null +++ b/packages/neo-one-node-core/src/DesignationRole.ts @@ -0,0 +1,4 @@ +export enum DesignationRole { + StateValidator = 4, + Oracle = 8, +} diff --git a/packages/neo-one-node-core/src/HashIndexState.ts b/packages/neo-one-node-core/src/HashIndexState.ts new file mode 100644 index 0000000000..8fe044e926 --- /dev/null +++ b/packages/neo-one-node-core/src/HashIndexState.ts @@ -0,0 +1,53 @@ +import { BinaryWriter, IOHelper, UInt256 } from '@neo-one/client-common'; +import { + createSerializeWire, + DeserializeWireBaseOptions, + DeserializeWireOptions, + SerializableWire, +} from './Serializable'; +import { BinaryReader, utils } from './utils'; + +export interface HashIndexStateAdd { + readonly hash: UInt256; + readonly index: number; +} + +export class HashIndexState implements SerializableWire { + public static deserializeWireBase(options: DeserializeWireBaseOptions): HashIndexState { + const { reader } = options; + const hash = reader.readUInt256(); + const index = reader.readUInt32LE(); + + return new this({ + hash, + index, + }); + } + + public static deserializeWire(options: DeserializeWireOptions): HashIndexState { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } + + public readonly hash: UInt256; + public readonly index: number; + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + + private readonly sizeInternal = utils.lazy(() => IOHelper.sizeOfUInt256 + IOHelper.sizeOfUInt32LE); + + public constructor({ hash, index }: HashIndexStateAdd) { + this.hash = hash; + this.index = index; + } + + public get size() { + return this.sizeInternal(); + } + + public serializeWireBase(writer: BinaryWriter) { + writer.writeUInt256(this.hash); + writer.writeUInt32LE(this.index); + } +} diff --git a/packages/neo-one-node-core/src/Header.ts b/packages/neo-one-node-core/src/Header.ts index 00f093395f..6e560c0536 100644 --- a/packages/neo-one-node-core/src/Header.ts +++ b/packages/neo-one-node-core/src/Header.ts @@ -1,4 +1,11 @@ -import { BinaryWriter, HeaderJSON, InvalidFormatError, IOHelper, UInt256 } from '@neo-one/client-common'; +import { + BinaryWriter, + createSerializeWire, + HeaderJSON, + InvalidFormatError, + IOHelper, + UInt256Hex, +} from '@neo-one/client-common'; import { BlockBase, BlockBaseAdd } from './BlockBase'; import { DeserializeWireBaseOptions, @@ -7,21 +14,18 @@ import { SerializableWire, SerializeJSONContext, } from './Serializable'; +import { TrimmedBlock } from './TrimmedBlock'; import { BinaryReader, utils } from './utils'; export type HeaderAdd = BlockBaseAdd; -export interface HeaderKey { - readonly hashOrIndex: UInt256 | number; -} -export class Header extends BlockBase implements SerializableWire
, SerializableJSON { +export class Header extends BlockBase implements SerializableWire, SerializableJSON { public static deserializeWireBase(options: DeserializeWireBaseOptions): Header { const { reader } = options; - const blockBase = super.deserializeBlockBaseWireBase(options); - if (reader.readUInt8() !== 0) { - throw new InvalidFormatError( - `Expected Header BinaryReader readUInt8(0) to be 0. Received: ${reader.readUInt8()}`, - ); + const blockBase = super.deserializeWireBase(options); + const uint8 = reader.readUInt8(); + if (uint8 !== 0) { + throw new InvalidFormatError(`Expected Header BinaryReader readUInt8() to be 0. Received: ${uint8}`); } return new this({ @@ -30,9 +34,9 @@ export class Header extends BlockBase implements SerializableWire
, Seria merkleRoot: blockBase.merkleRoot, timestamp: blockBase.timestamp, index: blockBase.index, - consensusData: blockBase.consensusData, nextConsensus: blockBase.nextConsensus, - script: blockBase.script, + witness: blockBase.witness, + messageMagic: options.context.messageMagic, }); } @@ -42,15 +46,43 @@ export class Header extends BlockBase implements SerializableWire
, Seria reader: new BinaryReader(options.buffer), }); } + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + public readonly serializeUnsigned = createSerializeWire(super.serializeUnsignedBase.bind(this)); protected readonly sizeExclusive: () => number = utils.lazy(() => IOHelper.sizeOfUInt8); + public trim(): TrimmedBlock { + return new TrimmedBlock({ + version: this.version, + previousHash: this.previousHash, + merkleRoot: this.merkleRoot, + timestamp: this.timestamp, + index: this.index, + nextConsensus: this.nextConsensus, + witness: this.witness, + hashes: [], + messageMagic: this.messageMagic, + }); + } public serializeWireBase(writer: BinaryWriter): void { super.serializeWireBase(writer); writer.writeUInt8(0); } - public async serializeJSON(context: SerializeJSONContext): Promise { - return super.serializeBlockBaseJSON(context); + public serializeJSON(context: SerializeJSONContext): HeaderJSON { + return super.serializeJSON(context); + } + + public serializeJSONVerbose( + context: SerializeJSONContext, + verbose: { readonly confirmations: number; readonly nextblockhash?: UInt256Hex }, + ) { + const base = this.serializeJSON(context); + + return { + ...base, + confirmations: verbose.confirmations, + nextblockhash: verbose.nextblockhash, + }; } } diff --git a/packages/neo-one-node-core/src/HeaderHashList.ts b/packages/neo-one-node-core/src/HeaderHashList.ts new file mode 100644 index 0000000000..6041085577 --- /dev/null +++ b/packages/neo-one-node-core/src/HeaderHashList.ts @@ -0,0 +1,42 @@ +import { BinaryWriter, UInt256 } from '@neo-one/client-common'; +import { + createSerializeWire, + DeserializeWireBaseOptions, + DeserializeWireOptions, + SerializableWire, +} from './Serializable'; +import { BinaryReader } from './utils'; + +export interface HeaderHashListAdd { + readonly hashes: readonly UInt256[]; +} + +export type HeaderKey = number; + +export class HeaderHashList implements SerializableWire { + public static deserializeWireBase(options: DeserializeWireBaseOptions): HeaderHashList { + const { reader } = options; + const hashes = reader.readArray(() => reader.readUInt256()); + + return new this({ + hashes, + }); + } + + public static deserializeWire(options: DeserializeWireOptions): HeaderHashList { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } + + public readonly hashes: readonly UInt256[]; + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + public constructor({ hashes }: HeaderHashListAdd) { + this.hashes = hashes; + } + + public serializeWireBase(writer: BinaryWriter) { + writer.writeArray(this.hashes, (hash) => writer.writeUInt256(hash)); + } +} diff --git a/packages/neo-one-node-core/src/InvocationData.ts b/packages/neo-one-node-core/src/InvocationData.ts deleted file mode 100644 index a7bcf72c9b..0000000000 --- a/packages/neo-one-node-core/src/InvocationData.ts +++ /dev/null @@ -1,174 +0,0 @@ -import { BinaryWriter, common, ECPoint, IOHelper, UInt160, UInt256 } from '@neo-one/client-common'; -import { BN } from 'bn.js'; -import { deserializeInvocationResultWireBase, InvocationResult } from './invocationResult'; -import { - createSerializeWire, - DeserializeWireBaseOptions, - DeserializeWireOptions, - SerializableWire, - SerializeWire, -} from './Serializable'; -import { deserializeStorageChangeWireBase, StorageChange } from './storageChange'; -import { BinaryReader, utils } from './utils'; - -export interface InvocationDataAdd { - readonly hash: UInt256; - readonly assetHash?: UInt256; - readonly contractHashes: readonly UInt160[]; - readonly deletedContractHashes: readonly UInt160[]; - readonly migratedContractHashes: ReadonlyArray; - readonly voteUpdates: ReadonlyArray]>; - readonly blockIndex: number; - readonly transactionIndex: number; - readonly actionIndexStart: BN; - readonly actionIndexStop: BN; - readonly result: InvocationResult; - readonly storageChanges: readonly StorageChange[]; -} - -export interface InvocationDataKey { - readonly hash: UInt256; -} - -export class InvocationData implements SerializableWire { - public static deserializeWireBase(options: DeserializeWireBaseOptions): InvocationData { - const { reader } = options; - const hash = reader.readUInt256(); - const assetHash = reader.readUInt256(); - const contractHashes = reader.readArray(() => reader.readUInt160()); - const deletedContractHashes = reader.readArray(() => reader.readUInt160()); - const migratedContractHashes = reader.readArray(() => { - const from = reader.readUInt160(); - const to = reader.readUInt160(); - - return [from, to] as const; - }); - const voteUpdates = reader.readArray]>(() => { - const address = reader.readUInt160(); - const votes = reader.readArray(() => reader.readECPoint()); - - return [address, votes] as const; - }); - const blockIndex = reader.readUInt32LE(); - const transactionIndex = reader.readUInt32LE(); - const actionIndexStart = reader.readUInt64LE(); - const actionIndexStop = reader.readUInt64LE(); - const result = deserializeInvocationResultWireBase(options); - const storageChanges = reader.readArray(() => deserializeStorageChangeWireBase(options)); - - return new this({ - hash, - assetHash: common.uInt256Equal(assetHash, common.ZERO_UINT256) ? undefined : assetHash, - contractHashes, - deletedContractHashes, - migratedContractHashes, - voteUpdates, - blockIndex, - transactionIndex, - actionIndexStart, - actionIndexStop, - result, - storageChanges, - }); - } - - public static deserializeWire(options: DeserializeWireOptions): InvocationData { - return this.deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); - } - - public readonly hash: UInt256; - public readonly assetHash: UInt256 | undefined; - public readonly contractHashes: readonly UInt160[]; - public readonly deletedContractHashes: readonly UInt160[]; - public readonly migratedContractHashes: ReadonlyArray; - public readonly voteUpdates: ReadonlyArray]>; - public readonly blockIndex: number; - public readonly transactionIndex: number; - public readonly actionIndexStart: BN; - public readonly actionIndexStop: BN; - public readonly result: InvocationResult; - public readonly storageChanges: readonly StorageChange[]; - public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - private readonly sizeInternal: () => number; - - public constructor({ - hash, - assetHash, - contractHashes, - deletedContractHashes, - migratedContractHashes, - voteUpdates, - blockIndex, - transactionIndex, - actionIndexStart, - actionIndexStop, - result, - storageChanges, - }: InvocationDataAdd) { - this.hash = hash; - this.assetHash = assetHash; - this.contractHashes = contractHashes; - this.deletedContractHashes = deletedContractHashes; - this.migratedContractHashes = migratedContractHashes; - this.voteUpdates = voteUpdates; - this.blockIndex = blockIndex; - this.transactionIndex = transactionIndex; - this.actionIndexStart = actionIndexStart; - this.actionIndexStop = actionIndexStop; - this.result = result; - this.storageChanges = storageChanges; - this.sizeInternal = utils.lazy( - () => - IOHelper.sizeOfUInt256 + - IOHelper.sizeOfUInt256 + - IOHelper.sizeOfArray(this.contractHashes, () => IOHelper.sizeOfUInt160) + - IOHelper.sizeOfArray(this.deletedContractHashes, () => IOHelper.sizeOfUInt160) + - IOHelper.sizeOfArray(this.migratedContractHashes, () => IOHelper.sizeOfUInt160) + - IOHelper.sizeOfArray( - this.voteUpdates, - (value) => IOHelper.sizeOfUInt160 + IOHelper.sizeOfArray(value[1], (val) => IOHelper.sizeOfECPoint(val)), - ) + - IOHelper.sizeOfUInt32LE + - IOHelper.sizeOfUInt32LE + - IOHelper.sizeOfUInt64LE + - IOHelper.sizeOfUInt64LE + - this.result.size, - ); - } - - public get size(): number { - return this.sizeInternal(); - } - - public serializeWireBase(writer: BinaryWriter): void { - writer.writeUInt256(this.hash); - writer.writeUInt256(this.assetHash === undefined ? common.ZERO_UINT256 : this.assetHash); - writer.writeArray(this.contractHashes, (contractHash) => { - writer.writeUInt160(contractHash); - }); - writer.writeArray(this.deletedContractHashes, (contractHash) => { - writer.writeUInt160(contractHash); - }); - writer.writeArray(this.migratedContractHashes, ([from, to]) => { - writer.writeUInt160(from); - writer.writeUInt160(to); - }); - writer.writeArray(this.voteUpdates, ([address, votes]) => { - writer.writeUInt160(address); - writer.writeArray(votes, (vote) => { - writer.writeECPoint(vote); - }); - }); - writer.writeUInt32LE(this.blockIndex); - writer.writeUInt32LE(this.transactionIndex); - writer.writeUInt64LE(this.actionIndexStart); - writer.writeUInt64LE(this.actionIndexStop); - this.result.serializeWireBase(writer); - writer.writeArray(this.storageChanges, (storageChange) => { - storageChange.serializeWireBase(writer); - }); - } -} diff --git a/packages/neo-one-node-core/src/Native.ts b/packages/neo-one-node-core/src/Native.ts new file mode 100644 index 0000000000..68bc3c2ad3 --- /dev/null +++ b/packages/neo-one-node-core/src/Native.ts @@ -0,0 +1,85 @@ +import { ECPoint, UInt160 } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import { ReadFindStorage } from './Storage'; +import { StorageItem } from './StorageItem'; +import { StorageKey } from './StorageKey'; +import { ContractState } from './ContractState'; +import { OracleRequest } from './OracleRequest'; +import { DesignationRole } from './DesignationRole'; + +export type OracleRequestResults = ReadonlyArray; + +export interface NativeContractStorageContext { + readonly storages: ReadFindStorage; +} + +export interface NativeContract { + readonly id: number; + readonly name: string; +} + +export interface NEP17NativeContract extends NativeContract { + readonly symbol: string; + readonly decimals: number; + + readonly totalSupply: (storage: NativeContractStorageContext) => Promise; + readonly balanceOf: (storage: NativeContractStorageContext, account: UInt160) => Promise; +} + +export interface GASContract extends NEP17NativeContract {} + +export interface PolicyContract extends NativeContract { + readonly getMaxTransactionsPerBlock: (storage: NativeContractStorageContext) => Promise; + readonly getMaxBlockSize: (storage: NativeContractStorageContext) => Promise; + readonly getMaxBlockSystemFee: (storage: NativeContractStorageContext) => Promise; + readonly getFeePerByte: (storage: NativeContractStorageContext) => Promise; + readonly getExecFeeFactor: (storage: NativeContractStorageContext) => Promise; + readonly getStoragePrice: (storage: NativeContractStorageContext) => Promise; + readonly isBlocked: (storage: NativeContractStorageContext, account: UInt160) => Promise; +} + +export interface Candidate { + readonly publicKey: ECPoint; + readonly votes: BN; +} + +export interface NEOContract extends NEP17NativeContract { + readonly totalAmount: BN; + readonly effectiveVoterTurnout: number; + + readonly totalSupply: () => Promise; + readonly getCandidates: (storage: NativeContractStorageContext) => Promise; + readonly getCommittee: (storage: NativeContractStorageContext) => Promise; + readonly getCommitteeAddress: (storage: NativeContractStorageContext) => Promise; + readonly unclaimedGas: (storage: NativeContractStorageContext, account: UInt160, end: number) => Promise; + readonly getNextBlockValidators: (storage: NativeContractStorageContext) => Promise; +} + +export interface ManagementContract extends NativeContract { + readonly getContract: (storage: NativeContractStorageContext, hash: UInt160) => Promise; + readonly listContracts: (storage: NativeContractStorageContext) => Promise; +} + +export interface DesignationContract extends NativeContract { + readonly getDesignatedByRole: ( + storage: NativeContractStorageContext, + role: DesignationRole, + height: number, + index: number, + ) => Promise; +} + +export interface OracleContract extends NativeContract { + readonly getRequest: (storage: NativeContractStorageContext, id: BN) => Promise; + readonly getRequests: (storage: NativeContractStorageContext) => Promise; + readonly getRequestsByUrl: (storage: NativeContractStorageContext, url: string) => Promise; +} + +export interface NativeContainer { + readonly GAS: GASContract; + readonly NEO: NEOContract; + readonly Policy: PolicyContract; + readonly Management: ManagementContract; + readonly Designation: DesignationContract; + readonly Oracle: OracleContract; +} diff --git a/packages/neo-one-node-core/src/Nep5Balance.ts b/packages/neo-one-node-core/src/Nep5Balance.ts new file mode 100644 index 0000000000..12ddf4f79f --- /dev/null +++ b/packages/neo-one-node-core/src/Nep5Balance.ts @@ -0,0 +1,49 @@ +import { createSerializeWire, IOHelper, Nep5BalanceModel } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import { DeserializeWireBaseOptions, DeserializeWireOptions } from './Serializable'; +import { BinaryReader, utils } from './utils'; + +export interface Nep5BalanceAdd { + readonly balanceBuffer: Buffer; + readonly lastUpdatedBlock: number; +} + +export class Nep5Balance extends Nep5BalanceModel { + public static deserializeWireBase(options: DeserializeWireBaseOptions): Nep5Balance { + const { reader } = options; + const balanceBuffer = reader.readVarBytesLE(512); + const lastUpdatedBlock = reader.readUInt32LE(); + + return new this({ + balanceBuffer, + lastUpdatedBlock, + }); + } + + public static deserializeWire(options: DeserializeWireOptions): Nep5Balance { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } + + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + private readonly sizeInternal = utils.lazy( + () => IOHelper.sizeOfVarBytesLE(this.balanceInternal) + IOHelper.sizeOfUInt32LE, + ); + + public get balance() { + return new BN(this.balanceInternal); + } + + public get size() { + return this.sizeInternal(); + } + + public clone() { + return new Nep5Balance({ + balanceBuffer: this.balanceInternal, + lastUpdatedBlock: this.lastUpdatedBlock, + }); + } +} diff --git a/packages/neo-one-node-core/src/Nep5BalanceKey.ts b/packages/neo-one-node-core/src/Nep5BalanceKey.ts new file mode 100644 index 0000000000..df81989843 --- /dev/null +++ b/packages/neo-one-node-core/src/Nep5BalanceKey.ts @@ -0,0 +1,42 @@ +import { createSerializeWire, IOHelper, Nep5BalanceKeyModel, UInt160 } from '@neo-one/client-common'; +import { DeserializeWireBaseOptions, DeserializeWireOptions } from './Serializable'; +import { BinaryReader, utils } from './utils'; + +export interface Nep5BalanceKeyAdd { + readonly userScriptHash: UInt160; + readonly assetScriptHash: UInt160; +} + +export class Nep5BalanceKey extends Nep5BalanceKeyModel { + public static deserializeWireBase(options: DeserializeWireBaseOptions): Nep5BalanceKey { + const { reader } = options; + const userScriptHash = reader.readUInt160(); + const assetScriptHash = reader.readUInt160(); + + return new this({ + userScriptHash, + assetScriptHash, + }); + } + + public static deserializeWire(options: DeserializeWireOptions): Nep5BalanceKey { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } + + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + private readonly sizeInternal = utils.lazy(() => IOHelper.sizeOfUInt160 + IOHelper.sizeOfUInt160); + + public get size() { + return this.sizeInternal(); + } + + public clone() { + return new Nep5BalanceKey({ + userScriptHash: this.userScriptHash, + assetScriptHash: this.assetScriptHash, + }); + } +} diff --git a/packages/neo-one-node-core/src/Nep5Transfer.ts b/packages/neo-one-node-core/src/Nep5Transfer.ts new file mode 100644 index 0000000000..4986c1be50 --- /dev/null +++ b/packages/neo-one-node-core/src/Nep5Transfer.ts @@ -0,0 +1,61 @@ +import { createSerializeWire, IOHelper, Nep5TransferModel, UInt160, UInt256 } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import { DeserializeWireBaseOptions, DeserializeWireOptions } from './Serializable'; +import { BinaryReader, utils } from './utils'; + +export interface Nep5TransferAdd { + readonly userScriptHash: UInt160; + readonly blockIndex: number; + readonly txHash: UInt256; + readonly amountBuffer: Buffer; +} + +export class Nep5Transfer extends Nep5TransferModel { + public static deserializeWireBase(options: DeserializeWireBaseOptions): Nep5Transfer { + const { reader } = options; + const userScriptHash = reader.readUInt160(); + const blockIndex = reader.readUInt32LE(); + const txHash = reader.readUInt256(); + const amountBuffer = reader.readVarBytesLE(512); + + return new this({ + userScriptHash, + blockIndex, + txHash, + amountBuffer, + }); + } + + public static deserializeWire(options: DeserializeWireOptions): Nep5Transfer { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } + + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + private readonly sizeInternal = utils.lazy( + () => + IOHelper.sizeOfUInt160 + + IOHelper.sizeOfUInt32LE + + IOHelper.sizeOfUInt256 + + IOHelper.sizeOfVarBytesLE(this.amountInternal), + ); + + public get amount() { + return new BN(this.amountInternal); + } + + public get size() { + return this.sizeInternal(); + } + + public clone() { + return new Nep5Transfer({ + userScriptHash: this.userScriptHash, + blockIndex: this.blockIndex, + txHash: this.txHash, + amountBuffer: this.amountInternal, + }); + } +} diff --git a/packages/neo-one-node-core/src/Nep5TransferKey.ts b/packages/neo-one-node-core/src/Nep5TransferKey.ts new file mode 100644 index 0000000000..012cc9ec5e --- /dev/null +++ b/packages/neo-one-node-core/src/Nep5TransferKey.ts @@ -0,0 +1,53 @@ +import { createSerializeWire, IOHelper, Nep5TransferKeyModel, UInt160 } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import { DeserializeWireBaseOptions, DeserializeWireOptions } from './Serializable'; +import { BinaryReader, utils } from './utils'; + +export interface Nep5TransferKeyAdd { + readonly userScriptHash: UInt160; + readonly timestampMS: BN; + readonly assetScriptHash: UInt160; + readonly blockTransferNotificationIndex: number; +} + +export class Nep5TransferKey extends Nep5TransferKeyModel { + public static deserializeWireBase(options: DeserializeWireBaseOptions): Nep5TransferKey { + const { reader } = options; + const userScriptHash = reader.readUInt160(); + const timestampMS = reader.readUInt64LE(); + const assetScriptHash = reader.readUInt160(); + const blockTransferNotificationIndex = reader.readUInt16LE(); + + return new this({ + userScriptHash, + timestampMS, + assetScriptHash, + blockTransferNotificationIndex, + }); + } + + public static deserializeWire(options: DeserializeWireOptions): Nep5TransferKey { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } + + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + private readonly sizeInternal = utils.lazy( + () => IOHelper.sizeOfUInt160 + IOHelper.sizeOfUInt64LE + IOHelper.sizeOfUInt64LE + IOHelper.sizeOfUInt16LE, + ); + + public get size() { + return this.sizeInternal(); + } + + public clone() { + return new Nep5TransferKey({ + userScriptHash: this.userScriptHash, + timestampMS: this.timestampMS, + assetScriptHash: this.assetScriptHash, + blockTransferNotificationIndex: this.blockTransferNotificationIndex, + }); + } +} diff --git a/packages/neo-one-node-core/src/Node.ts b/packages/neo-one-node-core/src/Node.ts index 67b4790ac1..672c38c557 100644 --- a/packages/neo-one-node-core/src/Node.ts +++ b/packages/neo-one-node-core/src/Node.ts @@ -1,8 +1,11 @@ +import { VerifyResultModel } from '@neo-one/client-common'; import { Block } from './Block'; -import { Blockchain, VerifyTransactionResult } from './Blockchain'; -import { Endpoint } from './net'; +import { Blockchain } from './Blockchain'; +import { ContractParametersContext } from './ContractParametersContext'; +import { Endpoint } from './network'; import { ConsensusPayload } from './payload'; import { Transaction } from './transaction'; +import { TransactionVerificationContext } from './TransactionVerificationContext'; export interface Consensus { readonly runConsensusNow: () => Promise; @@ -14,11 +17,20 @@ export interface Consensus { readonly resume: () => Promise; } +// TODO: we can make this `VerifyResultModel` into `VerifyTransactionResult` and add more info like 2.7 later. export interface RelayTransactionResult { - readonly verifyResult?: VerifyTransactionResult; + readonly verifyResult?: VerifyResultModel; +} + +export interface Version { + readonly tcpPort: number; + readonly wsPort: number; + readonly nonce: number; + readonly useragent: string; } export interface Node { + readonly version: Version; readonly blockchain: Blockchain; readonly relayTransaction: ( transaction: Transaction, @@ -31,4 +43,5 @@ export interface Node { readonly syncMemPool: () => void; readonly consensus: Consensus | undefined; readonly reset: () => Promise; + readonly getNewVerificationContext: () => TransactionVerificationContext; } diff --git a/packages/neo-one-node-core/src/Notification.ts b/packages/neo-one-node-core/src/Notification.ts new file mode 100644 index 0000000000..503c3a0f45 --- /dev/null +++ b/packages/neo-one-node-core/src/Notification.ts @@ -0,0 +1,53 @@ +import { common, NotificationJSON, UInt160 } from '@neo-one/client-common'; +import { assertArrayStackItem, StackItem, stackItemToJSON } from './StackItems'; +import { Verifiable } from './Verifiable'; + +export interface NotificationAdd { + readonly container?: Verifiable; + readonly scriptHash: UInt160; + readonly eventName: string; + readonly state: readonly StackItem[]; +} + +export class Notification { + public static fromStackItem(stackItem: StackItem, container?: Verifiable): Notification { + const array = assertArrayStackItem(stackItem).array; + const scriptHash = common.bufferToUInt160(array[0].getBuffer()); + const eventName = array[1].getString(); + const state = assertArrayStackItem(array[2]).array; + + return new Notification({ + container, + scriptHash, + eventName, + state, + }); + } + + public readonly container?: Verifiable; + public readonly scriptHash: UInt160; + public readonly eventName: string; + public readonly state: readonly StackItem[]; + + public constructor({ container, scriptHash, eventName, state }: NotificationAdd) { + this.container = container; + this.scriptHash = scriptHash; + this.eventName = eventName; + this.state = state; + } + + public serializeJSON(): NotificationJSON { + let state; + try { + state = this.state.map((s) => stackItemToJSON(s, undefined)); + } catch { + state = 'error: recursive reference'; + } + + return { + scripthash: common.uInt160ToString(this.scriptHash), + eventname: this.eventName, + state, + }; + } +} diff --git a/packages/neo-one-node-core/src/OracleRequest.ts b/packages/neo-one-node-core/src/OracleRequest.ts new file mode 100644 index 0000000000..77e0dfd034 --- /dev/null +++ b/packages/neo-one-node-core/src/OracleRequest.ts @@ -0,0 +1,62 @@ +import { UInt256, UInt160, common } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import { StackItem, assertArrayStackItem } from './StackItems'; + +interface OracleRequestAdd { + readonly originalTxid: UInt256; + readonly gasForResponse: BN; + readonly url: string; + readonly filter: string; + readonly callbackContract: UInt160; + readonly callbackMethod: string; + readonly userData: Buffer; +} + +export class OracleRequest { + public static fromStackItem(stackItem: StackItem): OracleRequest { + const { array } = assertArrayStackItem(stackItem); + const originalTxid = common.bufferToUInt256(array[0].getBuffer()); + const gasForResponse = array[1].getInteger(); + const url = array[2].getString(); + const filter = array[3].getString(); + const callbackContract = common.bufferToUInt160(array[4].getBuffer()); + const callbackMethod = array[5].getString(); + const userData = array[6].getBuffer(); + + return new OracleRequest({ + originalTxid, + gasForResponse, + url, + filter, + callbackContract, + callbackMethod, + userData, + }); + } + + public originalTxid: UInt256; + public gasForResponse: BN; + public url: string; + public filter: string; + public callbackContract: UInt160; + public callbackMethod: string; + public userData: Buffer; + + public constructor({ + originalTxid, + gasForResponse, + url, + filter, + callbackContract, + callbackMethod, + userData, + }: OracleRequestAdd) { + this.originalTxid = originalTxid; + this.gasForResponse = gasForResponse; + this.url = url; + this.filter = filter; + this.callbackContract = callbackContract; + this.callbackMethod = callbackMethod; + this.userData = userData; + } +} diff --git a/packages/neo-one-node-core/src/ScriptContainer.ts b/packages/neo-one-node-core/src/ScriptContainer.ts deleted file mode 100644 index cb8e859131..0000000000 --- a/packages/neo-one-node-core/src/ScriptContainer.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Block } from './Block'; -import { InvalidScriptContainerTypeError } from './errors'; -import { ConsensusPayload } from './payload'; -import { Transaction } from './transaction'; - -export enum ScriptContainerType { - Transaction = 0x00, - Block = 0x01, - Consensus = 0x02, -} - -export type ScriptContainer = - | { - readonly type: ScriptContainerType.Transaction; - readonly value: Transaction; - } - | { - readonly type: ScriptContainerType.Block; - readonly value: Block; - } - | { - readonly type: ScriptContainerType.Consensus; - readonly value: ConsensusPayload; - }; - -const isScriptContainerType = (value: number): value is ScriptContainerType => - // tslint:disable-next-line strict-type-predicates - ScriptContainerType[value] !== undefined; - -export const assertScriptContainerType = (value: number): ScriptContainerType => { - if (isScriptContainerType(value)) { - return value; - } - - throw new InvalidScriptContainerTypeError(value); -}; diff --git a/packages/neo-one-node-core/src/Serializable.ts b/packages/neo-one-node-core/src/Serializable.ts index 52e3a2bc4e..a95fe78cd0 100644 --- a/packages/neo-one-node-core/src/Serializable.ts +++ b/packages/neo-one-node-core/src/Serializable.ts @@ -1,17 +1,59 @@ -import { ECPoint, UInt160 } from '@neo-one/client-common'; -import { Action } from './action'; -import { Asset } from './Asset'; -import { Contract } from './Contract'; -import { InvocationResult } from './invocationResult'; -import { StorageChange } from './storageChange'; -import { FeeContext, Input, InvocationTransaction, Transaction } from './transaction'; -import { TransactionData } from './TransactionData'; +// import { ECPoint, UInt160 } from '@neo-one/client-common'; +// import { Action } from './action'; +// import { Asset } from './Asset'; +// import { Contract } from './Contract'; +// import { InvocationResult } from './invocationResult'; +// import { StorageChange } from './storageChange'; +import { SerializableWire } from '@neo-one/client-common'; +import { utils } from '@neo-one/utils'; +import { Block } from './Block'; +import { ConsensusPayload } from './payload'; +import { Signers } from './Signers'; +import { Transaction } from './transaction'; import { BinaryReader } from './utils'; +import { Verifiable } from './Verifiable'; export { SerializeWire, SerializableWire, createSerializeWire } from '@neo-one/client-common'; +export type SerializableContainerType = 'Block' | 'Signers' | 'Transaction' | 'ConsensusPayload'; + +export interface SerializableContainer extends SerializableWire, Verifiable { + readonly type: SerializableContainerType; +} + +export interface SerializedScriptContainer { + readonly type: SerializableContainerType; + readonly buffer: Buffer; +} + +export const deserializeScriptContainer = ( + item: SerializedScriptContainer, + context: DeserializeWireContext, +): SerializableWire => { + const buffer = item.buffer; + switch (item.type) { + case 'Block': + return Block.deserializeWire({ buffer, context }); + case 'Transaction': + return Transaction.deserializeWire({ buffer, context }); + case 'ConsensusPayload': + return ConsensusPayload.deserializeWire({ buffer, context }); + case 'Signers': + return Signers.deserializeWire({ buffer, context }); + default: + utils.assertNever(item.type); + throw new Error('For TS'); + } +}; + +export const serializeScriptContainer = (item: SerializableContainer): SerializedScriptContainer => ({ + buffer: item.serializeWire(), + type: item.type, +}); + export interface DeserializeWireContext { readonly messageMagic: number; + readonly validatorsCount: number; } export interface DeserializeWireBaseOptions { @@ -35,26 +77,20 @@ export function createDeserializeWire(deserializeWireBase: DeserializeWireBas }); } -export interface SerializableInvocationData { - readonly asset: Asset | undefined; - readonly contracts: readonly Contract[]; - readonly deletedContractHashes: readonly UInt160[]; - readonly migratedContractHashes: ReadonlyArray; - readonly voteUpdates: ReadonlyArray]>; - readonly result: InvocationResult; - readonly actions: readonly Action[]; - readonly storageChanges: readonly StorageChange[]; -} +// export interface SerializableInvocationData { +// readonly asset: Asset | undefined; +// readonly contracts: readonly Contract[]; +// readonly deletedContractHashes: readonly UInt160[]; +// readonly migratedContractHashes: ReadonlyArray; +// readonly voteUpdates: ReadonlyArray]>; +// readonly result: InvocationResult; +// readonly actions: readonly Action[]; +// readonly storageChanges: readonly StorageChange[]; +// } +// TODO: what did all of these `TransactionData` helpers do? How should we re implement? export interface SerializeJSONContext { readonly addressVersion: number; - readonly feeContext: FeeContext; - readonly tryGetInvocationData: ( - transaction: InvocationTransaction, - ) => Promise; - readonly tryGetTransactionData: (transaction: Transaction) => Promise; - readonly getUnclaimed: (hash: UInt160) => Promise; - readonly getUnspent: (hash: UInt160) => Promise; } export type SerializeJSON = (context: SerializeJSONContext) => TJSON | Promise; diff --git a/packages/neo-one-node-core/src/Settings.ts b/packages/neo-one-node-core/src/Settings.ts index ee4290015f..d2ee38dde2 100644 --- a/packages/neo-one-node-core/src/Settings.ts +++ b/packages/neo-one-node-core/src/Settings.ts @@ -1,30 +1,28 @@ import { ECPoint } from '@neo-one/client-common'; -import { BN } from 'bn.js'; import { Block } from './Block'; -import { RegisterTransaction, TransactionType } from './transaction'; -export interface VMSettings { - readonly storageContext: { - readonly v0: { - readonly index: number; - }; - }; -} +export const DECREMENT_INTERVAL = 2000000; +export const GENERATION_AMOUNT: ReadonlyArray = [6, 5, 4, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -export interface Settings { +export interface BlockchainSettings extends ProtocolSettings { readonly genesisBlock: Block; - readonly governingToken: RegisterTransaction; - readonly utilityToken: RegisterTransaction; readonly decrementInterval: number; readonly generationAmount: readonly number[]; - readonly fees: { [K in TransactionType]?: BN }; - readonly registerValidatorFee: BN; - readonly messageMagic: number; - readonly addressVersion: number; readonly privateKeyVersion: number; readonly standbyValidators: readonly ECPoint[]; - readonly vm: VMSettings; - readonly secondsPerBlock: number; - readonly maxTransactionsPerBlock: number; - readonly memPoolSize: number; } +export interface ProtocolSettings { + readonly messageMagic: number; + readonly addressVersion: number; + readonly standbyCommittee: readonly ECPoint[]; + readonly committeeMembersCount: number; + readonly validatorsCount: number; + readonly millisecondsPerBlock: number; + readonly memoryPoolMaxTransactions: number; +} + +export interface NetworkSettings { + readonly seeds: readonly string[]; +} + +export interface Settings extends BlockchainSettings {} diff --git a/packages/neo-one-node-core/src/Signer.ts b/packages/neo-one-node-core/src/Signer.ts new file mode 100644 index 0000000000..acc9951338 --- /dev/null +++ b/packages/neo-one-node-core/src/Signer.ts @@ -0,0 +1,41 @@ +import { + assertWitnessScope, + hasCustomContracts, + hasCustomGroups, + InvalidFormatError, + JSONHelper, + SignerJSON, + SignerModel, + toWitnessScope, + witnessScopeHasFlag, + WitnessScopeModel, +} from '@neo-one/client-common'; +import { DeserializeWireBaseOptions, SerializableJSON } from './Serializable'; +export class Signer extends SignerModel implements SerializableJSON { + public static deserializeWireBase(options: DeserializeWireBaseOptions): Signer { + const { reader } = options; + const account = reader.readUInt160(); + const scopes = assertWitnessScope(reader.readUInt8()); + if (witnessScopeHasFlag(scopes, WitnessScopeModel.Global) && scopes !== WitnessScopeModel.Global) { + throw new InvalidFormatError('Only the global scope should have the global flag'); + } + const allowedContracts = hasCustomContracts(scopes) ? reader.readArray(reader.readUInt160, this.maxSubItems) : []; + const allowedGroups = hasCustomGroups(scopes) ? reader.readArray(reader.readECPoint, this.maxSubItems) : []; + + return new Signer({ + account, + scopes, + allowedContracts, + allowedGroups, + }); + } + + public static fromJSON(json: SignerJSON): Signer { + return new Signer({ + account: JSONHelper.readUInt160(json.account), + scopes: toWitnessScope(json.scopes), + allowedContracts: json.allowedcontracts ? json.allowedcontracts.map(JSONHelper.readUInt160) : undefined, + allowedGroups: json.allowedgroups ? json.allowedgroups.map(JSONHelper.readECPoint) : undefined, + }); + } +} diff --git a/packages/neo-one-node-core/src/Signers.ts b/packages/neo-one-node-core/src/Signers.ts new file mode 100644 index 0000000000..9d582a8faa --- /dev/null +++ b/packages/neo-one-node-core/src/Signers.ts @@ -0,0 +1,75 @@ +import { + BinaryWriter, + createSerializeWire, + InvalidFormatError, + JSONHelper, + toWitnessScope, + WitnessScopeModel, +} from '@neo-one/client-common'; +import { + DeserializeWireBaseOptions, + DeserializeWireOptions, + SerializableContainer, + SerializableContainerType, +} from './Serializable'; +import { Signer } from './Signer'; +import { BinaryReader } from './utils'; +import { Witness } from './Witness'; + +export interface SignersAdd { + readonly signers: readonly Signer[]; +} + +export class Signers implements SerializableContainer { + public static deserializeWireBase(options: DeserializeWireBaseOptions): Signers { + const { reader } = options; + const signers = reader.readArray(() => Signer.deserializeWireBase(options)); + + return new this({ + signers, + }); + } + + public static deserializeWire(options: DeserializeWireOptions): Signers { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } + + // tslint:disable-next-line: no-any + public static fromJSON(json: any): Signers { + if (!Array.isArray(json)) { + throw new InvalidFormatError(); + } + + return new Signers({ + signers: json.map( + (signer) => + new Signer({ + account: JSONHelper.readUInt160(signer.account), + scopes: signer.scopes === undefined ? WitnessScopeModel.None : toWitnessScope(signer?.scopes), + allowedContracts: signer.allowedcontracts?.map((contract: string) => JSONHelper.readUInt160(contract)), + allowedGroups: signer.allowedgroups?.map((group: string) => JSONHelper.readECPoint(group)), + }), + ), + }); + } + + public readonly type: SerializableContainerType = 'Signers'; + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + public readonly signers: readonly Signer[]; + public readonly witnesses: readonly Witness[] = []; + + public constructor({ signers }: SignersAdd) { + this.signers = signers; + } + + public getScriptHashesForVerifying() { + return this.signers.map((signer) => signer.account); + } + + public serializeWireBase(writer: BinaryWriter) { + writer.writeArray(this.signers, (signer) => signer.serializeWireBase(writer)); + } +} diff --git a/packages/neo-one-node-core/src/StackItems/ArrayStackItem.ts b/packages/neo-one-node-core/src/StackItems/ArrayStackItem.ts new file mode 100644 index 0000000000..a1696ee9c3 --- /dev/null +++ b/packages/neo-one-node-core/src/StackItems/ArrayStackItem.ts @@ -0,0 +1,28 @@ +import { StackItemAdd, StackItemBase } from './StackItemBase'; +import { StackItem } from './StackItems'; +import { StackItemType } from './StackItemType'; + +export interface ArrayStackItemAdd extends StackItemAdd { + readonly array: readonly StackItem[]; +} + +export class ArrayStackItem extends StackItemBase { + public readonly array: readonly StackItem[]; + + public constructor(array: readonly StackItem[]) { + super({ + type: StackItemType.Array, + isNull: false, + }); + + this.array = array; + } + + public get count() { + return this.array.length; + } + + public getBoolean() { + return true; + } +} diff --git a/packages/neo-one-node-core/src/StackItems/BooleanStackItem.ts b/packages/neo-one-node-core/src/StackItems/BooleanStackItem.ts new file mode 100644 index 0000000000..f97922bb96 --- /dev/null +++ b/packages/neo-one-node-core/src/StackItems/BooleanStackItem.ts @@ -0,0 +1,36 @@ +import { BN } from 'bn.js'; +import { PrimitiveStackItemBase } from './PrimitiveStackItemBase'; +import { isBooleanStackItem, StackItem } from './StackItems'; +import { StackItemType } from './StackItemType'; + +export class BooleanStackItem extends PrimitiveStackItemBase { + private static readonly TRUE = Buffer.from([0x01]); + private static readonly FALSE = Buffer.from([0x00]); + private readonly value: boolean; + + public constructor(value: boolean) { + super({ + type: StackItemType.Boolean, + isNull: false, + memory: value ? BooleanStackItem.TRUE : BooleanStackItem.FALSE, + }); + + this.value = value; + } + + public equals(other: StackItem) { + if (isBooleanStackItem(other)) { + return this.value === other.getBoolean(); + } + + return false; + } + + public getBoolean() { + return this.value; + } + + public getInteger() { + return this.value ? new BN(1) : new BN(0); + } +} diff --git a/packages/neo-one-node-core/src/StackItems/BufferStackItem.ts b/packages/neo-one-node-core/src/StackItems/BufferStackItem.ts new file mode 100644 index 0000000000..01d18b8eeb --- /dev/null +++ b/packages/neo-one-node-core/src/StackItems/BufferStackItem.ts @@ -0,0 +1,24 @@ +import { StackItemBase } from './StackItemBase'; +import { StackItemType } from './StackItemType'; + +export class BufferStackItem extends StackItemBase { + public readonly innerBuffer: Buffer; + public readonly size: number; + + public constructor(data: Buffer) { + super({ + isNull: false, + type: StackItemType.Buffer, + }); + this.innerBuffer = data; + this.size = data.length; + } + + public getBoolean() { + return true; + } + + public getBuffer() { + return this.innerBuffer; + } +} diff --git a/packages/neo-one-node-core/src/StackItems/ByteStringStackItem.ts b/packages/neo-one-node-core/src/StackItems/ByteStringStackItem.ts new file mode 100644 index 0000000000..4379327737 --- /dev/null +++ b/packages/neo-one-node-core/src/StackItems/ByteStringStackItem.ts @@ -0,0 +1,43 @@ +import { BN } from 'bn.js'; +import { InvalidIntegerStackItemError } from '../errors'; +import { IntegerStackItem } from './IntegerStackItem'; +import { PrimitiveStackItemBase } from './PrimitiveStackItemBase'; +import { isByteStringStackItem, StackItem } from './StackItems'; +import { StackItemType } from './StackItemType'; + +export class ByteStringStackItem extends PrimitiveStackItemBase { + public static readonly empty = new ByteStringStackItem(Buffer.from([])); + + public constructor(value: Buffer) { + super({ + type: StackItemType.ByteString, + memory: value, + isNull: false, + }); + } + + public equals(other: StackItem): boolean { + if (isByteStringStackItem(other)) { + return this.memory.equals(other.getBuffer()); + } + + return false; + } + + public getBoolean() { + if (this.size > IntegerStackItem.maxSize) { + return true; + } + + // TODO: verify, their implementation of this is awful to figure out + return this.memory.some((value) => value !== 0); + } + + public getInteger() { + if (this.size > IntegerStackItem.maxSize) { + throw new InvalidIntegerStackItemError(this.size); + } + + return new BN(this.getBuffer(), 'le'); + } +} diff --git a/packages/neo-one-node-core/src/StackItems/IntegerStackItem.ts b/packages/neo-one-node-core/src/StackItems/IntegerStackItem.ts new file mode 100644 index 0000000000..e84701cb0f --- /dev/null +++ b/packages/neo-one-node-core/src/StackItems/IntegerStackItem.ts @@ -0,0 +1,44 @@ +import { BN } from 'bn.js'; +import { InvalidIntegerStackItemError } from '../errors'; +import { PrimitiveStackItemBase } from './PrimitiveStackItemBase'; +import { isIntegerStackItem, StackItem } from './StackItems'; +import { StackItemType } from './StackItemType'; + +export class IntegerStackItem extends PrimitiveStackItemBase { + public static readonly Zero = new IntegerStackItem(new BN(0)); + public static readonly maxSize = 32; + + private readonly value: BN; + + public constructor(value: BN) { + const size = value.eqn(0) ? 0 : value.byteLength(); + super({ + memory: value.eqn(0) ? Buffer.from([]) : value.toBuffer('le'), + type: StackItemType.Integer, + isNull: false, + size, + }); + + if (size > IntegerStackItem.maxSize) { + throw new InvalidIntegerStackItemError(size); + } + + this.value = value; + } + + public equals(other: StackItem) { + if (isIntegerStackItem(other)) { + return this.value.eq(other.getInteger()); + } + + return false; + } + + public getBoolean() { + return !this.value.eqn(0); + } + + public getInteger() { + return this.value; + } +} diff --git a/packages/neo-one-node-core/src/StackItems/InteropInterface.ts b/packages/neo-one-node-core/src/StackItems/InteropInterface.ts new file mode 100644 index 0000000000..efd33e4f9a --- /dev/null +++ b/packages/neo-one-node-core/src/StackItems/InteropInterface.ts @@ -0,0 +1,33 @@ +import { InvalidInteropInterfaceValueError, InvalidStackItemCastError } from '../errors'; +import { StackItemBase } from './StackItemBase'; +import { StackItemType } from './StackItemType'; + +// tslint:disable: no-any +export class InteropInterface extends StackItemBase { + private readonly value: any; + + public constructor(value?: any) { + super({ + type: StackItemType.InteropInterface, + isNull: false, + }); + + if (value === undefined) { + throw new InvalidInteropInterfaceValueError(); + } + + this.value = value; + } + + public getBoolean() { + return true; + } + + public getInterface(isFunc: (value: any) => value is T): T { + if (isFunc(this.value)) { + return this.value; + } + + throw new InvalidStackItemCastError(); + } +} diff --git a/packages/neo-one-node-core/src/StackItems/MapStackItem.ts b/packages/neo-one-node-core/src/StackItems/MapStackItem.ts new file mode 100644 index 0000000000..9ef8082e1c --- /dev/null +++ b/packages/neo-one-node-core/src/StackItems/MapStackItem.ts @@ -0,0 +1,38 @@ +import { StackItemBase } from './StackItemBase'; +import { PrimitiveStackItem, StackItem } from './StackItems'; +import { StackItemType } from './StackItemType'; + +export class MapStackItem extends StackItemBase { + public static readonly maxKeySize = 64; + + public readonly dictionary: Map; + + public constructor(dictionary: Map) { + super({ + type: StackItemType.Map, + isNull: false, + }); + + this.dictionary = dictionary; + } + + public get count() { + return this.dictionary.size; + } + + public get subItemCount() { + return this.count * 2; + } + + public containsKey(key: PrimitiveStackItem) { + return this.dictionary.has(key); + } + + public tryGetValue(key: PrimitiveStackItem) { + return this.dictionary.get(key); + } + + public getBoolean() { + return true; + } +} diff --git a/packages/neo-one-node-core/src/StackItems/NullStackItem.ts b/packages/neo-one-node-core/src/StackItems/NullStackItem.ts new file mode 100644 index 0000000000..5a5a66d459 --- /dev/null +++ b/packages/neo-one-node-core/src/StackItems/NullStackItem.ts @@ -0,0 +1,37 @@ +import { InvalidStackItemCastError } from '../errors'; +import { StackItemBase } from './StackItemBase'; +import { StackItem } from './StackItems'; +import { isStackItemType, StackItemType } from './StackItemType'; + +export class NullStackItem extends StackItemBase { + public constructor() { + super({ + type: StackItemType.Any, + isNull: true, + }); + } + + public convertTo(type: StackItemType) { + if (type === StackItemType.Any || !isStackItemType(type)) { + throw new InvalidStackItemCastError(); + } + + return this; + } + + public equals(other: StackItem) { + return other.isNull; + } + + public getBoolean() { + return false; + } + + public getInterface(): T | undefined { + return undefined; + } + + public getString() { + return ''; + } +} diff --git a/packages/neo-one-node-core/src/StackItems/PointerStackItem.ts b/packages/neo-one-node-core/src/StackItems/PointerStackItem.ts new file mode 100644 index 0000000000..b3d5748d09 --- /dev/null +++ b/packages/neo-one-node-core/src/StackItems/PointerStackItem.ts @@ -0,0 +1,41 @@ +import { StackItemBase } from './StackItemBase'; +import { isPointerStackItem, StackItem } from './StackItems'; +import { StackItemType } from './StackItemType'; + +// TODO: can decide if we need to implement this later; +export type PointerStackItemScript = Buffer; + +export interface PointerStackItemAdd { + readonly script: PointerStackItemScript; + readonly position: number; +} + +export class PointerStackItem extends StackItemBase { + public readonly script: PointerStackItemScript; + public readonly position: number; + + public constructor({ script, position }: PointerStackItemAdd) { + super({ + type: StackItemType.Pointer, + isNull: false, + }); + this.script = script; + this.position = position; + } + + public equals(other: StackItem) { + if (other === this) { + return true; + } + + if (isPointerStackItem(other)) { + return this.position === other.position && this.script.equals(other.script); + } + + return false; + } + + public getBoolean() { + return true; + } +} diff --git a/packages/neo-one-node-core/src/StackItems/PrimitiveStackItemBase.ts b/packages/neo-one-node-core/src/StackItems/PrimitiveStackItemBase.ts new file mode 100644 index 0000000000..2280d8efde --- /dev/null +++ b/packages/neo-one-node-core/src/StackItems/PrimitiveStackItemBase.ts @@ -0,0 +1,35 @@ +import { BN } from 'bn.js'; +import { InvalidStackItemCastError } from '../errors'; +import { StackItemAdd, StackItemBase } from './StackItemBase'; + +const MIN_SAFE_BN = new BN(Number.MIN_SAFE_INTEGER); +const MAX_SAFE_BN = new BN(Number.MAX_SAFE_INTEGER); + +export interface PrimitiveStackItemAdd extends StackItemAdd { + readonly memory: Buffer; + readonly size?: number; +} + +export class PrimitiveStackItemBase extends StackItemBase { + public readonly size: number; + protected readonly memory: Buffer; + + public constructor(options: PrimitiveStackItemAdd) { + super(options); + this.memory = options.memory; + this.size = options.size ? options.size : this.memory.length; + } + + public getBuffer(): Buffer { + return this.memory; + } + + public toInt32(): number { + const int = this.getInteger(); + if (int.lt(MIN_SAFE_BN) || int.gt(MAX_SAFE_BN)) { + throw new InvalidStackItemCastError(); + } + + return int.toNumber(); + } +} diff --git a/packages/neo-one-node-core/src/StackItems/StackItemBase.ts b/packages/neo-one-node-core/src/StackItems/StackItemBase.ts new file mode 100644 index 0000000000..6fc884be4e --- /dev/null +++ b/packages/neo-one-node-core/src/StackItems/StackItemBase.ts @@ -0,0 +1,38 @@ +import { BN } from 'bn.js'; +import { StackItemType } from './StackItemType'; + +export interface StackItemAdd { + readonly isNull: boolean; + readonly type: StackItemType; +} + +export abstract class StackItemBase { + public readonly isNull: boolean; + public readonly type: StackItemType; + + public constructor({ isNull, type }: StackItemAdd) { + this.isNull = isNull; + this.type = type; + } + + public getBoolean(): boolean { + throw new Error('method not implemented'); + } + + public getInteger(): BN { + throw new Error('method not implemented'); + } + + // tslint:disable-next-line: no-any + public getInterface(_isFunc?: (value: any) => value is T): T | undefined { + throw new Error('method not implemented'); + } + + public getBuffer(): Buffer { + throw new Error('method not implemented'); + } + + public getString(): string { + return this.getBuffer().toString('utf-8'); + } +} diff --git a/packages/neo-one-node-core/src/StackItems/StackItemType.ts b/packages/neo-one-node-core/src/StackItems/StackItemType.ts new file mode 100644 index 0000000000..766b569e9c --- /dev/null +++ b/packages/neo-one-node-core/src/StackItems/StackItemType.ts @@ -0,0 +1,25 @@ +import { InvalidFormatError } from '@neo-one/client-common'; + +export enum StackItemType { + Any = 0x00, + Pointer = 0x10, + Boolean = 0x20, + Integer = 0x21, + ByteString = 0x28, + Buffer = 0x30, + Array = 0x40, + Struct = 0x41, + Map = 0x48, + InteropInterface = 0x60, +} + +// tslint:disable-next-line: strict-type-predicates +export const isStackItemType = (value: number): value is StackItemType => StackItemType[value] !== undefined; + +export const assertStackItemType = (value: number): StackItemType => { + if (isStackItemType(value)) { + return value; + } + + throw new InvalidFormatError(`expected StackItemType, found: ${value}`); +}; diff --git a/packages/neo-one-node-core/src/StackItems/StackItems.ts b/packages/neo-one-node-core/src/StackItems/StackItems.ts new file mode 100644 index 0000000000..982e81e1aa --- /dev/null +++ b/packages/neo-one-node-core/src/StackItems/StackItems.ts @@ -0,0 +1,191 @@ +import { InvalidFormatError, JSONHelper, PrimitiveStackItemJSON, StackItemJSON } from '@neo-one/client-common'; +import { InvalidPrimitiveStackItemError, InvalidStackItemError, InvalidStackItemTypeError } from '../errors'; +import { ArrayStackItem } from './ArrayStackItem'; +import { BooleanStackItem } from './BooleanStackItem'; +import { BufferStackItem } from './BufferStackItem'; +import { ByteStringStackItem } from './ByteStringStackItem'; +import { IntegerStackItem } from './IntegerStackItem'; +import { InteropInterface } from './InteropInterface'; +import { MapStackItem } from './MapStackItem'; +import { NullStackItem } from './NullStackItem'; +import { PointerStackItem } from './PointerStackItem'; +import { isStackItemType, StackItemType } from './StackItemType'; +import { StructStackItem } from './StructStackItem'; + +export type PrimitiveStackItem = BooleanStackItem | IntegerStackItem | ByteStringStackItem; + +export type StackItem = + | ArrayStackItem + | BufferStackItem + | InteropInterface + | MapStackItem + | NullStackItem + | PointerStackItem + | StructStackItem + | PrimitiveStackItem; + +// tslint:disable no-any +export const isStackItem = (item: any): item is StackItem => { + if (item !== undefined && item.type !== undefined && isStackItemType(item.type)) { + // tslint:disable-next-line strict-type-predicates + return StackItemType[item.type] !== undefined; + } + + return false; +}; + +export const assertStackItem = (item: any): StackItem => { + if (isStackItem(item)) { + return item; + } + + throw new InvalidStackItemError(); +}; + +export const getIsStackItemType = (type: StackItemType) => (item: any): item is T => { + if (isStackItem(item)) { + return item.type === type; + } + + return false; +}; + +export const getAssertStackItemType = (isFunc: (item: any) => item is T, type: StackItemType) => (item: any) => { + if (isFunc(item)) { + return item; + } + + throw new InvalidStackItemTypeError(StackItemType[type], item.type); +}; + +export const isNullStackItem: (item: any) => item is NullStackItem = getIsStackItemType(StackItemType.Any); +export const isPointerStackItem: (item: any) => item is PointerStackItem = getIsStackItemType(StackItemType.Pointer); +export const isBooleanStackItem: (item: any) => item is BooleanStackItem = getIsStackItemType(StackItemType.Boolean); +export const isIntegerStackItem: (item: any) => item is IntegerStackItem = getIsStackItemType(StackItemType.Integer); +export const isByteStringStackItem: (item: any) => item is ByteStringStackItem = getIsStackItemType( + StackItemType.ByteString, +); +export const isBufferStackItem: (item: any) => item is BufferStackItem = getIsStackItemType(StackItemType.Buffer); +export const isArrayStackItem: (item: any) => item is ArrayStackItem = getIsStackItemType(StackItemType.Array); +export const isStructStackItem: (item: any) => item is StructStackItem = getIsStackItemType(StackItemType.Struct); +export const isMapStackItem: (item: any) => item is MapStackItem = getIsStackItemType(StackItemType.Map); +export const isInteropInterface: (item: any) => item is InteropInterface = getIsStackItemType( + StackItemType.InteropInterface, +); +export const isArrayLikeStackItem = (item: any): item is ArrayStackItem | StructStackItem => + isArrayStackItem(item) || isStructStackItem(item); +export const isPrimitiveStackItem = (item: any): item is PrimitiveStackItem => + isBooleanStackItem(item) || isByteStringStackItem(item) || isIntegerStackItem(item); + +export const assertAnyStackItem: (item: any) => NullStackItem = getAssertStackItemType( + isNullStackItem, + StackItemType.Any, +); +export const assertPointerStackItem: (item: any) => PointerStackItem = getAssertStackItemType( + isPointerStackItem, + StackItemType.Pointer, +); +export const assertBooleanStackItem: (item: any) => BooleanStackItem = getAssertStackItemType( + isBooleanStackItem, + StackItemType.Boolean, +); +export const assertIntegerStackItem: (item: any) => IntegerStackItem = getAssertStackItemType( + isIntegerStackItem, + StackItemType.Integer, +); +export const assertByteStringStackItem: (item: any) => ByteStringStackItem = getAssertStackItemType( + isByteStringStackItem, + StackItemType.ByteString, +); +export const assertBufferStackItem: (item: any) => BufferStackItem = getAssertStackItemType( + isBufferStackItem, + StackItemType.Buffer, +); +export const assertArrayStackItem: (item: any) => ArrayStackItem = getAssertStackItemType( + isArrayStackItem, + StackItemType.Array, +); +export const assertStructStackItem: (item: any) => StructStackItem = getAssertStackItemType( + isStructStackItem, + StackItemType.Struct, +); +export const assertArrayLikeStackItem = (item: any) => { + if (isArrayLikeStackItem(item)) { + return item; + } + + throw new InvalidStackItemTypeError('ArrayLikeStackItem', item.type); +}; +export const assertMapStackItem: (item: any) => MapStackItem = getAssertStackItemType( + isMapStackItem, + StackItemType.Map, +); +export const assertInteropInterfaceStackItem: (item: any) => InteropInterface = getAssertStackItemType( + isInteropInterface, + StackItemType.InteropInterface, +); +export const assertPrimitiveStackItem = (item: any): PrimitiveStackItem => { + if (isPrimitiveStackItem(item)) { + return item; + } + + throw new InvalidPrimitiveStackItemError(); +}; + +export const stackItemToJSON = (item: StackItem, context?: Set): StackItemJSON => { + switch (item.type) { + case StackItemType.Array: + const array = assertArrayStackItem(item); + const arrayContext = context ?? new Set(); + if (arrayContext.has(array)) { + throw new InvalidFormatError(); + } + arrayContext.add(array); + + return { type: 'Array', value: array.array.map((subItem) => stackItemToJSON(subItem, arrayContext)) }; + + case StackItemType.Boolean: + const booleanItem = assertBooleanStackItem(item); + + return { type: 'Boolean', value: booleanItem.getBoolean() }; + + case StackItemType.Buffer: + const buffer = assertBufferStackItem(item); + + return { type: 'Buffer', value: JSONHelper.writeBase64Buffer(buffer.getBuffer()) }; + + case StackItemType.ByteString: + const byteString = assertByteStringStackItem(item); + + return { type: 'ByteString', value: byteString.getBuffer().toString('base64') }; + + case StackItemType.Integer: + const integer = assertIntegerStackItem(item); + + return { type: 'Integer', value: integer.getInteger().toString() }; + + case StackItemType.Map: + const map = assertMapStackItem(item); + const mapContext = context ?? new Set(); + if (mapContext.has(map)) { + throw new InvalidFormatError(); + } + mapContext.add(map); + + return { + type: 'Map', + value: Array.from(map.dictionary.entries()).map(([key, value]) => ({ + key: stackItemToJSON(key, mapContext) as PrimitiveStackItemJSON, + value: stackItemToJSON(value, mapContext), + })), + }; + + case StackItemType.Pointer: + const pointer = assertPointerStackItem(item); + + return { type: 'Pointer', value: pointer.position }; + + default: + return { type: 'Any', value: undefined }; + } +}; diff --git a/packages/neo-one-node-core/src/StackItems/StructStackItem.ts b/packages/neo-one-node-core/src/StackItems/StructStackItem.ts new file mode 100644 index 0000000000..68cc1c55f9 --- /dev/null +++ b/packages/neo-one-node-core/src/StackItems/StructStackItem.ts @@ -0,0 +1,20 @@ +import { StackItemBase } from './StackItemBase'; +import { StackItem } from './StackItems'; +import { StackItemType } from './StackItemType'; + +export class StructStackItem extends StackItemBase { + public readonly array: readonly StackItem[]; + + public constructor(array: readonly StackItem[]) { + super({ + type: StackItemType.Struct, + isNull: false, + }); + + this.array = array; + } + + public getBoolean() { + return true; + } +} diff --git a/packages/neo-one-node-core/src/StackItems/index.ts b/packages/neo-one-node-core/src/StackItems/index.ts new file mode 100644 index 0000000000..71c6ed6755 --- /dev/null +++ b/packages/neo-one-node-core/src/StackItems/index.ts @@ -0,0 +1,14 @@ +export * from './StackItemType'; +export * from './ArrayStackItem'; +export * from './BooleanStackItem'; +export * from './BufferStackItem'; +export * from './ByteStringStackItem'; +export * from './IntegerStackItem'; +export * from './InteropInterface'; +export * from './MapStackItem'; +export * from './NullStackItem'; +export * from './PointerStackItem'; +export * from './StackItems'; +export * from './StackItems'; +export * from './StackItemType'; +export * from './StructStackItem'; diff --git a/packages/neo-one-node-core/src/Storage.ts b/packages/neo-one-node-core/src/Storage.ts index 4547444c5c..2cefae8ca9 100644 --- a/packages/neo-one-node-core/src/Storage.ts +++ b/packages/neo-one-node-core/src/Storage.ts @@ -1,78 +1,152 @@ -import { UInt256 } from '@neo-one/client-common'; -import { Account, AccountKey } from './Account'; -import { AccountUnclaimed, AccountUnclaimedKey } from './AccountUnclaimed'; -import { AccountUnspent, AccountUnspentKey } from './AccountUnspent'; -import { Action } from './action'; -import { Asset } from './Asset'; -import { Block, BlockKey } from './Block'; -import { Blockchain, ReadStorage } from './Blockchain'; -import { BlockData } from './BlockData'; -import { Contract, ContractKey } from './Contract'; -import { Header, HeaderKey } from './Header'; -import { InvocationData } from './InvocationData'; -import { StorageItem, StorageItemKey } from './StorageItem'; -import { Output, Transaction } from './transaction'; -import { TransactionData } from './TransactionData'; -import { Validator, ValidatorKey } from './Validator'; -import { ValidatorsCount } from './ValidatorsCount'; - -interface OutputValue { - readonly hash: UInt256; - readonly index: number; - readonly output: Output; +import { ApplicationLogJSON } from '@neo-one/client-common'; +import { Observable } from 'rxjs'; +import { ApplicationLog } from './ApplicationLog'; +import { ConsensusContext } from './consensus'; +import { ContractIDState } from './ContractIDState'; +import { ContractKey, ContractState } from './ContractState'; +import { HashIndexState } from './HashIndexState'; +import { HeaderHashList, HeaderKey } from './HeaderHashList'; +import { Nep5Balance } from './Nep5Balance'; +import { Nep5BalanceKey } from './Nep5BalanceKey'; +import { Nep5Transfer } from './Nep5Transfer'; +import { Nep5TransferKey } from './Nep5TransferKey'; +import { StorageItem } from './StorageItem'; +import { StorageKey } from './StorageKey'; +import { TransactionKey, TransactionState } from './transaction'; +import { BlockKey, TrimmedBlock } from './TrimmedBlock'; + +// TODO: along with other storage definitions in node-vm `batch` definitions need to move to `node-core`. +type AbstractBatch = any; + +export interface StreamOptions { + readonly gte?: Buffer; + readonly lte?: Buffer; +} + +export interface StorageReturn { + readonly key: Key; + readonly value: Value; +} + +export interface ReadMetadataStorage { + readonly get: () => Promise; + readonly tryGet: () => Promise; +} + +export interface ReadStorage { + readonly get: (key: Key) => Promise; + readonly tryGet: (key: Key) => Promise; +} + +export interface ReadAllStorage extends ReadStorage { + readonly all$: Observable; +} + +export interface ReadFindStorage extends ReadStorage { + readonly find$: (lookup: Buffer, secondaryLookup?: Buffer) => Observable>; +} + +export interface ReadAllFindStorage extends ReadAllStorage, ReadFindStorage {} + +export interface AddMetadataStorage { + readonly add: (add: Value) => Promise; +} + +export interface AddStorage { + readonly add: (key: Key, value: Value) => Promise; +} + +export interface AddUpdateMetadataStorage extends AddMetadataStorage { + readonly update: (value: Value, update: Update) => Promise; +} + +export interface AddUpdateStorage extends AddStorage { + readonly update: (key: Key, update: Update) => Promise; +} + +export interface DeleteMetadataStorage { + readonly delete: () => Promise; +} + +export interface DeleteStorage { + readonly delete: (key: Key) => Promise; +} + +export interface AddUpdateDeleteMetadataStorage + extends AddUpdateMetadataStorage, + DeleteMetadataStorage {} +export interface AddDeleteStorage extends AddStorage, DeleteStorage {} +export interface AddUpdateDeleteStorage + extends AddUpdateStorage, + DeleteStorage {} + +/* this block of types were previously used in our storage; keeping them around until we know if we'll need them again */ +interface ReadAddStorage extends ReadStorage, AddStorage {} +interface ReadAddDeleteStorage + extends ReadStorage, + AddStorage, + DeleteStorage {} +interface ReadAddUpdateMetadataStorage + extends ReadMetadataStorage, + AddUpdateMetadataStorage {} +interface ReadAddUpdateStorage + extends ReadStorage, + AddUpdateStorage {} +interface ReadAllAddStorage extends ReadAllStorage, AddStorage {} +interface ReadAllAddUpdateDeleteStorage + extends ReadAllStorage, + AddUpdateDeleteStorage {} + +export interface LatestReadStorage extends ReadStorage { + readonly tryGetLatest: () => Promise; } export type AddChange = - | { readonly type: 'account'; readonly value: Account } - | { readonly type: 'accountUnclaimed'; readonly value: AccountUnclaimed } - | { readonly type: 'accountUnspent'; readonly value: AccountUnspent } - | { readonly type: 'action'; readonly value: Action } - | { readonly type: 'asset'; readonly value: Asset } - | { readonly type: 'block'; readonly value: Block } - | { readonly type: 'header'; readonly value: Header } - | { readonly type: 'transaction'; readonly value: Transaction } - | { readonly type: 'contract'; readonly value: Contract } - | { readonly type: 'storageItem'; readonly value: StorageItem } - | { readonly type: 'validator'; readonly value: Validator } - | { readonly type: 'blockData'; readonly value: BlockData } - | { readonly type: 'transactionData'; readonly value: TransactionData } - | { readonly type: 'invocationData'; readonly value: InvocationData } - | { readonly type: 'output'; readonly value: OutputValue } - | { readonly type: 'validatorsCount'; readonly value: ValidatorsCount }; + | { readonly type: 'block'; readonly key: BlockKey; readonly value: TrimmedBlock } + | { readonly type: 'transaction'; readonly key: TransactionKey; readonly value: TransactionState } + | { readonly type: 'contract'; readonly key: ContractKey; readonly value: ContractState } + | { readonly type: 'storage'; readonly key: StorageKey; readonly value: StorageItem } + | { readonly type: 'headerHashList'; readonly key: HeaderKey; readonly value: HeaderHashList } + | { readonly type: 'blockHashIndex'; readonly value: HashIndexState } + | { readonly type: 'headerHashIndex'; readonly value: HashIndexState } + | { readonly type: 'contractID'; readonly value: ContractIDState } + | { readonly type: 'nep5Balance'; readonly key: Nep5BalanceKey; readonly value: Nep5Balance } + | { readonly type: 'nep5TransferSent'; readonly key: Nep5TransferKey; readonly value: Nep5Transfer } + | { readonly type: 'nep5TransferReceived'; readonly key: Nep5TransferKey; readonly value: Nep5Transfer } + | { readonly type: 'applicationLog'; readonly key: TransactionKey; readonly value: ApplicationLog }; + export type DeleteChange = - | { readonly type: 'account'; readonly key: AccountKey } - | { readonly type: 'accountUnclaimed'; readonly key: AccountUnclaimedKey } - | { readonly type: 'accountUnspent'; readonly key: AccountUnspentKey } | { readonly type: 'contract'; readonly key: ContractKey } - | { readonly type: 'storageItem'; readonly key: StorageItemKey } - | { readonly type: 'validator'; readonly key: ValidatorKey }; + | { readonly type: 'storage'; readonly key: StorageKey } + | { readonly type: 'nep5Balance'; readonly key: Nep5BalanceKey }; + export type Change = | { readonly type: 'add'; readonly change: AddChange; readonly subType: 'add' | 'update' } | { readonly type: 'delete'; readonly change: DeleteChange }; + export type ChangeSet = readonly Change[]; -interface LatestReadStorage extends ReadStorage { - readonly tryGetLatest: () => Promise; +export interface BlockchainStorage { + readonly blocks: ReadStorage; + readonly nep5Balances: ReadAllFindStorage; + readonly nep5TransfersSent: ReadFindStorage; + readonly nep5TransfersReceived: ReadFindStorage; + readonly applicationLogs: ReadStorage; + // readonly consensusState: ReadMetadataStorage; + readonly transactions: ReadStorage; + readonly contracts: ReadStorage; + readonly storages: ReadFindStorage; + readonly headerHashList: ReadStorage; + readonly blockHashIndex: ReadMetadataStorage; + readonly headerHashIndex: ReadMetadataStorage; + readonly contractID: ReadMetadataStorage; } -export interface Storage { - readonly account: Blockchain['account']; - readonly accountUnclaimed: Blockchain['accountUnclaimed']; - readonly accountUnspent: Blockchain['accountUnspent']; - readonly action: Blockchain['action']; - readonly asset: Blockchain['asset']; - readonly block: LatestReadStorage; - readonly blockData: Blockchain['blockData']; - readonly header: LatestReadStorage; - readonly transaction: Blockchain['transaction']; - readonly transactionData: Blockchain['transactionData']; - readonly output: Blockchain['output']; - readonly contract: Blockchain['contract']; - readonly storageItem: Blockchain['storageItem']; - readonly validator: Blockchain['validator']; - readonly invocationData: Blockchain['invocationData']; - readonly validatorsCount: Blockchain['validatorsCount']; +export interface Storage extends BlockchainStorage { + readonly blocks: ReadAllStorage; readonly commit: (changeSet: ChangeSet) => Promise; + // tslint:disable-next-line: readonly-array + readonly commitBatch: (batch: AbstractBatch[]) => Promise; readonly close: () => Promise; readonly reset: () => Promise; } diff --git a/packages/neo-one-node-core/src/StorageFlags.ts b/packages/neo-one-node-core/src/StorageFlags.ts deleted file mode 100644 index a3d6038869..0000000000 --- a/packages/neo-one-node-core/src/StorageFlags.ts +++ /dev/null @@ -1,6 +0,0 @@ -export { - StorageFlagsModel as StorageFlags, - assertStorageFlags, - toJSONStorageFlags, - hasStorageFlag, -} from '@neo-one/client-common'; diff --git a/packages/neo-one-node-core/src/StorageItem.ts b/packages/neo-one-node-core/src/StorageItem.ts index 090c040a15..20b67a2a87 100644 --- a/packages/neo-one-node-core/src/StorageItem.ts +++ b/packages/neo-one-node-core/src/StorageItem.ts @@ -1,59 +1,35 @@ -import { - BinaryWriter, - common, - IOHelper, - JSONHelper, - StorageItemJSON, - toJSONStorageFlags, - UInt160, -} from '@neo-one/client-common'; -import { Equals, Equatable } from './Equatable'; -import { - createSerializeWire, - DeserializeWireBaseOptions, - DeserializeWireOptions, - SerializableJSON, - SerializableWire, - SerializeJSONContext, - SerializeWire, -} from './Serializable'; -import { StorageFlags } from './StorageFlags'; -import { BinaryReader, utils } from './utils'; - -export interface StorageItemAdd { - readonly hash: UInt160; - readonly key: Buffer; - readonly value: Buffer; - readonly flags: StorageFlags; +import { BinaryWriter, createSerializeWire, InvalidFormatError, JSONHelper } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import { DeserializeWireBaseOptions, DeserializeWireOptions, SerializableWire } from './Serializable'; +import { StorageKey } from './StorageKey'; +import { BinaryReader } from './utils'; + +// TODO: Cache can also be 2 other things, we should definitely revisit this when we have more context +export interface StorageItemCacheAdd { + readonly cache: BN; + readonly isConstant: boolean; } -export interface StorageItemUpdate { +export interface StorageItemValueAdd { readonly value: Buffer; - readonly flags: StorageFlags; + readonly isConstant: boolean; } -export interface StorageItemsKey { - readonly hash?: UInt160; - readonly prefix?: Buffer; -} +// tslint:disable-next-line: no-any +const isStorageItemCacheAdd = (value: any): value is StorageItemCacheAdd => + value?.cache !== undefined && BN.isBN(value.cache); -export interface StorageItemKey { - readonly hash: UInt160; - readonly key: Buffer; -} +type StorageItemAdd = StorageItemCacheAdd | StorageItemValueAdd; -export class StorageItem implements SerializableWire, Equatable, SerializableJSON { - public static deserializeWireBase({ reader }: DeserializeWireBaseOptions): StorageItem { - const hash = reader.readUInt160(); - const key = reader.readVarBytesLE(); +export class StorageItem implements SerializableWire { + public static deserializeWireBase(options: DeserializeWireBaseOptions): StorageItem { + const { reader } = options; const value = reader.readVarBytesLE(); - const flags = reader.readUInt8(); + const isConstant = reader.readBoolean(); return new this({ - hash, - key, value, - flags, + isConstant, }); } @@ -64,62 +40,70 @@ export class StorageItem implements SerializableWire, Equatable, Se }); } - public readonly hash: UInt160; - public readonly key: Buffer; - public readonly value: Buffer; - public readonly flags: StorageFlags; - public readonly equals: Equals = utils.equals( - StorageItem, - this, - (other) => - common.uInt160Equal(this.hash, other.hash) && - this.key.equals(other.key) && - this.value.equals(other.value) && - this.flags === other.flags, - ); - public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - private readonly sizeInternal: () => number; - - public constructor({ hash, key, value, flags }: StorageItemAdd) { - this.hash = hash; - this.key = key; - this.value = value; - this.flags = flags; - this.sizeInternal = utils.lazy( - () => - IOHelper.sizeOfUInt160 + - IOHelper.sizeOfVarBytesLE(this.key) + - IOHelper.sizeOfVarBytesLE(this.value) + - IOHelper.sizeOfUInt8, - ); + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + public readonly isConstant: boolean; + + private mutableValue: Buffer | undefined; + private mutableCache: BN | undefined; + + public constructor(options: StorageItemAdd) { + this.isConstant = options.isConstant; + this.mutableValue = isStorageItemCacheAdd(options) ? undefined : options.value; + this.mutableCache = isStorageItemCacheAdd(options) ? options.cache : undefined; } - public get size(): number { - return this.sizeInternal(); + public get value(): Buffer { + if (this.mutableValue !== undefined) { + return this.mutableValue; + } + + if (this.mutableCache === undefined) { + throw new InvalidFormatError(); + } + + this.mutableValue = this.mutableCache.toBuffer(); + this.mutableCache = undefined; + + return this.mutableValue; } - public update({ value, flags }: StorageItemUpdate): StorageItem { - return new StorageItem({ - hash: this.hash, - key: this.key, - value, - flags, - }); + public set value(value: Buffer) { + this.mutableValue = value; + this.mutableCache = undefined; + } + + public set(integer: BN) { + this.mutableCache = integer; + this.mutableValue = undefined; + } + + public add(integer: BN) { + if (BN.isBN(this.mutableCache)) { + this.set(this.mutableCache.add(integer)); + } else if (this.mutableValue !== undefined) { + this.set(new BN(this.mutableValue).add(integer)); + } else { + throw new InvalidFormatError(); + } } - public serializeWireBase(writer: BinaryWriter): void { - writer.writeUInt160(this.hash); - writer.writeVarBytesLE(this.key); + public serializeWireBase(writer: BinaryWriter) { writer.writeVarBytesLE(this.value); - writer.writeUInt8(this.flags); + writer.writeBoolean(this.isConstant); + } + + public clone() { + return new StorageItem({ + value: this.value, + isConstant: this.isConstant, + }); } - public serializeJSON(_context: SerializeJSONContext): StorageItemJSON { + public serializeJSON(key: StorageKey) { return { - hash: JSONHelper.writeUInt160(this.hash), - key: JSONHelper.writeBuffer(this.key), + key: JSONHelper.writeBuffer(key.serializeWire()), value: JSONHelper.writeBuffer(this.value), - flags: toJSONStorageFlags(this.flags), + isConstant: this.isConstant, }; } } diff --git a/packages/neo-one-node-core/src/StorageKey.ts b/packages/neo-one-node-core/src/StorageKey.ts new file mode 100644 index 0000000000..60ae858c26 --- /dev/null +++ b/packages/neo-one-node-core/src/StorageKey.ts @@ -0,0 +1,63 @@ +import { BinaryWriter, createSerializeWire, IOHelper } from '@neo-one/client-common'; +import { Equals, Equatable } from './Equatable'; +import { DeserializeWireBaseOptions, DeserializeWireOptions, SerializableWire } from './Serializable'; +import { BinaryReader, utils } from './utils'; + +export interface StorageKeyAdd { + readonly id: number; + readonly key: Buffer; +} + +export class StorageKey implements Equatable, SerializableWire { + public static deserializeWireBase(options: DeserializeWireBaseOptions): StorageKey { + const { reader } = options; + const id = reader.readInt32LE(); + const key = reader.readBytes(reader.remaining); + + return new this({ + id, + key, + }); + } + + public static deserializeWire(options: DeserializeWireOptions): StorageKey { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } + + public static createSearchPrefix(id: number, prefix: Buffer) { + const writer = new BinaryWriter(); + writer.writeInt32LE(id); + const buffer = writer.toBuffer(); + + return Buffer.concat([buffer, prefix]); + } + + public readonly id: number; + public readonly key: Buffer; + + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + public readonly equals: Equals = utils.equals( + StorageKey, + this, + (other) => this.id === other.id && this.key.equals(other.key), + ); + private readonly sizeInternal: () => number; + + public constructor({ id, key }: StorageKeyAdd) { + this.id = id; + this.key = key; + this.sizeInternal = utils.lazy(() => IOHelper.sizeOfUInt32LE + this.key.length); + } + + public get size() { + return this.sizeInternal(); + } + + public serializeWireBase(writer: BinaryWriter) { + writer.writeInt32LE(this.id); + writer.writeBytes(this.key); + } +} diff --git a/packages/neo-one-node-core/src/TransactionData.ts b/packages/neo-one-node-core/src/TransactionData.ts index 62bd74fbc0..ccb18d6f61 100644 --- a/packages/neo-one-node-core/src/TransactionData.ts +++ b/packages/neo-one-node-core/src/TransactionData.ts @@ -30,7 +30,7 @@ export interface TransactionDataKey { readonly hash: UInt256; } -export class TransactionData extends BaseState implements SerializableWire { +export class TransactionData extends BaseState implements SerializableWire { public static deserializeWireBase({ reader }: DeserializeWireBaseOptions): TransactionData { const version = reader.readUInt8(); const hash = reader.readUInt256(); diff --git a/packages/neo-one-node-core/src/TransactionVerificationContext.ts b/packages/neo-one-node-core/src/TransactionVerificationContext.ts new file mode 100644 index 0000000000..b913ec208f --- /dev/null +++ b/packages/neo-one-node-core/src/TransactionVerificationContext.ts @@ -0,0 +1,60 @@ +import { common, UInt160, UInt160Hex } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import { NativeContractStorageContext } from './Native'; +import { Transaction } from './transaction'; + +const assertSender = (sender: UInt160 | undefined) => { + if (sender === undefined) { + // TODO: implement error; + throw new Error(`Sender must be defined`); + } + + return sender; +}; + +export interface TransactionVerificationContextAdd { + readonly getGasBalance: (storage: NativeContractStorageContext, sender: UInt160) => Promise; +} + +export class TransactionVerificationContext { + private readonly getGasBalance: (storage: NativeContractStorageContext, sender: UInt160) => Promise; + private readonly mutableSenderFee: Record; + + public constructor({ getGasBalance }: TransactionVerificationContextAdd) { + this.getGasBalance = getGasBalance; + this.mutableSenderFee = {}; + } + + public addTransaction(tx: Transaction) { + const key = common.uInt160ToHex(assertSender(tx.sender)); + const maybeFee = this.mutableSenderFee[key] ?? new BN(0); + this.mutableSenderFee[key] = maybeFee.add(tx.systemFee).add(tx.networkFee); + } + + public async checkTransaction(tx: Transaction, storage: NativeContractStorageContext): Promise { + const sender = assertSender(tx.sender); + const balance = await this.getGasBalance(storage, sender); + const maybeFee = this.mutableSenderFee[common.uInt160ToHex(sender)] ?? new BN(0); + const totalFee = maybeFee.add(tx.systemFee).add(tx.networkFee); + + return balance.gte(totalFee); + } + + public removeTransaction(tx: Transaction) { + const sender = assertSender(tx.sender); + const key = common.uInt160ToHex(sender); + const maybeFee = this.mutableSenderFee[key]; + if (maybeFee === undefined) { + // TODO: implement error; + throw new Error('transaction not present in verification context to remove'); + } + + const newFee = maybeFee.sub(tx.systemFee).sub(tx.networkFee); + if (newFee.eqn(0)) { + // tslint:disable-next-line: no-dynamic-delete + delete this.mutableSenderFee[key]; + } else { + this.mutableSenderFee[key] = newFee; + } + } +} diff --git a/packages/neo-one-node-core/src/TrimmedBlock.ts b/packages/neo-one-node-core/src/TrimmedBlock.ts new file mode 100644 index 0000000000..e5518dd75f --- /dev/null +++ b/packages/neo-one-node-core/src/TrimmedBlock.ts @@ -0,0 +1,177 @@ +import { + BinaryWriter, + createSerializeWire, + InvalidFormatError, + IOHelper, + JSONHelper, + SerializableWire, + TrimmedBlockJSON, + UInt256, +} from '@neo-one/client-common'; +import { Block } from './Block'; +import { BlockBase, BlockBaseAdd } from './BlockBase'; +import { ConsensusData } from './ConsensusData'; +import { Header } from './Header'; +import { DeserializeWireBaseOptions, DeserializeWireOptions, SerializeJSONContext } from './Serializable'; +import { ReadStorage } from './Storage'; +import { TransactionKey, TransactionState } from './transaction'; +import { BinaryReader, utils } from './utils'; + +export interface TrimmedBlockAdd extends BlockBaseAdd { + readonly consensusData?: ConsensusData; + readonly hashes: readonly UInt256[]; +} + +export interface BlockKey { + readonly hashOrIndex: UInt256 | number; +} + +export class TrimmedBlock extends BlockBase implements SerializableWire { + public static deserializeWireBase(options: DeserializeWireBaseOptions): TrimmedBlock { + const { reader } = options; + const { version, previousHash, merkleRoot, timestamp, index, nextConsensus, witness } = super.deserializeWireBase( + options, + ); + + const hashes = reader.readArray(() => reader.readUInt256(), Block.MaxContentsPerBlock); + const consensusData = hashes.length > 0 ? ConsensusData.deserializeWireBase(options) : undefined; + + return new TrimmedBlock({ + version, + previousHash, + merkleRoot, + timestamp, + index, + nextConsensus, + witness, + hashes, + consensusData, + messageMagic: options.context.messageMagic, + }); + } + + public static deserializeWire(options: DeserializeWireOptions) { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } + + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + public readonly serializeUnsigned = createSerializeWire(super.serializeUnsignedBase.bind(this)); + public readonly consensusData?: ConsensusData; + public readonly hashes: readonly UInt256[]; + public readonly isBlock: boolean; + protected readonly sizeExclusive = utils.lazy( + () => + IOHelper.sizeOfArray(this.hashes, () => IOHelper.sizeOfUInt256) + + (this.consensusData ? this.consensusData.size : 0), + ); + private readonly headerInternal = utils.lazy( + () => + new Header({ + version: this.version, + previousHash: this.previousHash, + merkleRoot: this.merkleRoot, + timestamp: this.timestamp, + index: this.index, + nextConsensus: this.nextConsensus, + witness: this.witness, + messageMagic: this.messageMagic, + }), + ); + + public constructor({ + version, + previousHash, + merkleRoot, + timestamp, + index, + nextConsensus, + witness, + hash, + consensusData, + hashes, + messageMagic, + }: TrimmedBlockAdd) { + super({ + version, + previousHash, + merkleRoot, + timestamp, + index, + nextConsensus, + witness, + hash, + messageMagic, + }); + this.consensusData = consensusData; + this.hashes = hashes; + this.isBlock = this.hashes.length > 0; + } + + public get header() { + return this.headerInternal(); + } + + public async getBlock(storage: ReadStorage) { + return new Block({ + version: this.version, + previousHash: this.previousHash, + merkleRoot: this.merkleRoot, + timestamp: this.timestamp, + index: this.index, + nextConsensus: this.nextConsensus, + witness: this.witness, + consensusData: this.consensusData, + transactions: await Promise.all( + this.hashes.slice(1).map(async (hash) => { + const state = await storage.get(hash); + + return state.transaction; + }), + ), + messageMagic: this.messageMagic, + }); + } + + // TODO: review this + public clone(options: Partial): TrimmedBlock { + return new TrimmedBlock({ + version: this.version, + previousHash: this.previousHash, + merkleRoot: this.merkleRoot, + timestamp: this.timestamp, + index: this.index, + nextConsensus: this.nextConsensus, + witness: this.witness, + hashes: this.hashes, + consensusData: this.consensusData, + messageMagic: this.messageMagic, + ...options, + }); + } + + public serializeWireBase(writer: BinaryWriter): void { + super.serializeWireBase(writer); + writer.writeArray(this.hashes, writer.writeUInt256.bind(writer)); + if (this.hashes.length > 0) { + if (this.consensusData === undefined) { + throw new InvalidFormatError( + `Invalid TrimmedBlock, consensusData must be present if hashes > 0, found: ${this.hashes.length}`, + ); + } + this.consensusData.serializeWireBase(writer); + } + } + + public serializeJSON(context: SerializeJSONContext): TrimmedBlockJSON { + const json = super.serializeJSON(context); + + return { + ...json, + consensusdata: this.consensusData ? this.consensusData.serializeJSON() : undefined, + hashes: this.hashes.map((hash) => JSONHelper.writeUInt256(hash)), + }; + } +} diff --git a/packages/neo-one-node-core/src/Validator.ts b/packages/neo-one-node-core/src/Validator.ts deleted file mode 100644 index d4f9125810..0000000000 --- a/packages/neo-one-node-core/src/Validator.ts +++ /dev/null @@ -1,98 +0,0 @@ -import { BinaryWriter, common, ECPoint, IOHelper, JSONHelper, ValidatorJSON } from '@neo-one/client-common'; -import { BaseState } from '@neo-one/client-full-common'; -import { BN } from 'bn.js'; -import { Equals, EquatableKey } from './Equatable'; -import { - createSerializeWire, - DeserializeWireBaseOptions, - DeserializeWireOptions, - SerializableJSON, - SerializableWire, - SerializeJSONContext, - SerializeWire, -} from './Serializable'; -import { BinaryReader, utils } from './utils'; - -export interface ValidatorKey { - readonly publicKey: ECPoint; -} - -export interface ValidatorAdd { - readonly version?: number; - readonly publicKey: ECPoint; - readonly registered?: boolean; - readonly votes?: BN; -} - -export interface ValidatorUpdate { - readonly registered?: boolean; - readonly votes?: BN; -} - -export class Validator extends BaseState - implements SerializableWire, EquatableKey, SerializableJSON { - public static deserializeWireBase({ reader }: DeserializeWireBaseOptions): Validator { - const version = reader.readUInt8(); - const publicKey = reader.readECPoint(); - const registered = reader.readBoolean(); - const votes = reader.readFixed8(); - - return new this({ version, publicKey, registered, votes }); - } - - public static deserializeWire(options: DeserializeWireOptions): Validator { - return this.deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); - } - - public readonly publicKey: ECPoint; - public readonly registered: boolean; - public readonly votes: BN; - public readonly equals: Equals = utils.equals(Validator, this, (other) => - common.ecPointEqual(this.publicKey, other.publicKey), - ); - public readonly toKeyString = utils.toKeyString(Validator, () => common.ecPointToString(this.publicKey)); - public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - private readonly sizeInternal: () => number; - - public constructor({ version, publicKey, registered = false, votes = utils.ZERO }: ValidatorAdd) { - super({ version }); - this.publicKey = publicKey; - this.registered = registered; - this.votes = votes; - this.sizeInternal = utils.lazy( - () => IOHelper.sizeOfECPoint(this.publicKey) + IOHelper.sizeOfBoolean + IOHelper.sizeOfFixed8, - ); - } - - public get size(): number { - return this.sizeInternal(); - } - - public update({ votes = this.votes, registered = this.registered }: ValidatorUpdate): Validator { - return new Validator({ - version: this.version, - publicKey: this.publicKey, - registered, - votes, - }); - } - - public serializeWireBase(writer: BinaryWriter): void { - writer.writeUInt8(this.version); - writer.writeECPoint(this.publicKey); - writer.writeBoolean(this.registered); - writer.writeFixed8(this.votes); - } - - public serializeJSON(_context: SerializeJSONContext): ValidatorJSON { - return { - version: this.version, - publicKey: JSONHelper.writeECPoint(this.publicKey), - registered: this.registered, - votes: JSONHelper.writeFixed8(this.votes), - }; - } -} diff --git a/packages/neo-one-node-core/src/ValidatorsCount.ts b/packages/neo-one-node-core/src/ValidatorsCount.ts deleted file mode 100644 index 6a620a5a2c..0000000000 --- a/packages/neo-one-node-core/src/ValidatorsCount.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { - BinaryWriter, - createSerializeWire, - IOHelper, - SerializableWire, - SerializeWire, - utils, -} from '@neo-one/client-common'; -import { BaseState } from '@neo-one/client-full-common'; -import { BN } from 'bn.js'; -import { DeserializeWireBaseOptions, DeserializeWireOptions } from './Serializable'; -import { BinaryReader } from './utils'; - -type Votes = ReadonlyArray; -export interface ValidatorsCountUpdate { - readonly votes?: Votes; -} - -export interface ValidatorsCountAdd { - readonly version?: number; - readonly votes?: Votes; -} - -export class ValidatorsCount extends BaseState implements SerializableWire { - public static deserializeWireBase(options: DeserializeWireBaseOptions): ValidatorsCount { - const { reader } = options; - const version = reader.readUInt8(); - const votes = reader.readArray(() => reader.readFixed8()); - - return new this({ version, votes }); - } - - public static deserializeWire(options: DeserializeWireOptions): ValidatorsCount { - return this.deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); - } - - public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - public readonly votes: Votes; - private readonly sizeInternal: () => number; - - public constructor({ version, votes = [] }: ValidatorsCountAdd = {}) { - super({ version }); - this.votes = votes; - this.sizeInternal = utils.lazy( - () => IOHelper.sizeOfUInt8 + IOHelper.sizeOfArray(this.votes, () => IOHelper.sizeOfFixed8), - ); - } - - public get size(): number { - return this.sizeInternal(); - } - - public update({ votes = this.votes }: ValidatorsCountUpdate): ValidatorsCount { - return new ValidatorsCount({ - version: this.version, - votes, - }); - } - - public serializeWireBase(writer: BinaryWriter): void { - writer.writeUInt8(this.version); - writer.writeArray(this.votes, (value) => { - writer.writeFixed8(value === undefined ? utils.ZERO : value); - }); - } -} diff --git a/packages/neo-one-node-core/src/Verifiable.ts b/packages/neo-one-node-core/src/Verifiable.ts new file mode 100644 index 0000000000..cf06cbba51 --- /dev/null +++ b/packages/neo-one-node-core/src/Verifiable.ts @@ -0,0 +1,37 @@ +import { UInt160 } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import { NativeContainer } from './Native'; +import { SerializableContainer } from './Serializable'; +import { BlockchainStorage } from './Storage'; +import { VM } from './vm'; +import { Witness } from './Witness'; + +export interface Verifiable { + readonly getScriptHashesForVerifying: (context: { + readonly storage: BlockchainStorage; + readonly native: NativeContainer; + }) => Promise | readonly UInt160[]; + readonly witnesses: readonly Witness[]; +} + +export interface ExecuteScriptResult { + readonly gas: BN; + readonly result: boolean; +} + +export type VerifyWitnesses = ( + vm: VM, + verifiable: SerializableContainer, + storage: BlockchainStorage, + native: NativeContainer, + gasIn: BN, +) => Promise; + +export interface VerifyOptions { + readonly vm: VM; + readonly storage: BlockchainStorage; + readonly native: NativeContainer; + readonly verifyWitnesses: VerifyWitnesses; +} + +/* I think all of this might be a useless abstraction of blockchain properties. */ diff --git a/packages/neo-one-node-core/src/Witness.ts b/packages/neo-one-node-core/src/Witness.ts index 05e113a328..bcb7a04f85 100644 --- a/packages/neo-one-node-core/src/Witness.ts +++ b/packages/neo-one-node-core/src/Witness.ts @@ -1,11 +1,6 @@ -import { IOHelper, JSONHelper, WitnessJSON, WitnessModel } from '@neo-one/client-common'; -import { Equals, EquatableKey } from './Equatable'; -import { - DeserializeWireBaseOptions, - DeserializeWireOptions, - SerializableJSON, - SerializeJSONContext, -} from './Serializable'; +import { crypto, IOHelper, JSONHelper, WitnessJSON, WitnessModel } from '@neo-one/client-common'; +import { WITNESS_INVOCATION_SIZE, WITNESS_VERIFICATION_SIZE } from './constants'; +import { DeserializeWireBaseOptions, DeserializeWireOptions, SerializableJSON } from './Serializable'; import { BinaryReader, utils } from './utils'; export interface WitnessAdd { @@ -13,12 +8,16 @@ export interface WitnessAdd { readonly invocation: Buffer; } -export class Witness extends WitnessModel implements SerializableJSON, EquatableKey { - public static deserializeWireBase({ reader }: DeserializeWireBaseOptions): Witness { - const invocation = reader.readVarBytesLE(utils.USHORT_MAX_NUMBER_PLUS_ONE); - const verification = reader.readVarBytesLE(utils.USHORT_MAX_NUMBER_PLUS_ONE); +export class Witness extends WitnessModel implements SerializableJSON { + public static deserializeWireBase(options: DeserializeWireBaseOptions): Witness { + const { reader } = options; + const invocation = reader.readVarBytesLE(WITNESS_INVOCATION_SIZE); + const verification = reader.readVarBytesLE(WITNESS_VERIFICATION_SIZE); - return new this({ invocation, verification }); + return new Witness({ + invocation, + verification, + }); } public static deserializeWire(options: DeserializeWireOptions): Witness { @@ -28,31 +27,23 @@ export class Witness extends WitnessModel implements SerializableJSON this.invocation.equals(other.invocation) && this.verification.equals(other.verification), - ); - public readonly toKeyString = utils.toKeyString( - Witness, - () => `${this.invocation.toString('hex')}:${this.verification.toString('hex')}`, - ); private readonly sizeInternal = utils.lazy( () => IOHelper.sizeOfVarBytesLE(this.invocation) + IOHelper.sizeOfVarBytesLE(this.verification), ); + private readonly scriptHashInternal = utils.lazy(() => crypto.hash160(this.verification)); + + public get scriptHash() { + return this.scriptHashInternal(); + } - public get size(): number { + public get size() { return this.sizeInternal(); } - public serializeJSON(_context: SerializeJSONContext): WitnessJSON { + public serializeJSON(): WitnessJSON { return { - invocation: JSONHelper.writeBuffer(this.invocation), - verification: JSONHelper.writeBuffer(this.verification), + invocation: JSONHelper.writeBase64Buffer(this.invocation), + verification: JSONHelper.writeBase64Buffer(this.verification), }; } } diff --git a/packages/neo-one-node-core/src/__tests__/ContractParametersContext.test.ts b/packages/neo-one-node-core/src/__tests__/ContractParametersContext.test.ts new file mode 100644 index 0000000000..8b5cd9186c --- /dev/null +++ b/packages/neo-one-node-core/src/__tests__/ContractParametersContext.test.ts @@ -0,0 +1,127 @@ +import { + AccountContract, + common, + ContractParameterTypeModel, + crypto, + ECPoint, + PrivateKey, + UInt160, + WitnessScopeModel, +} from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import { ContractParametersContext } from '../ContractParametersContext'; +import { Signer } from '../Signer'; +import { Transaction } from '../transaction'; +import { Witness } from '../Witness'; + +const getTransaction = (sender: UInt160) => + new Transaction({ + script: Buffer.from([0x00]), + attributes: [], + signers: [ + new Signer({ + account: sender, + scopes: WitnessScopeModel.CalledByEntry, + }), + ], + witnesses: [ + new Witness({ + invocation: Buffer.from([]), + verification: Buffer.from([]), + }), + ], + networkFee: new BN(0), + systemFee: new BN(0), + validUntilBlock: 2000, + messageMagic: 73450591, + }); + +describe('ContractParametersContext Test', () => { + let privateKey: PrivateKey; + let publicKey: ECPoint; + let contract: AccountContract; + beforeEach(() => { + // tslint:disable-next-line: prefer-array-literal + privateKey = common.asPrivateKey(Buffer.from(new Array(32).fill(0x01))); + publicKey = crypto.privateKeyToPublicKey(privateKey); + contract = AccountContract.createSignatureContract(publicKey); + }); + + test('addWithIndex', () => { + const context = new ContractParametersContext([common.ZERO_UINT160]); + const testContract = new AccountContract({ + script: Buffer.from([0x00]), + parameterList: [0x10], + scriptHash: common.ZERO_UINT160, + }); + + const beforeItems = context.contextItems; + + context.addWithIndex(testContract, 0, false); + const afterItems = context.contextItems; + + expect(Object.values(beforeItems).length).toEqual(0); + expect(Object.values(afterItems).length).toEqual(1); + }); + + test('add', () => { + const context = new ContractParametersContext([common.ZERO_UINT160]); + const testContract = new AccountContract({ + script: Buffer.from([0x00]), + parameterList: [0x10], + scriptHash: common.ZERO_UINT160, + }); + + const beforeItems = context.contextItems; + + context.add(testContract, [false]); + const afterItems = context.contextItems; + + expect(Object.values(beforeItems).length).toEqual(0); + expect(Object.values(afterItems).length).toEqual(1); + }); + + test('addSignature -- true', () => { + const singleSender = common.hexToUInt160('0x282646ee0afa5508bb999318f35074b84a17c9f0'); + const tx = getTransaction(singleSender); + + const context = new ContractParametersContext(tx.getScriptHashesForVerifying()); + const result = context.addSignature(contract, publicKey, Buffer.from([0x01])); + + expect(result).toEqual(true); + expect(context.getWitnesses().length).toEqual(1); + }); + + test('addSignature -- false', () => { + const singleSender = common.hexToUInt160('0x282646ee0afa5508bb999318f35074b84a17c9f0'); + const tx = getTransaction(singleSender); + + const newContract = { + ...contract, + parameterList: [], + scriptHash: contract.scriptHash, + address: contract.address, + }; + + const context = new ContractParametersContext(tx.getScriptHashesForVerifying()); + const result = context.addSignature(newContract, publicKey, Buffer.from([0x01])); + + expect(result).toEqual(false); + }); + + test('addSignature -- throws', () => { + const singleSender = common.hexToUInt160('0x282646ee0afa5508bb999318f35074b84a17c9f0'); + const tx = getTransaction(singleSender); + + const newContract = { + ...contract, + parameterList: [ContractParameterTypeModel.Signature, ContractParameterTypeModel.Signature], + scriptHash: contract.scriptHash, + address: contract.address, + }; + + const context = new ContractParametersContext(tx.getScriptHashesForVerifying()); + const throwFunc = () => context.addSignature(newContract, publicKey, Buffer.from([0x01])); + expect(throwFunc).toThrow(); + }); +}); diff --git a/packages/neo-one-node-core/src/__tests__/storageChange/StorageChangeAdd.test.ts b/packages/neo-one-node-core/src/__tests__/storageChange/StorageChangeAdd.test.ts deleted file mode 100644 index 36110cbb0f..0000000000 --- a/packages/neo-one-node-core/src/__tests__/storageChange/StorageChangeAdd.test.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { common } from '@neo-one/client-common'; -import { deserializeStorageChangeWire, StorageChangeAdd, StorageChangeType } from '../../storageChange'; - -describe('StorageChangeAdd', () => { - const storageChange = new StorageChangeAdd({ - hash: common.bufferToUInt160(Buffer.from('3775292229eccdf904f16fff8e83e7cffdc0f0ce', 'hex')), - key: Buffer.from('b500', 'hex'), - value: Buffer.from('5f8d70', 'hex'), - }); - - test('serialize/deserialize', () => { - const serialized = storageChange.serializeWire(); - const deserialized = deserializeStorageChangeWire({ context: { messageMagic: 0 }, buffer: serialized }); - - if (deserialized.type !== StorageChangeType.Add) { - expect(deserialized.type).toEqual(StorageChangeType.Add); - throw new Error('For TS'); - } - expect(deserialized.hash).toEqual(storageChange.hash); - expect(deserialized.key).toEqual(storageChange.key); - expect(deserialized.value).toEqual(storageChange.value); - }); -}); diff --git a/packages/neo-one-node-core/src/__tests__/storageChange/StorageChangeDelete.test.ts b/packages/neo-one-node-core/src/__tests__/storageChange/StorageChangeDelete.test.ts deleted file mode 100644 index c80eacd985..0000000000 --- a/packages/neo-one-node-core/src/__tests__/storageChange/StorageChangeDelete.test.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { common } from '@neo-one/client-common'; -import { deserializeStorageChangeWire, StorageChangeDelete, StorageChangeType } from '../../storageChange'; - -describe('StorageChangeDelete', () => { - const storageChange = new StorageChangeDelete({ - hash: common.bufferToUInt160(Buffer.from('3775292229eccdf904f16fff8e83e7cffdc0f0ce', 'hex')), - key: Buffer.from('b500', 'hex'), - }); - - test('serialize/deserialize', () => { - const serialized = storageChange.serializeWire(); - const deserialized = deserializeStorageChangeWire({ context: { messageMagic: 0 }, buffer: serialized }); - - if (deserialized.type !== StorageChangeType.Delete) { - expect(deserialized.type).toEqual(StorageChangeType.Delete); - throw new Error('For TS'); - } - expect(deserialized.hash).toEqual(storageChange.hash); - expect(deserialized.key).toEqual(storageChange.key); - }); -}); diff --git a/packages/neo-one-node-core/src/__tests__/storageChange/StorageChangeModify.test.ts b/packages/neo-one-node-core/src/__tests__/storageChange/StorageChangeModify.test.ts deleted file mode 100644 index 50b350ed6c..0000000000 --- a/packages/neo-one-node-core/src/__tests__/storageChange/StorageChangeModify.test.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { common } from '@neo-one/client-common'; -import { deserializeStorageChangeWire, StorageChangeModify, StorageChangeType } from '../../storageChange'; - -describe('StorageChangeModify', () => { - const storageChange = new StorageChangeModify({ - hash: common.bufferToUInt160(Buffer.from('3775292229eccdf904f16fff8e83e7cffdc0f0ce', 'hex')), - key: Buffer.from('b500', 'hex'), - value: Buffer.from('5f8d70', 'hex'), - }); - - test('serialize/deserialize', () => { - const serialized = storageChange.serializeWire(); - const deserialized = deserializeStorageChangeWire({ context: { messageMagic: 0 }, buffer: serialized }); - - if (deserialized.type !== StorageChangeType.Modify) { - expect(deserialized.type).toEqual(StorageChangeType.Modify); - throw new Error('For TS'); - } - expect(deserialized.hash).toEqual(storageChange.hash); - expect(deserialized.key).toEqual(storageChange.key); - expect(deserialized.value).toEqual(storageChange.value); - }); -}); diff --git a/packages/neo-one-node-core/src/action/Action.ts b/packages/neo-one-node-core/src/action/Action.ts deleted file mode 100644 index 21eb4988a0..0000000000 --- a/packages/neo-one-node-core/src/action/Action.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { utils } from '@neo-one/utils'; -import { BN } from 'bn.js'; -import { createDeserializeWire, DeserializeWireBaseOptions } from '../Serializable'; -import { ActionType, assertActionType } from './ActionType'; -import { LogAction } from './LogAction'; -import { NotificationAction } from './NotificationAction'; - -export interface ActionsKey { - readonly indexStart?: BN; - readonly indexStop?: BN; -} - -export interface ActionKey { - readonly index: BN; -} - -export type Action = LogAction | NotificationAction; - -export const deserializeActionWireBase = (options: DeserializeWireBaseOptions): Action => { - const { reader } = options; - const type = assertActionType(reader.clone().readUInt8()); - switch (type) { - case ActionType.Log: - return LogAction.deserializeWireBase(options); - case ActionType.Notification: - return NotificationAction.deserializeWireBase(options); - default: - utils.assertNever(type); - throw new Error('For TS'); - } -}; - -export const deserializeActionWire = createDeserializeWire(deserializeActionWireBase); diff --git a/packages/neo-one-node-core/src/action/ActionBase.ts b/packages/neo-one-node-core/src/action/ActionBase.ts deleted file mode 100644 index e35c4ad703..0000000000 --- a/packages/neo-one-node-core/src/action/ActionBase.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { ActionBaseJSON, BinaryWriter, JSONHelper, UInt160 } from '@neo-one/client-common'; -import { BN } from 'bn.js'; -import { - createSerializeWire, - DeserializeWireBaseOptions, - DeserializeWireOptions, - SerializableWire, - SerializeJSONContext, - SerializeWire, -} from '../Serializable'; -import { BinaryReader } from '../utils'; -import { ActionType } from './ActionType'; - -export interface ActionBaseAdd { - readonly version?: number; - readonly index: BN; - readonly scriptHash: UInt160; -} - -export interface ActionBaseAddWithType extends ActionBaseAdd { - readonly type: Type; -} - -// tslint:disable-next-line no-any -export class ActionBase implements SerializableWire { - public static readonly VERSION = 0; - - public static readonly deserializeActionBaseWireBase = ({ reader }: DeserializeWireBaseOptions) => { - const type = reader.readUInt8(); - const version = reader.readUInt8(); - const index = reader.readUInt64LE(); - const scriptHash = reader.readUInt160(); - - return { - type, - version, - index, - scriptHash, - }; - }; - - public static deserializeWireBase(_options: DeserializeWireBaseOptions): ActionBase { - throw new Error('Not Implemented'); - } - - public static deserializeWire(options: DeserializeWireOptions): ActionBase { - return this.deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); - } - - public readonly type: Type; - public readonly version: number; - public readonly index: BN; - public readonly scriptHash: UInt160; - public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - - public constructor({ type, version, index, scriptHash }: ActionBaseAddWithType) { - this.type = type; - this.version = version === undefined ? (this.constructor as typeof ActionBase).VERSION : version; - this.index = index; - this.scriptHash = scriptHash; - } - - public serializeWireBase(writer: BinaryWriter): void { - writer.writeUInt8(this.type); - writer.writeUInt8(this.version); - writer.writeUInt64LE(this.index); - writer.writeUInt160(this.scriptHash); - } - - public serializeActionBaseJSON(_context: SerializeJSONContext): ActionBaseJSON { - return { - version: this.version, - index: JSONHelper.writeUInt64(this.index), - scriptHash: JSONHelper.writeUInt160(this.scriptHash), - }; - } -} diff --git a/packages/neo-one-node-core/src/action/ActionType.ts b/packages/neo-one-node-core/src/action/ActionType.ts deleted file mode 100644 index 123f472018..0000000000 --- a/packages/neo-one-node-core/src/action/ActionType.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { InvalidActionTypeError } from '../errors'; - -export enum ActionType { - Log = 0x00, - Notification = 0x01, -} - -const isActionType = (value: number): value is ActionType => - // tslint:disable-next-line strict-type-predicates - ActionType[value] !== undefined; - -export const assertActionType = (value: number): ActionType => { - if (isActionType(value)) { - return value; - } - - throw new InvalidActionTypeError(value); -}; diff --git a/packages/neo-one-node-core/src/action/LogAction.ts b/packages/neo-one-node-core/src/action/LogAction.ts deleted file mode 100644 index 89ce4f6bfc..0000000000 --- a/packages/neo-one-node-core/src/action/LogAction.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { BinaryWriter, LogActionJSON } from '@neo-one/client-common'; -import { DeserializeWireBaseOptions, SerializableJSON, SerializeJSONContext } from '../Serializable'; -import { ActionBase, ActionBaseAdd } from './ActionBase'; -import { ActionType } from './ActionType'; - -export interface LogAdd extends ActionBaseAdd { - readonly message: string; -} - -export class LogAction extends ActionBase implements SerializableJSON { - public static deserializeWireBase(options: DeserializeWireBaseOptions): LogAction { - const { reader } = options; - const action = super.deserializeActionBaseWireBase(options); - const message = reader.readVarString(10240); - - return new this({ - version: action.version, - index: action.index, - scriptHash: action.scriptHash, - message, - }); - } - - public readonly message: string; - - public constructor({ version, index, scriptHash, message }: LogAdd) { - const options = { - // tslint:disable-next-line no-useless-cast - type: ActionType.Log as ActionType.Log, - version, - index, - scriptHash, - }; - super(options); - - this.message = message; - } - - public serializeWireBase(writer: BinaryWriter): void { - super.serializeWireBase(writer); - writer.writeVarString(this.message, 10240); - } - - public serializeJSON(context: SerializeJSONContext): LogActionJSON { - const action = super.serializeActionBaseJSON(context); - - return { - type: 'Log', - version: action.version, - index: action.index, - scriptHash: action.scriptHash, - message: this.message, - }; - } -} diff --git a/packages/neo-one-node-core/src/action/NotificationAction.ts b/packages/neo-one-node-core/src/action/NotificationAction.ts deleted file mode 100644 index 2b2d9dfb05..0000000000 --- a/packages/neo-one-node-core/src/action/NotificationAction.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { BinaryWriter, NotificationActionJSON } from '@neo-one/client-common'; -import { ContractParameter, deserializeContractParameterWireBase } from '../contractParameter'; -import { DeserializeWireBaseOptions, SerializableJSON, SerializeJSONContext } from '../Serializable'; -import { ActionBase, ActionBaseAdd } from './ActionBase'; -import { ActionType } from './ActionType'; - -export interface NotificationAdd extends ActionBaseAdd { - readonly args: readonly ContractParameter[]; -} - -export class NotificationAction extends ActionBase - implements SerializableJSON { - public static deserializeWireBase(options: DeserializeWireBaseOptions): NotificationAction { - const { reader } = options; - const action = super.deserializeActionBaseWireBase(options); - const args = reader.readArray(() => deserializeContractParameterWireBase(options)); - - return new this({ - version: action.version, - index: action.index, - scriptHash: action.scriptHash, - args, - }); - } - - public readonly args: readonly ContractParameter[]; - - public constructor({ version, index, scriptHash, args }: NotificationAdd) { - const options = { - // tslint:disable-next-line no-useless-cast - type: ActionType.Notification as ActionType.Notification, - version, - index, - scriptHash, - }; - super(options); - - this.args = args; - } - - public serializeWireBase(writer: BinaryWriter): void { - super.serializeWireBase(writer); - writer.writeArray(this.args, (arg) => arg.serializeWireBase(writer)); - } - - public serializeJSON(context: SerializeJSONContext): NotificationActionJSON { - const action = super.serializeActionBaseJSON(context); - - return { - type: 'Notification', - version: action.version, - index: action.index, - scriptHash: action.scriptHash, - args: this.args.map((arg) => arg.serializeJSON(context)), - }; - } -} diff --git a/packages/neo-one-node-core/src/action/index.ts b/packages/neo-one-node-core/src/action/index.ts deleted file mode 100644 index e536053657..0000000000 --- a/packages/neo-one-node-core/src/action/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './Action'; -export * from './ActionBase'; -export * from './ActionType'; -export * from './LogAction'; -export * from './NotificationAction'; diff --git a/packages/neo-one-node-core/src/consensus/BlockBuilder.ts b/packages/neo-one-node-core/src/consensus/BlockBuilder.ts new file mode 100644 index 0000000000..a8bca3a913 --- /dev/null +++ b/packages/neo-one-node-core/src/consensus/BlockBuilder.ts @@ -0,0 +1,116 @@ +import { JSONHelper, UInt160, UInt256 } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import { Block, BlockAdd } from '../Block'; +import { ConsensusData, ConsensusDataAdd } from '../ConsensusData'; +import { Transaction } from '../transaction'; +import { Witness } from '../Witness'; + +export interface BlockPartial extends Omit, 'consensusData'> { + readonly consensusData?: Partial; +} + +export class BlockBuilder { + public readonly merkleRoot?: UInt256; + public readonly consensusData?: Partial; + public readonly transactions?: readonly Transaction[]; + public readonly version?: number; + public readonly previousHash?: UInt256; + public readonly timestamp?: BN; + public readonly index?: number; + public readonly nextConsensus?: UInt160; + public readonly witness?: Witness; + public readonly hash?: UInt256; + public readonly messageMagic?: number; + + public constructor(options: BlockPartial) { + this.merkleRoot = options.merkleRoot; + this.consensusData = options.consensusData; + this.transactions = options.transactions; + this.version = options.version; + this.previousHash = options.previousHash; + this.timestamp = options.timestamp; + this.index = options.index; + this.nextConsensus = options.nextConsensus; + this.witness = options.witness; + this.hash = options.hash; + this.messageMagic = options.messageMagic; + } + + public clone({ + merkleRoot, + consensusData, + transactions, + version, + previousHash, + timestamp, + index, + nextConsensus, + witness, + hash, + }: BlockPartial) { + return new BlockBuilder({ + merkleRoot: merkleRoot ?? this.merkleRoot, + consensusData: + consensusData === undefined + ? this.consensusData + : { + primaryIndex: consensusData.primaryIndex ?? this.consensusData?.primaryIndex, + nonce: consensusData.nonce ?? this.consensusData?.nonce, + }, + transactions: transactions ?? this.transactions, + version: version ?? this.version, + previousHash: previousHash ?? this.previousHash, + timestamp: timestamp ?? this.timestamp, + index: index ?? this.index, + nextConsensus: nextConsensus ?? this.nextConsensus, + witness: witness ?? this.witness, + hash: hash ?? this.hash, + }); + } + + public getConsensusData() { + if (this.consensusData === undefined || this.consensusData.primaryIndex === undefined) { + // TODO: real error + throw new Error('We need at least primaryIndex'); + } + + return new ConsensusData({ + primaryIndex: this.consensusData.primaryIndex, + nonce: this.consensusData.nonce ?? new BN(0), + }); + } + + public getBlock() { + const consensusData = this.getConsensusData(); + const options = { + consensusData, + transactions: this.transactions ?? [], + version: this.version, + previousHash: this.previousHash, + timestamp: this.timestamp, + index: this.index, + nextConsensus: this.nextConsensus, + witness: this.witness, + messageMagic: this.messageMagic, + }; + + // TODO: we could assert all these options but we'd throw anyway, maybe clean up. + // tslint:disable-next-line: no-any + return new Block(options as any); + } + + public toJSON(): object { + return { + merkleRoot: this.merkleRoot ? JSONHelper.writeUInt256(this.merkleRoot) : undefined, + consensusData: this.consensusData, + transactions: this.transactions?.map((tx) => tx.serializeJSON()), + version: this.version, + previousHash: this.previousHash ? JSONHelper.writeUInt256(this.previousHash) : undefined, + timestamp: this.timestamp, + index: this.index, + nextConsensus: this.nextConsensus ? JSONHelper.writeUInt160(this.nextConsensus) : undefined, + witness: this.witness ? this.witness.serializeJSON() : undefined, + hash: this.hash ? JSONHelper.writeUInt256(this.hash) : undefined, + }; + } +} diff --git a/packages/neo-one-node-core/src/consensus/ConsensusContext.ts b/packages/neo-one-node-core/src/consensus/ConsensusContext.ts new file mode 100644 index 0000000000..cc805e1aa8 --- /dev/null +++ b/packages/neo-one-node-core/src/consensus/ConsensusContext.ts @@ -0,0 +1,215 @@ +import { common, ECPoint, UInt256, UInt256Hex } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import _ from 'lodash'; +import { Block } from '../Block'; +import { ConsensusData } from '../ConsensusData'; +import { ChangeViewConsensusMessage, ConsensusPayload } from '../payload'; +import { DeserializeWireBaseOptions } from '../Serializable'; +import { Transaction } from '../transaction'; +import { TransactionVerificationContext } from '../TransactionVerificationContext'; +import { BlockBuilder, BlockPartial } from './BlockBuilder'; + +export const getF = (validatorsLength: number) => Math.floor((validatorsLength - 1) / 3); +export const getM = (validatorsLength: number) => validatorsLength - getF(validatorsLength); + +export interface ConsensusContextAdd { + readonly viewNumber: number; + readonly myIndex: number; + readonly validators: readonly ECPoint[]; + readonly blockReceivedTimeMS: number; + readonly verificationContext: TransactionVerificationContext; + readonly blockOptions: BlockPartial; + readonly preparationPayloads?: ReadonlyArray; + readonly commitPayloads?: ReadonlyArray; + readonly changeViewPayloads?: ReadonlyArray; + readonly lastChangeViewPayloads?: ReadonlyArray; + readonly lastSeenMessage?: readonly number[]; + readonly transactions?: { readonly [hash: string]: Transaction | undefined }; + readonly transactionHashes?: readonly UInt256[]; + readonly witnessSize?: number; +} + +// tslint:disable-next-line no-any +export class ConsensusContext { + public static deserializeWireBase(options: DeserializeWireBaseOptions) { + const { reader } = options; + const version = reader.readUInt32LE(); + const index = reader.readUInt32LE(); + const timestamp = reader.readUInt64LE(); + + const nextConsensusIn = reader.readUInt160(); + const nextConsensus = nextConsensusIn.equals(common.ZERO_UINT160) ? undefined : nextConsensusIn; + + const consensusData = ConsensusData.deserializeWireBase(options); + const viewNumber = reader.readInt8(); + const transactionHashes = reader.readArray(() => reader.readUInt256()); + const transactions = reader.readArray( + () => Transaction.deserializeWireBase(options), + Block.MaxTransactionsPerBlock, + ); + + // TODO: before we implement the rest of this see if reloading and saving is even necessary + } + public readonly viewNumber: number; + public readonly myIndex: number; + public readonly validators: readonly ECPoint[]; + public readonly blockReceivedTimeMS: number; + public readonly verificationContext: TransactionVerificationContext; + public readonly preparationPayloads: ReadonlyArray; + public readonly commitPayloads: ReadonlyArray; + public readonly changeViewPayloads: ReadonlyArray; + public readonly lastChangeViewPayloads: ReadonlyArray; + public readonly lastSeenMessage: readonly number[]; + public readonly transactions: { readonly [hash: string]: Transaction | undefined }; + public readonly transactionHashes?: readonly UInt256[]; + public readonly transactionHashesSet: Set; + public readonly blockBuilder: BlockBuilder; + public readonly witnessSize: number; + + public constructor({ + viewNumber, + myIndex, + validators, + blockReceivedTimeMS, + verificationContext, + blockOptions, + preparationPayloads = [], + commitPayloads = [], + changeViewPayloads = [], + lastChangeViewPayloads = [], + lastSeenMessage = [], + transactions = {}, + transactionHashes, + witnessSize = 0, + }: ConsensusContextAdd) { + this.viewNumber = viewNumber; + this.myIndex = myIndex; + this.validators = validators; + this.blockReceivedTimeMS = blockReceivedTimeMS; + this.verificationContext = verificationContext; + this.blockBuilder = new BlockBuilder(blockOptions); + this.preparationPayloads = preparationPayloads; + this.commitPayloads = commitPayloads; + this.changeViewPayloads = changeViewPayloads; + this.lastChangeViewPayloads = lastChangeViewPayloads; + this.lastSeenMessage = lastSeenMessage; + this.transactions = transactions; + this.transactionHashes = transactionHashes; + this.transactionHashesSet = new Set(transactionHashes?.map(common.uInt256ToHex)); + this.witnessSize = witnessSize; + } + + public get F(): number { + return getF(this.validators.length); + } + + public get M(): number { + return getM(this.validators.length); + } + + public get isPrimary(): boolean { + return this.myIndex === this.blockBuilder.consensusData?.primaryIndex; + } + + public get isBackup(): boolean { + return this.myIndex >= 0 && !this.isPrimary; + } + + public get watchOnly(): boolean { + return this.myIndex < 0; + } + + public get countCommitted(): number { + return this.commitPayloads.reduce((acc, p) => acc + (p === undefined ? 0 : 1), 0); + } + + public get countFailed(): number { + return this.lastSeenMessage.reduce((acc, val) => acc + (val < (this.blockBuilder.index ?? 0) - 1 ? 1 : 0), 0); + } + + public get moreThanFNodesCommittedOrLost(): boolean { + return this.countCommitted + this.countFailed > this.F; + } + + public get requestSentOrReceived(): boolean { + const maybeIndex = this.blockBuilder.consensusData?.primaryIndex; + if (maybeIndex === undefined) { + return false; + } + + return this.preparationPayloads[maybeIndex] !== undefined; + } + + public get responseSent(): boolean { + return !this.watchOnly && this.preparationPayloads[this.myIndex] !== undefined; + } + + public get commitSent(): boolean { + return !this.watchOnly && this.commitPayloads[this.myIndex] !== undefined; + } + + public get blockSent(): boolean { + return this.blockBuilder.transactions !== undefined; + } + + public get viewChanging(): boolean { + const newViewNumber = this.changeViewPayloads[this.myIndex]?.getDeserializedMessage() + .newViewNumber; + + if (newViewNumber === undefined) { + return false; + } + + return !this.watchOnly && newViewNumber > this.viewNumber; + } + + public get notAcceptingPayloadsDueToViewChanging() { + return this.viewChanging && !this.moreThanFNodesCommittedOrLost; + } + + public clone(options: Partial) { + const { blockOptions, ...rest } = options; + const consensusData = blockOptions?.consensusData; + const newConsensusData = consensusData + ? { + ...this.blockBuilder.consensusData, + ...consensusData, + } + : this.blockBuilder.consensusData; + + return new ConsensusContext({ + viewNumber: this.viewNumber, + myIndex: this.myIndex, + validators: this.validators, + blockReceivedTimeMS: this.blockReceivedTimeMS, + verificationContext: this.verificationContext, + blockOptions: + blockOptions === undefined + ? this.blockBuilder + : { + ...this.blockBuilder, + ...blockOptions, + consensusData: newConsensusData, + }, + preparationPayloads: this.preparationPayloads, + commitPayloads: this.commitPayloads, + changeViewPayloads: this.changeViewPayloads, + lastChangeViewPayloads: this.lastChangeViewPayloads, + transactions: this.transactions, + transactionHashes: this.transactionHashes, + ...rest, + }); + } + + public toJSON(): object { + return { + block: this.blockBuilder.toJSON(), + viewNumber: this.viewNumber, + myIndex: this.myIndex, + expectedView: [...this.expectedView], + validators: this.validators.map((validator) => common.ecPointToString(validator)), + blockReceivedTimeMS: this.blockReceivedTimeMS, + transactions: _.fromPairs(Object.entries(this.transactions).map(([hash, tx]) => [hash, tx?.serializeJSON()])), + }; + } +} diff --git a/packages/neo-one-node-core/src/consensus/index.ts b/packages/neo-one-node-core/src/consensus/index.ts new file mode 100644 index 0000000000..2d3fcf6dea --- /dev/null +++ b/packages/neo-one-node-core/src/consensus/index.ts @@ -0,0 +1,2 @@ +export * from './BlockBuilder'; +export * from './ConsensusContext'; diff --git a/packages/neo-one-node-core/src/constants.ts b/packages/neo-one-node-core/src/constants.ts index ee40566535..4a849e4c03 100644 --- a/packages/neo-one-node-core/src/constants.ts +++ b/packages/neo-one-node-core/src/constants.ts @@ -1,2 +1,3 @@ -// tslint:disable-next-line export-name export const MAX_TRANSACTION_SIZE = 102400; +export const WITNESS_INVOCATION_SIZE = 1024; +export const WITNESS_VERIFICATION_SIZE = 1024; diff --git a/packages/neo-one-node-core/src/contractParameter/ArrayContractParameter.ts b/packages/neo-one-node-core/src/contractParameter/ArrayContractParameter.ts deleted file mode 100644 index 98ff8ae30d..0000000000 --- a/packages/neo-one-node-core/src/contractParameter/ArrayContractParameter.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { ArrayContractParameterJSON, BinaryWriter, IOHelper, utils } from '@neo-one/client-common'; -import { SerializeJSONContext } from '../Serializable'; -import { ContractParameter } from './ContractParameter'; -import { ContractParameterBase } from './ContractParameterBase'; -import { ContractParameterType } from './ContractParameterType'; - -export class ArrayContractParameter extends ContractParameterBase< - ArrayContractParameter, - ArrayContractParameterJSON, - ContractParameterType.Array -> { - public readonly type = ContractParameterType.Array; - public readonly value: readonly ContractParameter[]; - private readonly sizeInternal: () => number; - - public constructor(value: readonly ContractParameter[]) { - super(); - this.value = value; - this.sizeInternal = utils.lazy(() => IOHelper.sizeOfArray(this.value, (val) => val.size)); - } - - public get size(): number { - return this.sizeInternal(); - } - - public asBoolean(): boolean { - return this.value.length > 0; - } - - public serializeWireBase(writer: BinaryWriter): void { - super.serializeWireBase(writer); - writer.writeArray(this.value, (parameter) => parameter.serializeWireBase(writer)); - } - - // deserialize is monkey patched on later - - public serializeJSON(context: SerializeJSONContext): ArrayContractParameterJSON { - return { - type: 'Array', - value: this.value.map((val) => val.serializeJSON(context)), - }; - } -} diff --git a/packages/neo-one-node-core/src/contractParameter/BooleanContractParameter.ts b/packages/neo-one-node-core/src/contractParameter/BooleanContractParameter.ts deleted file mode 100644 index 05edf36cb9..0000000000 --- a/packages/neo-one-node-core/src/contractParameter/BooleanContractParameter.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { BinaryWriter, BooleanContractParameterJSON, IOHelper, utils } from '@neo-one/client-common'; -import { DeserializeWireBaseOptions, SerializeJSONContext } from '../Serializable'; -import { ContractParameterBase } from './ContractParameterBase'; -import { ContractParameterType } from './ContractParameterType'; - -export class BooleanContractParameter extends ContractParameterBase< - BooleanContractParameter, - BooleanContractParameterJSON, - ContractParameterType.Boolean -> { - public static readonly TRUE = Buffer.from([1]); - public static readonly FALSE = Buffer.from([0]); - public static deserializeWireBase(options: DeserializeWireBaseOptions): BooleanContractParameter { - const { reader } = options; - super.deserializeContractParameterBaseWireBase(options); - const value = reader.readBoolean(); - - return new this(value); - } - - public readonly type = ContractParameterType.Boolean; - public readonly value: boolean; - private readonly sizeInternal: () => number; - - public constructor(value: boolean) { - super(); - this.value = value; - this.sizeInternal = utils.lazy(() => IOHelper.sizeOfBoolean); - } - - public get size(): number { - return this.sizeInternal(); - } - - public asBuffer(): Buffer { - return this.value ? BooleanContractParameter.TRUE : BooleanContractParameter.FALSE; - } - - public asBoolean(): boolean { - return this.value; - } - - public serializeWireBase(writer: BinaryWriter): void { - super.serializeWireBase(writer); - writer.writeBoolean(this.value); - } - - public serializeJSON(_context: SerializeJSONContext): BooleanContractParameterJSON { - return { - type: 'Boolean', - value: this.value, - }; - } -} diff --git a/packages/neo-one-node-core/src/contractParameter/ByteArrayContractParameter.ts b/packages/neo-one-node-core/src/contractParameter/ByteArrayContractParameter.ts deleted file mode 100644 index f996886119..0000000000 --- a/packages/neo-one-node-core/src/contractParameter/ByteArrayContractParameter.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { BinaryWriter, ByteArrayContractParameterJSON, IOHelper, JSONHelper, utils } from '@neo-one/client-common'; -import { DeserializeWireBaseOptions, SerializeJSONContext } from '../Serializable'; -import { ContractParameterBase } from './ContractParameterBase'; -import { ContractParameterType } from './ContractParameterType'; - -export class ByteArrayContractParameter extends ContractParameterBase< - ByteArrayContractParameter, - ByteArrayContractParameterJSON, - ContractParameterType.ByteArray -> { - public static deserializeWireBase(options: DeserializeWireBaseOptions): ByteArrayContractParameter { - const { reader } = options; - super.deserializeContractParameterBaseWireBase(options); - const value = reader.readVarBytesLE(); - - return new this(value); - } - - public readonly type = ContractParameterType.ByteArray; - public readonly value: Buffer; - private readonly sizeInternal: () => number; - - public constructor(value: Buffer) { - super(); - this.value = value; - this.sizeInternal = utils.lazy(() => IOHelper.sizeOfVarBytesLE(this.value)); - } - - public get size(): number { - return this.sizeInternal(); - } - - public asBuffer(): Buffer { - return this.value; - } - - public serializeWireBase(writer: BinaryWriter): void { - super.serializeWireBase(writer); - writer.writeVarBytesLE(this.value); - } - - public serializeJSON(_context: SerializeJSONContext): ByteArrayContractParameterJSON { - return { - type: 'ByteArray', - value: JSONHelper.writeBuffer(this.value), - }; - } -} diff --git a/packages/neo-one-node-core/src/contractParameter/ContractParameter.ts b/packages/neo-one-node-core/src/contractParameter/ContractParameter.ts deleted file mode 100644 index 788f8686c1..0000000000 --- a/packages/neo-one-node-core/src/contractParameter/ContractParameter.ts +++ /dev/null @@ -1,115 +0,0 @@ -import { assertContractParameterType } from '@neo-one/client-common'; -import { utils } from '@neo-one/utils'; -import { - createDeserializeWire, - DeserializeWire, - DeserializeWireBase, - DeserializeWireBaseOptions, -} from '../Serializable'; -import { ArrayContractParameter } from './ArrayContractParameter'; -import { BooleanContractParameter } from './BooleanContractParameter'; -import { ByteArrayContractParameter } from './ByteArrayContractParameter'; -import { ContractParameterBase } from './ContractParameterBase'; -import { ContractParameterType } from './ContractParameterType'; -import { Hash160ContractParameter } from './Hash160ContractParameter'; -import { Hash256ContractParameter } from './Hash256ContractParameter'; -import { IntegerContractParameter } from './IntegerContractParameter'; -import { InteropInterfaceContractParameter } from './InteropInterfaceContractParameter'; -import { MapContractParameter } from './MapContractParameter'; -import { PublicKeyContractParameter } from './PublicKeyContractParameter'; -import { SignatureContractParameter } from './SignatureContractParameter'; -import { StringContractParameter } from './StringContractParameter'; -import { VoidContractParameter } from './VoidContractParameter'; - -export type ContractParameter = - | SignatureContractParameter - | BooleanContractParameter - | IntegerContractParameter - | Hash160ContractParameter - | Hash256ContractParameter - | ByteArrayContractParameter - | PublicKeyContractParameter - | StringContractParameter - | ArrayContractParameter - | MapContractParameter - | InteropInterfaceContractParameter - | VoidContractParameter; - -export const deserializeContractParameterWireBase = (options: DeserializeWireBaseOptions): ContractParameter => { - const { reader } = options; - const type = assertContractParameterType(reader.clone().readUInt8()); - switch (type) { - case ContractParameterType.Signature: - return SignatureContractParameter.deserializeWireBase(options); - case ContractParameterType.Boolean: - return BooleanContractParameter.deserializeWireBase(options); - case ContractParameterType.Integer: - return IntegerContractParameter.deserializeWireBase(options); - case ContractParameterType.Hash160: - return Hash160ContractParameter.deserializeWireBase(options); - case ContractParameterType.Hash256: - return Hash256ContractParameter.deserializeWireBase(options); - case ContractParameterType.ByteArray: - return ByteArrayContractParameter.deserializeWireBase(options); - case ContractParameterType.PublicKey: - return PublicKeyContractParameter.deserializeWireBase(options); - case ContractParameterType.String: - return StringContractParameter.deserializeWireBase(options); - case ContractParameterType.Array: - // tslint:disable-next-line - return (ArrayContractParameter as any).deserializeWireBase(options); - case ContractParameterType.Map: - // tslint:disable-next-line - return (MapContractParameter as any).deserializeWireBase(options); - case ContractParameterType.InteropInterface: - return InteropInterfaceContractParameter.deserializeWireBase(options); - case ContractParameterType.Void: - return VoidContractParameter.deserializeWireBase(options); - default: - utils.assertNever(type); - throw new Error('For TS'); - } -}; - -export const deserializeWire = createDeserializeWire(deserializeContractParameterWireBase); - -// tslint:disable-next-line no-object-mutation readonly-keyword -(ArrayContractParameter as { deserializeWireBase?: DeserializeWireBase }).deserializeWireBase = ( - options, -): ArrayContractParameter => { - const { reader } = options; - reader.readUInt8(); - const value = reader.readArray(() => deserializeContractParameterWireBase(options)); - - return new ArrayContractParameter(value); -}; - -// tslint:disable-next-line no-object-mutation -(ArrayContractParameter as { - // tslint:disable-next-line readonly-keyword - deserializeWire?: DeserializeWire; -}).deserializeWire = createDeserializeWire( - // tslint:disable-next-line no-any - (ArrayContractParameter as any).deserializeWireBase.bind(ArrayContractParameter), -); - -// tslint:disable-next-line no-object-mutation readonly-keyword -(MapContractParameter as { deserializeWireBase?: DeserializeWireBase }).deserializeWireBase = ( - options, -): MapContractParameter => { - const { reader } = options; - reader.readUInt8(); - const value = reader.readArray(() => reader.readArray(() => deserializeContractParameterWireBase(options))); - - // tslint:disable-next-line no-any - return new MapContractParameter(value as any); -}; - -// tslint:disable-next-line no-object-mutation -(MapContractParameter as { - // tslint:disable-next-line readonly-keyword - deserializeWire?: DeserializeWire; -}).deserializeWire = createDeserializeWire( - // tslint:disable-next-line no-any - (MapContractParameter as any).deserializeWireBase.bind(MapContractParameter), -); diff --git a/packages/neo-one-node-core/src/contractParameter/ContractParameterBase.ts b/packages/neo-one-node-core/src/contractParameter/ContractParameterBase.ts deleted file mode 100644 index 1c6c5f5307..0000000000 --- a/packages/neo-one-node-core/src/contractParameter/ContractParameterBase.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { BinaryWriter } from '@neo-one/client-common'; -import { - createSerializeWire, - DeserializeWireBaseOptions, - DeserializeWireOptions, - SerializableJSON, - SerializableWire, - SerializeJSONContext, - SerializeWire, -} from '../Serializable'; -import { BinaryReader } from '../utils'; -import { ContractParameterType } from './ContractParameterType'; - -export abstract class ContractParameterBase< - T = {}, - TJSON = {}, - Type extends ContractParameterType = ContractParameterType -> implements SerializableWire, SerializableJSON { - public static deserializeContractParameterBaseWireBase({ reader }: DeserializeWireBaseOptions) { - const type = reader.readUInt8(); - - return { type }; - } - - public static deserializeWireBase(_options: DeserializeWireBaseOptions): ContractParameterBase { - throw new Error('Not Implemented'); - } - - public static deserializeWire(options: DeserializeWireOptions): ContractParameterBase { - return this.deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); - } - - public abstract readonly type: Type; - public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - - public asBuffer(): Buffer { - throw new Error('Unimplemented.'); - } - - public asBoolean(): boolean { - return this.asBuffer().some((value) => value !== 0); - } - - public serializeWireBase(writer: BinaryWriter): void { - writer.writeUInt8(this.type); - } - - public serializeJSON(_context: SerializeJSONContext): TJSON { - throw new Error('Not Implemented'); - } -} diff --git a/packages/neo-one-node-core/src/contractParameter/ContractParameterType.ts b/packages/neo-one-node-core/src/contractParameter/ContractParameterType.ts deleted file mode 100644 index de416bd0d7..0000000000 --- a/packages/neo-one-node-core/src/contractParameter/ContractParameterType.ts +++ /dev/null @@ -1 +0,0 @@ -export { ContractParameterTypeModel as ContractParameterType } from '@neo-one/client-common'; diff --git a/packages/neo-one-node-core/src/contractParameter/Hash160ContractParameter.ts b/packages/neo-one-node-core/src/contractParameter/Hash160ContractParameter.ts deleted file mode 100644 index dedfb901aa..0000000000 --- a/packages/neo-one-node-core/src/contractParameter/Hash160ContractParameter.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { - BinaryWriter, - common, - Hash160ContractParameterJSON, - IOHelper, - JSONHelper, - UInt160, - utils, -} from '@neo-one/client-common'; -import { DeserializeWireBaseOptions, SerializeJSONContext } from '../Serializable'; -import { ContractParameterBase } from './ContractParameterBase'; -import { ContractParameterType } from './ContractParameterType'; - -export class Hash160ContractParameter extends ContractParameterBase< - Hash160ContractParameter, - Hash160ContractParameterJSON, - ContractParameterType.Hash160 -> { - public static deserializeWireBase(options: DeserializeWireBaseOptions): Hash160ContractParameter { - const { reader } = options; - super.deserializeContractParameterBaseWireBase(options); - const value = reader.readUInt160(); - - return new this(value); - } - - public readonly type = ContractParameterType.Hash160; - public readonly value: UInt160; - private readonly sizeInternal: () => number; - - public constructor(value: UInt160) { - super(); - this.value = value; - this.sizeInternal = utils.lazy(() => IOHelper.sizeOfUInt160); - } - - public get size(): number { - return this.sizeInternal(); - } - - public asBuffer(): Buffer { - return common.uInt160ToBuffer(this.value); - } - - public serializeWireBase(writer: BinaryWriter): void { - super.serializeWireBase(writer); - writer.writeUInt160(this.value); - } - - public serializeJSON(_context: SerializeJSONContext): Hash160ContractParameterJSON { - return { - type: 'Hash160', - value: JSONHelper.writeUInt160(this.value), - }; - } -} diff --git a/packages/neo-one-node-core/src/contractParameter/Hash256ContractParameter.ts b/packages/neo-one-node-core/src/contractParameter/Hash256ContractParameter.ts deleted file mode 100644 index 052eb700eb..0000000000 --- a/packages/neo-one-node-core/src/contractParameter/Hash256ContractParameter.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { - BinaryWriter, - common, - Hash256ContractParameterJSON, - IOHelper, - JSONHelper, - UInt256, - utils, -} from '@neo-one/client-common'; -import { DeserializeWireBaseOptions, SerializeJSONContext } from '../Serializable'; -import { ContractParameterBase } from './ContractParameterBase'; -import { ContractParameterType } from './ContractParameterType'; - -export class Hash256ContractParameter extends ContractParameterBase< - Hash256ContractParameter, - Hash256ContractParameterJSON, - ContractParameterType.Hash256 -> { - public static deserializeWireBase(options: DeserializeWireBaseOptions): Hash256ContractParameter { - const { reader } = options; - super.deserializeContractParameterBaseWireBase(options); - const value = reader.readUInt256(); - - return new this(value); - } - - public readonly type = ContractParameterType.Hash256; - public readonly value: UInt256; - private readonly sizeInternal: () => number; - - public constructor(value: UInt256) { - super(); - this.value = value; - this.sizeInternal = utils.lazy(() => IOHelper.sizeOfUInt256); - } - - public get size(): number { - return this.sizeInternal(); - } - - public asBuffer(): Buffer { - return common.uInt256ToBuffer(this.value); - } - - public serializeWireBase(writer: BinaryWriter): void { - super.serializeWireBase(writer); - writer.writeUInt256(this.value); - } - - public serializeJSON(_context: SerializeJSONContext): Hash256ContractParameterJSON { - return { - type: 'Hash256', - value: JSONHelper.writeUInt256(this.value), - }; - } -} diff --git a/packages/neo-one-node-core/src/contractParameter/IntegerContractParameter.ts b/packages/neo-one-node-core/src/contractParameter/IntegerContractParameter.ts deleted file mode 100644 index 95ee957e76..0000000000 --- a/packages/neo-one-node-core/src/contractParameter/IntegerContractParameter.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { BinaryWriter, IntegerContractParameterJSON, IOHelper, utils } from '@neo-one/client-common'; -import { BN } from 'bn.js'; -import { DeserializeWireBaseOptions, SerializeJSONContext } from '../Serializable'; -import { ContractParameterBase } from './ContractParameterBase'; -import { ContractParameterType } from './ContractParameterType'; - -export class IntegerContractParameter extends ContractParameterBase< - IntegerContractParameter, - IntegerContractParameterJSON, - ContractParameterType.Integer -> { - public static deserializeWireBase(options: DeserializeWireBaseOptions): IntegerContractParameter { - const { reader } = options; - super.deserializeContractParameterBaseWireBase(options); - const value = utils.fromSignedBuffer(reader.readVarBytesLE()); - - return new this(value); - } - - public readonly type = ContractParameterType.Integer; - public readonly value: BN; - private readonly sizeInternal: () => number; - - public constructor(value: BN) { - super(); - this.value = value; - this.sizeInternal = utils.lazy(() => IOHelper.sizeOfVarBytesLE(utils.toSignedBuffer(this.value))); - } - - public get size(): number { - return this.sizeInternal(); - } - - public asBoolean(): boolean { - return !this.value.isZero(); - } - - public asBuffer(): Buffer { - return utils.toSignedBuffer(this.value); - } - - public serializeWireBase(writer: BinaryWriter): void { - super.serializeWireBase(writer); - writer.writeVarBytesLE(utils.toSignedBuffer(this.value)); - } - - public serializeJSON(_context: SerializeJSONContext): IntegerContractParameterJSON { - return { - type: 'Integer', - value: this.value.toString(10), - }; - } -} diff --git a/packages/neo-one-node-core/src/contractParameter/InteropInterfaceContractParameter.ts b/packages/neo-one-node-core/src/contractParameter/InteropInterfaceContractParameter.ts deleted file mode 100644 index d2fcd4825e..0000000000 --- a/packages/neo-one-node-core/src/contractParameter/InteropInterfaceContractParameter.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { InteropInterfaceContractParameterJSON } from '@neo-one/client-common'; -import { DeserializeWireBaseOptions, SerializeJSONContext } from '../Serializable'; -import { ContractParameterBase } from './ContractParameterBase'; -import { ContractParameterType } from './ContractParameterType'; - -export class InteropInterfaceContractParameter extends ContractParameterBase< - InteropInterfaceContractParameter, - InteropInterfaceContractParameterJSON, - ContractParameterType.InteropInterface -> { - public static deserializeWireBase(options: DeserializeWireBaseOptions): InteropInterfaceContractParameter { - super.deserializeContractParameterBaseWireBase(options); - - return new this(); - } - - public readonly type = ContractParameterType.InteropInterface; - public readonly size: number = 0; - - public serializeJSON(_context: SerializeJSONContext): InteropInterfaceContractParameterJSON { - return { - type: 'InteropInterface', - }; - } -} diff --git a/packages/neo-one-node-core/src/contractParameter/MapContractParameter.ts b/packages/neo-one-node-core/src/contractParameter/MapContractParameter.ts deleted file mode 100644 index 8732c74ebb..0000000000 --- a/packages/neo-one-node-core/src/contractParameter/MapContractParameter.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { BinaryWriter, ContractParameterJSON, IOHelper, MapContractParameterJSON, utils } from '@neo-one/client-common'; -import { SerializeJSONContext } from '../Serializable'; -import { ContractParameter } from './ContractParameter'; -import { ContractParameterBase } from './ContractParameterBase'; -import { ContractParameterType } from './ContractParameterType'; - -export class MapContractParameter extends ContractParameterBase< - MapContractParameter, - MapContractParameterJSON, - ContractParameterType.Map -> { - public readonly type = ContractParameterType.Map; - public readonly value: ReadonlyArray; - private readonly sizeInternal: () => number; - - public constructor(value: ReadonlyArray) { - super(); - this.value = value; - this.sizeInternal = utils.lazy(() => IOHelper.sizeOfArray(this.value, (val) => val[0].size + val[1].size)); - } - - public get size(): number { - return this.sizeInternal(); - } - - public asBoolean(): boolean { - return this.value.length > 0; - } - - public serializeWireBase(writer: BinaryWriter): void { - super.serializeWireBase(writer); - writer.writeArray(this.value, (parameter) => - writer.writeArray(parameter, (value) => value.serializeWireBase(writer)), - ); - } - - // deserialize is monkey patched on later - - public serializeJSON(context: SerializeJSONContext): MapContractParameterJSON { - return { - type: 'Map' as const, - value: this.value.map( - (val) => [val[0].serializeJSON(context), val[1].serializeJSON(context)] as const, - ), - }; - } -} diff --git a/packages/neo-one-node-core/src/contractParameter/PublicKeyContractParameter.ts b/packages/neo-one-node-core/src/contractParameter/PublicKeyContractParameter.ts deleted file mode 100644 index 2ff4f09756..0000000000 --- a/packages/neo-one-node-core/src/contractParameter/PublicKeyContractParameter.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { - BinaryWriter, - common, - ECPoint, - IOHelper, - JSONHelper, - PublicKeyContractParameterJSON, - utils, -} from '@neo-one/client-common'; -import { DeserializeWireBaseOptions, SerializeJSONContext } from '../Serializable'; -import { ContractParameterBase } from './ContractParameterBase'; -import { ContractParameterType } from './ContractParameterType'; - -export class PublicKeyContractParameter extends ContractParameterBase< - PublicKeyContractParameter, - PublicKeyContractParameterJSON, - ContractParameterType.PublicKey -> { - public static deserializeWireBase(options: DeserializeWireBaseOptions): PublicKeyContractParameter { - const { reader } = options; - super.deserializeContractParameterBaseWireBase(options); - const value = reader.readECPoint(); - - return new this(value); - } - - public readonly type = ContractParameterType.PublicKey; - public readonly value: ECPoint; - private readonly sizeInternal: () => number; - - public constructor(value: ECPoint) { - super(); - this.value = value; - this.sizeInternal = utils.lazy(() => IOHelper.sizeOfECPoint(this.value)); - } - - public get size(): number { - return this.sizeInternal(); - } - - public asBuffer(): Buffer { - return common.ecPointToBuffer(this.value); - } - - public serializeWireBase(writer: BinaryWriter): void { - super.serializeWireBase(writer); - writer.writeECPoint(this.value); - } - - public serializeJSON(_context: SerializeJSONContext): PublicKeyContractParameterJSON { - return { - type: 'PublicKey', - value: JSONHelper.writeECPoint(this.value), - }; - } -} diff --git a/packages/neo-one-node-core/src/contractParameter/SignatureContractParameter.ts b/packages/neo-one-node-core/src/contractParameter/SignatureContractParameter.ts deleted file mode 100644 index d96505ff7c..0000000000 --- a/packages/neo-one-node-core/src/contractParameter/SignatureContractParameter.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { BinaryWriter, IOHelper, JSONHelper } from '@neo-one/client-common'; -import { DeserializeWireBaseOptions, SerializeJSONContext } from '../Serializable'; -import { utils } from '../utils'; -import { ContractParameterBase } from './ContractParameterBase'; -import { ContractParameterType } from './ContractParameterType'; - -export interface SignatureContractParameterJSON { - readonly type: 'Signature'; - readonly value: string; -} - -export class SignatureContractParameter extends ContractParameterBase< - SignatureContractParameter, - SignatureContractParameterJSON, - ContractParameterType.Signature -> { - public static deserializeWireBase(options: DeserializeWireBaseOptions): SignatureContractParameter { - const { reader } = options; - super.deserializeContractParameterBaseWireBase(options); - const value = reader.readVarBytesLE(); - - return new this(value); - } - - public readonly type = ContractParameterType.Signature; - public readonly value: Buffer; - private readonly sizeInternal: () => number; - - public constructor(value: Buffer) { - super(); - this.value = value; - this.sizeInternal = utils.lazy(() => IOHelper.sizeOfVarBytesLE(this.value)); - } - - public get size(): number { - return this.sizeInternal(); - } - - public asBuffer(): Buffer { - return this.value; - } - - public serializeWireBase(writer: BinaryWriter): void { - super.serializeWireBase(writer); - writer.writeVarBytesLE(this.value); - } - - public serializeJSON(_context: SerializeJSONContext): SignatureContractParameterJSON { - return { - type: 'Signature', - value: JSONHelper.writeBuffer(this.value), - }; - } -} diff --git a/packages/neo-one-node-core/src/contractParameter/StringContractParameter.ts b/packages/neo-one-node-core/src/contractParameter/StringContractParameter.ts deleted file mode 100644 index 522aecaed4..0000000000 --- a/packages/neo-one-node-core/src/contractParameter/StringContractParameter.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { BinaryWriter, IOHelper, StringContractParameterJSON, utils } from '@neo-one/client-common'; -import { DeserializeWireBaseOptions, SerializeJSONContext } from '../Serializable'; -import { ContractParameterBase } from './ContractParameterBase'; -import { ContractParameterType } from './ContractParameterType'; - -export class StringContractParameter extends ContractParameterBase< - StringContractParameter, - StringContractParameterJSON, - ContractParameterType.String -> { - public static deserializeWireBase(options: DeserializeWireBaseOptions): StringContractParameter { - const { reader } = options; - super.deserializeContractParameterBaseWireBase(options); - const value = reader.readVarString(); - - return new this(value); - } - - public readonly type = ContractParameterType.String; - public readonly value: string; - private readonly sizeInternal: () => number; - - public constructor(value: string) { - super(); - this.value = value; - this.sizeInternal = utils.lazy(() => IOHelper.sizeOfVarString(this.value)); - } - - public get size(): number { - return this.sizeInternal(); - } - - public asBuffer(): Buffer { - return Buffer.from(this.value, 'utf8'); - } - - public serializeWireBase(writer: BinaryWriter): void { - super.serializeWireBase(writer); - writer.writeVarString(this.value); - } - - public serializeJSON(_context: SerializeJSONContext): StringContractParameterJSON { - return { - type: 'String', - value: this.value, - }; - } -} diff --git a/packages/neo-one-node-core/src/contractParameter/VoidContractParameter.ts b/packages/neo-one-node-core/src/contractParameter/VoidContractParameter.ts deleted file mode 100644 index c417386562..0000000000 --- a/packages/neo-one-node-core/src/contractParameter/VoidContractParameter.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { VoidContractParameterJSON } from '@neo-one/client-common'; -import { DeserializeWireBaseOptions, SerializeJSONContext } from '../Serializable'; -import { ContractParameterBase } from './ContractParameterBase'; -import { ContractParameterType } from './ContractParameterType'; - -export class VoidContractParameter extends ContractParameterBase< - VoidContractParameter, - VoidContractParameterJSON, - ContractParameterType.Void -> { - public static deserializeWireBase(options: DeserializeWireBaseOptions): VoidContractParameter { - super.deserializeContractParameterBaseWireBase(options); - - return new this(); - } - - public readonly type = ContractParameterType.Void; - public readonly size: number = 0; - - public asBoolean(): boolean { - return false; - } - - public serializeJSON(_context: SerializeJSONContext): VoidContractParameterJSON { - return { - type: 'Void', - }; - } -} diff --git a/packages/neo-one-node-core/src/contractParameter/index.ts b/packages/neo-one-node-core/src/contractParameter/index.ts deleted file mode 100644 index fae491c777..0000000000 --- a/packages/neo-one-node-core/src/contractParameter/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -export * from './ArrayContractParameter'; -export * from './BooleanContractParameter'; -export * from './ByteArrayContractParameter'; -export * from './ContractParameter'; -export * from './ContractParameterBase'; -export * from './ContractParameterType'; -export * from './Hash160ContractParameter'; -export * from './Hash256ContractParameter'; -export * from './IntegerContractParameter'; -export * from './InteropInterfaceContractParameter'; -export * from './MapContractParameter'; -export * from './PublicKeyContractParameter'; -export * from './SignatureContractParameter'; -export * from './StringContractParameter'; -export * from './VoidContractParameter'; diff --git a/packages/neo-one-node-core/src/disassembleByteCode.ts b/packages/neo-one-node-core/src/disassembleByteCode.ts deleted file mode 100644 index 31e47d80c2..0000000000 --- a/packages/neo-one-node-core/src/disassembleByteCode.ts +++ /dev/null @@ -1,92 +0,0 @@ -// tslint:disable prefer-switch -import { Byte, isByteCode, Op, OpCode } from '@neo-one/client-common'; -import { BinaryReader, utils } from './utils'; - -const createHexString = (bytes: Buffer): string => { - let mutableResult = ''; - bytes.forEach((byte) => { - mutableResult += `${byte.toString(16).padStart(2, '0')}`; - }); - - return `0x${mutableResult}`; -}; - -interface Line { - readonly pc: number; - readonly value: string; -} - -export const disassembleByteCode = (bytes: Buffer): readonly Line[] => { - const reader = new BinaryReader(bytes); - - const mutableResult: Array = []; - // tslint:disable-next-line no-loop-statement - while (reader.hasMore()) { - const pc = reader.index; - const byte = reader.readUInt8(); - if (!isByteCode(byte)) { - mutableResult.push([pc, 'UNKNOWN', undefined] as const); - continue; - } - - const pushBytes = byte >= Op.PUSHBYTES1 && byte <= Op.PUSHBYTES75; - const pushData1 = byte === Op.PUSHDATA1; - const pushData2 = byte === Op.PUSHDATA2; - const pushData4 = byte === Op.PUSHDATA4; - - const opCode = Byte[byte]; - - if (pushBytes || pushData1 || pushData2 || pushData4) { - let numBytes; - if (pushBytes) { - numBytes = byte; - } else if (pushData1) { - numBytes = reader.readUInt8(); - } else if (pushData2) { - numBytes = reader.readUInt16LE(); - } else { - numBytes = reader.readInt32LE(); - } - mutableResult.push([pc, opCode, createHexString(reader.readBytes(numBytes))] as const); - } else if (byte === Op.JMP || byte === Op.JMPIF || byte === Op.JMPIFNOT || byte === Op.CALL) { - mutableResult.push([pc, opCode, `${reader.readInt16LE()}`] as const); - } else if (byte === Op.APPCALL || byte === Op.TAILCALL) { - const mutableAppBytes = [...reader.readBytes(20)]; - mutableAppBytes.reverse(); - mutableResult.push([pc, opCode, createHexString(Buffer.from(mutableAppBytes))] as const); - } else if (byte === Op.SYSCALL) { - mutableResult.push([pc, opCode, utils.toASCII(reader.readVarBytesLE(252))] as const); - // tslint:disable-next-line strict-type-predicate - } else if (byte === Op.CALL_E || byte === Op.CALL_ET) { - const returnValueCount = reader.readBytes(1); - const parametersCount = reader.readBytes(1); - const mutableAppBytes = [...reader.readBytes(20)]; - mutableAppBytes.reverse(); - mutableResult.push([ - pc, - opCode, - `${createHexString(returnValueCount)} ${createHexString(parametersCount)} ${createHexString( - Buffer.from(mutableAppBytes), - )}`, - ] as const); - } else if (byte === Op.CALL_ED || byte === Op.CALL_EDT || byte === Op.CALL_I) { - const returnValueCount = reader.readBytes(1); - const parametersCount = reader.readBytes(1); - const jumpVal = byte === Op.CALL_I ? reader.readBytes(2) : undefined; - mutableResult.push([ - pc, - opCode, - `${createHexString(returnValueCount)} ${createHexString(parametersCount)} ${ - jumpVal === undefined ? '' : createHexString(jumpVal) - }`, - ] as const); - } else { - mutableResult.push([pc, opCode, undefined] as const); - } - } - - return mutableResult.map(([index, opCode, val]) => ({ - pc: index, - value: `${index.toString().padStart(4, '0')}:${opCode}${val === undefined ? '' : ` ${val}`}`, - })); -}; diff --git a/packages/neo-one-node-core/src/errors.ts b/packages/neo-one-node-core/src/errors.ts index 6facad3624..621129b3ac 100644 --- a/packages/neo-one-node-core/src/errors.ts +++ b/packages/neo-one-node-core/src/errors.ts @@ -21,6 +21,10 @@ export const InvalidConsensusMessageTypeError = makeErrorWithCode( 'INVALID_CONSENSUS_MESSAGE_TYPE', (value: number) => `Expected ConsensusMessageType, found: ${value.toString(16)}`, ); +export const InvalidChangeViewReasonError = makeErrorWithCode( + 'INVALID_CHANGE_VIEW_REASON', + (value: number) => `Expected ChangeViewReason, found: ${value.toString(16)}`, +); export const UnsignedBlockError = makeErrorWithCode( 'UNSIGNED_BLOCK', (stringHash: string) => `Block script does not exist because it has not been signed. @ block with hash ${stringHash}`, @@ -29,3 +33,44 @@ export const InvalidStorageChangeTypeError = makeErrorWithCode( 'INVALID_STORAGE_CHANGE_TYPE', (storageChangeType: number) => `Invalid Storage Change Type: ${storageChangeType}`, ); +export const InvalidIntegerStackItemError = makeErrorWithCode( + 'INVALID_INTEGER_STACK_ITEM', + (size: number) => `value of of size ${size} too large to be represented as a BN, expected < 32`, +); +export const InvalidStackItemCastError = makeErrorWithCode( + 'INVALID_STACK_ITEM_CAST_OPERATION', + () => 'invalid stack item conversion operation', +); +export const InvalidInteropInterfaceValueError = makeErrorWithCode( + 'INVALID_INTEROP_INTERFACE_VALUE', + () => 'value must be defined, found undefined', +); +export const InvalidStackItemError = makeErrorWithCode( + 'INVALID_STACK_ITEM_ERROR', + () => 'Invalid StackItem encountered', +); +export const InvalidStackItemTypeError = makeErrorWithCode( + 'INVALID_STACK_ITEM_TYPE_ERROR', + (type: string, found?: string) => + `Invalid StackItemType, expected: ${type}${found !== undefined ? ` found: ${found}` : ''}`, +); +export const InvalidPrimitiveStackItemError = makeErrorWithCode( + 'INVALID_PRIMITIVE_STACK_ITEM_ERROR', + () => 'Invalid PrimitiveStackItem found; expected one of [Boolean, ByteString, Integer].', +); +export const InvalidTransactionConsensusOptionsError = makeErrorWithCode( + 'INVALID_TRANSACTION_CONSENSUS_OPTIONS_ERROR', + (property: string) => `Expected fully formed transaction for this method, but ${property} was undefined.`, +); +export const InvalidServerCapabilityTypeError = makeErrorWithCode( + 'INVALID_SERVER_CAPABILITY_TYPE_ERROR', + (value: number) => `Expected type to be 0x01 or 0x02, found ${value}`, +); +export const InvalidFullNodeCapabilityTypeError = makeErrorWithCode( + 'INVALID_FULL_NODE_CAPABILITY_TYPE_ERROR', + (value: number) => `Expected type to be 0x10, found ${value}`, +); +export const InvalidOpCodeError = makeErrorWithCode( + 'INVALID_OP_CODE_ERROR', + (value: number) => `Cannot find fee for OpCode ${value}.`, +); diff --git a/packages/neo-one-node-core/src/index.ts b/packages/neo-one-node-core/src/index.ts index 282e730450..040a19d6ec 100644 --- a/packages/neo-one-node-core/src/index.ts +++ b/packages/neo-one-node-core/src/index.ts @@ -1,38 +1,44 @@ -export * from './Account'; -export * from './AccountInput'; -export * from './AccountUnclaimed'; -export * from './AccountUnspent'; -export * from './Asset'; -export * from './AssetType'; export * from './Block'; export * from './BlockBase'; -export * from './BlockData'; export * from './Blockchain'; -export * from './CallReceipt'; -export * from './Contract'; -export * from './ContractPropertyState'; +export * from './consensus'; +export * from './ConsensusData'; +export * from './ContractParametersContext'; +export * from './manifest'; +export * from './ContractIDState'; +export * from './ContractState'; +export * from './constants'; +export * from './crypto'; export * from './Equatable'; +export * from './HashIndexState'; export * from './Header'; -export * from './InvocationData'; -export * from './Node'; -export * from './ScriptContainer'; +export * from './HeaderHashList'; +export * from './Native'; +export * from './network'; +export * from './Notification'; +export * from './OracleRequest'; +export * from './payload'; +export * from './DesignationRole'; export * from './Serializable'; export * from './Settings'; +export * from './Signer'; +export * from './Signers'; export * from './Storage'; -export * from './StorageFlags'; export * from './StorageItem'; -export * from './TransactionData'; -export * from './Validator'; -export * from './ValidatorsCount'; -export * from './Witness'; -export * from './action'; -export * from './contractParameter'; -export * from './crypto'; -export * from './disassembleByteCode'; -export * from './invocationResult'; -export * from './net'; -export * from './payload'; -export * from './storageChange'; +export * from './StorageKey'; +export * from './StackItems'; export * from './transaction'; +export * from './TransactionVerificationContext'; +export * from './TrimmedBlock'; export * from './utils'; +export * from './Verifiable'; export * from './vm'; +export * from './Witness'; +export * from './CallFlags'; +export * from './TransactionData'; +export * from './Node'; +export * from './Nep5Balance'; +export * from './Nep5Transfer'; +export * from './Nep5BalanceKey'; +export * from './Nep5TransferKey'; +export * from './ApplicationLog'; diff --git a/packages/neo-one-node-core/src/invocationResult/InvocationResult.ts b/packages/neo-one-node-core/src/invocationResult/InvocationResult.ts deleted file mode 100644 index 771ce9110d..0000000000 --- a/packages/neo-one-node-core/src/invocationResult/InvocationResult.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { assertVMState, VMState } from '@neo-one/client-common'; -import { createDeserializeWire, DeserializeWireBaseOptions } from '../Serializable'; -import { InvocationResultError } from './InvocationResultError'; -import { InvocationResultSuccess } from './InvocationResultSuccess'; - -export type InvocationResult = InvocationResultSuccess | InvocationResultError; - -export const deserializeInvocationResultWireBase = (options: DeserializeWireBaseOptions): InvocationResult => { - const { reader } = options; - const state = assertVMState(reader.clone().readUInt8()); - switch (state) { - case VMState.Fault: - return InvocationResultError.deserializeWireBase(options); - case VMState.Halt: - return InvocationResultSuccess.deserializeWireBase(options); - default: - throw new Error('Invalid VM state'); - } -}; - -export const deserializeInvocationResultWire = createDeserializeWire(deserializeInvocationResultWireBase); diff --git a/packages/neo-one-node-core/src/invocationResult/InvocationResultBase.ts b/packages/neo-one-node-core/src/invocationResult/InvocationResultBase.ts deleted file mode 100644 index 9fa94b14b5..0000000000 --- a/packages/neo-one-node-core/src/invocationResult/InvocationResultBase.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { assertVMState, BinaryWriter, IOHelper, utils, VMState } from '@neo-one/client-common'; -import { BN } from 'bn.js'; -import { ContractParameter, deserializeContractParameterWireBase } from '../contractParameter'; -import { - createSerializeWire, - DeserializeWireBaseOptions, - DeserializeWireOptions, - SerializableWire, - SerializeWire, -} from '../Serializable'; -import { BinaryReader } from '../utils'; -import { InvocationResult } from './InvocationResult'; - -export interface InvocationResultBaseAdd { - readonly state: T; - readonly gasConsumed: BN; - readonly gasCost: BN; - readonly stack: readonly ContractParameter[]; -} - -export abstract class InvocationResultBase implements SerializableWire { - public static deserializeInvocationResultWireBase( - options: DeserializeWireBaseOptions, - ): { - readonly state: VMState; - readonly gasConsumed: BN; - readonly gasCost: BN; - readonly stack: readonly ContractParameter[]; - } { - const { reader } = options; - const state = reader.readUInt8(); - const gasConsumed = reader.readFixed8(); - const gasCost = reader.readFixed8(); - const stack = reader.readArray(() => deserializeContractParameterWireBase(options)); - - return { - state: assertVMState(state), - gasConsumed, - gasCost, - stack, - }; - } - - public static deserializeWireBase(_options: DeserializeWireBaseOptions): InvocationResultBase { - throw new Error('Not Implemented'); - } - - public static deserializeWire(options: DeserializeWireOptions): InvocationResultBase { - return this.deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); - } - - public readonly state: T; - public readonly gasConsumed: BN; - public readonly gasCost: BN; - public readonly stack: readonly ContractParameter[]; - public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - protected readonly sizeExclusive: () => number; - private readonly sizeInternal: () => number; - - public constructor({ state, gasConsumed, gasCost, stack }: InvocationResultBaseAdd) { - this.state = state; - this.gasConsumed = gasConsumed; - this.gasCost = gasCost; - this.stack = stack; - this.sizeExclusive = () => 0; - this.sizeInternal = utils.lazy( - () => - this.sizeExclusive() + - IOHelper.sizeOfUInt8 + - IOHelper.sizeOfFixed8 + - IOHelper.sizeOfFixed8 + - IOHelper.sizeOfArray(this.stack, (value) => value.size), - ); - } - - public get size(): number { - return this.sizeInternal(); - } - - public serializeWireBase(writer: BinaryWriter): void { - writer.writeUInt8(this.state); - writer.writeFixed8(this.gasConsumed); - writer.writeFixed8(this.gasCost); - writer.writeArray(this.stack, (contractParameter) => contractParameter.serializeWireBase(writer)); - } -} diff --git a/packages/neo-one-node-core/src/invocationResult/InvocationResultError.ts b/packages/neo-one-node-core/src/invocationResult/InvocationResultError.ts deleted file mode 100644 index d252a79784..0000000000 --- a/packages/neo-one-node-core/src/invocationResult/InvocationResultError.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { - BinaryWriter, - InvalidFormatError, - InvocationResultErrorJSON, - IOHelper, - JSONHelper, - utils, - VMState, -} from '@neo-one/client-common'; -import { BN } from 'bn.js'; -import { ContractParameter } from '../contractParameter'; -import { DeserializeWireBaseOptions, SerializableJSON, SerializeJSONContext } from '../Serializable'; -import { InvocationResultBase } from './InvocationResultBase'; - -export interface InvocationResultErrorAdd { - readonly gasConsumed: BN; - readonly gasCost: BN; - readonly stack: readonly ContractParameter[]; - readonly message: string; -} - -const MAX_SIZE = 1024; - -export class InvocationResultError extends InvocationResultBase - implements SerializableJSON { - public static deserializeWireBase(options: DeserializeWireBaseOptions): InvocationResultError { - const { reader } = options; - const { state, gasConsumed, gasCost, stack } = super.deserializeInvocationResultWireBase(options); - if (state !== VMState.Fault) { - throw new InvalidFormatError(`Expected VMState to be: ${VMState.Fault}. Received: ${state}`); - } - const message = reader.readVarString(MAX_SIZE); - - return new this({ gasConsumed, gasCost, stack, message }); - } - - public readonly message: string; - protected readonly sizeExclusive: () => number; - - public constructor({ gasConsumed, gasCost, stack, message }: InvocationResultErrorAdd) { - super({ state: VMState.Fault, gasConsumed, gasCost, stack }); - this.message = message; - this.sizeExclusive = utils.lazy(() => IOHelper.sizeOfVarString(this.message)); - } - - public serializeWireBase(writer: BinaryWriter): void { - super.serializeWireBase(writer); - writer.writeVarString(this.message, MAX_SIZE); - } - - public serializeJSON(context: SerializeJSONContext): InvocationResultErrorJSON { - return { - state: VMState.Fault, - gas_consumed: JSONHelper.writeFixed8(this.gasConsumed), - gas_cost: JSONHelper.writeFixed8(this.gasCost), - stack: this.stack.map((value) => value.serializeJSON(context)), - message: this.message, - }; - } -} diff --git a/packages/neo-one-node-core/src/invocationResult/InvocationResultSuccess.ts b/packages/neo-one-node-core/src/invocationResult/InvocationResultSuccess.ts deleted file mode 100644 index 4abaff2624..0000000000 --- a/packages/neo-one-node-core/src/invocationResult/InvocationResultSuccess.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { InvalidFormatError, InvocationResultSuccessJSON, JSONHelper, VMState } from '@neo-one/client-common'; -import { BN } from 'bn.js'; -import { ContractParameter } from '../contractParameter'; -import { DeserializeWireBaseOptions, SerializableJSON, SerializeJSONContext } from '../Serializable'; -import { InvocationResultBase } from './InvocationResultBase'; - -export interface InvocationResultSuccessAdd { - readonly gasConsumed: BN; - readonly gasCost: BN; - readonly stack: readonly ContractParameter[]; -} - -export class InvocationResultSuccess extends InvocationResultBase - implements SerializableJSON { - public static deserializeWireBase(options: DeserializeWireBaseOptions): InvocationResultSuccess { - const { state, gasConsumed, gasCost, stack } = super.deserializeInvocationResultWireBase(options); - if (state !== VMState.Halt) { - throw new InvalidFormatError(`Expected VMState state to be ${VMState.Halt}. Received: ${state}.`); - } - - return new this({ gasConsumed, gasCost, stack }); - } - - public constructor({ gasConsumed, gasCost, stack }: InvocationResultSuccessAdd) { - super({ state: VMState.Halt, gasConsumed, gasCost, stack }); - } - - public serializeJSON(context: SerializeJSONContext): InvocationResultSuccessJSON { - return { - state: VMState.Halt, - gas_consumed: JSONHelper.writeFixed8(this.gasConsumed), - gas_cost: JSONHelper.writeFixed8(this.gasCost), - stack: this.stack.map((value) => value.serializeJSON(context)), - }; - } -} diff --git a/packages/neo-one-node-core/src/invocationResult/index.ts b/packages/neo-one-node-core/src/invocationResult/index.ts deleted file mode 100644 index 99cd5f6049..0000000000 --- a/packages/neo-one-node-core/src/invocationResult/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './InvocationResult'; -export * from './InvocationResultBase'; -export * from './InvocationResultError'; -export * from './InvocationResultSuccess'; diff --git a/packages/neo-one-node-core/src/manifest/ContractABI.ts b/packages/neo-one-node-core/src/manifest/ContractABI.ts new file mode 100644 index 0000000000..1f72a2b304 --- /dev/null +++ b/packages/neo-one-node-core/src/manifest/ContractABI.ts @@ -0,0 +1,31 @@ +import { ContractABIJSON, JSONHelper, utils } from '@neo-one/client-common'; +import { ContractABIModel } from '@neo-one/client-full-common'; +import _ from 'lodash'; +import { ContractEventDescriptor } from './ContractEventDescriptor'; +import { ContractMethodDescriptor } from './ContractMethodDescriptor'; + +export class ContractABI extends ContractABIModel { + public static deserializeJSON(json: ContractABIJSON): ContractABI { + const hash = JSONHelper.readUInt160(json.hash); + const methods = json.methods.map((method) => ContractMethodDescriptor.deserializeJSON(method)); + const events = json.events.map((event) => ContractEventDescriptor.deserializeJSON(event)); + + return new this({ + hash, + methods, + events, + }); + } + + private readonly dictionaryInternal = utils.lazy(() => + _.fromPairs(this.methods.map((method) => [method.name, method])), + ); + + public getMethod(name: string) { + try { + return this.dictionaryInternal()[name]; + } catch { + return undefined; + } + } +} diff --git a/packages/neo-one-node-core/src/manifest/ContractEventDescriptor.ts b/packages/neo-one-node-core/src/manifest/ContractEventDescriptor.ts new file mode 100644 index 0000000000..d5afd9b948 --- /dev/null +++ b/packages/neo-one-node-core/src/manifest/ContractEventDescriptor.ts @@ -0,0 +1,15 @@ +import { ContractEventDescriptorJSON } from '@neo-one/client-common'; +import { ContractEventDescriptorModel } from '@neo-one/client-full-common'; +import { ContractParameterDefinition } from './ContractParameterDefinition'; + +export class ContractEventDescriptor extends ContractEventDescriptorModel { + public static deserializeJSON(json: ContractEventDescriptorJSON): ContractEventDescriptor { + const name = json.name; + const parameters = json.parameters.map((param) => ContractParameterDefinition.deserializeJSON(param)); + + return new this({ + name, + parameters, + }); + } +} diff --git a/packages/neo-one-node-core/src/manifest/ContractGroup.ts b/packages/neo-one-node-core/src/manifest/ContractGroup.ts new file mode 100644 index 0000000000..7ee64e17b1 --- /dev/null +++ b/packages/neo-one-node-core/src/manifest/ContractGroup.ts @@ -0,0 +1,22 @@ +import { common, ContractGroupJSON, crypto, JSONHelper, UInt160 } from '@neo-one/client-common'; +import { ContractGroupModel } from '@neo-one/client-full-common'; + +export class ContractGroup extends ContractGroupModel { + public static deserializeJSON(json: ContractGroupJSON) { + const publicKey = common.stringToECPoint(json.publicKey); + const signature = JSONHelper.readBuffer(json.signature); + + return new ContractGroup({ + publicKey, + signature, + }); + } + + public isValid(hash: UInt160) { + return crypto.verify({ + message: hash, + signature: this.signature, + publicKey: this.publicKey, + }); + } +} diff --git a/packages/neo-one-node-core/src/manifest/ContractManifest.ts b/packages/neo-one-node-core/src/manifest/ContractManifest.ts new file mode 100644 index 0000000000..474a90b3c7 --- /dev/null +++ b/packages/neo-one-node-core/src/manifest/ContractManifest.ts @@ -0,0 +1,53 @@ +import { ContractManifestJSON, IOHelper, JSONHelper, UInt160 } from '@neo-one/client-common'; +import { ContractManifestModel } from '@neo-one/client-full-common'; +import { BinaryReader, utils } from '../utils'; +import { ContractABI } from './ContractABI'; +import { ContractGroup } from './ContractGroup'; +import { ContractPermission } from './ContractPermission'; + +export class ContractManifest extends ContractManifestModel { + public static parseBytes(bytes: Buffer) { + const reader = new BinaryReader(bytes); + return this.deserializeJSON(JSON.parse(reader.readVarString(this.maxLength))); + } + + private static deserializeJSON(json: ContractManifestJSON) { + const groups = json.groups.map((group) => ContractGroup.deserializeJSON(group)); + const supportedStandards = json.supportedstandards; + const abi = ContractABI.deserializeJSON(json.abi); + const permissions = json.permissions.map((permission) => ContractPermission.deserializeJSON(permission)); + const trusts = utils.wildCardFromJSON(json.trusts, JSONHelper.readUInt160); + const extra = json.extra; + + return new this({ + groups, + supportedStandards, + abi, + permissions, + trusts, + extra, + }); + } + + private readonly sizeInternal = utils.lazy(() => { + const size = Buffer.from(JSON.stringify(this.serializeJSON())).byteLength; + + return IOHelper.sizeOfVarUIntLE(size) + size; + }); + + public get size() { + return this.sizeInternal(); + } + + public canCall(manifest: ContractManifest, method: string) { + return this.permissions.some((permission) => permission.isAllowed(manifest, method)); + } + + public isValid(hash: UInt160) { + if (!this.abi.hash.equals(hash)) { + return false; + } + + return this.groups.every((group) => group.isValid(hash)); + } +} diff --git a/packages/neo-one-node-core/src/manifest/ContractMethodDescriptor.ts b/packages/neo-one-node-core/src/manifest/ContractMethodDescriptor.ts new file mode 100644 index 0000000000..3d16c759f8 --- /dev/null +++ b/packages/neo-one-node-core/src/manifest/ContractMethodDescriptor.ts @@ -0,0 +1,21 @@ +import { ContractMethodDescriptorJSON, toContractParameterType } from '@neo-one/client-common'; +import { ContractMethodDescriptorModel } from '@neo-one/client-full-common'; +import { ContractParameterDefinition } from './ContractParameterDefinition'; + +export class ContractMethodDescriptor extends ContractMethodDescriptorModel { + public static deserializeJSON(json: ContractMethodDescriptorJSON): ContractMethodDescriptor { + const name = json.name; + const parameters = json.parameters.map((param) => ContractParameterDefinition.deserializeJSON(param)); + const offset = json.offset; + const returnType = toContractParameterType(json.returntype); + const safe = json.safe; + + return new this({ + name, + parameters, + offset, + returnType, + safe, + }); + } +} diff --git a/packages/neo-one-node-core/src/manifest/ContractParameterDefinition.ts b/packages/neo-one-node-core/src/manifest/ContractParameterDefinition.ts new file mode 100644 index 0000000000..9d1bcfe72d --- /dev/null +++ b/packages/neo-one-node-core/src/manifest/ContractParameterDefinition.ts @@ -0,0 +1,14 @@ +import { ContractParameterDefinitionJSON, toContractParameterType } from '@neo-one/client-common'; +import { ContractParameterDefinitionModel } from '@neo-one/client-full-common'; + +export class ContractParameterDefinition extends ContractParameterDefinitionModel { + public static deserializeJSON(json: ContractParameterDefinitionJSON): ContractParameterDefinition { + const name = json.name; + const type = toContractParameterType(json.type); + + return new this({ + name, + type, + }); + } +} diff --git a/packages/neo-one-node-core/src/manifest/ContractPermission.ts b/packages/neo-one-node-core/src/manifest/ContractPermission.ts new file mode 100644 index 0000000000..25bc808831 --- /dev/null +++ b/packages/neo-one-node-core/src/manifest/ContractPermission.ts @@ -0,0 +1,37 @@ +import { ContractPermissionJSON, ECPoint, UInt160 } from '@neo-one/client-common'; +import { ContractPermissionModel } from '@neo-one/client-full-common'; +import { utils } from '../utils'; +import { ContractManifest } from './ContractManifest'; +import { ContractPermissionDescriptor } from './ContractPermissionDescriptor'; + +export class ContractPermission extends ContractPermissionModel { + public static readonly defaultPermission = new ContractPermission({ + contract: new ContractPermissionDescriptor(), + methods: [], + }); + + public static deserializeJSON(json: ContractPermissionJSON): ContractPermission { + const contract = ContractPermissionDescriptor.deserializeJSON(json.contract); + const methods = utils.wildCardFromJSON(json.methods, (method) => method); + + return new this({ + contract, + methods, + }); + } + + public isAllowed(manifest: ContractManifest, method: string) { + if (this.contract.isHash) { + if (!(this.contract.hashOrGroup as UInt160).equals(manifest.hash)) { + return false; + } + } else if ( + this.contract.isGroup && + manifest.groups.every((group) => !group.publicKey.equals(this.contract.hashOrGroup as ECPoint)) + ) { + return false; + } + + return this.methods === '*' || this.methods.includes(method); + } +} diff --git a/packages/neo-one-node-core/src/manifest/ContractPermissionDescriptor.ts b/packages/neo-one-node-core/src/manifest/ContractPermissionDescriptor.ts new file mode 100644 index 0000000000..3ae724009b --- /dev/null +++ b/packages/neo-one-node-core/src/manifest/ContractPermissionDescriptor.ts @@ -0,0 +1,20 @@ +import { ContractPermissionDescriptorJSON, InvalidFormatError, JSONHelper } from '@neo-one/client-common'; +import { ContractPermissionDescriptorModel } from '@neo-one/client-full-common'; + +export class ContractPermissionDescriptor extends ContractPermissionDescriptorModel { + public static deserializeJSON(json: ContractPermissionDescriptorJSON): ContractPermissionDescriptor { + // TODO: Verify this is even close to being the same + const jsonString = JSON.stringify(json); + if (jsonString.length === 42) { + return new ContractPermissionDescriptor({ hashOrGroup: JSONHelper.readUInt160(jsonString) }); + } + if (jsonString.length === 66) { + return new ContractPermissionDescriptor({ hashOrGroup: JSONHelper.readECPoint(jsonString) }); + } + if (jsonString === '"*"') { + return new ContractPermissionDescriptor(); + } + + throw new InvalidFormatError(); + } +} diff --git a/packages/neo-one-node-core/src/manifest/index.ts b/packages/neo-one-node-core/src/manifest/index.ts new file mode 100644 index 0000000000..34e15e5d5a --- /dev/null +++ b/packages/neo-one-node-core/src/manifest/index.ts @@ -0,0 +1,8 @@ +export * from './ContractABI'; +export * from './ContractEventDescriptor'; +export * from './ContractGroup'; +export * from './ContractManifest'; +export * from './ContractMethodDescriptor'; +export * from './ContractParameterDefinition'; +export * from './ContractPermission'; +export * from './ContractPermissionDescriptor'; diff --git a/packages/neo-one-node-core/src/net/ConnectedPeer.ts b/packages/neo-one-node-core/src/network/ConnectedPeer.ts similarity index 100% rename from packages/neo-one-node-core/src/net/ConnectedPeer.ts rename to packages/neo-one-node-core/src/network/ConnectedPeer.ts diff --git a/packages/neo-one-node-core/src/net/Network.ts b/packages/neo-one-node-core/src/network/Network.ts similarity index 100% rename from packages/neo-one-node-core/src/net/Network.ts rename to packages/neo-one-node-core/src/network/Network.ts diff --git a/packages/neo-one-node-core/src/net/Peer.ts b/packages/neo-one-node-core/src/network/Peer.ts similarity index 100% rename from packages/neo-one-node-core/src/net/Peer.ts rename to packages/neo-one-node-core/src/network/Peer.ts diff --git a/packages/neo-one-node-core/src/network/capabilities/FullNodeCapability.ts b/packages/neo-one-node-core/src/network/capabilities/FullNodeCapability.ts new file mode 100644 index 0000000000..155fea4292 --- /dev/null +++ b/packages/neo-one-node-core/src/network/capabilities/FullNodeCapability.ts @@ -0,0 +1,45 @@ +import { BinaryWriter, createSerializeWire, InvalidFormatError } from '@neo-one/client-common'; +import { DeserializeWireBaseOptions, DeserializeWireOptions } from '../../Serializable'; +import { BinaryReader } from '../../utils'; +import { NodeCapabilityBase } from './NodeCapabilityBase'; +import { NodeCapabilityType } from './NodeCapabilityType'; + +export interface FullNodeCapabilityAdd { + readonly startHeight: number; +} + +export class FullNodeCapability extends NodeCapabilityBase { + public static deserializeWireBase(options: DeserializeWireBaseOptions): FullNodeCapability { + const { reader } = options; + const { type } = super.deserializeWireBase(options); + if (type !== NodeCapabilityType.FullNode) { + throw new InvalidFormatError(); + } + const startHeight = reader.readUInt32LE(); + + return new this({ + startHeight, + }); + } + + public static deserializeWire(options: DeserializeWireOptions): FullNodeCapability { + return this.deserializeWireBase({ + reader: new BinaryReader(options.buffer), + context: options.context, + }); + } + + public readonly startHeight: number; + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + + public constructor({ startHeight }: FullNodeCapabilityAdd) { + super({ type: NodeCapabilityType.FullNode }); + + this.startHeight = startHeight; + } + + public serializeWireBase(writer: BinaryWriter) { + super.serializeWireBase(writer); + writer.writeUInt32LE(this.startHeight); + } +} diff --git a/packages/neo-one-node-core/src/network/capabilities/NodeCapability.ts b/packages/neo-one-node-core/src/network/capabilities/NodeCapability.ts new file mode 100644 index 0000000000..75baee6a7f --- /dev/null +++ b/packages/neo-one-node-core/src/network/capabilities/NodeCapability.ts @@ -0,0 +1,55 @@ +import { InvalidFormatError } from '@neo-one/client-common'; +import { utils } from '@neo-one/utils'; +import { DeserializeWireBaseOptions, DeserializeWireOptions } from '../../Serializable'; +import { BinaryReader } from '../../utils'; +import { FullNodeCapability } from './FullNodeCapability'; +import { assertNodeCapabilityType, NodeCapabilityType } from './NodeCapabilityType'; +import { ServerCapability } from './ServerCapability'; + +export type NodeCapability = ServerCapability | FullNodeCapability; + +export const deserializeNodeCapabilityWireBase = (options: DeserializeWireBaseOptions): NodeCapability => { + const { reader } = options; + const type = assertNodeCapabilityType(reader.clone().readInt8()); + + switch (type) { + case NodeCapabilityType.TcpServer: + case NodeCapabilityType.WsServer: + return ServerCapability.deserializeWireBase(options); + + case NodeCapabilityType.FullNode: + return FullNodeCapability.deserializeWireBase(options); + + default: + utils.assertNever(type); + + throw new InvalidFormatError(`invalid NodeCapabilityType found: ${type}`); + } +}; + +export const deserializeNodeCapability = (options: DeserializeWireOptions) => + deserializeNodeCapabilityWireBase({ + reader: new BinaryReader(options.buffer), + context: options.context, + }); + +export const isServerCapability = (value: NodeCapability): value is ServerCapability => + value.type === NodeCapabilityType.TcpServer || value.type === NodeCapabilityType.WsServer; +export const isFullNodeCapability = (value: NodeCapability): value is FullNodeCapability => + value.type === NodeCapabilityType.FullNode; + +export const assertServerCapability = (value: NodeCapability): ServerCapability => { + if (isServerCapability(value)) { + return value; + } + + throw new InvalidFormatError(); +}; + +export const assertFullNodeCapability = (value: NodeCapability): FullNodeCapability => { + if (isFullNodeCapability(value)) { + return value; + } + + throw new InvalidFormatError(); +}; diff --git a/packages/neo-one-node-core/src/network/capabilities/NodeCapabilityBase.ts b/packages/neo-one-node-core/src/network/capabilities/NodeCapabilityBase.ts new file mode 100644 index 0000000000..84bf0cb94c --- /dev/null +++ b/packages/neo-one-node-core/src/network/capabilities/NodeCapabilityBase.ts @@ -0,0 +1,35 @@ +import { BinaryWriter } from '@neo-one/client-common'; +import { DeserializeWireBaseOptions, DeserializeWireOptions } from '../../Serializable'; +import { BinaryReader } from '../../utils'; +import { assertNodeCapabilityType, NodeCapabilityType } from './NodeCapabilityType'; + +export interface NodeCapabilityBaseAdd { + readonly type: NodeCapabilityType; +} + +export class NodeCapabilityBase { + public static deserializeWireBase(options: DeserializeWireBaseOptions): NodeCapabilityBaseAdd { + const { reader } = options; + const type = assertNodeCapabilityType(reader.readInt8()); + + return { + type, + }; + } + + public static deserializeWire(options: DeserializeWireOptions) { + return this.deserializeWireBase({ + reader: new BinaryReader(options.buffer), + context: options.context, + }); + } + public readonly type: NodeCapabilityType; + + public constructor({ type }: NodeCapabilityBaseAdd) { + this.type = type; + } + + public serializeWireBase(writer: BinaryWriter) { + writer.writeUInt8(this.type); + } +} diff --git a/packages/neo-one-node-core/src/network/capabilities/NodeCapabilityType.ts b/packages/neo-one-node-core/src/network/capabilities/NodeCapabilityType.ts new file mode 100644 index 0000000000..e6d5787f13 --- /dev/null +++ b/packages/neo-one-node-core/src/network/capabilities/NodeCapabilityType.ts @@ -0,0 +1,19 @@ +import { InvalidFormatError } from '@neo-one/client-common'; + +export enum NodeCapabilityType { + TcpServer = 0x01, + WsServer = 0x02, + FullNode = 0x10, +} + +export const isNodeCapabilityType = (value: number): value is NodeCapabilityType => + // tslint:disable-next-line: strict-type-predicates + NodeCapabilityType[value] !== undefined; + +export const assertNodeCapabilityType = (value: number): NodeCapabilityType => { + if (isNodeCapabilityType(value)) { + return value; + } + + throw new InvalidFormatError(`Expected NodeCapabilityType, found: ${value}`); +}; diff --git a/packages/neo-one-node-core/src/network/capabilities/ServerCapability.ts b/packages/neo-one-node-core/src/network/capabilities/ServerCapability.ts new file mode 100644 index 0000000000..0c8d42509a --- /dev/null +++ b/packages/neo-one-node-core/src/network/capabilities/ServerCapability.ts @@ -0,0 +1,48 @@ +import { BinaryWriter, createSerializeWire } from '@neo-one/client-common'; +import { InvalidServerCapabilityTypeError } from '../../errors'; +import { DeserializeWireBaseOptions, DeserializeWireOptions } from '../../Serializable'; +import { BinaryReader } from '../../utils'; +import { NodeCapabilityBase, NodeCapabilityBaseAdd } from './NodeCapabilityBase'; +import { NodeCapabilityType } from './NodeCapabilityType'; + +export interface ServerCapabilityAdd extends NodeCapabilityBaseAdd { + readonly port: number; +} + +export class ServerCapability extends NodeCapabilityBase { + public static deserializeWireBase(options: DeserializeWireBaseOptions): ServerCapability { + const { type } = super.deserializeWireBase(options); + const { reader } = options; + + const port = reader.readUInt16LE(); + + return new this({ + type, + port, + }); + } + + public static deserializeWire(options: DeserializeWireOptions): ServerCapability { + return this.deserializeWireBase({ + reader: new BinaryReader(options.buffer), + context: options.context, + }); + } + + public readonly port: number; + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + + public constructor({ type, port }: ServerCapabilityAdd) { + super({ type }); + if (type !== NodeCapabilityType.TcpServer && type !== NodeCapabilityType.WsServer) { + throw new InvalidServerCapabilityTypeError(type); + } + + this.port = port; + } + + public serializeWireBase(writer: BinaryWriter) { + super.serializeWireBase(writer); + writer.writeUInt16LE(this.port); + } +} diff --git a/packages/neo-one-node-core/src/network/capabilities/index.ts b/packages/neo-one-node-core/src/network/capabilities/index.ts new file mode 100644 index 0000000000..d6a34ba537 --- /dev/null +++ b/packages/neo-one-node-core/src/network/capabilities/index.ts @@ -0,0 +1,5 @@ +export * from './FullNodeCapability'; +export * from './NodeCapability'; +export * from './NodeCapabilityBase'; +export * from './NodeCapabilityType'; +export * from './ServerCapability'; diff --git a/packages/neo-one-node-core/src/net/event.ts b/packages/neo-one-node-core/src/network/event.ts similarity index 100% rename from packages/neo-one-node-core/src/net/event.ts rename to packages/neo-one-node-core/src/network/event.ts diff --git a/packages/neo-one-node-core/src/net/index.ts b/packages/neo-one-node-core/src/network/index.ts similarity index 80% rename from packages/neo-one-node-core/src/net/index.ts rename to packages/neo-one-node-core/src/network/index.ts index f59335a958..5a3d9a669d 100644 --- a/packages/neo-one-node-core/src/net/index.ts +++ b/packages/neo-one-node-core/src/network/index.ts @@ -1,3 +1,4 @@ +export * from './capabilities'; export * from './ConnectedPeer'; export * from './event'; export * from './Network'; diff --git a/packages/neo-one-node-core/src/net/types.ts b/packages/neo-one-node-core/src/network/types.ts similarity index 100% rename from packages/neo-one-node-core/src/net/types.ts rename to packages/neo-one-node-core/src/network/types.ts diff --git a/packages/neo-one-node-core/src/payload/ChangeViewPayloadCompact.ts b/packages/neo-one-node-core/src/payload/ChangeViewPayloadCompact.ts new file mode 100644 index 0000000000..55c637f846 --- /dev/null +++ b/packages/neo-one-node-core/src/payload/ChangeViewPayloadCompact.ts @@ -0,0 +1,68 @@ +import { BinaryWriter, createSerializeWire, SerializableWire } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import { DeserializeWireBaseOptions, DeserializeWireOptions } from '../Serializable'; +import { BinaryReader } from '../utils'; +import { ConsensusPayload } from './ConsensusPayload'; +import { ChangeViewConsensusMessage } from './message'; + +export interface ChangeViewPayloadCompactAdd { + readonly validatorIndex: number; + readonly originalViewNumber: number; + readonly timestamp: BN; + readonly invocationScript: Buffer; +} + +export class ChangeViewPayloadCompact implements SerializableWire { + public static fromPayload(payload: ConsensusPayload): ChangeViewPayloadCompact { + const message = payload.getDeserializedMessage(); + + return new ChangeViewPayloadCompact({ + validatorIndex: payload.validatorIndex, + originalViewNumber: message.viewNumber, + timestamp: message.timestamp, + invocationScript: payload.witness.invocation, + }); + } + + public static deserializeWireBase(options: DeserializeWireBaseOptions): ChangeViewPayloadCompact { + const { reader } = options; + const validatorIndex = reader.readUInt16LE(); + const originalViewNumber = reader.readUInt8(); + const timestamp = reader.readUInt64LE(); + const invocationScript = reader.readVarBytesLE(1024); + + return new ChangeViewPayloadCompact({ + validatorIndex, + originalViewNumber, + timestamp, + invocationScript, + }); + } + + public static deserializeWire(options: DeserializeWireOptions): ChangeViewPayloadCompact { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } + + public readonly validatorIndex: number; + public readonly originalViewNumber: number; + public readonly timestamp: BN; + public readonly invocationScript: Buffer; + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + + public constructor({ validatorIndex, originalViewNumber, timestamp, invocationScript }: ChangeViewPayloadCompactAdd) { + this.validatorIndex = validatorIndex; + this.originalViewNumber = originalViewNumber; + this.timestamp = timestamp; + this.invocationScript = invocationScript; + } + + public serializeWireBase(writer: BinaryWriter) { + writer.writeInt16LE(this.validatorIndex); + writer.writeUInt8(this.originalViewNumber); + writer.writeUInt64LE(this.timestamp); + writer.writeVarBytesLE(this.invocationScript); + } +} diff --git a/packages/neo-one-node-core/src/payload/CommitPayloadCompact.ts b/packages/neo-one-node-core/src/payload/CommitPayloadCompact.ts new file mode 100644 index 0000000000..87643adde6 --- /dev/null +++ b/packages/neo-one-node-core/src/payload/CommitPayloadCompact.ts @@ -0,0 +1,66 @@ +import { BinaryWriter, createSerializeWire, SerializableWire } from '@neo-one/client-common'; +import { DeserializeWireBaseOptions, DeserializeWireOptions } from '../Serializable'; +import { BinaryReader } from '../utils'; +import { ConsensusPayload } from './ConsensusPayload'; +import { CommitConsensusMessage } from './message'; + +export interface CommitPayloadCompactAdd { + readonly viewNumber: number; + readonly validatorIndex: number; + readonly signature: Buffer; + readonly invocationScript: Buffer; +} + +export class CommitPayloadCompact implements SerializableWire { + public static fromPayload(payload: ConsensusPayload): CommitPayloadCompact { + const message = payload.getDeserializedMessage(); + + return new CommitPayloadCompact({ + viewNumber: message.viewNumber, + validatorIndex: payload.validatorIndex, + signature: message.signature, + invocationScript: payload.witness.invocation, + }); + } + public static deserializeWireBase(options: DeserializeWireBaseOptions): CommitPayloadCompact { + const { reader } = options; + const viewNumber = reader.readUInt8(); + const validatorIndex = reader.readUInt16LE(); + const signature = reader.readBytes(64); + const invocationScript = reader.readVarBytesLE(1024); + + return new CommitPayloadCompact({ + viewNumber, + validatorIndex, + signature, + invocationScript, + }); + } + + public static deserializeWire(options: DeserializeWireOptions): CommitPayloadCompact { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } + + public readonly validatorIndex: number; + public readonly viewNumber: number; + public readonly signature: Buffer; + public readonly invocationScript: Buffer; + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + + public constructor({ validatorIndex, viewNumber, signature, invocationScript }: CommitPayloadCompactAdd) { + this.validatorIndex = validatorIndex; + this.viewNumber = viewNumber; + this.signature = signature; + this.invocationScript = invocationScript; + } + + public serializeWireBase(writer: BinaryWriter) { + writer.writeInt16LE(this.validatorIndex); + writer.writeUInt8(this.viewNumber); + writer.writeBytes(this.signature); + writer.writeVarBytesLE(this.invocationScript); + } +} diff --git a/packages/neo-one-node-core/src/payload/ConsensusPayload.ts b/packages/neo-one-node-core/src/payload/ConsensusPayload.ts index 8d2b1eb06a..9cf52cce44 100644 --- a/packages/neo-one-node-core/src/payload/ConsensusPayload.ts +++ b/packages/neo-one-node-core/src/payload/ConsensusPayload.ts @@ -1,73 +1,84 @@ import { + AccountContract, BinaryWriter, - common, + createSerializeWire, crypto, ECPoint, + getHashData, InvalidFormatError, PrivateKey, - UInt256, - UInt256Hex, } from '@neo-one/client-common'; -import { Equals, EquatableKey } from '../Equatable'; -import { VerifyError } from '../errors'; -import { ScriptContainerType } from '../ScriptContainer'; -import { DeserializeWireBaseOptions, DeserializeWireOptions, SerializableWire } from '../Serializable'; +import { ContractParametersContext } from '../ContractParametersContext'; +import { NativeContainer } from '../Native'; +import { + DeserializeWireBaseOptions, + DeserializeWireOptions, + SerializableContainer, + SerializableContainerType, +} from '../Serializable'; +import { BlockchainStorage } from '../Storage'; import { BinaryReader, utils } from '../utils'; -import { VerifyScript } from '../vm'; +import { Verifiable, VerifyOptions } from '../Verifiable'; import { Witness } from '../Witness'; +import { ConsensusMessage } from './message'; import { UnsignedConsensusPayload, UnsignedConsensusPayloadAdd } from './UnsignedConsensusPayload'; export interface ConsensusPayloadAdd extends UnsignedConsensusPayloadAdd { - readonly script: Witness; + readonly witness: Witness; } -export interface ConsensusPayloadGetScriptHashesForVerifyingOptions { - readonly getValidators: () => Promise; - readonly currentBlockHash: UInt256; +export interface VerifyConsensusPayloadOptions extends VerifyOptions { + readonly height: number; } -export interface ConsensusPayloadVerifyOptions extends ConsensusPayloadGetScriptHashesForVerifyingOptions { - readonly currentIndex: number; - readonly verifyScript: VerifyScript; -} +export class ConsensusPayload extends UnsignedConsensusPayload { + public static sign( + payload: UnsignedConsensusPayload, + privateKey: PrivateKey, + validators: readonly ECPoint[], + messageMagic: number, + ): ConsensusPayload { + const context = new ContractParametersContext(payload.getScriptHashesForVerifying(validators)); + const hashData = getHashData(payload.serializeWire(), messageMagic); + const publicKey = crypto.privateKeyToPublicKey(privateKey); + const signatureContract = AccountContract.createSignatureContract(publicKey); + const signature = crypto.sign({ message: hashData, privateKey }); + context.addSignature(signatureContract, publicKey, signature); -export class ConsensusPayload extends UnsignedConsensusPayload - implements SerializableWire, EquatableKey { - public static sign(payload: UnsignedConsensusPayload, key: PrivateKey): ConsensusPayload { return new ConsensusPayload({ version: payload.version, previousHash: payload.previousHash, blockIndex: payload.blockIndex, validatorIndex: payload.validatorIndex, - timestamp: payload.timestamp, consensusMessage: payload.consensusMessage, - script: crypto.createWitness(payload.serializeWire(), key, Witness), + witness: context.getWitnesses()[0], + messageMagic, }); } - public static deserializeWireBase(options: DeserializeWireBaseOptions): ConsensusPayload { - const { reader } = options; + const { reader, context } = options; const { version, previousHash, blockIndex, validatorIndex, - timestamp, - consensusMessage, - } = super.deserializeUnsignedConsensusPayloadWireBase(options); - if (reader.readUInt8() !== 1) { - throw new InvalidFormatError(`Expected BinaryReader\'s readUInt8(0) to be 1. Received: ${reader.readUInt8()}`); + data, + } = super.deserializeUnsignedConsensusPayloadWireBase(options, context.validatorsCount); + const count = reader.readInt8(); + if (count !== 1) { + throw new InvalidFormatError(`expected exactly 1 witness`); } - const script = Witness.deserializeWireBase(options); - return new this({ + const witness = Witness.deserializeWireBase(options); + + return new ConsensusPayload({ version, previousHash, blockIndex, validatorIndex, - timestamp, - consensusMessage, - script, + data, + witness, + messageMagic: options.context.messageMagic, }); } @@ -78,111 +89,39 @@ export class ConsensusPayload extends UnsignedConsensusPayload }); } - public readonly script: Witness; - public readonly toKeyString = utils.toKeyString(this.constructor as typeof ConsensusPayload, () => this.hashHex); - public readonly equals: Equals = utils.equals(this.constructor as typeof ConsensusPayload, this, (other) => - common.uInt256Equal(this.hash, other.hash), - ); - public readonly getScriptHashesForVerifying = utils.lazyAsync( - async ({ getValidators, currentBlockHash }: ConsensusPayloadGetScriptHashesForVerifyingOptions) => { - if (!common.uInt256Equal(this.previousHash, currentBlockHash)) { - throw new VerifyError('Previous hash not equal to current block hash'); - } - const validators = await getValidators(); - if (validators.length <= this.validatorIndex) { - throw new VerifyError('Invalid validator index'); - } - - return new Set([common.uInt160ToHex(crypto.getVerificationScriptHash(validators[this.validatorIndex]))]); - }, - ); - private readonly hashInternal = utils.lazy(() => crypto.hash256(this.message)); - private readonly hashHexInternal = utils.lazy(() => common.uInt256ToHex(this.hash)); - private readonly messageInternal = utils.lazy(() => this.serializeUnsigned()); - - public constructor({ - version, - previousHash, - blockIndex, - validatorIndex, - timestamp, - consensusMessage, - script, - }: ConsensusPayloadAdd) { - super({ - version, - previousHash, - blockIndex, - validatorIndex, - timestamp, - consensusMessage, - }); + public readonly type: SerializableContainerType = 'ConsensusPayload'; + public readonly witness: Witness; + public readonly serializeUnsigned = createSerializeWire(this.serializeWireBaseUnsigned); + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - this.script = script; + public constructor(options: ConsensusPayloadAdd) { + super(options); + this.witness = options.witness; } - public get hash(): UInt256 { - return this.hashInternal(); + public get witnesses() { + return [this.witness]; } - public get hashHex(): UInt256Hex { - return this.hashHexInternal(); - } - - public get message(): Buffer { - return this.messageInternal(); + public serializeWireBase(writer: BinaryWriter) { + this.serializeWireBaseUnsigned(writer); + writer.writeUInt8(1); + this.witness.serializeWireBase(writer); } - public serializeUnsigned(): Buffer { - const writer = new BinaryWriter(); + public serializeWireBaseUnsigned(writer: BinaryWriter) { super.serializeWireBase(writer); - - return writer.toBuffer(); } - public serializeWireBase(writer: BinaryWriter): void { - super.serializeWireBase(writer); - writer.writeUInt8(1); - this.script.serializeWireBase(writer); + public getDeserializedMessage() { + return this.consensusMessage as T; } - public async verify({ - verifyScript, - getValidators, - currentBlockHash, - currentIndex, - }: ConsensusPayloadVerifyOptions): Promise { - if (this.blockIndex !== currentIndex + 1) { - throw new VerifyError('Invalid block index.'); + public async verify(options: VerifyConsensusPayloadOptions) { + if (this.blockIndex <= options.height) { + return false; } - const scriptHashes = await this.getScriptHashesForVerifying({ - getValidators, - currentBlockHash, - }); - - const scriptContainer: { - type: ScriptContainerType.Consensus; - value: ConsensusPayload; - } = { - type: ScriptContainerType.Consensus, - value: this, - }; - - const results = await Promise.all( - [...scriptHashes].map(async (hash) => - verifyScript({ - scriptContainer, - hash: common.hexToUInt160(hash), - witness: this.script, - }), - ), - ); - - results.forEach(({ failureMessage }) => { - if (failureMessage !== undefined) { - throw new VerifyError(failureMessage); - } - }); + return options.verifyWitnesses(options.vm, this, options.storage, options.native, 0.02); } } diff --git a/packages/neo-one-node-core/src/payload/PreparationPayloadCompact.ts b/packages/neo-one-node-core/src/payload/PreparationPayloadCompact.ts new file mode 100644 index 0000000000..ec8e5ca054 --- /dev/null +++ b/packages/neo-one-node-core/src/payload/PreparationPayloadCompact.ts @@ -0,0 +1,50 @@ +import { BinaryWriter, createSerializeWire, SerializableWire } from '@neo-one/client-common'; +import { DeserializeWireBaseOptions, DeserializeWireOptions } from '../Serializable'; +import { BinaryReader } from '../utils'; +import { ConsensusPayload } from './ConsensusPayload'; + +export interface PreparationPayloadCompactAdd { + readonly validatorIndex: number; + readonly invocationScript: Buffer; +} + +export class PreparationPayloadCompact implements SerializableWire { + public static fromPayload(payload: ConsensusPayload): PreparationPayloadCompact { + return new PreparationPayloadCompact({ + validatorIndex: payload.validatorIndex, + invocationScript: payload.witness.invocation, + }); + } + + public static deserializeWireBase(options: DeserializeWireBaseOptions): PreparationPayloadCompact { + const { reader } = options; + const validatorIndex = reader.readUInt16LE(); + const invocationScript = reader.readVarBytesLE(1024); + + return new PreparationPayloadCompact({ + validatorIndex, + invocationScript, + }); + } + + public static deserializeWire(options: DeserializeWireOptions): PreparationPayloadCompact { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } + + public readonly validatorIndex: number; + public readonly invocationScript: Buffer; + public readonly serializeWire = createSerializeWire(this.serializeWireBase); + + public constructor({ validatorIndex, invocationScript }: PreparationPayloadCompactAdd) { + this.validatorIndex = validatorIndex; + this.invocationScript = invocationScript; + } + + public serializeWireBase(writer: BinaryWriter) { + writer.writeInt16LE(this.validatorIndex); + writer.writeVarBytesLE(this.invocationScript); + } +} diff --git a/packages/neo-one-node-core/src/payload/UnsignedConsensusPayload.ts b/packages/neo-one-node-core/src/payload/UnsignedConsensusPayload.ts index f0d9290b94..656f11e693 100644 --- a/packages/neo-one-node-core/src/payload/UnsignedConsensusPayload.ts +++ b/packages/neo-one-node-core/src/payload/UnsignedConsensusPayload.ts @@ -1,47 +1,53 @@ -import { BinaryWriter, UInt256 } from '@neo-one/client-common'; -import { utils as commonUtils } from '@neo-one/utils'; import { + BinaryWriter, + common, createSerializeWire, - DeserializeWireBaseOptions, - DeserializeWireOptions, - SerializableWire, - SerializeWire, -} from '../Serializable'; -import { BinaryReader } from '../utils'; -import { ConsensusMessage, deserializeConsensusMessageWire } from './message'; + crypto, + ECPoint, + getHashData, + UInt256, +} from '@neo-one/client-common'; +import { DeserializeWireBaseOptions, DeserializeWireOptions, SerializableWire } from '../Serializable'; +import { BinaryReader, utils } from '../utils'; +import { ConsensusMessage, deserializeConsensusMessageWire } from './message/ConsensusMessage'; export interface UnsignedConsensusPayloadAdd { readonly version: number; readonly previousHash: UInt256; readonly blockIndex: number; readonly validatorIndex: number; - readonly timestamp?: number; - readonly consensusMessage: ConsensusMessage; + readonly data?: Buffer; + readonly getConsensusMessage?: () => ConsensusMessage; + readonly consensusMessage?: ConsensusMessage; + readonly messageMagic: number; } -export class UnsignedConsensusPayload implements SerializableWire { - public static readonly deserializeUnsignedConsensusPayloadWireBase = (options: DeserializeWireBaseOptions) => { +export class UnsignedConsensusPayload implements SerializableWire { + public static deserializeUnsignedConsensusPayloadWireBase( + options: DeserializeWireBaseOptions, + validatorCount = 7, + ): UnsignedConsensusPayloadAdd { const { reader } = options; const version = reader.readUInt32LE(); const previousHash = reader.readUInt256(); const blockIndex = reader.readUInt32LE(); const validatorIndex = reader.readUInt16LE(); - const timestamp = reader.readUInt32LE(); - const messageBytes = reader.readVarBytesLE(); - const consensusMessage = deserializeConsensusMessageWire({ - context: options.context, - buffer: messageBytes, - }); + const data = reader.readVarBytesLE(); + + const getConsensusMessage = utils.lazy(() => + deserializeConsensusMessageWire({ context: options.context, buffer: data }, validatorCount), + ); return { version, previousHash, blockIndex, validatorIndex, - timestamp, - consensusMessage, + data, + getConsensusMessage, + messageMagic: options.context.messageMagic, }; - }; + } public static deserializeWireBase(options: DeserializeWireBaseOptions): UnsignedConsensusPayload { return new this(this.deserializeUnsignedConsensusPayloadWireBase(options)); @@ -58,32 +64,73 @@ export class UnsignedConsensusPayload implements SerializableWire ConsensusMessage) | undefined; + private readonly dataInternal?: Buffer; + private readonly messageInternal = utils.lazy(() => getHashData(this.serializeWire(), this.magic)); + private readonly hashInternal = utils.lazy(() => crypto.hash256(this.messageInternal())); public constructor({ version, previousHash, blockIndex, validatorIndex, - timestamp, + data, + getConsensusMessage, consensusMessage, + messageMagic, }: UnsignedConsensusPayloadAdd) { this.version = version; this.previousHash = previousHash; this.blockIndex = blockIndex; this.validatorIndex = validatorIndex; - this.timestamp = timestamp === undefined ? commonUtils.nowSeconds() : timestamp; - this.consensusMessage = consensusMessage; + this.dataInternal = data; + + this.consensusMessageInternal = consensusMessage ? () => consensusMessage : getConsensusMessage; + this.magic = messageMagic; + } + + public get consensusMessage() { + if (this.consensusMessageInternal === undefined) { + // TODO: Implement an error here + throw new Error('Need a way to get consensusMessage'); + } + + return this.consensusMessageInternal(); + } + + public get data() { + if (this.dataInternal === undefined) { + return this.consensusMessage.serializeWire(); + } + + return this.dataInternal; + } + + public get hash() { + return this.hashInternal(); + } + + public get hashHex() { + return common.uInt256ToHex(this.hash); + } + + public getScriptHashesForVerifying(validators: readonly ECPoint[]) { + if (validators.length <= this.validatorIndex) { + // TODO + throw new Error(); + } + + return [crypto.toScriptHash(crypto.createSignatureRedeemScript(validators[this.validatorIndex]))]; } - public serializeWireBase(writer: BinaryWriter): void { + public serializeWireBase(writer: BinaryWriter) { writer.writeUInt32LE(this.version); writer.writeUInt256(this.previousHash); writer.writeUInt32LE(this.blockIndex); writer.writeUInt16LE(this.validatorIndex); - writer.writeUInt32LE(this.timestamp); - writer.writeVarBytesLE(this.consensusMessage.serializeWire()); + writer.writeVarBytesLE(this.data); } } diff --git a/packages/neo-one-node-core/src/payload/index.ts b/packages/neo-one-node-core/src/payload/index.ts index 4babbf95b9..6ae5633dd3 100644 --- a/packages/neo-one-node-core/src/payload/index.ts +++ b/packages/neo-one-node-core/src/payload/index.ts @@ -1,3 +1,6 @@ +export * from './ChangeViewPayloadCompact'; +export * from './CommitPayloadCompact'; export * from './ConsensusPayload'; -export * from './UnsignedConsensusPayload'; export * from './message'; +export * from './PreparationPayloadCompact'; +export * from './UnsignedConsensusPayload'; diff --git a/packages/neo-one-node-core/src/payload/message/ChangeViewConsensusMessage.ts b/packages/neo-one-node-core/src/payload/message/ChangeViewConsensusMessage.ts index 5346109cf1..1f309fee96 100644 --- a/packages/neo-one-node-core/src/payload/message/ChangeViewConsensusMessage.ts +++ b/packages/neo-one-node-core/src/payload/message/ChangeViewConsensusMessage.ts @@ -1,45 +1,47 @@ -import { BinaryWriter, InvalidFormatError } from '@neo-one/client-common'; +import { BinaryWriter } from '@neo-one/client-common'; +import { BN } from 'bn.js'; import { DeserializeWireBaseOptions } from '../../Serializable'; +import { assertChangeViewReason, ChangeViewReason } from './ChangeViewReason'; import { ConsensusMessageBase, ConsensusMessageBaseAdd } from './ConsensusMessageBase'; import { ConsensusMessageType } from './ConsensusMessageType'; export interface ChangeViewAdd extends ConsensusMessageBaseAdd { - readonly newViewNumber: number; + readonly timestamp: BN; + readonly reason: ChangeViewReason; } -export class ChangeViewConsensusMessage extends ConsensusMessageBase< - ChangeViewConsensusMessage, - ConsensusMessageType.ChangeView -> { +export class ChangeViewConsensusMessage extends ConsensusMessageBase { public static deserializeWireBase(options: DeserializeWireBaseOptions): ChangeViewConsensusMessage { const { reader } = options; - const message = super.deserializeConsensusMessageBaseWireBase(options); - const newViewNumber = reader.readUInt8(); - if (newViewNumber === 0) { - throw new InvalidFormatError(`Expected BinaryReader\'s readUInt8(0) to be 0. Received: ${newViewNumber}`); - } + const { viewNumber } = super.deserializeConsensusMessageBaseWireBase(options); + const timestamp = reader.readUInt64LE(); + const reason = assertChangeViewReason(reader.readUInt8()); - return new this({ - viewNumber: message.viewNumber, - newViewNumber, + return new ChangeViewConsensusMessage({ + viewNumber, + timestamp, + reason, }); } public readonly newViewNumber: number; + public readonly timestamp: BN; + public readonly reason: ChangeViewReason; - public constructor({ viewNumber, newViewNumber }: ChangeViewAdd) { + public constructor({ viewNumber, timestamp, reason }: ChangeViewAdd) { const options = { - // tslint:disable-next-line no-useless-cast - type: ConsensusMessageType.ChangeView as ConsensusMessageType.ChangeView, + type: ConsensusMessageType.ChangeView, viewNumber, }; super(options); - - this.newViewNumber = newViewNumber; + this.timestamp = timestamp; + this.reason = reason; + this.newViewNumber = viewNumber + 1; } public serializeWireBase(writer: BinaryWriter): void { super.serializeWireBase(writer); - writer.writeUInt8(this.newViewNumber); + writer.writeUInt64LE(this.timestamp); + writer.writeUInt8(this.reason); } } diff --git a/packages/neo-one-node-core/src/payload/message/ChangeViewReason.ts b/packages/neo-one-node-core/src/payload/message/ChangeViewReason.ts new file mode 100644 index 0000000000..1ad5ebde3c --- /dev/null +++ b/packages/neo-one-node-core/src/payload/message/ChangeViewReason.ts @@ -0,0 +1,21 @@ +import { InvalidChangeViewReasonError } from '../../errors'; + +export enum ChangeViewReason { + Timeout = 0x0, + ChangeAgreement = 0x1, + TxNotFound = 0x2, + TxRejectedByPolicy = 0x3, + TxInvalid = 0x4, + BlockRejectedByPolicy = 0x5, +} + +const isChangeViewReason = (value: number): value is ChangeViewReason => + // tslint:disable-next-line strict-type-predicates + ChangeViewReason[value] !== undefined; + +export const assertChangeViewReason = (value: number): ChangeViewReason => { + if (isChangeViewReason(value)) { + return value; + } + throw new InvalidChangeViewReasonError(value); +}; diff --git a/packages/neo-one-node-core/src/payload/message/CommitConsensusMessage.ts b/packages/neo-one-node-core/src/payload/message/CommitConsensusMessage.ts new file mode 100644 index 0000000000..9217a4f5b1 --- /dev/null +++ b/packages/neo-one-node-core/src/payload/message/CommitConsensusMessage.ts @@ -0,0 +1,37 @@ +import { BinaryWriter } from '@neo-one/client-common'; +import { DeserializeWireBaseOptions } from '../../Serializable'; +import { ConsensusMessageBase, ConsensusMessageBaseAdd } from './ConsensusMessageBase'; +import { ConsensusMessageType } from './ConsensusMessageType'; + +export interface CommitConsensusMessageAdd extends ConsensusMessageBaseAdd { + readonly signature: Buffer; +} + +export class CommitConsensusMessage extends ConsensusMessageBase { + public static deserializeWireBase(options: DeserializeWireBaseOptions): CommitConsensusMessage { + const { reader } = options; + const { viewNumber } = super.deserializeConsensusMessageBaseWireBase(options); + const signature = reader.readBytes(64); + + return new CommitConsensusMessage({ + viewNumber, + signature, + }); + } + + public readonly signature: Buffer; + + public constructor({ viewNumber, signature }: CommitConsensusMessageAdd) { + const options = { + type: ConsensusMessageType.Commit, + viewNumber, + }; + super(options); + this.signature = signature; + } + + public serializeWireBase(writer: BinaryWriter) { + super.serializeWireBase(writer); + writer.writeBytes(this.signature); + } +} diff --git a/packages/neo-one-node-core/src/payload/message/ConsensusMessage.ts b/packages/neo-one-node-core/src/payload/message/ConsensusMessage.ts index b2a0adf21a..0eabc90203 100644 --- a/packages/neo-one-node-core/src/payload/message/ConsensusMessage.ts +++ b/packages/neo-one-node-core/src/payload/message/ConsensusMessage.ts @@ -1,29 +1,57 @@ import { utils } from '@neo-one/utils'; -import { createDeserializeWire, DeserializeWireBaseOptions } from '../../Serializable'; +import { DeserializeWireBaseOptions, DeserializeWireOptions } from '../../Serializable'; +import { BinaryReader } from '../../utils'; import { ChangeViewConsensusMessage } from './ChangeViewConsensusMessage'; +import { CommitConsensusMessage } from './CommitConsensusMessage'; import { assertConsensusMessageType, ConsensusMessageType } from './ConsensusMessageType'; import { PrepareRequestConsensusMessage } from './PrepareRequestConsensusMessage'; import { PrepareResponseConsensusMessage } from './PrepareResponseConsensusMessage'; +import { RecoveryConsensusMessage } from './RecoveryConsensusMessage'; +import { RecoveryRequestConsensusMessage } from './RecoveryRequestConsensusMessage'; export type ConsensusMessage = | ChangeViewConsensusMessage + | CommitConsensusMessage | PrepareRequestConsensusMessage - | PrepareResponseConsensusMessage; + | PrepareResponseConsensusMessage + | RecoveryConsensusMessage + | RecoveryRequestConsensusMessage; + +export const deserializeConsensusMessageWireBase = ( + { reader, context }: DeserializeWireBaseOptions, + validatorsCount = 7, +): ConsensusMessage => { + const options = { + context, + reader, + validatorsCount, + }; -export const deserializeConsensusMessageWireBase = (options: DeserializeWireBaseOptions): ConsensusMessage => { - const { reader } = options; const type = assertConsensusMessageType(reader.clone().readUInt8()); switch (type) { case ConsensusMessageType.ChangeView: return ChangeViewConsensusMessage.deserializeWireBase(options); + case ConsensusMessageType.Commit: + return CommitConsensusMessage.deserializeWireBase(options); case ConsensusMessageType.PrepareRequest: return PrepareRequestConsensusMessage.deserializeWireBase(options); case ConsensusMessageType.PrepareResponse: return PrepareResponseConsensusMessage.deserializeWireBase(options); + case ConsensusMessageType.RecoveryMessage: + return RecoveryConsensusMessage.deserializeWireBase(options); + case ConsensusMessageType.RecoveryRequest: + return RecoveryRequestConsensusMessage.deserializeWireBase(options); default: utils.assertNever(type); throw new Error('For TS'); } }; -export const deserializeConsensusMessageWire = createDeserializeWire(deserializeConsensusMessageWireBase); +export const deserializeConsensusMessageWire = ({ buffer, context }: DeserializeWireOptions, validatorsCount = 7) => + deserializeConsensusMessageWireBase( + { + context, + reader: new BinaryReader(buffer), + }, + validatorsCount, + ); diff --git a/packages/neo-one-node-core/src/payload/message/ConsensusMessageBase.ts b/packages/neo-one-node-core/src/payload/message/ConsensusMessageBase.ts index e972083c2c..a5409c4cc9 100644 --- a/packages/neo-one-node-core/src/payload/message/ConsensusMessageBase.ts +++ b/packages/neo-one-node-core/src/payload/message/ConsensusMessageBase.ts @@ -13,13 +13,11 @@ export interface ConsensusMessageBaseAdd { readonly viewNumber: number; } -export interface ConsensusMessageBaseAddWithType extends ConsensusMessageBaseAdd { - readonly type: Type; +export interface ConsensusMessageBaseAddWithType extends ConsensusMessageBaseAdd { + readonly type: ConsensusMessageType; } -// tslint:disable-next-line no-any -export class ConsensusMessageBase - implements SerializableWire { +export class ConsensusMessageBase implements SerializableWire { public static readonly VERSION = 0; public static readonly deserializeConsensusMessageBaseWireBase = ({ reader }: DeserializeWireBaseOptions) => { const type = reader.readUInt8(); @@ -42,11 +40,11 @@ export class ConsensusMessageBase) { + public constructor({ type, viewNumber }: ConsensusMessageBaseAddWithType) { this.type = type; this.viewNumber = viewNumber; } diff --git a/packages/neo-one-node-core/src/payload/message/ConsensusMessageType.ts b/packages/neo-one-node-core/src/payload/message/ConsensusMessageType.ts index afa699f5fc..2923e34c8f 100644 --- a/packages/neo-one-node-core/src/payload/message/ConsensusMessageType.ts +++ b/packages/neo-one-node-core/src/payload/message/ConsensusMessageType.ts @@ -4,6 +4,9 @@ export enum ConsensusMessageType { ChangeView = 0x00, PrepareRequest = 0x20, PrepareResponse = 0x21, + Commit = 0x30, + RecoveryRequest = 0x40, + RecoveryMessage = 0x41, } const isConsensusMessageType = (value: number): value is ConsensusMessageType => diff --git a/packages/neo-one-node-core/src/payload/message/PrepareRequestConsensusMessage.ts b/packages/neo-one-node-core/src/payload/message/PrepareRequestConsensusMessage.ts index 7afd634d91..7070d860d0 100644 --- a/packages/neo-one-node-core/src/payload/message/PrepareRequestConsensusMessage.ts +++ b/packages/neo-one-node-core/src/payload/message/PrepareRequestConsensusMessage.ts @@ -1,89 +1,51 @@ -import { BinaryWriter, common, InvalidFormatError, UInt160, UInt256 } from '@neo-one/client-common'; +import { BinaryWriter, UInt256 } from '@neo-one/client-common'; import { BN } from 'bn.js'; +import { Block } from '../../Block'; import { DeserializeWireBaseOptions } from '../../Serializable'; -import { MinerTransaction } from '../../transaction'; import { ConsensusMessageBase, ConsensusMessageBaseAdd } from './ConsensusMessageBase'; import { ConsensusMessageType } from './ConsensusMessageType'; -export interface PrepareRequestAdd extends ConsensusMessageBaseAdd { +export interface PrepareRequestConsensusMessageAdd extends ConsensusMessageBaseAdd { + readonly timestamp: BN; readonly nonce: BN; - readonly nextConsensus: UInt160; readonly transactionHashes: readonly UInt256[]; - readonly minerTransaction: MinerTransaction; - readonly signature: Buffer; } -export class PrepareRequestConsensusMessage extends ConsensusMessageBase< - PrepareRequestConsensusMessage, - ConsensusMessageType.PrepareRequest -> { +export class PrepareRequestConsensusMessage extends ConsensusMessageBase { public static deserializeWireBase(options: DeserializeWireBaseOptions): PrepareRequestConsensusMessage { const { reader } = options; - const message = super.deserializeConsensusMessageBaseWireBase(options); + const { viewNumber } = super.deserializeConsensusMessageBaseWireBase(options); + const timestamp = reader.readUInt64LE(); const nonce = reader.readUInt64LE(); - const nextConsensus = reader.readUInt160(); - const transactionHashes = reader.readArray(() => reader.readUInt256()); - const distinctTransactionHashes = new Set(transactionHashes.map((hash) => common.uInt256ToString(hash))); + const transactionHashes = reader.readArray(reader.readUInt256.bind(reader), Block.MaxTransactionsPerBlock); - if (distinctTransactionHashes.size !== transactionHashes.length) { - throw new InvalidFormatError( - `Distinct hashes: ${distinctTransactionHashes.size} ` + `Transaction hashes: ${transactionHashes.length}`, - ); - } - const minerTransaction = MinerTransaction.deserializeWireBase(options); - if (!common.uInt256Equal(minerTransaction.hash, transactionHashes[0])) { - throw new InvalidFormatError( - `Expected minerTransaction hash (${minerTransaction.hash}) to equal first transaction hash (${transactionHashes[0]})`, - ); - } - const signature = reader.readBytes(64); - - return new this({ - viewNumber: message.viewNumber, + return new PrepareRequestConsensusMessage({ + viewNumber, + timestamp, nonce, - nextConsensus, transactionHashes, - minerTransaction, - signature, }); } + public readonly timestamp: BN; public readonly nonce: BN; - public readonly nextConsensus: UInt160; public readonly transactionHashes: readonly UInt256[]; - public readonly minerTransaction: MinerTransaction; - public readonly signature: Buffer; - public constructor({ - viewNumber, - nonce, - nextConsensus, - transactionHashes, - minerTransaction, - signature, - }: PrepareRequestAdd) { + public constructor({ viewNumber, timestamp, nonce, transactionHashes }: PrepareRequestConsensusMessageAdd) { const options = { - // tslint:disable-next-line no-useless-cast - type: ConsensusMessageType.PrepareRequest as ConsensusMessageType.PrepareRequest, + type: ConsensusMessageType.PrepareRequest, viewNumber, }; super(options); - + this.timestamp = timestamp; this.nonce = nonce; - this.nextConsensus = nextConsensus; this.transactionHashes = transactionHashes; - this.minerTransaction = minerTransaction; - this.signature = signature; } - public serializeWireBase(writer: BinaryWriter): void { + public serializeWireBase(writer: BinaryWriter) { super.serializeWireBase(writer); + writer.writeUInt64LE(this.timestamp); writer.writeUInt64LE(this.nonce); - writer.writeUInt160(this.nextConsensus); - writer.writeArray(this.transactionHashes, (value) => { - writer.writeUInt256(value); - }); - this.minerTransaction.serializeWireBase(writer); - writer.writeBytes(this.signature); + writer.writeArray(this.transactionHashes, writer.writeUInt256.bind(writer)); } } diff --git a/packages/neo-one-node-core/src/payload/message/PrepareResponseConsensusMessage.ts b/packages/neo-one-node-core/src/payload/message/PrepareResponseConsensusMessage.ts index 19d876971e..cf902e3bf0 100644 --- a/packages/neo-one-node-core/src/payload/message/PrepareResponseConsensusMessage.ts +++ b/packages/neo-one-node-core/src/payload/message/PrepareResponseConsensusMessage.ts @@ -1,42 +1,38 @@ -import { BinaryWriter } from '@neo-one/client-common'; +import { BinaryWriter, UInt256 } from '@neo-one/client-common'; import { DeserializeWireBaseOptions } from '../../Serializable'; import { ConsensusMessageBase, ConsensusMessageBaseAdd } from './ConsensusMessageBase'; import { ConsensusMessageType } from './ConsensusMessageType'; export interface PrepareResponseAdd extends ConsensusMessageBaseAdd { - readonly signature: Buffer; + readonly preparationHash: UInt256; } -export class PrepareResponseConsensusMessage extends ConsensusMessageBase< - PrepareResponseConsensusMessage, - ConsensusMessageType.PrepareResponse -> { +export class PrepareResponseConsensusMessage extends ConsensusMessageBase { public static deserializeWireBase(options: DeserializeWireBaseOptions): PrepareResponseConsensusMessage { const { reader } = options; - const message = super.deserializeConsensusMessageBaseWireBase(options); - const signature = reader.readBytes(64); + const { viewNumber } = super.deserializeConsensusMessageBaseWireBase(options); + const preparationHash = reader.readUInt256(); return new this({ - viewNumber: message.viewNumber, - signature, + viewNumber, + preparationHash, }); } - public readonly signature: Buffer; + public readonly preparationHash: UInt256; - public constructor({ viewNumber, signature }: PrepareResponseAdd) { + public constructor({ viewNumber, preparationHash }: PrepareResponseAdd) { const options = { - // tslint:disable-next-line no-useless-cast - type: ConsensusMessageType.PrepareResponse as ConsensusMessageType.PrepareResponse, + type: ConsensusMessageType.PrepareResponse, viewNumber, }; super(options); - this.signature = signature; + this.preparationHash = preparationHash; } public serializeWireBase(writer: BinaryWriter): void { super.serializeWireBase(writer); - writer.writeBytes(this.signature); + writer.writeUInt256(this.preparationHash); } } diff --git a/packages/neo-one-node-core/src/payload/message/RecoveryConsensusMessage.ts b/packages/neo-one-node-core/src/payload/message/RecoveryConsensusMessage.ts new file mode 100644 index 0000000000..33069dbd64 --- /dev/null +++ b/packages/neo-one-node-core/src/payload/message/RecoveryConsensusMessage.ts @@ -0,0 +1,213 @@ +import { BinaryWriter, common, createSerializeWire, crypto, UInt256 } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import _ from 'lodash'; +import { ConsensusContext } from '../../consensus/ConsensusContext'; +import { DeserializeWireBaseOptions, DeserializeWireOptions } from '../../Serializable'; +import { BinaryReader } from '../../utils'; +import { Witness } from '../../Witness'; +import { ChangeViewPayloadCompact } from '../ChangeViewPayloadCompact'; +import { CommitPayloadCompact } from '../CommitPayloadCompact'; +import { ConsensusPayload } from '../ConsensusPayload'; +import { PreparationPayloadCompact } from '../PreparationPayloadCompact'; +import { ChangeViewConsensusMessage } from './ChangeViewConsensusMessage'; +import { CommitConsensusMessage } from './CommitConsensusMessage'; +import { ConsensusMessageBase, ConsensusMessageBaseAdd } from './ConsensusMessageBase'; +import { ConsensusMessageType } from './ConsensusMessageType'; +import { PrepareRequestConsensusMessage } from './PrepareRequestConsensusMessage'; +import { PrepareResponseConsensusMessage } from './PrepareResponseConsensusMessage'; + +export interface RecoveryConsensusMessageAdd extends ConsensusMessageBaseAdd { + readonly prepareRequestMessage?: PrepareRequestConsensusMessage; + readonly preparationHash?: UInt256; + readonly changeViewMessages: _.NumericDictionary; + readonly preparationMessages: _.NumericDictionary; + readonly commitMessages: _.NumericDictionary; +} + +export class RecoveryConsensusMessage extends ConsensusMessageBase { + public static deserializeWireBase( + options: DeserializeWireBaseOptions & { readonly validatorsCount: number }, + ): RecoveryConsensusMessage { + const { reader } = options; + const { viewNumber } = super.deserializeConsensusMessageBaseWireBase(options); + const changeViewMessagesIn = reader.readArray( + () => ChangeViewPayloadCompact.deserializeWireBase(options), + options.validatorsCount, + ); + let prepareRequestMessage: PrepareRequestConsensusMessage | undefined; + let preparationHash: UInt256 | undefined; + if (reader.readBoolean()) { + prepareRequestMessage = PrepareRequestConsensusMessage.deserializeWireBase(options); + } else if (reader.readVarUIntLE(new BN(common.UINT256_BUFFER_BYTES)).toNumber() === common.UINT256_BUFFER_BYTES) { + preparationHash = reader.readUInt256(); + } + const preparationMessagesIn = reader.readArray( + () => PreparationPayloadCompact.deserializeWireBase(options), + options.validatorsCount, + ); + + const commitMessagesIn = reader.readArray( + () => CommitPayloadCompact.deserializeWireBase(options), + options.validatorsCount, + ); + + const changeViewMessages = _.fromPairs( + changeViewMessagesIn.map((changeView) => [changeView.validatorIndex, changeView]), + ); + const preparationMessages = _.fromPairs( + preparationMessagesIn.map((preparation) => [preparation.validatorIndex, preparation]), + ); + const commitMessages = _.fromPairs(commitMessagesIn.map((commit) => [commit.validatorIndex, commit])); + + return new RecoveryConsensusMessage({ + viewNumber, + prepareRequestMessage, + preparationHash, + changeViewMessages, + preparationMessages, + commitMessages, + }); + } + + public static deserializeWire( + options: DeserializeWireOptions & { readonly validatorsCount: number }, + ): RecoveryConsensusMessage { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + validatorsCount: options.validatorsCount, + }); + } + + public readonly prepareRequestMessage?: PrepareRequestConsensusMessage; + public readonly preparationHash?: UInt256; + public readonly changeViewMessages: _.NumericDictionary; + public readonly preparationMessages: _.NumericDictionary; + public readonly commitMessages: _.NumericDictionary; + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + + public constructor({ + viewNumber, + prepareRequestMessage, + preparationHash, + changeViewMessages, + preparationMessages, + commitMessages, + }: RecoveryConsensusMessageAdd) { + super({ type: ConsensusMessageType.RecoveryMessage, viewNumber }); + + this.prepareRequestMessage = prepareRequestMessage; + this.preparationHash = preparationHash; + this.changeViewMessages = changeViewMessages; + this.preparationMessages = preparationMessages; + this.commitMessages = commitMessages; + } + + public serializeWireBase(writer: BinaryWriter) { + super.serializeWireBase(writer); + writer.writeArray(Object.values(this.changeViewMessages), (message) => message.serializeWireBase(writer)); + writer.writeBoolean(this.prepareRequestMessage !== undefined); + if (this.prepareRequestMessage !== undefined) { + this.prepareRequestMessage.serializeWireBase(writer); + } else if (this.preparationHash === undefined) { + writer.writeVarUIntLE(0); + } else { + writer.writeVarBytesLE(this.preparationHash); + } + + writer.writeArray(Object.values(this.preparationMessages), (message) => message.serializeWireBase(writer)); + writer.writeArray(Object.values(this.commitMessages), (message) => message.serializeWireBase(writer)); + } + + public getChangeViewPayloads(context: ConsensusContext, payload: ConsensusPayload) { + return Object.values(this.changeViewMessages).map( + (item) => + new ConsensusPayload({ + version: payload.version, + previousHash: payload.previousHash, + blockIndex: payload.blockIndex, + validatorIndex: item.validatorIndex, + consensusMessage: new ChangeViewConsensusMessage({ + viewNumber: item.originalViewNumber, + timestamp: item.timestamp, + reason, + }), + witness: new Witness({ + invocation: item.invocationScript, + verification: crypto.createSignatureRedeemScript(context.validators[item.validatorIndex]), + }), + }), + ); + } + + public getCommitPayloads(context: ConsensusContext, payload: ConsensusPayload) { + return Object.values(this.commitMessages).map( + (item) => + new ConsensusPayload({ + version: payload.version, + previousHash: payload.previousHash, + blockIndex: payload.blockIndex, + validatorIndex: item.validatorIndex, + consensusMessage: new CommitConsensusMessage({ + viewNumber: item.viewNumber, + signature: item.signature, + }), + witness: new Witness({ + invocation: item.invocationScript, + verification: crypto.createSignatureRedeemScript(context.validators[item.validatorIndex]), + }), + }), + ); + } + + public getPrepareRequestPayload(context: ConsensusContext, payload: ConsensusPayload): ConsensusPayload | undefined { + if (this.prepareRequestMessage === undefined) { + return undefined; + } + + const index = context.blockBuilder.getConsensusData().primaryIndex; + const maybePreparationMessage = this.preparationMessages[index]; + // tslint:disable-next-line: strict-type-predicates + if (maybePreparationMessage === undefined) { + return undefined; + } + + return new ConsensusPayload({ + version: payload.version, + previousHash: payload.previousHash, + blockIndex: payload.blockIndex, + validatorIndex: index, + consensusMessage: this.prepareRequestMessage, + witness: new Witness({ + invocation: maybePreparationMessage.invocationScript, + verification: crypto.createSignatureRedeemScript(context.validators[index]), + }), + }); + } + + public getPrepareResponsePayloads(context: ConsensusContext, payload: ConsensusPayload): readonly ConsensusPayload[] { + const index = context.blockBuilder.getConsensusData().primaryIndex; + const preparationHash = this.preparationHash ?? context.preparationPayloads[index]?.hash; + if (preparationHash === undefined) { + return []; + } + + return Object.values(this.preparationMessages).map( + (item) => + new ConsensusPayload({ + version: payload.version, + previousHash: payload.previousHash, + blockIndex: payload.blockIndex, + validatorIndex: item.validatorIndex, + consensusMessage: new PrepareResponseConsensusMessage({ + viewNumber: this.viewNumber, + preparationHash, + }), + witness: new Witness({ + invocation: item.invocationScript, + verification: crypto.createSignatureRedeemScript(context.validators[index]), + }), + }), + ); + } +} diff --git a/packages/neo-one-node-core/src/payload/message/RecoveryRequestConsensusMessage.ts b/packages/neo-one-node-core/src/payload/message/RecoveryRequestConsensusMessage.ts new file mode 100644 index 0000000000..1615077db1 --- /dev/null +++ b/packages/neo-one-node-core/src/payload/message/RecoveryRequestConsensusMessage.ts @@ -0,0 +1,38 @@ +import { BinaryWriter } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import { DeserializeWireBaseOptions } from '../../Serializable'; +import { ConsensusMessageBase, ConsensusMessageBaseAdd } from './ConsensusMessageBase'; +import { ConsensusMessageType } from './ConsensusMessageType'; + +export interface RecoveryRequestConsensusMessageAdd extends ConsensusMessageBaseAdd { + readonly timestamp: BN; +} + +export class RecoveryRequestConsensusMessage extends ConsensusMessageBase { + public static deserializeWireBase(options: DeserializeWireBaseOptions): RecoveryRequestConsensusMessage { + const { reader } = options; + const { viewNumber } = super.deserializeConsensusMessageBaseWireBase(options); + const timestamp = reader.readUInt64LE(); + + return new RecoveryRequestConsensusMessage({ + viewNumber, + timestamp, + }); + } + + public readonly timestamp: BN; + + public constructor({ viewNumber, timestamp }: RecoveryRequestConsensusMessageAdd) { + const options = { + type: ConsensusMessageType.RecoveryRequest, + viewNumber, + }; + super(options); + this.timestamp = timestamp; + } + + public serializeWireBase(writer: BinaryWriter) { + super.serializeWireBase(writer); + writer.writeUInt64LE(this.timestamp); + } +} diff --git a/packages/neo-one-node-core/src/payload/message/index.ts b/packages/neo-one-node-core/src/payload/message/index.ts index ef4714b644..6d98926176 100644 --- a/packages/neo-one-node-core/src/payload/message/index.ts +++ b/packages/neo-one-node-core/src/payload/message/index.ts @@ -1,6 +1,10 @@ export * from './ChangeViewConsensusMessage'; +export * from './ChangeViewReason'; +export * from './CommitConsensusMessage'; export * from './ConsensusMessage'; export * from './ConsensusMessageBase'; export * from './ConsensusMessageType'; export * from './PrepareRequestConsensusMessage'; export * from './PrepareResponseConsensusMessage'; +export * from './RecoveryConsensusMessage'; +export * from './RecoveryRequestConsensusMessage'; diff --git a/packages/neo-one-node-core/src/storageChange/StorageChange.ts b/packages/neo-one-node-core/src/storageChange/StorageChange.ts deleted file mode 100644 index b53fb4973f..0000000000 --- a/packages/neo-one-node-core/src/storageChange/StorageChange.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { createDeserializeWire, DeserializeWireBaseOptions } from '../Serializable'; -import { StorageChangeAdd } from './StorageChangeAdd'; -import { StorageChangeDelete } from './StorageChangeDelete'; -import { StorageChangeModify } from './StorageChangeModify'; -import { assertStorageChangeType, StorageChangeType } from './StorageChangeType'; - -export type StorageChange = StorageChangeAdd | StorageChangeModify | StorageChangeDelete; - -export const deserializeStorageChangeWireBase = (options: DeserializeWireBaseOptions): StorageChange => { - const { reader } = options; - const storageChangeType = assertStorageChangeType(reader.clone().readUInt8()); - switch (storageChangeType) { - case StorageChangeType.Modify: - return StorageChangeModify.deserializeWireBase(options); - case StorageChangeType.Add: - return StorageChangeAdd.deserializeWireBase(options); - case StorageChangeType.Delete: - return StorageChangeDelete.deserializeWireBase(options); - default: - throw new Error('Invalid Storage Change Type'); - } -}; - -export const deserializeStorageChangeWire = createDeserializeWire(deserializeStorageChangeWireBase); diff --git a/packages/neo-one-node-core/src/storageChange/StorageChangeAdd.ts b/packages/neo-one-node-core/src/storageChange/StorageChangeAdd.ts deleted file mode 100644 index 2391324573..0000000000 --- a/packages/neo-one-node-core/src/storageChange/StorageChangeAdd.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { InvalidFormatError, JSONHelper, StorageChangeAddJSON, UInt160 } from '@neo-one/client-common'; -import { DeserializeWireBaseOptions, SerializableJSON, SerializeJSONContext } from '../Serializable'; -import { StorageChangeAddModifyBase } from './StorageChangeAddModifyBase'; -import { StorageChangeType } from './StorageChangeType'; - -export interface StorageChangeAddAdd { - readonly hash: UInt160; - readonly key: Buffer; - readonly value: Buffer; -} - -export class StorageChangeAdd extends StorageChangeAddModifyBase - implements SerializableJSON { - public static deserializeWireBase(options: DeserializeWireBaseOptions): StorageChangeAdd { - const { type, hash, key, value } = super.deserializeStorageChangeAddModifyWireBase(options); - if (type !== StorageChangeType.Add) { - throw new InvalidFormatError(`Expected storage change type to be ${StorageChangeType.Add}. Received: ${type}`); - } - - return new this({ hash, key, value }); - } - - public constructor(options: StorageChangeAddAdd) { - super({ type: StorageChangeType.Add, ...options }); - } - - public serializeJSON(_context: SerializeJSONContext): StorageChangeAddJSON { - return { - type: 'Add', - hash: JSONHelper.writeUInt160(this.hash), - key: JSONHelper.writeBuffer(this.key), - value: JSONHelper.writeBuffer(this.value), - }; - } -} diff --git a/packages/neo-one-node-core/src/storageChange/StorageChangeAddModifyBase.ts b/packages/neo-one-node-core/src/storageChange/StorageChangeAddModifyBase.ts deleted file mode 100644 index 0f8e935739..0000000000 --- a/packages/neo-one-node-core/src/storageChange/StorageChangeAddModifyBase.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { BinaryWriter, UInt160 } from '@neo-one/client-common'; -import { DeserializeWireBaseOptions } from '../Serializable'; -import { StorageChangeBase, StorageChangeBaseAdd } from './StorageChangeBase'; -import { StorageChangeType } from './StorageChangeType'; - -export interface StorageChangeAddModifyBaseAdd extends StorageChangeBaseAdd { - readonly value: Buffer; -} - -export abstract class StorageChangeAddModifyBase< - T extends StorageChangeType = StorageChangeType -> extends StorageChangeBase { - public static deserializeStorageChangeAddModifyWireBase( - options: DeserializeWireBaseOptions, - ): { - readonly type: StorageChangeType; - readonly hash: UInt160; - readonly key: Buffer; - readonly value: Buffer; - } { - const { type, hash, key } = super.deserializeStorageChangeWireBase(options); - const { reader } = options; - const value = reader.readVarBytesLE(); - - return { type, hash, key, value }; - } - - public readonly value: Buffer; - - public constructor({ type, hash, key, value }: StorageChangeAddModifyBaseAdd) { - super({ type, hash, key }); - this.value = value; - } - - public serializeWireBase(writer: BinaryWriter): void { - super.serializeWireBase(writer); - writer.writeVarBytesLE(this.value); - } -} diff --git a/packages/neo-one-node-core/src/storageChange/StorageChangeBase.ts b/packages/neo-one-node-core/src/storageChange/StorageChangeBase.ts deleted file mode 100644 index 75d05b3d1d..0000000000 --- a/packages/neo-one-node-core/src/storageChange/StorageChangeBase.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { BinaryWriter, IOHelper, UInt160, utils } from '@neo-one/client-common'; -import { - createSerializeWire, - DeserializeWireBaseOptions, - DeserializeWireOptions, - SerializableWire, - SerializeWire, -} from '../Serializable'; -import { BinaryReader } from '../utils'; -import { StorageChange } from './StorageChange'; -import { assertStorageChangeType, StorageChangeType } from './StorageChangeType'; - -export interface StorageChangeBaseAdd { - readonly type: T; - readonly hash: UInt160; - readonly key: Buffer; -} - -export abstract class StorageChangeBase - implements SerializableWire { - public static deserializeStorageChangeWireBase( - options: DeserializeWireBaseOptions, - ): { - readonly type: StorageChangeType; - readonly hash: UInt160; - readonly key: Buffer; - } { - const { reader } = options; - const type = reader.readUInt8(); - const hash = reader.readUInt160(); - const key = reader.readVarBytesLE(); - - return { - type: assertStorageChangeType(type), - hash, - key, - }; - } - - public static deserializeWireBase(_options: DeserializeWireBaseOptions): StorageChangeBase { - throw new Error('Not Implemented'); - } - - public static deserializeWire(options: DeserializeWireOptions): StorageChangeBase { - return this.deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); - } - - public readonly type: T; - public readonly hash: UInt160; - public readonly key: Buffer; - public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - protected readonly sizeExclusive: () => number; - private readonly sizeInternal: () => number; - - public constructor({ type, hash, key }: StorageChangeBaseAdd) { - this.type = type; - this.hash = hash; - this.key = key; - this.sizeExclusive = () => 0; - this.sizeInternal = utils.lazy( - () => this.sizeExclusive() + IOHelper.sizeOfUInt8 + IOHelper.sizeOfUInt160 + IOHelper.sizeOfVarBytesLE(this.key), - ); - } - - public get size(): number { - return this.sizeInternal(); - } - - public serializeWireBase(writer: BinaryWriter): void { - writer.writeUInt8(this.type); - writer.writeUInt160(this.hash); - writer.writeVarBytesLE(this.key); - } -} diff --git a/packages/neo-one-node-core/src/storageChange/StorageChangeDelete.ts b/packages/neo-one-node-core/src/storageChange/StorageChangeDelete.ts deleted file mode 100644 index 210b896a90..0000000000 --- a/packages/neo-one-node-core/src/storageChange/StorageChangeDelete.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { InvalidFormatError, JSONHelper, StorageChangeDeleteJSON, UInt160 } from '@neo-one/client-common'; -import { DeserializeWireBaseOptions, SerializableJSON, SerializeJSONContext } from '../Serializable'; -import { StorageChangeBase } from './StorageChangeBase'; -import { StorageChangeType } from './StorageChangeType'; - -export interface StorageChangeDeleteAdd { - readonly hash: UInt160; - readonly key: Buffer; -} - -export class StorageChangeDelete extends StorageChangeBase - implements SerializableJSON { - public static deserializeWireBase(options: DeserializeWireBaseOptions): StorageChangeDelete { - const { type, hash, key } = super.deserializeStorageChangeWireBase(options); - if (type !== StorageChangeType.Delete) { - throw new InvalidFormatError(`Expected storage change type to be ${StorageChangeType.Delete}. Received: ${type}`); - } - - return new this({ hash, key }); - } - - public constructor({ hash, key }: StorageChangeDeleteAdd) { - super({ type: StorageChangeType.Delete, hash, key }); - } - - public serializeJSON(_context: SerializeJSONContext): StorageChangeDeleteJSON { - return { - type: 'Delete', - hash: JSONHelper.writeUInt160(this.hash), - key: JSONHelper.writeBuffer(this.key), - }; - } -} diff --git a/packages/neo-one-node-core/src/storageChange/StorageChangeModify.ts b/packages/neo-one-node-core/src/storageChange/StorageChangeModify.ts deleted file mode 100644 index a96ce2d727..0000000000 --- a/packages/neo-one-node-core/src/storageChange/StorageChangeModify.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { InvalidFormatError, JSONHelper, StorageChangeModifyJSON, UInt160 } from '@neo-one/client-common'; -import { DeserializeWireBaseOptions, SerializableJSON, SerializeJSONContext } from '../Serializable'; -import { StorageChangeAddModifyBase } from './StorageChangeAddModifyBase'; -import { StorageChangeType } from './StorageChangeType'; - -export interface StorageChangeModifyAdd { - readonly hash: UInt160; - readonly key: Buffer; - readonly value: Buffer; -} - -export class StorageChangeModify extends StorageChangeAddModifyBase - implements SerializableJSON { - public static deserializeWireBase(options: DeserializeWireBaseOptions): StorageChangeModify { - const { type, hash, key, value } = super.deserializeStorageChangeAddModifyWireBase(options); - if (type !== StorageChangeType.Modify) { - throw new InvalidFormatError(`Expected storage change type to be ${StorageChangeType.Modify}. Received: ${type}`); - } - - return new this({ hash, key, value }); - } - - public constructor(options: StorageChangeModifyAdd) { - super({ type: StorageChangeType.Modify, ...options }); - } - - public serializeJSON(_context: SerializeJSONContext): StorageChangeModifyJSON { - return { - type: 'Modify', - hash: JSONHelper.writeUInt160(this.hash), - key: JSONHelper.writeBuffer(this.key), - value: JSONHelper.writeBuffer(this.value), - }; - } -} diff --git a/packages/neo-one-node-core/src/storageChange/StorageChangeType.ts b/packages/neo-one-node-core/src/storageChange/StorageChangeType.ts deleted file mode 100644 index 4a265baf38..0000000000 --- a/packages/neo-one-node-core/src/storageChange/StorageChangeType.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { InvalidStorageChangeTypeError } from '../errors'; - -export enum StorageChangeType { - Add = 0x00, - Modify = 0x01, - Delete = 0x02, -} - -const isStorageChangeType = (storageChangeType: number): storageChangeType is StorageChangeType => - // tslint:disable-next-line strict-type-predicates - StorageChangeType[storageChangeType] !== undefined; - -export const assertStorageChangeType = (storageChangeType: number): StorageChangeType => { - if (isStorageChangeType(storageChangeType)) { - return storageChangeType; - } - throw new InvalidStorageChangeTypeError(storageChangeType); -}; diff --git a/packages/neo-one-node-core/src/storageChange/index.ts b/packages/neo-one-node-core/src/storageChange/index.ts deleted file mode 100644 index 638059c4e7..0000000000 --- a/packages/neo-one-node-core/src/storageChange/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from './StorageChange'; -export * from './StorageChangeAdd'; -export * from './StorageChangeBase'; -export * from './StorageChangeDelete'; -export * from './StorageChangeModify'; -export * from './StorageChangeType'; diff --git a/packages/neo-one-node-core/src/transaction/ClaimTransaction.ts b/packages/neo-one-node-core/src/transaction/ClaimTransaction.ts deleted file mode 100644 index 3b9b4e0e81..0000000000 --- a/packages/neo-one-node-core/src/transaction/ClaimTransaction.ts +++ /dev/null @@ -1,157 +0,0 @@ -import { - ClaimTransactionJSON, - ClaimTransactionModel, - ClaimTransactionModelAdd, - common, - InvalidFormatError, - IOHelper, - UInt160Hex, -} from '@neo-one/client-common'; -import { Constructor } from '@neo-one/utils'; -import { BN } from 'bn.js'; -import { VerifyError } from '../errors'; -import { DeserializeWireBaseOptions, SerializeJSONContext } from '../Serializable'; -import { utils } from '../utils'; -import { VerifyScriptResult } from '../vm'; -import { Witness } from '../Witness'; -import { Attribute } from './attribute'; -import { hasDuplicateInputs, hasIntersectingInputs } from './common'; -import { Input } from './Input'; -import { Output } from './Output'; -import { - FeeContext, - GetReferencesOptions, - TransactionBase, - TransactionGetScriptHashesForVerifyingOptions, - TransactionVerifyOptions, -} from './TransactionBase'; -import { TransactionType } from './TransactionType'; - -export interface ClaimTransactionAdd extends ClaimTransactionModelAdd {} - -export class ClaimTransaction extends TransactionBase< - TransactionType.Claim, - ClaimTransactionJSON, - Constructor> ->(ClaimTransactionModel) { - public static deserializeWireBase(options: DeserializeWireBaseOptions): ClaimTransaction { - const { reader } = options; - - const { type, version } = super.deserializeTransactionBaseStartWireBase(options); - - if (type !== TransactionType.Claim) { - throw new InvalidFormatError(`Expected transaction type to be ${TransactionType.Claim}. Received: ${type}`); - } - - const claims = reader.readArray(() => Input.deserializeWireBase(options)); - - const { attributes, inputs, outputs, scripts } = super.deserializeTransactionBaseEndWireBase(options); - - return new this({ - version, - claims, - attributes, - inputs, - outputs, - scripts, - }); - } - - public readonly claims!: readonly Input[]; - protected readonly sizeExclusive: () => number = utils.lazy( - () => IOHelper.sizeOfUInt8 + IOHelper.sizeOfArray(this.claims, (claim) => claim.size), - ); - private readonly claimGetScriptHashesForVerifyingInternal: ( - options: TransactionGetScriptHashesForVerifyingOptions, - ) => Promise>; - - public constructor(add: ClaimTransactionAdd) { - super(add); - - const getScriptHashesForVerifying = super.getScriptHashesForVerifying.bind(this); - this.claimGetScriptHashesForVerifyingInternal = utils.lazyAsync( - async (options: TransactionGetScriptHashesForVerifyingOptions) => { - const { getOutput } = options; - const [hashesSet, hashes] = await Promise.all([ - getScriptHashesForVerifying(options), - Promise.all( - this.claims.map(async (claim) => { - const output = await getOutput(claim); - - return common.uInt160ToHex(output.address); - }), - ), - ]); - - return new Set([...hashesSet, ...hashes]); - }, - ); - } - - public async getNetworkFee(_context: FeeContext): Promise { - return utils.ZERO; - } - - public async getClaimReferences({ getOutput }: GetReferencesOptions): Promise { - return Promise.all(this.claims.map(async (input) => getOutput(input))); - } - - public async getScriptHashesForVerifying( - options: TransactionGetScriptHashesForVerifyingOptions, - ): Promise> { - return this.claimGetScriptHashesForVerifyingInternal(options); - } - - public async verify(options: TransactionVerifyOptions): Promise { - const [results] = await Promise.all([super.verify(options), this.verifyInternal(options)]); - - return results; - } - - public async serializeJSON(context: SerializeJSONContext): Promise { - const transactionBaseJSON = await super.serializeTransactionBaseJSON(context); - - return { - ...transactionBaseJSON, - type: 'ClaimTransaction', - claims: this.claims.map((claim) => claim.serializeJSON(context)), - }; - } - - private async verifyInternal(options: TransactionVerifyOptions): Promise { - const { calculateClaimAmount, getOutput, utilityToken, memPool = [] } = options; - if (hasDuplicateInputs(this.claims)) { - throw new VerifyError('Duplicate claims'); - } - - if ( - memPool.some( - (transaction) => - transaction instanceof ClaimTransaction && - transaction.type === TransactionType.Claim && - hasIntersectingInputs(this.claims, transaction.claims), - ) - ) { - throw new VerifyError('Duplicate claims in mempool'); - } - const [results, claimAmount] = await Promise.all([ - this.getTransactionResults({ getOutput }), - calculateClaimAmount(this.claims).catch((error) => { - throw new VerifyError(`Invalid claims: ${error.message}`); - }), - ]); - - // tslint:disable-next-line no-unused - const result = Object.entries(results).find(([assetHex, _value]) => - common.uInt256Equal(common.hexToUInt256(assetHex), utilityToken.hash), - ); - - if (result === undefined || result[1].gt(utils.ZERO)) { - throw new VerifyError('Invalid claim value'); - } - - if (!claimAmount.eq(result[1].neg())) { - throw new VerifyError('Invalid claim value'); - } - } -} diff --git a/packages/neo-one-node-core/src/transaction/ContractTransaction.ts b/packages/neo-one-node-core/src/transaction/ContractTransaction.ts deleted file mode 100644 index c52cfb5b0a..0000000000 --- a/packages/neo-one-node-core/src/transaction/ContractTransaction.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { ContractTransactionJSON, InvalidFormatError, IOHelper, TransactionBaseModel } from '@neo-one/client-common'; -import { Constructor } from '@neo-one/utils'; -import { DeserializeWireBaseOptions, SerializeJSONContext } from '../Serializable'; -import { utils } from '../utils'; -import { Witness } from '../Witness'; -import { Attribute } from './attribute'; -import { Input } from './Input'; -import { Output } from './Output'; -import { TransactionBase, TransactionBaseAdd } from './TransactionBase'; -import { TransactionType } from './TransactionType'; - -export type ContractTransactionAdd = TransactionBaseAdd; - -export class ContractTransaction extends TransactionBase< - TransactionType.Contract, - ContractTransactionJSON, - Constructor> - // tslint:disable-next-line no-any ->(TransactionBaseModel as any) { - public static deserializeWireBase(options: DeserializeWireBaseOptions): ContractTransaction { - const { type, version } = super.deserializeTransactionBaseStartWireBase(options); - - if (type !== TransactionType.Contract) { - throw new InvalidFormatError(`Expected transaction type to be ${TransactionType.Contract}. Received: ${type}`); - } - - const { attributes, inputs, outputs, scripts } = super.deserializeTransactionBaseEndWireBase(options); - - return new this({ - version, - attributes, - inputs, - outputs, - scripts, - }); - } - - protected readonly sizeExclusive: () => number = utils.lazy(() => IOHelper.sizeOfUInt8); - - public constructor({ version, attributes, inputs, outputs, scripts, hash }: TransactionBaseAdd) { - super({ - version, - type: TransactionType.Contract, - attributes, - inputs, - outputs, - scripts, - hash, - }); - - if (this.version !== 0) { - throw new InvalidFormatError(`Expected version to be 0. Received: ${this.version}`); - } - } - - public clone({ - scripts = this.scripts, - attributes = this.attributes, - inputs = this.inputs, - outputs = this.outputs, - }: { - readonly scripts?: readonly Witness[]; - readonly attributes?: readonly Attribute[]; - readonly inputs?: readonly Input[]; - readonly outputs?: readonly Output[]; - }): this { - // tslint:disable-next-line no-any - return new (this.constructor as any)({ - version: this.version, - attributes, - inputs, - outputs, - scripts, - }); - } - - public async serializeJSON(context: SerializeJSONContext): Promise { - const transactionBaseJSON = await super.serializeTransactionBaseJSON(context); - - return { - ...transactionBaseJSON, - type: 'ContractTransaction', - }; - } -} diff --git a/packages/neo-one-node-core/src/transaction/EnrollmentTransaction.ts b/packages/neo-one-node-core/src/transaction/EnrollmentTransaction.ts deleted file mode 100644 index e73cbfabc8..0000000000 --- a/packages/neo-one-node-core/src/transaction/EnrollmentTransaction.ts +++ /dev/null @@ -1,143 +0,0 @@ -import { - BinaryWriter, - common, - crypto, - ECPoint, - EnrollmentTransactionJSON, - InvalidFormatError, - IOHelper, - JSONHelper, - TransactionBaseModel, - UInt160Hex, -} from '@neo-one/client-common'; -import { Constructor } from '@neo-one/utils'; -import { VerifyError } from '../errors'; -import { DeserializeWireBaseOptions, SerializeJSONContext } from '../Serializable'; -import { utils } from '../utils'; -import { VerifyScriptResult } from '../vm'; -import { Witness } from '../Witness'; -import { Attribute } from './attribute'; -import { Input } from './Input'; -import { Output } from './Output'; -import { - TransactionBase, - TransactionBaseAdd, - TransactionGetScriptHashesForVerifyingOptions, - TransactionVerifyOptions, -} from './TransactionBase'; -import { TransactionType } from './TransactionType'; - -export interface EnrollmentTransactionAdd extends TransactionBaseAdd { - readonly publicKey: ECPoint; -} - -export class EnrollmentTransaction extends TransactionBase< - TransactionType.Enrollment, - EnrollmentTransactionJSON, - Constructor> - // tslint:disable-next-line no-any ->(TransactionBaseModel as any) { - public static deserializeWireBase(options: DeserializeWireBaseOptions): EnrollmentTransaction { - const { reader } = options; - - const { type, version } = super.deserializeTransactionBaseStartWireBase(options); - - if (type !== TransactionType.Enrollment) { - throw new InvalidFormatError(`Expected transaction type ${TransactionType.Enrollment}. Received: ${type}`); - } - - const publicKey = reader.readECPoint(); - - const { attributes, inputs, outputs, scripts } = super.deserializeTransactionBaseEndWireBase(options); - - return new this({ - version, - publicKey, - attributes, - inputs, - outputs, - scripts, - }); - } - - public readonly publicKey: ECPoint; - protected readonly sizeExclusive: () => number = utils.lazy( - () => IOHelper.sizeOfUInt8 + IOHelper.sizeOfECPoint(this.publicKey), - ); - private readonly enrollmentGetScriptHashesForVerifyingInternal: ( - options: TransactionGetScriptHashesForVerifyingOptions, - ) => Promise>; - - public constructor({ version, attributes, inputs, outputs, scripts, hash, publicKey }: EnrollmentTransactionAdd) { - super({ - version, - type: TransactionType.Enrollment, - attributes, - inputs, - outputs, - scripts, - hash, - }); - - this.publicKey = publicKey; - - if (this.version !== 0) { - throw new InvalidFormatError(`Expected version to be 0. Received: ${this.version}`); - } - - const getScriptHashesForVerifying = super.getScriptHashesForVerifying.bind(this); - this.enrollmentGetScriptHashesForVerifyingInternal = utils.lazyAsync( - async (options: TransactionGetScriptHashesForVerifyingOptions) => { - const hashes = await getScriptHashesForVerifying(options); - - return new Set([...hashes, common.uInt160ToHex(crypto.getVerificationScriptHash(this.publicKey))]); - }, - ); - } - - public clone({ - scripts = this.scripts, - attributes = this.attributes, - inputs = this.inputs, - outputs = this.outputs, - }: { - readonly scripts?: readonly Witness[]; - readonly attributes?: readonly Attribute[]; - readonly inputs?: readonly Input[]; - readonly outputs?: readonly Output[]; - }): this { - // tslint:disable-next-line no-any - return new (this.constructor as any)({ - version: this.version, - attributes, - inputs, - outputs, - scripts, - publicKey: this.publicKey, - }) as this; - } - - public serializeExclusiveBase(writer: BinaryWriter): void { - writer.writeECPoint(this.publicKey); - } - - public async serializeJSON(context: SerializeJSONContext): Promise { - const transactionBaseJSON = await super.serializeTransactionBaseJSON(context); - - return { - ...transactionBaseJSON, - type: 'EnrollmentTransaction', - pubkey: JSONHelper.writeECPoint(this.publicKey), - }; - } - - public async getScriptHashesForVerifying( - options: TransactionGetScriptHashesForVerifyingOptions, - ): Promise> { - return this.enrollmentGetScriptHashesForVerifyingInternal(options); - } - - public async verify(_options: TransactionVerifyOptions): Promise { - throw new VerifyError('Enrollment transactions are obsolete'); - } -} diff --git a/packages/neo-one-node-core/src/transaction/Input.ts b/packages/neo-one-node-core/src/transaction/Input.ts deleted file mode 100644 index 40a0491e25..0000000000 --- a/packages/neo-one-node-core/src/transaction/Input.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { common, InputJSON, InputModel, JSONHelper } from '@neo-one/client-common'; -import { Equals, EquatableKey } from '../Equatable'; -import { - DeserializeWireBaseOptions, - DeserializeWireOptions, - SerializableJSON, - SerializeJSONContext, -} from '../Serializable'; -import { BinaryReader, utils } from '../utils'; - -export class Input extends InputModel implements EquatableKey, SerializableJSON { - public static deserializeWireBase({ reader }: DeserializeWireBaseOptions): Input { - const hash = reader.readUInt256(); - const index = reader.readUInt16LE(); - - return new this({ hash, index }); - } - - public static deserializeWire(options: DeserializeWireOptions): Input { - return this.deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); - } - - public readonly equals: Equals = utils.equals( - Input, - this, - (other) => common.uInt256Equal(this.hash, other.hash) && other.index === this.index, - ); - public readonly toKeyString = utils.toKeyString(Input, () => `${this.hashHex}:${this.index}`); - - public serializeJSON(_context: SerializeJSONContext): InputJSON { - return { - txid: JSONHelper.writeUInt256(this.hash), - vout: this.index, - }; - } -} diff --git a/packages/neo-one-node-core/src/transaction/InvocationTransaction.ts b/packages/neo-one-node-core/src/transaction/InvocationTransaction.ts deleted file mode 100644 index 2d4665db26..0000000000 --- a/packages/neo-one-node-core/src/transaction/InvocationTransaction.ts +++ /dev/null @@ -1,129 +0,0 @@ -import { - common, - crypto, - InvalidFormatError, - InvocationDataJSON, - InvocationTransactionJSON, - InvocationTransactionModel, - InvocationTransactionModelAdd, - IOHelper, - JSONHelper, -} from '@neo-one/client-common'; -import { Constructor } from '@neo-one/utils'; -import { BN } from 'bn.js'; -import { VerifyError } from '../errors'; -import { DeserializeWireBaseOptions, SerializeJSONContext } from '../Serializable'; -import { utils } from '../utils'; -import { VerifyScriptResult } from '../vm'; -import { Witness } from '../Witness'; -import { Attribute } from './attribute'; -import { Input } from './Input'; -import { Output } from './Output'; -import { FeeContext, TransactionBase, TransactionVerifyOptions } from './TransactionBase'; -import { TransactionType } from './TransactionType'; - -export interface InvocationTransactionAdd extends InvocationTransactionModelAdd {} - -const MAX_SCRIPT_SIZE = 65536; - -export class InvocationTransaction extends TransactionBase< - TransactionType.Invocation, - InvocationTransactionJSON, - Constructor> ->(InvocationTransactionModel) { - public static deserializeWireBase(options: DeserializeWireBaseOptions): InvocationTransaction { - const { reader } = options; - - const { type, version } = super.deserializeTransactionBaseStartWireBase(options); - - if (type !== TransactionType.Invocation) { - throw new InvalidFormatError(`Expected transaction type to be ${TransactionType.Invocation}. Received: ${type}`); - } - - const script = reader.readVarBytesLE(MAX_SCRIPT_SIZE); - if (script.length === 0) { - throw new InvalidFormatError('Expected invocation script length to not be 0'); - } - - let gas = utils.ZERO; - if (version >= 1) { - gas = reader.readFixed8(); - } - - const { attributes, inputs, outputs, scripts } = super.deserializeTransactionBaseEndWireBase(options); - - return new this({ - version, - attributes, - inputs, - outputs, - scripts, - script, - gas, - }); - } - - protected readonly sizeExclusive: () => number = utils.lazy( - () => IOHelper.sizeOfUInt8 + IOHelper.sizeOfVarBytesLE(this.script), - ); - - public async serializeJSON(context: SerializeJSONContext): Promise { - const transactionBaseJSON = await super.serializeTransactionBaseJSON(context); - - const data = await context.tryGetInvocationData(this); - let invocationDataJSON: InvocationDataJSON | undefined; - if (data !== undefined) { - const { - asset, - contracts, - deletedContractHashes, - migratedContractHashes, - voteUpdates, - actions, - result, - storageChanges, - } = data; - invocationDataJSON = { - result: result.serializeJSON(context), - asset: asset === undefined ? undefined : asset.serializeJSON(context), - contracts: contracts.map((contract) => contract.serializeJSON(context)), - deletedContractHashes: deletedContractHashes.map((hash) => common.uInt160ToString(hash)), - migratedContractHashes: migratedContractHashes.map( - ([from, to]) => [common.uInt160ToString(from), common.uInt160ToString(to)] as const, - ), - voteUpdates: voteUpdates.map( - ([address, votes]) => - [ - crypto.scriptHashToAddress({ - addressVersion: context.addressVersion, - scriptHash: address, - }), - votes.map((vote) => common.ecPointToString(vote)), - ] as const, - ), - actions: actions.map((action) => action.serializeJSON(context)), - storageChanges: storageChanges.map((storageChange) => storageChange.serializeJSON(context)), - }; - } - - return { - ...transactionBaseJSON, - type: 'InvocationTransaction', - script: JSONHelper.writeBuffer(this.script), - gas: JSONHelper.writeFixed8(this.gas), - invocationData: invocationDataJSON, - }; - } - - public getSystemFee(_context: FeeContext): BN { - return this.gas; - } - - public async verify(options: TransactionVerifyOptions): Promise { - if (!this.gas.mod(utils.ONE_HUNDRED_MILLION).eq(utils.ZERO)) { - throw new VerifyError('Invalid GAS amount'); - } - - return super.verify(options); - } -} diff --git a/packages/neo-one-node-core/src/transaction/IssueTransaction.ts b/packages/neo-one-node-core/src/transaction/IssueTransaction.ts deleted file mode 100644 index f28908e788..0000000000 --- a/packages/neo-one-node-core/src/transaction/IssueTransaction.ts +++ /dev/null @@ -1,154 +0,0 @@ -import { common, InvalidFormatError, IOHelper, IssueTransactionJSON, UInt160Hex } from '@neo-one/client-common'; -import { IssueTransactionModel } from '@neo-one/client-full-common'; -import { Constructor } from '@neo-one/utils'; -import { BN } from 'bn.js'; -import { VerifyError } from '../errors'; -import { DeserializeWireBaseOptions, SerializeJSONContext } from '../Serializable'; -import { utils } from '../utils'; -import { VerifyScriptResult } from '../vm'; -import { Witness } from '../Witness'; -import { Attribute } from './attribute'; -import { Input } from './Input'; -import { Output } from './Output'; -import { - FeeContext, - TransactionBase, - TransactionBaseAdd, - TransactionGetScriptHashesForVerifyingOptions, - TransactionVerifyOptions, -} from './TransactionBase'; -import { TransactionType } from './TransactionType'; - -// tslint:disable-next-line -export interface IssueTransactionAdd extends TransactionBaseAdd {} - -export class IssueTransaction extends TransactionBase< - TransactionType.Issue, - IssueTransactionJSON, - Constructor> ->(IssueTransactionModel) { - public static deserializeWireBase(options: DeserializeWireBaseOptions): IssueTransaction { - const { type, version } = super.deserializeTransactionBaseStartWireBase(options); - - if (type !== TransactionType.Issue) { - throw new InvalidFormatError(`Expected transaction type to be ${TransactionType.Issue}. Received: ${type}`); - } - - const { attributes, inputs, outputs, scripts } = super.deserializeTransactionBaseEndWireBase(options); - - return new this({ - version, - attributes, - inputs, - outputs, - scripts, - }); - } - - protected readonly sizeExclusive: () => number = utils.lazy(() => IOHelper.sizeOfUInt8); - private readonly issueGetScriptHashesForVerifyingInternal: ( - options: TransactionGetScriptHashesForVerifyingOptions, - ) => Promise>; - - public constructor(add: IssueTransactionAdd) { - super(add); - - const getScriptHashesForVerifying = super.getScriptHashesForVerifying.bind(this); - this.issueGetScriptHashesForVerifyingInternal = utils.lazyAsync( - async (options: TransactionGetScriptHashesForVerifyingOptions) => { - const { getOutput, getAsset } = options; - const [hashes, issuerHashes] = await Promise.all([ - getScriptHashesForVerifying(options), - this.getTransactionResults({ getOutput }).then(async (results) => - Promise.all( - Object.entries(results) - // tslint:disable-next-line no-unused - .filter(([_, value]) => value.lt(utils.ZERO)) - // tslint:disable-next-line no-unused - .map(async ([assetHash, _]) => { - const asset = await getAsset({ - hash: common.hexToUInt256(assetHash), - }); - - return common.uInt160ToHex(asset.issuer); - }), - ), - ), - ]); - - return new Set([...hashes, ...issuerHashes]); - }, - ); - } - - public async serializeJSON(context: SerializeJSONContext): Promise { - const transactionBaseJSON = await super.serializeTransactionBaseJSON(context); - - return { - ...transactionBaseJSON, - type: 'IssueTransaction', - }; - } - - public getSystemFee(context: FeeContext): BN { - if (this.version >= 1) { - return utils.ZERO; - } - - const { governingToken, utilityToken } = context; - if ( - this.outputs.every( - (output) => - common.uInt256Equal(output.asset, governingToken.hash) || - common.uInt256Equal(output.asset, utilityToken.hash), - ) - ) { - return utils.ZERO; - } - - return super.getSystemFee(context); - } - - public async getScriptHashesForVerifying( - options: TransactionGetScriptHashesForVerifyingOptions, - ): Promise> { - return this.issueGetScriptHashesForVerifyingInternal(options); - } - - public async verify(options: TransactionVerifyOptions): Promise { - const [results] = await Promise.all([super.verify(options), this.verifyInternal(options)]); - - return results; - } - - private async verifyInternal(options: TransactionVerifyOptions): Promise { - const { getOutput, getAsset, memPool = [] } = options; - const results = await this.getTransactionResults({ getOutput }); - await Promise.all( - Object.entries(results).map(async ([assetHex, value]) => { - const hash = common.hexToUInt256(assetHex); - const asset = await getAsset({ hash }); - if (asset.amount.lt(utils.ZERO)) { - return; - } - - const issued = asset.available.add( - memPool - .filter((transaction) => transaction !== this) - .reduce( - (acc, transaction) => - transaction.outputs - .filter((output) => common.uInt256Equal(hash, output.asset)) - .reduce((innerAcc, output) => innerAcc.add(output.value), acc), - - utils.ZERO, - ), - ); - - if (asset.amount.sub(issued).lt(value.neg())) { - throw new VerifyError('Invalid issue amount'); - } - }), - ); - } -} diff --git a/packages/neo-one-node-core/src/transaction/MinerTransaction.ts b/packages/neo-one-node-core/src/transaction/MinerTransaction.ts deleted file mode 100644 index f9d3038059..0000000000 --- a/packages/neo-one-node-core/src/transaction/MinerTransaction.ts +++ /dev/null @@ -1,132 +0,0 @@ -import { - BinaryWriter, - common, - InvalidFormatError, - IOHelper, - MinerTransactionJSON, - TransactionBaseModel, -} from '@neo-one/client-common'; -import { Constructor } from '@neo-one/utils'; -import { BN } from 'bn.js'; -import { VerifyError } from '../errors'; -import { DeserializeWireBaseOptions, SerializeJSONContext } from '../Serializable'; -import { utils } from '../utils'; -import { VerifyScriptResult } from '../vm'; -import { Witness } from '../Witness'; -import { Attribute } from './attribute'; -import { Input } from './Input'; -import { Output } from './Output'; -import { FeeContext, TransactionBase, TransactionBaseAdd, TransactionVerifyOptions } from './TransactionBase'; -import { TransactionType } from './TransactionType'; - -export interface MinerTransactionAdd extends TransactionBaseAdd { - readonly nonce: number; -} - -export class MinerTransaction extends TransactionBase< - TransactionType.Miner, - MinerTransactionJSON, - Constructor> - // tslint:disable-next-line no-any ->(TransactionBaseModel as any) { - public static deserializeWireBase(options: DeserializeWireBaseOptions): MinerTransaction { - const { reader } = options; - const { type, version } = super.deserializeTransactionBaseStartWireBase(options); - - if (type !== TransactionType.Miner) { - throw new InvalidFormatError(`Expected transaction type ${TransactionType.Miner}. Received: ${type}`); - } - - const nonce = reader.readUInt32LE(); - - const { attributes, inputs, outputs, scripts } = super.deserializeTransactionBaseEndWireBase(options); - - return new this({ - version, - attributes, - inputs, - outputs, - scripts, - nonce, - }); - } - - public readonly nonce: number; - protected readonly sizeExclusive: () => number = utils.lazy(() => IOHelper.sizeOfUInt8 + IOHelper.sizeOfUInt32LE); - - public constructor({ version, attributes, inputs, outputs, scripts, hash, nonce }: MinerTransactionAdd) { - super({ - version, - type: TransactionType.Miner, - attributes, - inputs, - outputs, - scripts, - hash, - }); - - this.nonce = nonce; - - if (this.version !== 0) { - throw new InvalidFormatError(`Expected version to be 0. Received: ${this.version}`); - } - } - - public clone({ - scripts = this.scripts, - attributes = this.attributes, - inputs = this.inputs, - outputs = this.outputs, - }: { - readonly scripts?: readonly Witness[]; - readonly attributes?: readonly Attribute[]; - readonly inputs?: readonly Input[]; - readonly outputs?: readonly Output[]; - }): this { - // tslint:disable-next-line no-any - return new (this.constructor as any)({ - version: this.version, - attributes, - inputs, - outputs, - scripts, - nonce: this.nonce, - }); - } - - public serializeExclusiveBase(writer: BinaryWriter): void { - writer.writeUInt32LE(this.nonce); - } - - public async serializeJSON(context: SerializeJSONContext): Promise { - const transactionBaseJSON = await super.serializeTransactionBaseJSON(context); - - return { - ...transactionBaseJSON, - type: 'MinerTransaction', - nonce: this.nonce, - }; - } - - public async getNetworkFee(_context: FeeContext): Promise { - return utils.ZERO; - } - - public async verify(options: TransactionVerifyOptions): Promise { - const [results] = await Promise.all([super.verify(options), this.verifyInternal(options)]); - - return results; - } - - private async verifyInternal(options: TransactionVerifyOptions): Promise { - const { getOutput, utilityToken } = options; - const results = await this.getTransactionResults({ getOutput }); - // tslint:disable-next-line no-unused - const resultsIssue = Object.entries(results).filter(([_, value]) => value.lt(utils.ZERO)); - - // tslint:disable-next-line no-unused - if (resultsIssue.some(([assetHex, _]) => !common.uInt256Equal(common.hexToUInt256(assetHex), utilityToken.hash))) { - throw new VerifyError('Invalid miner result'); - } - } -} diff --git a/packages/neo-one-node-core/src/transaction/Output.ts b/packages/neo-one-node-core/src/transaction/Output.ts deleted file mode 100644 index 15f11dab37..0000000000 --- a/packages/neo-one-node-core/src/transaction/Output.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { common, crypto, JSONHelper, OutputJSON, OutputModel, UInt256 } from '@neo-one/client-common'; -import { BN } from 'bn.js'; -import { Equals, EquatableKey } from '../Equatable'; -import { DeserializeWireBaseOptions, DeserializeWireOptions, SerializeJSONContext } from '../Serializable'; -import { BinaryReader, utils } from '../utils'; - -export interface OutputKey { - readonly hash: UInt256; - readonly index: number; -} - -export class Output extends OutputModel implements EquatableKey { - public static deserializeWireBase({ reader }: DeserializeWireBaseOptions): Output { - const asset = reader.readUInt256(); - const value = reader.readFixed8(); - const address = reader.readUInt160(); - - return new this({ asset, value, address }); - } - - public static deserializeWire(options: DeserializeWireOptions): Output { - return this.deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); - } - - public readonly equals: Equals = utils.equals( - Output, - this, - (other) => - common.uInt256Equal(this.asset, other.asset) && - this.value.eq(other.value) && - common.uInt160Equal(this.address, other.address), - ); - public readonly toKeyString = utils.toKeyString( - Output, - () => `${common.uInt256ToString(this.asset)}:${this.value.toString(10)}:${common.uInt160ToString(this.address)}`, - ); - - public clone({ value = this.value }: { readonly value?: BN }): Output { - return new Output({ - asset: this.asset, - value, - address: this.address, - }); - } - - public serializeJSON(context: SerializeJSONContext, index: number): OutputJSON { - return { - n: index, - asset: JSONHelper.writeUInt256(this.asset), - value: JSONHelper.writeFixed8(this.value), - address: crypto.scriptHashToAddress({ - addressVersion: context.addressVersion, - scriptHash: this.address, - }), - }; - } -} diff --git a/packages/neo-one-node-core/src/transaction/PublishTransaction.ts b/packages/neo-one-node-core/src/transaction/PublishTransaction.ts deleted file mode 100644 index 063b70a436..0000000000 --- a/packages/neo-one-node-core/src/transaction/PublishTransaction.ts +++ /dev/null @@ -1,133 +0,0 @@ -import { - BinaryWriter, - InvalidFormatError, - IOHelper, - PublishTransactionJSON, - TransactionBaseModel, -} from '@neo-one/client-common'; -import { serializeContractWireBase } from '@neo-one/client-full-common'; -import { Constructor } from '@neo-one/utils'; -import { Contract, deserializeContractWireBase, sizeOfContract } from '../Contract'; -import { VerifyError } from '../errors'; -import { DeserializeWireBaseOptions, SerializeJSONContext } from '../Serializable'; -import { utils } from '../utils'; -import { VerifyScriptResult } from '../vm'; -import { Witness } from '../Witness'; -import { Attribute } from './attribute'; -import { Input } from './Input'; -import { Output } from './Output'; -import { TransactionBase, TransactionBaseAdd, TransactionVerifyOptions } from './TransactionBase'; -import { TransactionType } from './TransactionType'; - -export interface PublishTransactionAdd extends TransactionBaseAdd { - readonly contract: Contract; -} - -export class PublishTransaction extends TransactionBase< - TransactionType.Publish, - PublishTransactionJSON, - Constructor> - // tslint:disable-next-line no-any ->(TransactionBaseModel as any) { - public static deserializeWireBase(options: DeserializeWireBaseOptions): PublishTransaction { - const { type, version } = super.deserializeTransactionBaseStartWireBase(options); - - if (type !== TransactionType.Publish) { - throw new InvalidFormatError(`Expected transaction type to be ${TransactionType.Publish}. Received: ${type}`); - } - - const contract = deserializeContractWireBase({ - ...options, - publishVersion: version, - }); - - const { attributes, inputs, outputs, scripts } = super.deserializeTransactionBaseEndWireBase(options); - - return new this({ - version, - attributes, - inputs, - outputs, - scripts, - contract, - }); - } - - public readonly contract: Contract; - protected readonly sizeExclusive: () => number = utils.lazy( - () => - IOHelper.sizeOfUInt8 + - sizeOfContract({ - script: this.contract.script, - parameterList: this.contract.parameterList, - name: this.contract.name, - codeVersion: this.contract.codeVersion, - author: this.contract.author, - email: this.contract.email, - description: this.contract.description, - publishVersion: this.version, - }), - ); - - public constructor({ version, attributes, inputs, outputs, scripts, hash, contract }: PublishTransactionAdd) { - super({ - version, - type: TransactionType.Publish, - attributes, - inputs, - outputs, - scripts, - hash, - }); - - this.contract = contract; - - if (this.version > 1) { - throw new InvalidFormatError(`Expected version to be greater than 1. Received: ${this.version}`); - } - } - - public clone({ - scripts = this.scripts, - attributes = this.attributes, - inputs = this.inputs, - outputs = this.outputs, - }: { - readonly scripts?: readonly Witness[]; - readonly attributes?: readonly Attribute[]; - readonly inputs?: readonly Input[]; - readonly outputs?: readonly Output[]; - }): this { - // tslint:disable-next-line no-any - return new (this.constructor as any)({ - version: this.version, - attributes, - inputs, - outputs, - scripts, - contract: this.contract, - }); - } - - public serializeExclusiveBase(writer: BinaryWriter): void { - serializeContractWireBase({ - contract: this.contract, - writer, - publishVersion: this.version, - }); - } - - public async serializeJSON(context: SerializeJSONContext): Promise { - const transactionBaseJSON = await super.serializeTransactionBaseJSON(context); - - return { - ...transactionBaseJSON, - type: 'PublishTransaction', - contract: this.contract.serializeJSON(context), - }; - } - - public async verify(_options: TransactionVerifyOptions): Promise { - throw new VerifyError('Publish transactions are obsolete'); - } -} diff --git a/packages/neo-one-node-core/src/transaction/RegisterTransaction.ts b/packages/neo-one-node-core/src/transaction/RegisterTransaction.ts deleted file mode 100644 index 324e76b06b..0000000000 --- a/packages/neo-one-node-core/src/transaction/RegisterTransaction.ts +++ /dev/null @@ -1,215 +0,0 @@ -import { - BinaryWriter, - common, - crypto, - ECPoint, - InvalidFormatError, - IOHelper, - JSONHelper, - RegisterTransactionJSON, - TransactionBaseModel, - UInt160, - UInt160Hex, -} from '@neo-one/client-common'; -import { Constructor } from '@neo-one/utils'; -import { BN } from 'bn.js'; -import { assertAssetType, AssetType, toJSONAssetType } from '../AssetType'; -import { VerifyError } from '../errors'; -import { DeserializeWireBaseOptions, SerializeJSONContext } from '../Serializable'; -import { utils } from '../utils'; -import { VerifyScriptResult } from '../vm'; -import { Witness } from '../Witness'; -import { Attribute } from './attribute'; -import { Input } from './Input'; -import { Output } from './Output'; -import { - FeeContext, - TransactionBase, - TransactionBaseAdd, - TransactionGetScriptHashesForVerifyingOptions, - TransactionVerifyOptions, -} from './TransactionBase'; -import { TransactionType } from './TransactionType'; - -interface Asset { - readonly type: AssetType; - readonly name: string; - readonly amount: BN; - readonly precision: number; - readonly owner: ECPoint; - readonly admin: UInt160; -} - -export interface RegisterTransactionAdd extends TransactionBaseAdd { - readonly asset: Asset; -} - -export class RegisterTransaction extends TransactionBase< - TransactionType.Register, - RegisterTransactionJSON, - Constructor> - // tslint:disable-next-line no-any ->(TransactionBaseModel as any) { - public static deserializeWireBase(options: DeserializeWireBaseOptions): RegisterTransaction { - const { reader } = options; - - const { type, version } = super.deserializeTransactionBaseStartWireBase(options); - - if (type !== TransactionType.Register) { - throw new InvalidFormatError(`Expected transaction type ${TransactionType.Register}. Received: ${type}`); - } - - const assetType = assertAssetType(reader.readUInt8()); - const name = reader.readVarString(1024); - const amount = reader.readFixed8(); - const precision = reader.readUInt8(); - const owner = reader.readECPoint(); - const admin = reader.readUInt160(); - - const { attributes, inputs, outputs, scripts } = super.deserializeTransactionBaseEndWireBase(options); - - return new this({ - version, - attributes, - inputs, - outputs, - scripts, - asset: { - type: assetType, - name, - amount, - precision, - owner, - admin, - }, - }); - } - - public readonly asset: Asset; - protected readonly sizeExclusive: () => number = utils.lazy( - () => - IOHelper.sizeOfUInt8 + - IOHelper.sizeOfUInt8 + - IOHelper.sizeOfVarString(this.asset.name) + - IOHelper.sizeOfFixed8 + - IOHelper.sizeOfUInt8 + - IOHelper.sizeOfECPoint(this.asset.owner) + - IOHelper.sizeOfUInt160, - ); - private readonly registerGetScriptHashesForVerifyingInternal: ( - options: TransactionGetScriptHashesForVerifyingOptions, - ) => Promise>; - - public constructor({ version, attributes, inputs, outputs, scripts, hash, asset }: RegisterTransactionAdd) { - super({ - version, - type: TransactionType.Register, - attributes, - inputs, - outputs, - scripts, - hash, - }); - - this.asset = asset; - - if (this.version !== 0) { - throw new InvalidFormatError(`Expected version to be 0. Received: ${this.version}`); - } - - if ( - common.ecPointIsInfinity(asset.owner) && - asset.type !== AssetType.GoverningToken && - asset.type !== AssetType.UtilityToken - ) { - throw new InvalidFormatError(`AssetType and asset owner are invalid`); - } - - const getScriptHashesForVerifying = super.getScriptHashesForVerifying.bind(this); - this.registerGetScriptHashesForVerifyingInternal = utils.lazyAsync( - async (options: TransactionGetScriptHashesForVerifyingOptions) => { - const hashes = await getScriptHashesForVerifying(options); - const scriptHash = common.uInt160ToHex(crypto.getVerificationScriptHash(this.asset.owner)); - - return new Set([...hashes, scriptHash]); - }, - ); - } - - public clone({ - scripts = this.scripts, - attributes = this.attributes, - inputs = this.inputs, - outputs = this.outputs, - }: { - readonly scripts?: readonly Witness[]; - readonly attributes?: readonly Attribute[]; - readonly inputs?: readonly Input[]; - readonly outputs?: readonly Output[]; - }): this { - // tslint:disable-next-line no-any - return new (this.constructor as any)({ - version: this.version, - attributes, - inputs, - outputs, - scripts, - hash: this.hash, - asset: this.asset, - }); - } - - public serializeExclusiveBase(writer: BinaryWriter): void { - writer.writeUInt8(this.asset.type); - writer.writeVarString(this.asset.name); - writer.writeFixed8(this.asset.amount); - writer.writeUInt8(this.asset.precision); - writer.writeECPoint(this.asset.owner); - writer.writeUInt160(this.asset.admin); - } - - public async serializeJSON(context: SerializeJSONContext): Promise { - const transactionBaseJSON = await super.serializeTransactionBaseJSON(context); - - let { name } = this.asset; - try { - name = JSON.parse(name); - } catch { - // ignore errors - } - - return { - ...transactionBaseJSON, - type: 'RegisterTransaction', - asset: { - type: toJSONAssetType(this.asset.type), - name, - amount: JSONHelper.writeFixed8(this.asset.amount), - precision: this.asset.precision, - owner: JSONHelper.writeECPoint(this.asset.owner), - admin: crypto.scriptHashToAddress({ - addressVersion: context.addressVersion, - scriptHash: this.asset.admin, - }), - }, - }; - } - - public getSystemFee(context: FeeContext): BN { - if (this.asset.type === AssetType.GoverningToken || this.asset.type === AssetType.UtilityToken) { - return utils.ZERO; - } - - return super.getSystemFee(context); - } - - public async getScriptHashesForVerifying( - options: TransactionGetScriptHashesForVerifyingOptions, - ): Promise> { - return this.registerGetScriptHashesForVerifyingInternal(options); - } - - public async verify(_options: TransactionVerifyOptions): Promise { - throw new VerifyError('Register transactions are obsolete'); - } -} diff --git a/packages/neo-one-node-core/src/transaction/StateTransaction.ts b/packages/neo-one-node-core/src/transaction/StateTransaction.ts deleted file mode 100644 index 7cc5c05b6f..0000000000 --- a/packages/neo-one-node-core/src/transaction/StateTransaction.ts +++ /dev/null @@ -1,157 +0,0 @@ -import { - BinaryWriter, - InvalidFormatError, - IOHelper, - StateTransactionJSON, - TransactionBaseModel, - UInt160Hex, -} from '@neo-one/client-common'; -import { Constructor } from '@neo-one/utils'; -import { BN } from 'bn.js'; -import { DeserializeWireBaseOptions, SerializeJSONContext } from '../Serializable'; -import { utils } from '../utils'; -import { VerifyScriptResult } from '../vm'; -import { Witness } from '../Witness'; -import { Attribute } from './attribute'; -import { Input } from './Input'; -import { Output } from './Output'; -import { StateDescriptor } from './state'; -import { - FeeContext, - TransactionBase, - TransactionBaseAdd, - TransactionGetScriptHashesForVerifyingOptions, - TransactionVerifyOptions, -} from './TransactionBase'; -import { TransactionType } from './TransactionType'; - -export interface StateTransactionAdd extends TransactionBaseAdd { - readonly descriptors: readonly StateDescriptor[]; -} - -export class StateTransaction extends TransactionBase< - TransactionType.State, - StateTransactionJSON, - Constructor> - // tslint:disable-next-line no-any ->(TransactionBaseModel as any) { - public static deserializeWireBase(options: DeserializeWireBaseOptions): StateTransaction { - const { reader } = options; - const { type, version } = super.deserializeTransactionBaseStartWireBase(options); - - if (type !== TransactionType.State) { - throw new InvalidFormatError(`Expected transaction type ${TransactionType.State}. Received: ${type}`); - } - - const descriptors = reader.readArray(() => StateDescriptor.deserializeWireBase(options)); - - const { attributes, inputs, outputs, scripts } = super.deserializeTransactionBaseEndWireBase(options); - - return new this({ - version, - attributes, - inputs, - outputs, - scripts, - descriptors, - }); - } - - public readonly descriptors: readonly StateDescriptor[]; - protected readonly sizeExclusive: () => number = utils.lazy(() => - IOHelper.sizeOfArray(this.descriptors, (descriptor) => descriptor.size), - ); - private readonly stateGetScriptHashesForVerifyingInternal: ( - options: TransactionGetScriptHashesForVerifyingOptions, - ) => Promise>; - - public constructor({ version, attributes, inputs, outputs, scripts, hash, descriptors }: StateTransactionAdd) { - super({ - version, - type: TransactionType.State, - attributes, - inputs, - outputs, - scripts, - hash, - }); - - this.descriptors = descriptors; - - if (this.version !== 0) { - throw new InvalidFormatError(`Expected version to be 0. Received: ${this.version}`); - } - - const getScriptHashesForVerifying = super.getScriptHashesForVerifying.bind(this); - this.stateGetScriptHashesForVerifyingInternal = utils.lazyAsync( - async (options: TransactionGetScriptHashesForVerifyingOptions) => { - const mutableHashes = await getScriptHashesForVerifying(options); - this.descriptors.forEach((descriptor) => { - descriptor.getScriptHashesForVerifying().forEach((scriptHash) => { - mutableHashes.add(scriptHash); - }); - }); - - return mutableHashes; - }, - ); - } - - public getSystemFee(context: FeeContext): BN { - return this.descriptors.reduce((value, descriptor) => value.add(descriptor.getSystemFee(context)), utils.ZERO); - } - - public async getScriptHashesForVerifying( - options: TransactionGetScriptHashesForVerifyingOptions, - ): Promise> { - return this.stateGetScriptHashesForVerifyingInternal(options); - } - - public clone({ - scripts = this.scripts, - attributes = this.attributes, - inputs = this.inputs, - outputs = this.outputs, - }: { - readonly scripts?: readonly Witness[]; - readonly attributes?: readonly Attribute[]; - readonly inputs?: readonly Input[]; - readonly outputs?: readonly Output[]; - }): this { - // tslint:disable-next-line no-any - return new (this.constructor as any)({ - version: this.version, - attributes, - inputs, - outputs, - scripts, - descriptors: this.descriptors, - }); - } - - public serializeExclusiveBase(writer: BinaryWriter): void { - writer.writeArray(this.descriptors, (descriptor) => { - descriptor.serializeWireBase(writer); - }); - } - - public async serializeJSON(context: SerializeJSONContext): Promise { - const transactionBaseJSON = await super.serializeTransactionBaseJSON(context); - - return { - ...transactionBaseJSON, - type: 'StateTransaction', - descriptors: this.descriptors.map((descriptor) => descriptor.serializeJSON(context)), - }; - } - - public async verify(options: TransactionVerifyOptions): Promise { - const [results] = await Promise.all([super.verify(options), this.verifyInternal(options)]); - - return results; - } - - private async verifyInternal(options: TransactionVerifyOptions): Promise { - await Promise.all(this.descriptors.map(async (descriptor) => descriptor.verify(options))); - } -} diff --git a/packages/neo-one-node-core/src/transaction/Transaction.ts b/packages/neo-one-node-core/src/transaction/Transaction.ts index 975752d080..cb46f4499e 100644 --- a/packages/neo-one-node-core/src/transaction/Transaction.ts +++ b/packages/neo-one-node-core/src/transaction/Transaction.ts @@ -1,58 +1,287 @@ -import { assertTransactionType, UInt256 } from '@neo-one/client-common'; -import { utils } from '@neo-one/utils'; -import { createDeserializeWire, DeserializeWireBaseOptions } from '../Serializable'; -import { ClaimTransaction } from './ClaimTransaction'; -import { ContractTransaction } from './ContractTransaction'; -import { EnrollmentTransaction } from './EnrollmentTransaction'; -import { InvocationTransaction } from './InvocationTransaction'; -import { IssueTransaction } from './IssueTransaction'; -import { MinerTransaction } from './MinerTransaction'; -import { PublishTransaction } from './PublishTransaction'; -import { RegisterTransaction } from './RegisterTransaction'; -import { StateTransaction } from './StateTransaction'; -import { TransactionType } from './TransactionType'; - -export type Transaction = - | MinerTransaction - | IssueTransaction - | ClaimTransaction - | EnrollmentTransaction - | RegisterTransaction - | ContractTransaction - | PublishTransaction - | StateTransaction - | InvocationTransaction; - -export interface TransactionKey { - readonly hash: UInt256; +import { + AttributeTypeModel, + common, + InvalidFormatError, + IOHelper, + JSONHelper, + MAX_TRANSACTION_SIZE, + MAX_VALID_UNTIL_BLOCK_INCREMENT, + scriptHashToAddress, + TransactionJSON, + TransactionModel, + TransactionModelAdd, + UInt160, + VerboseTransactionJSON, + VerifyResultModel, + VMStateJSON, +} from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import _ from 'lodash'; +import { + DeserializeWireBaseOptions, + DeserializeWireOptions, + SerializableContainer, + SerializableContainerType, +} from '../Serializable'; +import { Signer } from '../Signer'; +import { TransactionVerificationContext } from '../TransactionVerificationContext'; +import { BinaryReader, utils } from '../utils'; +import { Verifiable, VerifyOptions } from '../Verifiable'; +import { Witness } from '../Witness'; +import { Attribute, deserializeAttribute } from './attributes'; + +export type TransactionAdd = TransactionModelAdd; +export type TransactionAddUnsigned = Omit, 'witnesses'>; + +export interface VerboseData { + readonly blockhash: string; + readonly confirmations: number; + readonly blocktime: number; + readonly vmstate: VMStateJSON; } -export const deserializeTransactionWireBase = (options: DeserializeWireBaseOptions): Transaction => { - const { reader } = options; - const type = assertTransactionType(reader.clone().readUInt8()); - switch (type) { - case TransactionType.Miner: - return MinerTransaction.deserializeWireBase(options); - case TransactionType.Issue: - return IssueTransaction.deserializeWireBase(options); - case TransactionType.Claim: - return ClaimTransaction.deserializeWireBase(options); - case TransactionType.Enrollment: - return EnrollmentTransaction.deserializeWireBase(options); - case TransactionType.Register: - return RegisterTransaction.deserializeWireBase(options); - case TransactionType.Contract: - return ContractTransaction.deserializeWireBase(options); - case TransactionType.State: - return StateTransaction.deserializeWireBase(options); - case TransactionType.Publish: - return PublishTransaction.deserializeWireBase(options); - case TransactionType.Invocation: - return InvocationTransaction.deserializeWireBase(options); - default: - utils.assertNever(type); - throw new Error('For TS'); - } -}; - -export const deserializeTransactionWire = createDeserializeWire(deserializeTransactionWireBase); +export class Transaction + extends TransactionModel + implements SerializableContainer, Verifiable { + public static deserializeWireBase(options: DeserializeWireBaseOptions): Transaction { + const { + version, + nonce, + systemFee, + networkFee, + validUntilBlock, + signers, + attributes, + script, + } = this.deserializeWireBaseUnsigned(options); + const { reader } = options; + const witnesses = reader.readArray(() => Witness.deserializeWireBase(options)); + + return new Transaction({ + version, + nonce, + systemFee, + networkFee, + validUntilBlock, + signers, + attributes, + script, + witnesses, + messageMagic: options.context.messageMagic, + }); + } + + public static deserializeWireBaseUnsigned(options: DeserializeWireBaseOptions): TransactionAddUnsigned { + const { reader } = options; + + const version = reader.readUInt8(); + if (version > 0) { + throw new InvalidFormatError(`Expected version to equal 0, found: ${version}`); + } + + const nonce = reader.readUInt32LE(); + const systemFee = reader.readInt64LE(); + if (systemFee.ltn(0)) { + throw new InvalidFormatError(`Expected systemFee to be greater than 0, found: ${systemFee.toString()}`); + } + + const networkFee = reader.readInt64LE(); + if (networkFee.ltn(0)) { + throw new InvalidFormatError(`Expected networkFee to be greater than 0, found: ${networkFee.toString()}`); + } + + if (systemFee.add(networkFee).lt(systemFee)) { + throw new InvalidFormatError(); + } + + const validUntilBlock = reader.readUInt32LE(); + const signers = this.deserializeSigners(options, this.maxTransactionAttributes); + const attributes = this.deserializeAttributes(options, this.maxTransactionAttributes - signers.length); + const script = reader.readVarBytesLE(utils.USHORT_MAX.toNumber()); + if (script.length === 0) { + throw new InvalidFormatError(`Expected script length to be greater than 0, found: ${script.length}`); + } + + return { + version, + nonce, + systemFee, + networkFee, + validUntilBlock, + signers, + attributes, + script, + messageMagic: options.context.messageMagic, + }; + } + + public static deserializeWire(options: DeserializeWireOptions): Transaction { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } + + private static deserializeSigners(options: DeserializeWireBaseOptions, maxCount: number) { + const { reader } = options; + const count = reader.readVarUIntLE(new BN(maxCount)).toNumber(); + if (count === 0) { + throw new InvalidFormatError(`Expected signer count > 0, found: ${count}`); + } + + const signerSet = new Set(); + + return _.range(count).map(() => { + const signer = Signer.deserializeWireBase(options); + if (signerSet.has(signer.account)) { + throw new InvalidFormatError(`Expected signers to be unique, found repeat: ${signer}`); + } + + signerSet.add(signer.account); + + return signer; + }); + } + + private static deserializeAttributes(options: DeserializeWireBaseOptions, maxCount: number) { + const { reader } = options; + const count = reader.readVarUIntLE(new BN(maxCount)).toNumber(); + + const attributeSet = new Set(); + + return _.range(count).map(() => { + const attribute = deserializeAttribute(options); + if (!attribute.allowMultiple && attributeSet.has(attribute.type)) { + throw new InvalidFormatError(`Only 1 ${attribute.type} attribute allowed, found at least 2`); + } + + attributeSet.add(attribute.type); + + return attribute; + }); + } + public get size() { + return this.sizeInternal(); + } + + public readonly type: SerializableContainerType = 'Transaction'; + private readonly sizeInternal = utils.lazy( + () => + Transaction.headerSize + + IOHelper.sizeOfArray(this.signers, (signer) => signer.size) + + IOHelper.sizeOfArray(this.attributes, (attr) => attr.size) + + IOHelper.sizeOfVarBytesLE(this.script) + + IOHelper.sizeOfArray(this.witnesses, (witness) => witness.size), + ); + + public async verifyForEachBlock( + verifyOptions: VerifyOptions, + transactionContext?: TransactionVerificationContext, + ): Promise { + const { storage, native } = verifyOptions; + const { index } = await storage.blockHashIndex.get(); + if (this.validUntilBlock < index || this.validUntilBlock > index + MAX_VALID_UNTIL_BLOCK_INCREMENT) { + return VerifyResultModel.Expired; + } + + const hashes = this.getScriptHashesForVerifying(); + const setHashes = new Set(hashes); + const blockedAccounts = await native.Policy.getBlockedAccounts(storage); + if (blockedAccounts.some((account) => setHashes.has(account))) { + return VerifyResultModel.PolicyFail; + } + + const maxBlockSysFee = await native.Policy.getMaxBlockSystemFee(storage); + const sysFee = this.systemFee; + if (sysFee.gt(maxBlockSysFee)) { + return VerifyResultModel.PolicyFail; + } + + const checkTxPromise = transactionContext?.checkTransaction(this, storage) ?? Promise.resolve(true); + const checkTx = await checkTxPromise; + if (!checkTx) { + return VerifyResultModel.InsufficientFunds; + } + + const attrVerifications = await Promise.all(this.attributes.map(async (attr) => attr.verify(verifyOptions, this))); + if (attrVerifications.some((verification) => !verification)) { + return VerifyResultModel.Invalid; + } + + if (hashes.length !== this.witnesses.length) { + return VerifyResultModel.Invalid; + } + + const verifyHashes = await Promise.all( + hashes.map(async (hash, idx) => { + if (this.witnesses[idx].verification.length > 0) { + return true; + } + const state = await storage.contracts.tryGet(hash); + + return state !== undefined; + }), + ); + + if (verifyHashes.some((value) => !value)) { + return VerifyResultModel.Invalid; + } + + return VerifyResultModel.Succeed; + } + + public async verify( + verifyOptions: VerifyOptions, + verifyContext?: TransactionVerificationContext, + ): Promise { + const { native, storage, verifyWitnesses, vm } = verifyOptions; + const result = await this.verifyForEachBlock(verifyOptions, verifyContext); + if (result !== VerifyResultModel.Succeed) { + return result; + } + if (this.size > MAX_TRANSACTION_SIZE) { + return VerifyResultModel.Invalid; + } + const feePerByte = await native.Policy.getFeePerByte(storage); + const netFee = this.networkFee.sub(feePerByte.muln(this.size)); + if (netFee.ltn(0)) { + return VerifyResultModel.InsufficientFunds; + } + + const witnessVerify = await verifyWitnesses(vm, this, storage, native, netFee); + if (!witnessVerify) { + return VerifyResultModel.Invalid; + } + + return VerifyResultModel.Succeed; + } + + public serializeJSON(): TransactionJSON { + return { + hash: JSONHelper.writeUInt256(this.hash), + size: this.size, + version: this.version, + nonce: this.nonce, + sender: this.sender ? scriptHashToAddress(common.uInt160ToString(this.sender)) : undefined, + sysfee: JSONHelper.writeUInt64(this.systemFee), + netfee: JSONHelper.writeUInt64(this.networkFee), + validuntilblock: this.validUntilBlock, + signers: this.signers.map((signer) => signer.serializeJSON()), + attributes: this.attributes.map((attr) => attr.serializeJSON()), + script: JSONHelper.writeBase64Buffer(this.script), + witnesses: this.witnesses.map((witness) => witness.serializeJSON()), + }; + } + + public serializeJSONWithVerboseData(data: VerboseData): VerboseTransactionJSON { + const base = this.serializeJSON(); + + return { + ...base, + blockhash: data.blockhash, + confirmations: data.confirmations, + blocktime: data.blocktime, + vmstate: data.vmstate, + }; + } +} diff --git a/packages/neo-one-node-core/src/transaction/TransactionBase.ts b/packages/neo-one-node-core/src/transaction/TransactionBase.ts deleted file mode 100644 index ead98f06cc..0000000000 --- a/packages/neo-one-node-core/src/transaction/TransactionBase.ts +++ /dev/null @@ -1,477 +0,0 @@ -import { - assertTransactionType, - common, - ECPoint, - hasFlag, - IOHelper, - JSONHelper, - MAX_TRANSACTION_ATTRIBUTES, - TransactionBaseJSON, - TransactionBaseModel, - TransactionBaseModelAdd, - TransactionBaseModelAddWithType, - UInt160, - UInt160Hex, -} from '@neo-one/client-common'; -import { Constructor, utils as commonUtils } from '@neo-one/utils'; -import { BN } from 'bn.js'; -import _ from 'lodash'; -import { Account, AccountKey } from '../Account'; -import { Asset, AssetKey } from '../Asset'; -import { AssetType } from '../AssetType'; -import { MAX_TRANSACTION_SIZE } from '../constants'; -import { Equals, EquatableKey } from '../Equatable'; -import { VerifyError } from '../errors'; -import { ScriptContainerType } from '../ScriptContainer'; -import { - DeserializeWireBaseOptions, - DeserializeWireOptions, - SerializableJSON, - SerializeJSONContext, -} from '../Serializable'; -import { BinaryReader, utils } from '../utils'; -import { Validator } from '../Validator'; -import { VerifyScript, VerifyScriptResult } from '../vm'; -import { Witness } from '../Witness'; -import { Attribute, AttributeUsage, deserializeAttributeWireBase, UInt160Attribute } from './attribute'; -import { hasDuplicateInputs, hasIntersectingInputs } from './common'; -import { Input } from './Input'; -import { Output, OutputKey } from './Output'; -import { RegisterTransaction } from './RegisterTransaction'; -import { Transaction } from './Transaction'; -import { TransactionType } from './TransactionType'; - -export interface TransactionBaseAdd extends TransactionBaseModelAdd {} -export interface TransactionBaseAddWithType - extends TransactionBaseModelAddWithType {} - -const getUtilityValue = ({ - outputs, - utilityToken, -}: { - readonly outputs: readonly Output[]; - readonly utilityToken: RegisterTransaction; -}) => - outputs - .filter((output) => common.uInt256Equal(output.asset, utilityToken.hash)) - .reduce((acc, output) => acc.add(output.value), utils.ZERO); - -export interface FeeContext { - readonly getOutput: (input: Input) => Promise; - readonly governingToken: RegisterTransaction; - readonly utilityToken: RegisterTransaction; - readonly fees: { [K in TransactionType]?: BN }; - readonly registerValidatorFee: BN; -} - -export interface TransactionGetScriptHashesForVerifyingOptions { - readonly getOutput: (key: OutputKey) => Promise; - readonly getAsset: (key: AssetKey) => Promise; -} - -export interface GetReferencesOptions { - readonly getOutput: (key: OutputKey) => Promise; -} - -export interface GetTransactionResultsOptions { - readonly getOutput: (key: OutputKey) => Promise; -} - -export interface TransactionVerifyOptions { - readonly calculateClaimAmount: (inputs: readonly Input[]) => Promise; - readonly isSpent: (key: OutputKey) => Promise; - readonly getAsset: (key: AssetKey) => Promise; - readonly getOutput: (key: OutputKey) => Promise; - readonly tryGetAccount: (key: AccountKey) => Promise; - readonly standbyValidators: readonly ECPoint[]; - readonly getAllValidators: () => Promise; - readonly verifyScript: VerifyScript; - readonly currentHeight: number; - readonly governingToken: RegisterTransaction; - readonly utilityToken: RegisterTransaction; - readonly fees: { [K in TransactionType]?: BN }; - readonly registerValidatorFee: BN; - readonly memPool?: readonly Transaction[]; -} - -/** @internal */ -export function TransactionBase< - Type extends TransactionType, - TransactionJSON, - TBase extends Constructor> ->(Base: TBase) { - abstract class TransactionBaseClass extends Base implements EquatableKey, SerializableJSON { - public static deserializeTransactionBaseStartWireBase({ - reader, - }: DeserializeWireBaseOptions): { readonly type: TransactionType; readonly version: number } { - const type = assertTransactionType(reader.readUInt8()); - const version = reader.readUInt8(); - - return { type, version }; - } - - public static deserializeTransactionBaseEndWireBase( - options: DeserializeWireBaseOptions, - ): { - readonly attributes: readonly Attribute[]; - readonly inputs: readonly Input[]; - readonly outputs: readonly Output[]; - readonly scripts: readonly Witness[]; - } { - const { reader } = options; - const attributes = reader.readArray(() => deserializeAttributeWireBase(options), MAX_TRANSACTION_ATTRIBUTES); - - const inputs = reader.readArray(() => Input.deserializeWireBase(options)); - const outputs = reader.readArray(() => Output.deserializeWireBase(options), utils.USHORT_MAX_NUMBER + 1); - - const scripts = reader.readArray(() => Witness.deserializeWireBase(options)); - - return { attributes, inputs, outputs, scripts }; - } - - // tslint:disable-next-line no-any - public static deserializeWireBase(_options: DeserializeWireBaseOptions): any { - throw new Error('Not Implemented'); - } - - // tslint:disable-next-line no-any - public static deserializeWire(options: DeserializeWireOptions): any { - return this.deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); - } - - protected static readonly WitnessConstructor: Constructor = Witness; - - public readonly equals: Equals = utils.equals( - // tslint:disable-next-line no-any - this.constructor as any, - this, - (other: TransactionBaseClass) => common.uInt256Equal(this.hash, other.hash), - ); - public readonly toKeyString = utils.toKeyString(TransactionBase, () => this.hashHex); - public readonly getSortedScriptHashesForVerifying = utils.lazyAsync( - async (options: TransactionGetScriptHashesForVerifyingOptions) => { - const hashes = await this.getScriptHashesForVerifying(options); - - // tslint:disable-next-line no-array-mutation - return [...hashes].sort(); - }, - ); - private readonly sizeInternal = utils.lazy( - () => - IOHelper.sizeOfUInt8 + - IOHelper.sizeOfArray(this.attributes, (attribute) => attribute.size) + - IOHelper.sizeOfArray(this.inputs, (input) => input.size) + - IOHelper.sizeOfArray(this.outputs, (output) => output.size) + - IOHelper.sizeOfArray(this.scripts, (script) => script.size) + - this.sizeExclusive(), - ); - private readonly networkFee = utils.lazyAsync( - async (context: FeeContext): Promise => { - const { getOutput, utilityToken } = context; - - const outputsForInputs = await Promise.all(this.inputs.map(getOutput)); - - const inputValue = getUtilityValue({ - outputs: outputsForInputs, - utilityToken, - }); - - const outputValue = getUtilityValue({ - outputs: this.outputs, - utilityToken, - }); - - const result = inputValue.sub(outputValue).sub(this.getSystemFee(context)); - - return result.lt(utils.ZERO) ? utils.ZERO : result; - }, - ); - private readonly getReferencesInternal = utils.lazyAsync(async ({ getOutput }: GetReferencesOptions) => - Promise.all(this.inputs.map(async (input) => getOutput(input))), - ); - private readonly getTransactionResultsInternal = utils.lazyAsync( - async ({ getOutput }: GetTransactionResultsOptions): Promise<{ readonly [K in string]?: BN }> => { - const inputOutputs = await this.getReferences({ getOutput }); - const mutableResults: { [K in string]?: BN } = {}; - const addOutputs = (outputs: readonly Output[], negative?: boolean) => { - outputs.forEach((output) => { - const key = common.uInt256ToHex(output.asset); - let result = mutableResults[key]; - if (result === undefined) { - mutableResults[key] = result = utils.ZERO; - } - - mutableResults[key] = result.add(negative === true ? output.value.neg() : output.value); - }); - }; - addOutputs(inputOutputs); - addOutputs(this.outputs, true); - - return _.pickBy(mutableResults, (value) => value !== undefined && !value.eq(utils.ZERO)); - }, - ); - private readonly baseGetScriptHashesForVerifyingInternal = utils.lazyAsync( - async ({ getOutput, getAsset }: TransactionGetScriptHashesForVerifyingOptions) => { - const [inputHashes, outputHashes] = await Promise.all([ - Promise.all( - this.inputs.map(async (input) => { - const output = await getOutput(input); - - return common.uInt160ToHex(output.address); - }), - ), - - Promise.all( - this.outputs.map(async (output) => { - const asset = await getAsset({ hash: output.asset }); - if (hasFlag(asset.type, AssetType.DutyFlag)) { - return common.uInt160ToHex(output.address); - } - - return undefined; - }), - ).then((hashes) => hashes.filter(commonUtils.notNull)), - ]); - - const attributeHashes = this.attributes - .map((attribute) => - attribute instanceof UInt160Attribute && attribute.usage === AttributeUsage.Script - ? common.uInt160ToHex(attribute.value) - : undefined, - ) - .filter(commonUtils.notNull); - - return new Set([...inputHashes, ...outputHashes, ...attributeHashes]); - }, - ); - - public get size(): number { - return this.sizeInternal(); - } - - public async serializeTransactionBaseJSON(context: SerializeJSONContext): Promise { - const [networkFee, transactionData] = await Promise.all([ - this.getNetworkFee(context.feeContext), - // tslint:disable-next-line no-any - context.tryGetTransactionData(this as any), - ]); - - return { - txid: common.uInt256ToString(this.hashHex), - size: this.size, - version: this.version, - attributes: this.attributes.map((attribute) => attribute.serializeJSON(context)), - - vin: this.inputs.map((input) => input.serializeJSON(context)), - vout: this.outputs.map((output, index) => output.serializeJSON(context, index)), - - scripts: this.scripts.map((script) => script.serializeJSON(context)), - sys_fee: JSONHelper.writeFixed8(this.getSystemFee(context.feeContext)), - net_fee: JSONHelper.writeFixed8(networkFee), - data: - transactionData === undefined - ? undefined - : { - blockHash: common.uInt256ToString(transactionData.blockHash), - blockIndex: transactionData.startHeight, - transactionIndex: transactionData.index, - globalIndex: JSONHelper.writeUInt64(transactionData.globalIndex), - }, - }; - } - - public async serializeJSON(_context: SerializeJSONContext): Promise { - throw new Error('Not Implemented'); - } - - public async getNetworkFee(context: FeeContext): Promise { - return this.networkFee(context); - } - - public getSystemFee({ fees }: FeeContext): BN { - const fee: BN | undefined = fees[this.type]; - - return fee === undefined ? utils.ZERO : fee; - } - - public async getReferences(options: GetReferencesOptions): Promise { - return this.getReferencesInternal(options); - } - - public async getTransactionResults(options: GetTransactionResultsOptions): Promise<{ readonly [key: string]: BN }> { - return this.getTransactionResultsInternal(options) as Promise<{ readonly [key: string]: BN }>; - } - - public async getScriptHashesForVerifying( - options: TransactionGetScriptHashesForVerifyingOptions, - ): Promise> { - return this.baseGetScriptHashesForVerifyingInternal(options); - } - - public async verify(options: TransactionVerifyOptions): Promise { - if (this.size > MAX_TRANSACTION_SIZE) { - throw new VerifyError('Transaction too large.'); - } - - const { memPool = [] } = options; - if (hasDuplicateInputs(this.inputs)) { - throw new VerifyError('Duplicate inputs'); - } - - if (memPool.some((tx) => !tx.equals(this) && hasIntersectingInputs(tx.inputs, this.inputs))) { - throw new VerifyError('Input already exists in mempool'); - } - - if ( - this.attributes.filter( - (attribute) => attribute.usage === AttributeUsage.ECDH02 || attribute.usage === AttributeUsage.ECDH03, - ).length > 1 - ) { - throw new VerifyError('Too many ECDH attributes.'); - } - - const [results] = await Promise.all([ - this.verifyScripts(options), - this.verifyDoubleSpend(options), - this.verifyOutputs(options), - this.verifyTransactionResults(options), - ]); - - return results; - } - - protected readonly sizeExclusive: () => number = () => 0; - - private async verifyDoubleSpend({ isSpent }: TransactionVerifyOptions): Promise { - const isDoubleSpend = await Promise.all(this.inputs.map(isSpent)); - - if (isDoubleSpend.some((value) => value)) { - throw new VerifyError('Transaction is a double spend'); - } - } - - private async verifyOutputs({ getAsset, currentHeight }: TransactionVerifyOptions): Promise { - const outputsGrouped = Object.entries(_.groupBy(this.outputs, (output) => common.uInt256ToHex(output.asset))); - - const hasInvalidOutputs = await Promise.all( - outputsGrouped.map(async ([assetHex, outputs]) => { - const asset = await getAsset({ hash: common.hexToUInt256(assetHex) }); - if ( - asset.expiration <= currentHeight + 1 && - asset.type !== AssetType.GoverningToken && - asset.type !== AssetType.UtilityToken - ) { - return true; - } - - return outputs.some( - (output) => !output.value.mod(utils.TEN.pow(utils.EIGHT.subn(asset.precision))).eq(utils.ZERO), - ); - }), - ); - - if (hasInvalidOutputs.some((value) => value)) { - throw new VerifyError('Transaction has invalid output'); - } - } - - private async verifyTransactionResults({ - getOutput, - utilityToken, - governingToken, - fees, - registerValidatorFee, - }: TransactionVerifyOptions): Promise { - const results = await this.getTransactionResults({ getOutput }); - const resultsDestroy = Object.entries(results).filter( - // tslint:disable-next-line no-unused - ([_key, value]) => value.gt(utils.ZERO), - ); - - if ( - resultsDestroy.length > 1 || - (resultsDestroy.length === 1 && - !common.uInt256Equal(common.hexToUInt256(resultsDestroy[0][0]), utilityToken.hash)) - ) { - throw new VerifyError('Invalid destroyed output.'); - } - - const feeContext = { - getOutput, - governingToken, - utilityToken, - fees, - registerValidatorFee, - }; - - const systemFee = this.getSystemFee(feeContext); - if (systemFee.gt(utils.ZERO) && (resultsDestroy.length === 0 || resultsDestroy[0][1].lt(systemFee))) { - throw new VerifyError('Not enough output value for system fee.'); - } - - // tslint:disable-next-line no-unused - const resultsIssue = Object.entries(results).filter(([__, value]) => value.lt(utils.ZERO)); - - switch (this.type) { - case TransactionType.Miner: - case TransactionType.Claim: - if ( - resultsIssue.some(([assetHex]) => !common.uInt256Equal(common.hexToUInt256(assetHex), utilityToken.hash)) - ) { - throw new VerifyError('Invalid miner/claim result'); - } - break; - case TransactionType.Issue: - if ( - // tslint:disable-next-line no-unused - resultsIssue.some(([assetHex, __]) => common.uInt256Equal(common.hexToUInt256(assetHex), utilityToken.hash)) - ) { - throw new VerifyError('Invalid issue result'); - } - break; - default: - if (resultsIssue.length > 0) { - throw new VerifyError('Invalid results.'); - } - } - } - - private async verifyScripts({ - getAsset, - getOutput, - verifyScript, - }: TransactionVerifyOptions): Promise { - const hashesArr = await this.getSortedScriptHashesForVerifying({ - getAsset, - getOutput, - }); - - if (hashesArr.length !== this.scripts.length) { - throw new VerifyError( - `Invalid witnesses. Found ${hashesArr.length} hashes and ${this.scripts.length} scripts.`, - ); - } - - const hashes = hashesArr.map((value) => common.hexToUInt160(value)); - - return Promise.all( - _.zip(hashes, this.scripts).map(async ([hash, witness]) => - verifyScript({ - scriptContainer: { - type: ScriptContainerType.Transaction, - // tslint:disable-next-line no-any - value: this as any, - }, - hash: hash as UInt160, - witness: witness as Witness, - }), - ), - ); - } - } - - return TransactionBaseClass; -} diff --git a/packages/neo-one-node-core/src/transaction/TransactionState.ts b/packages/neo-one-node-core/src/transaction/TransactionState.ts new file mode 100644 index 0000000000..690af6a51d --- /dev/null +++ b/packages/neo-one-node-core/src/transaction/TransactionState.ts @@ -0,0 +1,36 @@ +import { IOHelper, TransactionStateModel, UInt256 } from '@neo-one/client-common'; +import { DeserializeWireBaseOptions, DeserializeWireOptions } from '../Serializable'; +import { BinaryReader, utils } from '../utils'; +import { Transaction } from './Transaction'; + +export type TransactionKey = UInt256; + +export class TransactionState extends TransactionStateModel { + public static deserializeWireBase(options: DeserializeWireBaseOptions): TransactionState { + const { reader } = options; + const blockIndex = reader.readUInt32LE(); + const state = reader.readUInt8(); + const transaction = Transaction.deserializeWireBase(options); + + return new this({ + blockIndex, + state, + transaction, + }); + } + + public static deserializeWire(options: DeserializeWireOptions): TransactionState { + return this.deserializeWireBase({ + context: options.context, + reader: new BinaryReader(options.buffer), + }); + } + + private readonly sizeInternal = utils.lazy( + () => IOHelper.sizeOfUInt32LE + IOHelper.sizeOfUInt8 + this.transaction.size, + ); + + public get size() { + return this.sizeInternal(); + } +} diff --git a/packages/neo-one-node-core/src/transaction/TransactionType.ts b/packages/neo-one-node-core/src/transaction/TransactionType.ts deleted file mode 100644 index 99cf7d0a75..0000000000 --- a/packages/neo-one-node-core/src/transaction/TransactionType.ts +++ /dev/null @@ -1 +0,0 @@ -export { TransactionTypeModel as TransactionType } from '@neo-one/client-common'; diff --git a/packages/neo-one-node-core/src/transaction/attribute/Attribute.ts b/packages/neo-one-node-core/src/transaction/attribute/Attribute.ts deleted file mode 100644 index f40d506742..0000000000 --- a/packages/neo-one-node-core/src/transaction/attribute/Attribute.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { assertAttributeUsage } from '@neo-one/client-common'; -import { utils } from '@neo-one/utils'; -import { createDeserializeWire, DeserializeWireBaseOptions } from '../../Serializable'; -import { AttributeUsage } from './AttributeUsage'; -import { BufferAttribute } from './BufferAttribute'; -import { ECPointAttribute } from './ECPointAttribute'; -import { UInt160Attribute } from './UInt160Attribute'; -import { UInt256Attribute } from './UInt256Attribute'; - -export type Attribute = BufferAttribute | ECPointAttribute | UInt160Attribute | UInt256Attribute; - -export const deserializeAttributeWireBase = (options: DeserializeWireBaseOptions): Attribute => { - const { reader } = options; - const usage = assertAttributeUsage(reader.clone().readUInt8()); - switch (usage) { - case AttributeUsage.Script: - return UInt160Attribute.deserializeWireBase(options); - case AttributeUsage.ContractHash: - case AttributeUsage.Vote: - case AttributeUsage.Hash1: - case AttributeUsage.Hash2: - case AttributeUsage.Hash3: - case AttributeUsage.Hash4: - case AttributeUsage.Hash5: - case AttributeUsage.Hash6: - case AttributeUsage.Hash7: - case AttributeUsage.Hash8: - case AttributeUsage.Hash9: - case AttributeUsage.Hash10: - case AttributeUsage.Hash11: - case AttributeUsage.Hash12: - case AttributeUsage.Hash13: - case AttributeUsage.Hash14: - case AttributeUsage.Hash15: - return UInt256Attribute.deserializeWireBase(options); - case AttributeUsage.ECDH02: - case AttributeUsage.ECDH03: - return ECPointAttribute.deserializeWireBase(options); - case AttributeUsage.DescriptionUrl: - case AttributeUsage.Description: - case AttributeUsage.Remark: - case AttributeUsage.Remark1: - case AttributeUsage.Remark2: - case AttributeUsage.Remark3: - case AttributeUsage.Remark4: - case AttributeUsage.Remark5: - case AttributeUsage.Remark6: - case AttributeUsage.Remark7: - case AttributeUsage.Remark8: - case AttributeUsage.Remark9: - case AttributeUsage.Remark10: - case AttributeUsage.Remark11: - case AttributeUsage.Remark12: - case AttributeUsage.Remark13: - case AttributeUsage.Remark14: - case AttributeUsage.Remark15: - return BufferAttribute.deserializeWireBase(options); - default: - utils.assertNever(usage); - throw new Error('For TS'); - } -}; - -export const deserializeAttributeWire = createDeserializeWire(deserializeAttributeWireBase); diff --git a/packages/neo-one-node-core/src/transaction/attribute/AttributeBase.ts b/packages/neo-one-node-core/src/transaction/attribute/AttributeBase.ts deleted file mode 100644 index 93151fe5c9..0000000000 --- a/packages/neo-one-node-core/src/transaction/attribute/AttributeBase.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { AttributeBaseModel, AttributeJSON } from '@neo-one/client-common'; -import { Constructor } from '@neo-one/utils'; -import { Equals, EquatableKey, ToKeyString } from '../../Equatable'; -import { DeserializeWireBaseOptions, SerializableJSON, SerializeJSONContext } from '../../Serializable'; -import { utils } from '../../utils'; -import { AttributeUsage } from './AttributeUsage'; - -export function AttributeBase< - Usage extends AttributeUsage, - Value extends Buffer, - TBase extends Constructor> ->(Base: TBase) { - abstract class AttributeBaseClass extends Base implements EquatableKey, SerializableJSON { - public static deserializeAttributeWireBase({ reader }: DeserializeWireBaseOptions): { readonly usage: number } { - const usage = reader.readUInt8(); - - return { usage }; - } - - public abstract readonly size: number; - public readonly equals: Equals = utils.equals( - // tslint:disable-next-line no-any - AttributeBaseClass as any, - this, - (other: AttributeBaseClass) => this.usage === other.usage && this.value.equals(other.value), - ); - public readonly toKeyString: ToKeyString = () => - `${AttributeBaseClass.name}:${this.usage}:${this.value.toString('hex')}`; - - public serializeJSON(_context: SerializeJSONContext): AttributeJSON { - throw new Error('Not Implemented'); - } - } - - return AttributeBaseClass; -} diff --git a/packages/neo-one-node-core/src/transaction/attribute/AttributeUsage.ts b/packages/neo-one-node-core/src/transaction/attribute/AttributeUsage.ts deleted file mode 100644 index a239db6441..0000000000 --- a/packages/neo-one-node-core/src/transaction/attribute/AttributeUsage.ts +++ /dev/null @@ -1 +0,0 @@ -export { AttributeUsageModel as AttributeUsage } from '@neo-one/client-common'; diff --git a/packages/neo-one-node-core/src/transaction/attribute/BufferAttribute.ts b/packages/neo-one-node-core/src/transaction/attribute/BufferAttribute.ts deleted file mode 100644 index fcf4793f42..0000000000 --- a/packages/neo-one-node-core/src/transaction/attribute/BufferAttribute.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { - AttributeJSON, - BufferAttributeModel, - BufferAttributeModelAdd as BufferAttributeAdd, - BufferAttributeUsageModel as BufferAttributeUsage, - InvalidFormatError, - IOHelper, - JSONHelper, - toJSONAttributeUsage, -} from '@neo-one/client-common'; -import { DeserializeWireBaseOptions, SerializeJSONContext } from '../../Serializable'; -import { AttributeBase } from './AttributeBase'; -import { AttributeUsage } from './AttributeUsage'; - -export { BufferAttributeAdd, BufferAttributeUsage }; - -export class BufferAttribute extends AttributeBase(BufferAttributeModel) { - public static deserializeWireBase(options: DeserializeWireBaseOptions): BufferAttribute { - const { reader } = options; - const { usage } = super.deserializeAttributeWireBase(options); - if ( - !( - usage === AttributeUsage.DescriptionUrl || - usage === AttributeUsage.Description || - usage === AttributeUsage.Remark || - usage === AttributeUsage.Remark1 || - usage === AttributeUsage.Remark2 || - usage === AttributeUsage.Remark3 || - usage === AttributeUsage.Remark4 || - usage === AttributeUsage.Remark5 || - usage === AttributeUsage.Remark6 || - usage === AttributeUsage.Remark7 || - usage === AttributeUsage.Remark8 || - usage === AttributeUsage.Remark9 || - usage === AttributeUsage.Remark10 || - usage === AttributeUsage.Remark11 || - usage === AttributeUsage.Remark12 || - usage === AttributeUsage.Remark13 || - usage === AttributeUsage.Remark14 || - usage === AttributeUsage.Remark15 - ) - ) { - throw new InvalidFormatError(`Invalid AttributeUsageModel. Received: ${usage}`); - } - const value = - usage === AttributeUsage.DescriptionUrl ? reader.readBytes(reader.readUInt8()) : reader.readVarBytesLE(); - - return new BufferAttribute({ usage, value }); - } - - public readonly size: number; - - public constructor({ usage, value }: BufferAttributeAdd) { - super({ usage, value }); - this.size = - this.usage === AttributeUsage.DescriptionUrl - ? IOHelper.sizeOfUInt8 + IOHelper.sizeOfUInt8 + this.value.length - : IOHelper.sizeOfUInt8 + IOHelper.sizeOfVarBytesLE(this.value); - } - - public serializeJSON(_context: SerializeJSONContext): AttributeJSON { - return { - usage: toJSONAttributeUsage(this.usage), - data: JSONHelper.writeBuffer(this.value), - }; - } -} diff --git a/packages/neo-one-node-core/src/transaction/attribute/ECPointAttribute.ts b/packages/neo-one-node-core/src/transaction/attribute/ECPointAttribute.ts deleted file mode 100644 index 6fd1f9fcb1..0000000000 --- a/packages/neo-one-node-core/src/transaction/attribute/ECPointAttribute.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { - AttributeJSON, - common, - ECPointAttributeModel, - ECPointAttributeModelAdd as ECPointAttributeAdd, - ECPointAttributeUsageModel as ECPointAttributeUsage, - InvalidFormatError, - IOHelper, - JSONHelper, - toJSONAttributeUsage, -} from '@neo-one/client-common'; -import { DeserializeWireBaseOptions, SerializeJSONContext } from '../../Serializable'; -import { AttributeBase } from './AttributeBase'; -import { AttributeUsage } from './AttributeUsage'; - -export { ECPointAttributeUsage, ECPointAttributeAdd }; - -export class ECPointAttribute extends AttributeBase(ECPointAttributeModel) { - public static deserializeWireBase(options: DeserializeWireBaseOptions): ECPointAttribute { - const { reader } = options; - const { usage } = super.deserializeAttributeWireBase(options); - if (!(usage === AttributeUsage.ECDH02 || usage === AttributeUsage.ECDH03)) { - throw new InvalidFormatError( - `Expected attribute usage to be ${AttributeUsage.ECDH02} or ${AttributeUsage.ECDH03}. Received: ${usage}`, - ); - } - const value = common.bufferToECPoint(Buffer.concat([Buffer.from([usage]), reader.readBytes(32)])); - - return new this({ usage, value }); - } - - public readonly size: number; - - public constructor({ usage, value }: ECPointAttributeAdd) { - super({ usage, value }); - this.size = IOHelper.sizeOfUInt8 + IOHelper.sizeOfECPoint(this.value); - } - - public serializeJSON(_context: SerializeJSONContext): AttributeJSON { - return { - usage: toJSONAttributeUsage(this.usage), - data: JSONHelper.writeECPoint(this.value), - }; - } -} diff --git a/packages/neo-one-node-core/src/transaction/attribute/UInt160Attribute.ts b/packages/neo-one-node-core/src/transaction/attribute/UInt160Attribute.ts deleted file mode 100644 index 83a7ef9d8b..0000000000 --- a/packages/neo-one-node-core/src/transaction/attribute/UInt160Attribute.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { - AttributeJSON, - InvalidFormatError, - IOHelper, - JSONHelper, - toJSONAttributeUsage, - UInt160AttributeModel, - UInt160AttributeModelAdd as UInt160AttributeAdd, - UInt160AttributeUsageModel as UInt160AttributeUsage, -} from '@neo-one/client-common'; -import { DeserializeWireBaseOptions, SerializeJSONContext } from '../../Serializable'; -import { AttributeBase } from './AttributeBase'; -import { AttributeUsage } from './AttributeUsage'; - -// tslint:disable-next-line export-name -export { UInt160AttributeUsage, UInt160AttributeAdd }; - -export class UInt160Attribute extends AttributeBase(UInt160AttributeModel) { - public static deserializeWireBase(options: DeserializeWireBaseOptions): UInt160Attribute { - const { reader } = options; - const { usage } = super.deserializeAttributeWireBase(options); - if (usage !== AttributeUsage.Script) { - throw new InvalidFormatError(`Expected attribute usage to be ${AttributeUsage.Script}. Received: ${usage}`); - } - const value = reader.readUInt160(); - - return new this({ usage, value }); - } - - public readonly size: number; - - public constructor({ usage, value }: UInt160AttributeAdd) { - super({ usage, value }); - this.size = IOHelper.sizeOfUInt8 + IOHelper.sizeOfUInt160; - } - - public serializeJSON(_context: SerializeJSONContext): AttributeJSON { - return { - usage: toJSONAttributeUsage(this.usage), - data: JSONHelper.writeUInt160(this.value), - }; - } -} diff --git a/packages/neo-one-node-core/src/transaction/attribute/UInt256Attribute.ts b/packages/neo-one-node-core/src/transaction/attribute/UInt256Attribute.ts deleted file mode 100644 index e95e76fd5f..0000000000 --- a/packages/neo-one-node-core/src/transaction/attribute/UInt256Attribute.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { - AttributeJSON, - InvalidFormatError, - IOHelper, - JSONHelper, - toJSONAttributeUsage, - UInt256AttributeModel, - UInt256AttributeModelAdd as UInt256AttributeAdd, - UInt256AttributeUsageModel as UInt256AttributeUsage, -} from '@neo-one/client-common'; -import { DeserializeWireBaseOptions, SerializeJSONContext } from '../../Serializable'; -import { AttributeBase } from './AttributeBase'; -import { AttributeUsage } from './AttributeUsage'; - -export { UInt256AttributeUsage, UInt256AttributeAdd }; - -export class UInt256Attribute extends AttributeBase(UInt256AttributeModel) { - public static deserializeWireBase(options: DeserializeWireBaseOptions): UInt256Attribute { - const { reader } = options; - const { usage } = super.deserializeAttributeWireBase(options); - if ( - !( - usage === AttributeUsage.ContractHash || - usage === AttributeUsage.Vote || - usage === AttributeUsage.Hash1 || - usage === AttributeUsage.Hash2 || - usage === AttributeUsage.Hash3 || - usage === AttributeUsage.Hash4 || - usage === AttributeUsage.Hash5 || - usage === AttributeUsage.Hash6 || - usage === AttributeUsage.Hash7 || - usage === AttributeUsage.Hash8 || - usage === AttributeUsage.Hash9 || - usage === AttributeUsage.Hash10 || - usage === AttributeUsage.Hash11 || - usage === AttributeUsage.Hash12 || - usage === AttributeUsage.Hash13 || - usage === AttributeUsage.Hash14 || - usage === AttributeUsage.Hash15 - ) - ) { - throw new InvalidFormatError(`Invalid AttributeUsageModel. Received: ${usage}`); - } - const value = reader.readUInt256(); - - return new this({ usage, value }); - } - - public readonly size: number; - - public constructor({ usage, value }: UInt256AttributeAdd) { - super({ usage, value }); - this.size = IOHelper.sizeOfUInt8 + IOHelper.sizeOfUInt256; - } - - public serializeJSON(_context: SerializeJSONContext): AttributeJSON { - return { - usage: toJSONAttributeUsage(this.usage), - data: JSONHelper.writeUInt256(this.value), - }; - } -} diff --git a/packages/neo-one-node-core/src/transaction/attribute/index.ts b/packages/neo-one-node-core/src/transaction/attribute/index.ts deleted file mode 100644 index 4e2f61bb45..0000000000 --- a/packages/neo-one-node-core/src/transaction/attribute/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export * from './Attribute'; -export * from './AttributeBase'; -export * from './AttributeUsage'; -export * from './BufferAttribute'; -export * from './ECPointAttribute'; -export * from './UInt160Attribute'; -export * from './UInt256Attribute'; diff --git a/packages/neo-one-node-core/src/transaction/attributes/Attribute.ts b/packages/neo-one-node-core/src/transaction/attributes/Attribute.ts new file mode 100644 index 0000000000..2b041f0ea3 --- /dev/null +++ b/packages/neo-one-node-core/src/transaction/attributes/Attribute.ts @@ -0,0 +1,18 @@ +import { assertAttributeType, AttributeTypeModel, InvalidFormatError } from '@neo-one/client-common'; +import { DeserializeWireBaseOptions } from '../../Serializable'; +import { HighPriorityAttribute } from './HighPriorityAttribute'; + +export type Attribute = HighPriorityAttribute; + +export const deserializeAttribute = (options: DeserializeWireBaseOptions): Attribute => { + const { reader } = options; + const typeIn = reader.readUInt8(); + const type = assertAttributeType(typeIn); + + switch (type) { + case AttributeTypeModel.HighPriority: + return new HighPriorityAttribute(); + default: + throw new InvalidFormatError(`Attribute type ${type} not yet implemented`); + } +}; diff --git a/packages/neo-one-node-core/src/transaction/attributes/AttributeBase.ts b/packages/neo-one-node-core/src/transaction/attributes/AttributeBase.ts new file mode 100644 index 0000000000..cc5ccddb5d --- /dev/null +++ b/packages/neo-one-node-core/src/transaction/attributes/AttributeBase.ts @@ -0,0 +1,34 @@ +import { + AttributeBaseModel, + AttributeJSON, + AttributeTypeModel, + InvalidFormatError, + IOHelper, + toJSONAttributeType, +} from '@neo-one/client-common'; +import { DeserializeWireBaseOptions, SerializableJSON } from '../../Serializable'; +import { VerifyOptions } from '../../Verifiable'; +import { Transaction } from '../Transaction'; + +export const createDeserializeAttributeType = (type: AttributeTypeModel) => (options: DeserializeWireBaseOptions) => { + const { reader } = options; + const byte = reader.readUInt8(); + if (byte !== type) { + throw new InvalidFormatError(`Expected attribute type: ${type}, found: ${byte}`); + } + + return type; +}; + +export abstract class AttributeBase extends AttributeBaseModel implements SerializableJSON { + public serializeJSON(): AttributeJSON { + return { + type: toJSONAttributeType(this.type), + }; + } + + // Must not be implemented in C# land yet? + public async verify(_verifyOptions: VerifyOptions, _tx: Transaction) { + return Promise.resolve(true); + } +} diff --git a/packages/neo-one-node-core/src/transaction/attributes/HighPriorityAttribute.ts b/packages/neo-one-node-core/src/transaction/attributes/HighPriorityAttribute.ts new file mode 100644 index 0000000000..42bc09f28f --- /dev/null +++ b/packages/neo-one-node-core/src/transaction/attributes/HighPriorityAttribute.ts @@ -0,0 +1,7 @@ +import { AttributeTypeModel } from '@neo-one/client-common'; +import { AttributeBase } from './AttributeBase'; + +export class HighPriorityAttribute extends AttributeBase { + public readonly type = AttributeTypeModel.HighPriority; + public readonly allowMultiple = false; +} diff --git a/packages/neo-one-node-core/src/transaction/attributes/index.ts b/packages/neo-one-node-core/src/transaction/attributes/index.ts new file mode 100644 index 0000000000..3b2423b305 --- /dev/null +++ b/packages/neo-one-node-core/src/transaction/attributes/index.ts @@ -0,0 +1,2 @@ +export * from './AttributeBase'; +export * from './Attribute'; diff --git a/packages/neo-one-node-core/src/transaction/common.ts b/packages/neo-one-node-core/src/transaction/common.ts deleted file mode 100644 index 0e1900c577..0000000000 --- a/packages/neo-one-node-core/src/transaction/common.ts +++ /dev/null @@ -1,14 +0,0 @@ -// tslint:disable no-loop-statement -import { Input } from './Input'; - -export const hasDuplicateInputs = (inputs: readonly Input[]): boolean => { - const inputKeys = new Set(inputs.map((input) => input.toKeyString())); - - return inputs.length !== inputKeys.size; -}; - -export const hasIntersectingInputs = (a: readonly Input[], b: readonly Input[]): boolean => { - const inputsA = new Set(a.map((input) => input.toKeyString())); - - return b.some((input) => inputsA.has(input.toKeyString())); -}; diff --git a/packages/neo-one-node-core/src/transaction/index.ts b/packages/neo-one-node-core/src/transaction/index.ts index c030d0809b..63ed6df62a 100644 --- a/packages/neo-one-node-core/src/transaction/index.ts +++ b/packages/neo-one-node-core/src/transaction/index.ts @@ -1,16 +1,3 @@ -export * from './ClaimTransaction'; -export * from './ContractTransaction'; -export * from './EnrollmentTransaction'; -export * from './Input'; -export * from './InvocationTransaction'; -export * from './IssueTransaction'; -export * from './MinerTransaction'; -export * from './Output'; -export * from './PublishTransaction'; -export * from './RegisterTransaction'; -export * from './StateTransaction'; export * from './Transaction'; -export * from './TransactionBase'; -export * from './TransactionType'; -export * from './attribute'; -export * from './state'; +export * from './TransactionState'; +export * from './attributes'; diff --git a/packages/neo-one-node-core/src/transaction/state/StateDescriptor.ts b/packages/neo-one-node-core/src/transaction/state/StateDescriptor.ts deleted file mode 100644 index 2f3b2cbba4..0000000000 --- a/packages/neo-one-node-core/src/transaction/state/StateDescriptor.ts +++ /dev/null @@ -1,216 +0,0 @@ -import { - assertStateDescriptorType, - BinaryWriter, - common, - crypto, - InvalidFormatError, - IOHelper, - JSONHelper, - StateDescriptorJSON, - StateDescriptorTypeJSON, - UInt160Hex, -} from '@neo-one/client-common'; -import { utils as commonUtils } from '@neo-one/utils'; -import { BN } from 'bn.js'; -import { VerifyError } from '../../errors'; -import { - createSerializeWire, - DeserializeWireBaseOptions, - DeserializeWireOptions, - SerializableJSON, - SerializableWire, - SerializeJSONContext, - SerializeWire, -} from '../../Serializable'; -import { BinaryReader, utils } from '../../utils'; -import { FeeContext, TransactionVerifyOptions } from '../TransactionBase'; -import { StateDescriptorType } from './StateDescriptorType'; - -export interface StateDescriptorAdd { - readonly type: StateDescriptorType; - readonly key: Buffer; - readonly field: string; - readonly value: Buffer; -} - -const VOTES = 'Votes'; -const REGISTERED = 'Registered'; - -export class StateDescriptor implements SerializableWire, SerializableJSON { - public static deserializeWireBase(options: DeserializeWireBaseOptions): StateDescriptor { - const { reader } = options; - const type = assertStateDescriptorType(reader.readUInt8()); - const key = reader.readVarBytesLE(100); - const field = reader.readVarString(32); - const value = reader.readVarBytesLE(65535); - - switch (type) { - case StateDescriptorType.Account: - if (key.length !== 20) { - throw new InvalidFormatError( - `Expected StateDescriptor account key length to equal 20. Received: ${key.length}`, - ); - } - if (field !== VOTES) { - throw new InvalidFormatError(`Expected StateDescriptor account field to equal ${VOTES}. Received: ${field}`); - } - break; - case StateDescriptorType.Validator: - if (key.length !== 33) { - throw new InvalidFormatError( - `Expected StateDescriptor validator key length to equal 33. Received: ${key.length}`, - ); - } - if (field !== REGISTERED) { - throw new InvalidFormatError( - `Expected StateDescriptor validator field to equal ${REGISTERED}. Received: ${field}`, - ); - } - break; - default: - commonUtils.assertNever(type); - } - - return new this({ - type, - key, - field, - value, - }); - } - - public static deserializeWire(options: DeserializeWireOptions): StateDescriptor { - return this.deserializeWireBase({ - context: options.context, - reader: new BinaryReader(options.buffer), - }); - } - - public readonly type: StateDescriptorType; - public readonly key: Buffer; - public readonly field: string; - public readonly value: Buffer; - public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - private readonly sizeInternal = utils.lazy( - () => - IOHelper.sizeOfUInt8 + - IOHelper.sizeOfVarBytesLE(this.key) + - IOHelper.sizeOfVarString(this.field) + - IOHelper.sizeOfVarBytesLE(this.value), - ); - - public constructor({ type, key, field, value }: StateDescriptorAdd) { - this.type = type; - this.key = key; - this.field = field; - this.value = value; - } - - public get size(): number { - return this.sizeInternal(); - } - - public getSystemFee(context: FeeContext): BN { - const { type } = this; - switch (type) { - case StateDescriptorType.Account: - return utils.ZERO; - case StateDescriptorType.Validator: - if (this.value.some((byte) => byte !== 0)) { - return context.registerValidatorFee; - } - - return utils.ZERO; - default: - commonUtils.assertNever(type); - throw new Error('For TS'); - } - } - - public getScriptHashesForVerifying(): readonly UInt160Hex[] { - const { type } = this; - switch (type) { - case StateDescriptorType.Account: - return [common.uInt160ToHex(common.bufferToUInt160(this.key))]; - case StateDescriptorType.Validator: - return [common.uInt160ToHex(crypto.getVerificationScriptHash(common.bufferToECPoint(this.key)))]; - default: - commonUtils.assertNever(type); - throw new Error('For TS'); - } - } - - public async verify(options: TransactionVerifyOptions): Promise { - const { type } = this; - switch (type) { - case StateDescriptorType.Account: - return this.verifyAccount(options); - case StateDescriptorType.Validator: - return this.verifyValidator(); - default: - commonUtils.assertNever(type); - throw new Error('For TS'); - } - } - - public serializeWireBase(writer: BinaryWriter): void { - writer.writeUInt8(this.type); - writer.writeVarBytesLE(this.key); - writer.writeVarString(this.field); - writer.writeVarBytesLE(this.value); - } - - public serializeJSON(_context: SerializeJSONContext): StateDescriptorJSON { - return { - type: this.getJSONType(), - key: JSONHelper.writeBuffer(this.key), - field: this.field, - value: JSONHelper.writeBuffer(this.value), - }; - } - - private getJSONType(): StateDescriptorTypeJSON { - return StateDescriptorType[this.type] as StateDescriptorTypeJSON; - } - - private async verifyAccount(options: TransactionVerifyOptions): Promise { - if (this.field !== VOTES) { - throw new VerifyError(`Invalid field ${this.field}`); - } - - const reader = new BinaryReader(this.value); - const hash = common.bufferToUInt160(this.key); - const [account, validators] = await Promise.all([options.tryGetAccount({ hash }), options.getAllValidators()]); - - if (account === undefined || account.isFrozen) { - throw new VerifyError('Account is frozen'); - } - - const publicKeys = reader.readArray(() => reader.readECPoint()); - if (publicKeys.length > 0) { - if (account.getBalance(options.governingToken.hashHex).eq(utils.ZERO)) { - throw new VerifyError('Account does not have NEO'); - } - - const validatorPublicKeysSet = new Set( - validators - .filter((validator) => validator.registered) - .map((validator) => validator.publicKey) - .concat(options.standbyValidators) - .map((key) => common.ecPointToHex(key)), - ); - - publicKeys.forEach((publicKey) => { - if (!validatorPublicKeysSet.has(common.ecPointToHex(publicKey))) { - throw new VerifyError('Invalid validator public key'); - } - }); - } - } - - private async verifyValidator(): Promise { - if (this.field !== REGISTERED) { - throw new VerifyError(`Invalid field ${this.field}`); - } - } -} diff --git a/packages/neo-one-node-core/src/transaction/state/StateDescriptorType.ts b/packages/neo-one-node-core/src/transaction/state/StateDescriptorType.ts deleted file mode 100644 index 8a95117cbf..0000000000 --- a/packages/neo-one-node-core/src/transaction/state/StateDescriptorType.ts +++ /dev/null @@ -1 +0,0 @@ -export { StateDescriptorTypeModel as StateDescriptorType } from '@neo-one/client-common'; diff --git a/packages/neo-one-node-core/src/transaction/state/index.ts b/packages/neo-one-node-core/src/transaction/state/index.ts deleted file mode 100644 index 0d6ba57f09..0000000000 --- a/packages/neo-one-node-core/src/transaction/state/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './StateDescriptor'; -export * from './StateDescriptorType'; diff --git a/packages/neo-one-node-core/src/utils/BinaryReader.ts b/packages/neo-one-node-core/src/utils/BinaryReader.ts index 3dbfe59855..f68f034b94 100644 --- a/packages/neo-one-node-core/src/utils/BinaryReader.ts +++ b/packages/neo-one-node-core/src/utils/BinaryReader.ts @@ -128,7 +128,7 @@ export class BinaryReader { return Buffer.from(values).toString('utf8'); } - public readArray(read: () => T, max = 0x1000000): readonly T[] { + public readArray(read: () => T, max: BN | number = 0x1000000): readonly T[] { const count = this.readVarUIntLE(new BN(max)).toNumber(); return _.range(count).map(read); @@ -159,7 +159,8 @@ export class BinaryReader { return this.readBytes(this.readVarUIntLE(new BN(max)).toNumber()); } - public readVarUIntLE(max: BN = new BN('18446744073709551615', 10)): BN { + public readVarUIntLE(maxIn: BN | number = new BN('18446744073709551615', 10)): BN { + const max = typeof maxIn === 'number' ? new BN(maxIn) : maxIn; const fb = this.readUInt8(); let value: BN; switch (fb) { diff --git a/packages/neo-one-node-core/src/utils/deserializeStackItem.ts b/packages/neo-one-node-core/src/utils/deserializeStackItem.ts new file mode 100644 index 0000000000..18e1986a2f --- /dev/null +++ b/packages/neo-one-node-core/src/utils/deserializeStackItem.ts @@ -0,0 +1,133 @@ +import { InvalidFormatError } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import _ from 'lodash'; +import { + ArrayStackItem, + assertPrimitiveStackItem, + assertStackItem, + assertStackItemType, + BooleanStackItem, + BufferStackItem, + ByteStringStackItem, + IntegerStackItem, + MapStackItem, + NullStackItem, + PrimitiveStackItem, + StackItem, + StackItemType, + StructStackItem, +} from '../StackItems'; +import { BinaryReader } from './BinaryReader'; + +interface ContainerPlaceholderAdd { + readonly type: StackItemType; + readonly elementCount: number; +} + +class ContainerPlaceholder { + public readonly type: StackItemType; + public readonly elementCount: number; + public readonly isContainerPlaceHolder = true; + + public constructor({ type, elementCount }: ContainerPlaceholderAdd) { + this.type = type; + this.elementCount = elementCount; + } +} + +// tslint:disable-next-line: no-any +const isContainerPlaceholder = (item: any): item is ContainerPlaceholder => item.isContainerPlaceHolder === true; + +// tslint:disable: no-array-mutation no-loop-statement increment-decrement +export const deserializeStackItem = (reader: BinaryReader, maxArraySize: number, maxItemSize: number): StackItem => { + const deserialized: Array = []; + let undeserialized = 1; + while (undeserialized-- > 0) { + const type = assertStackItemType(reader.readInt8()); + switch (type) { + case StackItemType.Any: + deserialized.unshift(new NullStackItem()); + break; + + case StackItemType.Boolean: + deserialized.unshift(new BooleanStackItem(reader.readBoolean())); + break; + + case StackItemType.Integer: + deserialized.unshift(new IntegerStackItem(new BN(reader.readVarBytesLE(IntegerStackItem.maxSize), 'le'))); + break; + + case StackItemType.ByteString: + deserialized.unshift(new ByteStringStackItem(reader.readVarBytesLE(maxItemSize))); + break; + + case StackItemType.Buffer: + const size = reader.readVarUIntLE(maxItemSize).toNumber(); + deserialized.unshift(new BufferStackItem(reader.readVarBytesLE(size))); + break; + + case StackItemType.Array: + case StackItemType.Struct: + const structCount = reader.readVarUIntLE(maxArraySize).toNumber(); + deserialized.unshift(new ContainerPlaceholder({ type, elementCount: structCount })); + undeserialized += structCount; + break; + + case StackItemType.Map: + const mapCount = reader.readVarUIntLE(maxArraySize).toNumber(); + deserialized.unshift(new ContainerPlaceholder({ type, elementCount: mapCount })); + undeserialized += mapCount * 2; + break; + + default: + throw new InvalidFormatError(`Invalid StackItemType, found: ${type}`); + } + } + + let stackTemp: Array = []; + while (deserialized.length > 0) { + const item = deserialized.shift(); + if (item === undefined) { + throw new Error('Unexpected undefined since deserialized.length > 0'); + } + // tslint:disable-next-line: no-any + if (isContainerPlaceholder(item)) { + switch (item.type) { + case StackItemType.Array: + const arrayElements = stackTemp.slice(0, item.elementCount).map(assertStackItem); + stackTemp = stackTemp.slice(item.elementCount); + stackTemp.unshift(new ArrayStackItem(arrayElements)); + break; + + case StackItemType.Struct: + const structElements = stackTemp.slice(0, item.elementCount).map(assertStackItem); + stackTemp = stackTemp.slice(item.elementCount); + stackTemp.unshift(new StructStackItem(structElements)); + break; + + case StackItemType.Map: + const mapElements = stackTemp.slice(0, item.elementCount * 2).map(assertStackItem); + stackTemp = stackTemp.slice(item.elementCount * 2); + stackTemp.unshift( + new MapStackItem( + _.range(0, item.elementCount * 2, 2).reduce((acc, idx) => { + const key = assertPrimitiveStackItem(mapElements[idx]); + acc.set(key, mapElements[idx + 1]); + + return acc; + }, new Map()), + ), + ); + break; + + default: + throw new InvalidFormatError(`Invalid ContainerPlaceholder type, found: ${item.type}`); + } + } else { + stackTemp.unshift(item); + } + } + + return assertStackItem(stackTemp[0]); +}; +// tslint:enable: no-array-mutation no-loop-statement increment-decrement diff --git a/packages/neo-one-node-core/src/utils/index.ts b/packages/neo-one-node-core/src/utils/index.ts index c5dcaea2d6..622b9a87fe 100644 --- a/packages/neo-one-node-core/src/utils/index.ts +++ b/packages/neo-one-node-core/src/utils/index.ts @@ -1,2 +1,3 @@ export * from './BinaryReader'; +export * from './deserializeStackItem'; export * from './utils'; diff --git a/packages/neo-one-node-core/src/utils/utils.ts b/packages/neo-one-node-core/src/utils/utils.ts index d5091f8a2a..5324c96e7a 100644 --- a/packages/neo-one-node-core/src/utils/utils.ts +++ b/packages/neo-one-node-core/src/utils/utils.ts @@ -1,8 +1,12 @@ -import { utils as clientUtils } from '@neo-one/client-common'; +import { InvalidFormatError, utils as clientUtils, WildcardContainerJSON } from '@neo-one/client-common'; import BigNumber from 'bignumber.js'; import { BN } from 'bn.js'; import { randomBytes } from 'crypto'; import _ from 'lodash'; +import { StackItem } from '../StackItems'; +import { StorageItem } from '../StorageItem'; +import { BinaryReader } from './BinaryReader'; +import { deserializeStackItem } from './deserializeStackItem'; const toASCII = (bytes: Buffer) => { let result = ''; @@ -128,10 +132,7 @@ function weightedAverage( return 0; } - return sumValue - .div(sumWeight) - .integerValue(BigNumber.ROUND_FLOOR) - .toNumber(); + return sumValue.div(sumWeight).integerValue(BigNumber.ROUND_FLOOR).toNumber(); } function weightedFilter( @@ -170,7 +171,7 @@ function weightedFilter( mutableResult.push([ value, weight.gte(0) ? weight.integerValue(BigNumber.ROUND_FLOOR) : weight.integerValue(BigNumber.ROUND_CEIL), - ] as const); + ]); } return mutableResult; @@ -186,6 +187,49 @@ function equals( return (other): boolean => other != undefined && (thiz === other || (other instanceof clazz && equalsFunc(other))); } +const wildCardFromJSON = (json: WildcardContainerJSON, selector: (input: string) => T) => { + if (typeof json === 'string') { + if (json !== '*') { + throw new InvalidFormatError(); + } + + return '*'; + } + if (Array.isArray(json)) { + return json.map(selector); + } + + throw new InvalidFormatError(); +}; + +const getInteroperable = (item: StorageItem, fromStackItem: (item: StackItem) => T): T => { + const buffer = item.value; + const reader = new BinaryReader(buffer); + const deserializedStackItem = deserializeStackItem(reader, 16, 34); + + return fromStackItem(deserializedStackItem); +}; + +const getSerializableArray = ( + value: Buffer, + readValue: (reader: BinaryReader) => T, + max: number | BN = 0x1000000, +): readonly T[] => { + const reader = new BinaryReader(value); + + return reader.readArray(() => readValue(reader), max); +}; + +const getSerializableArrayFromStorageItem = ( + item: StorageItem, + readValue: (reader: BinaryReader) => T, + max: number | BN = 0x1000000, +): readonly T[] => { + const value = item.value; + + return getSerializableArray(value, readValue, max); +}; + export const utils = { ...clientUtils, toASCII, @@ -198,4 +242,8 @@ export const utils = { lazyOrValue, weightedAverage, weightedFilter, + wildCardFromJSON, + getInteroperable, + getSerializableArray, + getSerializableArrayFromStorageItem, }; diff --git a/packages/neo-one-node-core/src/vm.ts b/packages/neo-one-node-core/src/vm.ts index 3249f516c2..01755a30a8 100644 --- a/packages/neo-one-node-core/src/vm.ts +++ b/packages/neo-one-node-core/src/vm.ts @@ -1,81 +1,100 @@ -import { common, ECPoint, UInt160, UInt256, VMState } from '@neo-one/client-common'; +import { TriggerType, UInt256, VMState, Log, UInt160 } from '@neo-one/client-common'; import { BN } from 'bn.js'; -import { Action } from './action'; import { Block } from './Block'; -import { WriteBlockchain } from './Blockchain'; -import { ContractParameter } from './contractParameter'; -import { ScriptContainer } from './ScriptContainer'; -import { Witness } from './Witness'; +import { CallFlags } from './CallFlags'; +import { Notification } from './Notification'; +import { SerializableContainer } from './Serializable'; +import { StackItem } from './StackItems'; +import { Transaction } from './transaction'; -export interface VerifyScriptOptions { - readonly scriptContainer: ScriptContainer; - readonly hash: UInt160; - readonly witness: Witness; +export interface VMLog { + readonly containerHash?: UInt256; + readonly callingScriptHash: UInt160; + readonly message: string; + readonly position: number; } -export interface VerifyScriptResult { - readonly failureMessage?: string; - readonly hash: UInt160; - readonly witness: Witness; - readonly actions: readonly Action[]; +export interface CallReceipt { + readonly state: VMState; + readonly gasConsumed: BN; + readonly stack: readonly StackItem[]; + readonly notifications: readonly Notification[]; + readonly logs: readonly VMLog[]; } -export type VerifyScript = (options: VerifyScriptOptions) => Promise; +export type SnapshotName = 'main' | 'clone'; -export enum TriggerType { - Verification = 0x00, - Application = 0x10, +export interface ApplicationEngineOptions { + readonly trigger: TriggerType; + readonly container?: SerializableContainer; + readonly snapshot?: SnapshotName; + readonly gas: BN; } -// Application - -export interface Script { - readonly code: Buffer; +export interface RunEngineOptions { + readonly script: Buffer; + readonly snapshot: SnapshotName; + readonly container?: SerializableContainer; + readonly persistingBlock?: Block; + readonly offset?: number; + readonly gas?: BN; } -export const NULL_ACTION = { - blockIndex: -1, - blockHash: common.ZERO_UINT256, - transactionIndex: -1, - transactionHash: common.ZERO_UINT256, -}; - -export interface ExecutionAction { - readonly blockIndex: number; - readonly blockHash: UInt256; - readonly transactionIndex: number; - readonly transactionHash: UInt256; +export interface LoadScriptOptions { + readonly script: Buffer; + readonly flags?: CallFlags; + readonly scriptHash?: UInt160; + readonly initialPosition?: number; } -export interface ExecuteScriptsResult { - readonly state: VMState; - readonly stack: readonly ContractParameter[]; - readonly stackAlt: readonly ContractParameter[]; +export interface ApplicationEngine { + readonly trigger: TriggerType; readonly gasConsumed: BN; - readonly gasCost: BN; - readonly errorMessage?: string; + readonly resultStack: readonly StackItem[]; + readonly state: VMState; + readonly notifications: readonly StackItem[]; + readonly logs: readonly VMLog[]; + readonly loadScript: (options: LoadScriptOptions) => boolean; + readonly execute: () => VMState; } -export interface VMListeners { - readonly onNotify?: (options: { readonly args: readonly ContractParameter[]; readonly scriptHash: UInt160 }) => void; +export type SnapshotPartial = 'blocks' | 'transactions'; - readonly onLog?: (options: { readonly message: string; readonly scriptHash: UInt160 }) => void; - readonly onMigrateContract?: (options: { readonly from: UInt160; readonly to: UInt160 }) => void; - readonly onSetVotes?: (options: { readonly address: UInt160; readonly votes: readonly ECPoint[] }) => void; +export interface SnapshotHandler { + readonly addBlock: (block: Block) => boolean; + readonly addTransaction: (transaction: Transaction, index: number, state?: VMState) => boolean; + readonly deleteTransaction: (hash: UInt256) => boolean; + readonly commit: (partial?: SnapshotPartial) => boolean; + // readonly reset: () => boolean; + readonly changeBlockHashIndex: (index: number, hash: UInt256) => boolean; + readonly changeHeaderHashIndex: (index: number, hash: UInt256) => boolean; + readonly setPersistingBlock: (block: Block) => boolean; + readonly hasPersistingBlock: () => boolean; + // TODO: type the returning changeSet + readonly getChangeSet: () => any; + readonly clone: () => void; } -export type ExecuteScripts = (input: { - readonly scripts: readonly Script[]; - readonly blockchain: WriteBlockchain; - readonly scriptContainer: ScriptContainer; - readonly triggerType: TriggerType; - readonly action: ExecutionAction; - readonly gas: BN; - readonly listeners?: VMListeners; - readonly skipWitnessVerify?: boolean; - readonly persistingBlock?: Block; -}) => Promise; +export interface ApplicationExecuted { + readonly transaction?: Transaction; + readonly trigger: TriggerType; + readonly state: VMState; + readonly gasConsumed: BN; + readonly stack: readonly StackItem[]; + readonly notifications: readonly Notification[]; + readonly logs: readonly VMLog[]; +} export interface VM { - readonly executeScripts: ExecuteScripts; + readonly updateSnapshots: () => void; + readonly withApplicationEngine: ( + options: ApplicationEngineOptions, + func: (engine: ApplicationEngine) => T, + ) => T; + + readonly withSnapshots: ( + func: (snapshots: { readonly main: SnapshotHandler; readonly clone: Omit }) => T, + ) => T; + readonly updateStore: (storage: ReadonlyArray<{ key: Buffer; value: Buffer }>) => void; + readonly test: () => any; } diff --git a/packages/neo-one-node-core/tsconfig.json b/packages/neo-one-node-core/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-node-core/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-node-http-rpc/.npmignore b/packages/neo-one-node-http-rpc/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-node-http-rpc/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-node-http-rpc/CHANGELOG.json b/packages/neo-one-node-http-rpc/CHANGELOG.json new file mode 100644 index 0000000000..958158738b --- /dev/null +++ b/packages/neo-one-node-http-rpc/CHANGELOG.json @@ -0,0 +1,144 @@ +{ + "name": "@neo-one/node-http-rpc", + "entries": [ + { + "version": "3.0.0", + "tag": "@neo-one/node-http-rpc_v3.0.0", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "major": [ + { + "comment": "3.0.0preview3-alpha release bump" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/cli-common-node\" from `^2.7.0` to `^2.7.1`" + }, + { + "comment": "Updating dependency \"@neo-one/http-context\" from `^2.7.0` to `^2.7.1`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-native\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-rpc-handler\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/node-http-rpc_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Add appropriate @types dependencies." + }, + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "dependency": [ + { + "comment": "Dependency @neo-one/cli-common-node version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Dependency @neo-one/http version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Dependency @neo-one/http-context version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.6.0` to `^2.6.1`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/node-http-rpc_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/cli-common-node\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/http\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/http-context\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-rpc-handler\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/node-http-rpc_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/cli-common-node\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/http\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/http-context\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-rpc-handler\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-node-http-rpc/CHANGELOG.md b/packages/neo-one-node-http-rpc/CHANGELOG.md index 03142361d3..4f7cc7f853 100644 --- a/packages/neo-one-node-http-rpc/CHANGELOG.md +++ b/packages/neo-one-node-http-rpc/CHANGELOG.md @@ -1,195 +1,37 @@ -# Change Log +# Change Log - @neo-one/node-http-rpc -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -## [2.3.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-http-rpc@2.3.0...@neo-one/node-http-rpc@2.3.1) (2019-11-20) +## 3.0.0 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/node-http-rpc +### Breaking changes +- 3.0.0preview3-alpha release bump +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT +### Patches +- Add appropriate @types dependencies. +- Upgrade TypeScript from v3.8.3 to v3.9.5 -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-http-rpc@2.2.7...@neo-one/node-http-rpc@2.3.0) (2019-10-23) +### Updates -**Note:** Version bump only for package @neo-one/node-http-rpc +- bump package version for future release clarity +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes +- update package release process to take better advantage of rush tooling +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -## [2.2.7](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-http-rpc@2.2.6...@neo-one/node-http-rpc@2.2.7) (2019-10-23) +### Minor changes -**Note:** Version bump only for package @neo-one/node-http-rpc +- Migrate to Rush - - - - -## [2.2.6](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-http-rpc@2.2.5...@neo-one/node-http-rpc@2.2.6) (2019-10-23) - -**Note:** Version bump only for package @neo-one/node-http-rpc - - - - - -## [2.2.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-http-rpc@2.2.4...@neo-one/node-http-rpc@2.2.5) (2019-09-04) - -**Note:** Version bump only for package @neo-one/node-http-rpc - - - - - -## [2.2.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-http-rpc@2.2.3...@neo-one/node-http-rpc@2.2.4) (2019-09-03) - -**Note:** Version bump only for package @neo-one/node-http-rpc - - - - - -## [2.2.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-http-rpc@2.2.2...@neo-one/node-http-rpc@2.2.3) (2019-09-02) - -**Note:** Version bump only for package @neo-one/node-http-rpc - - - - - -## [2.2.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-http-rpc@2.2.1...@neo-one/node-http-rpc@2.2.2) (2019-08-31) - -**Note:** Version bump only for package @neo-one/node-http-rpc - - - - - -## [2.2.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-http-rpc@2.2.0...@neo-one/node-http-rpc@2.2.1) (2019-08-30) - -**Note:** Version bump only for package @neo-one/node-http-rpc - - - - - -# [2.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-http-rpc@2.1.0...@neo-one/node-http-rpc@2.2.0) (2019-08-23) - - -### Features - -* **e2e:** node-bin e2e consensus test ([0671932](https://github.com/neo-one-suite/neo-one/commit/0671932)) - - - - - -# [2.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-http-rpc@2.0.0...@neo-one/node-http-rpc@2.1.0) (2019-08-22) - - -### Features - -* **monitor:** remove @neo-one/monitor. replace with opencensus, pino, and debug ([#1597](https://github.com/neo-one-suite/neo-one/issues/1597)) ([4b1a28f](https://github.com/neo-one-suite/neo-one/commit/4b1a28f)) - - - - - -# [2.0.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-http-rpc@1.1.4...@neo-one/node-http-rpc@2.0.0) (2019-07-29) - - -### chore - -* **node:** re-organize '@neo-one/node-bin' configuration layout ([1430584](https://github.com/neo-one-suite/neo-one/commit/1430584)), closes [#1102](https://github.com/neo-one-suite/neo-one/issues/1102) - - -### BREAKING CHANGES - -* **node:** old node-bin configs/.rc will almost surely not work. While I update the documentation you can refer here for a rough draft of the new layout: https://gist.github.com/danwbyrne/c6ee99309fea79d90ac3044c0e6c25fe - - - - - -## [1.1.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-http-rpc@1.1.3...@neo-one/node-http-rpc@1.1.4) (2019-06-20) - - -### Bug Fixes - -* **deps:** update dependency typescript to v3.5.1 ([#1365](https://github.com/neo-one-suite/neo-one/issues/1365)) ([ec89546](https://github.com/neo-one-suite/neo-one/commit/ec89546)) - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-http-rpc@1.1.2...@neo-one/node-http-rpc@1.1.3) (2019-06-04) - - -### Bug Fixes - -* **@neo-one/types:** eliminate global types from @neo-one/types ([004330d](https://github.com/neo-one-suite/neo-one/commit/004330d)) - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-http-rpc@1.1.1...@neo-one/node-http-rpc@1.1.2) (2019-04-12) - -**Note:** Version bump only for package @neo-one/node-http-rpc - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-http-rpc@1.1.0...@neo-one/node-http-rpc@1.1.1) (2019-03-27) - -**Note:** Version bump only for package @neo-one/node-http-rpc - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-http-rpc@1.0.2...@neo-one/node-http-rpc@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node-http-rpc - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-http-rpc@1.0.2-alpha.0...@neo-one/node-http-rpc@1.0.2) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node-http-rpc - - - - - -## [1.0.2-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-http-rpc@1.0.1...@neo-one/node-http-rpc@1.0.2-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **deps:** update dependency @types/koa to v2.0.48 and @types/koa-router to v7.0.39 ([25f8259](https://github.com/neo-one-suite/neo-one/commit/25f8259)) -* **deps:** update dependency @types/lodash to v4.14.120 ([a76dae7](https://github.com/neo-one-suite/neo-one/commit/a76dae7)) -* **deps:** update dependency @types/toobusy-js to v0.5.2 ([bba9fd9](https://github.com/neo-one-suite/neo-one/commit/bba9fd9)) -* **deps:** update dependency cross-fetch to v3 ([6344be7](https://github.com/neo-one-suite/neo-one/commit/6344be7)) -* **deps:** update dependency cross-fetch to v3.0.1 ([e7ed336](https://github.com/neo-one-suite/neo-one/commit/e7ed336)) -* **deps:** update dependency koa to v2.7.0 ([db6d374](https://github.com/neo-one-suite/neo-one/commit/db6d374)) -* **deps:** update dependency rxjs to v6.4.0 ([e28af2a](https://github.com/neo-one-suite/neo-one/commit/e28af2a)) - - -### Features - -* **node:** add `tooBusy` and `rateLimit` middleware ([057b084](https://github.com/neo-one-suite/neo-one/commit/057b084)) -* **node:** add splash-screen config for deployment ([b4aabc9](https://github.com/neo-one-suite/neo-one/commit/b4aabc9)) - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-http-rpc@1.0.0...@neo-one/node-http-rpc@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/node-http-rpc diff --git a/packages/neo-one-node-http-rpc/gulpfile.js b/packages/neo-one-node-http-rpc/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-node-http-rpc/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-node-http-rpc/package.json b/packages/neo-one-node-http-rpc/package.json index d65042e1a8..2dcee2bfc5 100644 --- a/packages/neo-one-node-http-rpc/package.json +++ b/packages/neo-one-node-http-rpc/package.json @@ -1,16 +1,28 @@ { "name": "@neo-one/node-http-rpc", - "version": "2.3.1", + "version": "3.0.0", "description": "NEOβ€’ONE RPC server.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/cli-common-node": "^2.4.0", - "@neo-one/http": "^2.3.0", - "@neo-one/http-context": "^2.3.0", - "@neo-one/logger": "^2.3.0", - "@neo-one/node-core": "^2.3.0", - "@neo-one/node-rpc-handler": "^2.3.0", - "@neo-one/utils": "^2.3.0", + "@neo-one/cli-common-node": "^2.7.1", + "@neo-one/http": "^2.7.0", + "@neo-one/http-context": "^2.7.1", + "@neo-one/logger": "^2.6.1", + "@neo-one/node-core": "^3.0.0", + "@neo-one/node-native": "^3.0.0", + "@neo-one/node-rpc-handler": "^3.0.0", + "@neo-one/utils": "^3.0.0", + "@types/koa": "^2.0.49", + "@types/koa-compose": "^3.2.4", "cross-fetch": "^3.0.4", "execa": "^3.2.0", "koa": "^2.7.0", @@ -22,12 +34,11 @@ "tslib": "^1.10.0" }, "devDependencies": { - "@types/koa": "^2.0.49", - "@types/koa-compose": "^3.2.4", + "@neo-one/build-tools": "^1.0.0", "@types/koa-compress": "^2.0.9", "@types/koa-router": "^7.0.42", "@types/koa-static": "^4.0.1", - "@types/lodash": "^4.14.138" - }, - "sideEffects": false + "@types/lodash": "^4.14.138", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-node-http-rpc/src/middleware/checkReady.ts b/packages/neo-one-node-http-rpc/src/middleware/checkReady.ts index 1d9a31b4f6..e5005a6445 100644 --- a/packages/neo-one-node-http-rpc/src/middleware/checkReady.ts +++ b/packages/neo-one-node-http-rpc/src/middleware/checkReady.ts @@ -76,9 +76,10 @@ const fetchTallestBlockIndex = async ( checkEndpoints?: number, ): Promise => { const counts = await Promise.all( - _.take(_.shuffle(rpcEndpoints), checkEndpoints === undefined ? CHECK_ENDPOINTS : checkEndpoints).map( - async (rpcEndpoint) => fetchCount(logger, rpcEndpoint, timeoutMS), - ), + _.take( + _.shuffle(rpcEndpoints), + checkEndpoints === undefined ? CHECK_ENDPOINTS : checkEndpoints, + ).map(async (rpcEndpoint) => fetchCount(logger, rpcEndpoint, timeoutMS)), ); return _.max(counts.filter(utils.notNull).map((count) => count - 1)); @@ -95,15 +96,17 @@ let lastCheckIndex: number | undefined; let lastCheckTime: number | undefined; // tslint:enable no-let +interface CheckReadyOptions { + readonly logger: Logger; + readonly blockchain: Blockchain; + readonly options: Options; +} + export const checkReady = async ({ logger, blockchain, options: { rpcURLs = [], offset = 3, timeoutMS = 1000, checkEndpoints }, -}: { - readonly logger: Logger; - readonly blockchain: Blockchain; - readonly options: Options; -}) => { +}: CheckReadyOptions) => { if (lastCheckTime === undefined || Date.now() - lastCheckTime > timeoutMS) { lastCheckTime = Date.now(); lastCheckIndex = await fetchTallestBlockIndex(logger, rpcURLs, timeoutMS, checkEndpoints); diff --git a/packages/neo-one-node-http-rpc/src/middleware/rpc.ts b/packages/neo-one-node-http-rpc/src/middleware/rpc.ts index cef76fe2a2..39b5171a2c 100644 --- a/packages/neo-one-node-http-rpc/src/middleware/rpc.ts +++ b/packages/neo-one-node-http-rpc/src/middleware/rpc.ts @@ -1,16 +1,26 @@ import { loadConfiguration } from '@neo-one/cli-common-node'; import { bodyParser } from '@neo-one/http'; import { Blockchain, Node } from '@neo-one/node-core'; +import { NativeContainer } from '@neo-one/node-native'; import { createHandler } from '@neo-one/node-rpc-handler'; import execa from 'execa'; import { Context } from 'koa'; import compose from 'koa-compose'; import koaCompress from 'koa-compress'; -export const rpc = ({ blockchain, node }: { readonly blockchain: Blockchain; readonly node: Node }) => { +export const rpc = ({ + blockchain, + node, + native, +}: { + readonly blockchain: Blockchain; + readonly node: Node; + readonly native: NativeContainer; +}) => { const handler = createHandler({ blockchain, node, + native, handleGetNEOTrackerURL: async () => { const config = await loadConfiguration(); diff --git a/packages/neo-one-node-http-rpc/src/setupRPCServer.ts b/packages/neo-one-node-http-rpc/src/setupRPCServer.ts index 00c5981d4b..524ff44c02 100644 --- a/packages/neo-one-node-http-rpc/src/setupRPCServer.ts +++ b/packages/neo-one-node-http-rpc/src/setupRPCServer.ts @@ -2,6 +2,7 @@ import { cors, setupServer } from '@neo-one/http'; import { context, onError as appOnError } from '@neo-one/http-context'; import { createChild, nodeLogger, rpcLogger } from '@neo-one/logger'; import { Blockchain, Node } from '@neo-one/node-core'; +import { NativeContainer } from '@neo-one/node-native'; import { Disposable, Labels } from '@neo-one/utils'; import * as nodeHttp from 'http'; import Application from 'koa'; @@ -27,10 +28,12 @@ export interface Options { export const setupRPCServer = async ({ blockchain, node, + native, options: { http, splashScreen, liveHealthCheck: liveHealthCheckOptions, readyHealthCheck: readyHealthCheckOptions }, }: { readonly blockchain: Blockchain; readonly node: Node; + readonly native: NativeContainer; readonly options: Options; }): Promise => { if (http === undefined) { @@ -48,7 +51,7 @@ export const setupRPCServer = async ({ // tslint:disable-next-line:no-any const router = new Router(); - const rpcMiddleware = rpc({ blockchain, node }); + const rpcMiddleware = rpc({ blockchain, node, native }); router.use(context(logger)); if (liveHealthCheckOptions !== undefined) { diff --git a/packages/neo-one-node-http-rpc/tsconfig.json b/packages/neo-one-node-http-rpc/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-node-http-rpc/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-node-native/.npmignore b/packages/neo-one-node-native/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-node-native/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-node-native/CHANGELOG.json b/packages/neo-one-node-native/CHANGELOG.json new file mode 100644 index 0000000000..e13121294b --- /dev/null +++ b/packages/neo-one-node-native/CHANGELOG.json @@ -0,0 +1,31 @@ +{ + "name": "@neo-one/node-native", + "entries": [ + { + "version": "3.0.0", + "tag": "@neo-one/node-native_v3.0.0", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "major": [ + { + "comment": "3.0.0preview3-alpha release bump" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-node-native/CHANGELOG.md b/packages/neo-one-node-native/CHANGELOG.md new file mode 100644 index 0000000000..30e8f60ba0 --- /dev/null +++ b/packages/neo-one-node-native/CHANGELOG.md @@ -0,0 +1,11 @@ +# Change Log - @neo-one/node-native + +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. + +## 3.0.0 +Tue, 08 Dec 2020 19:29:01 GMT + +### Breaking changes + +- 3.0.0preview3-alpha release bump + diff --git a/packages/neo-one-node-native/gulpfile.js b/packages/neo-one-node-native/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-node-native/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-node-native/package.json b/packages/neo-one-node-native/package.json new file mode 100644 index 0000000000..fbc3fdf564 --- /dev/null +++ b/packages/neo-one-node-native/package.json @@ -0,0 +1,30 @@ +{ + "name": "@neo-one/node-native", + "version": "3.0.0", + "description": "NEOβ€’ONE Node Native Contract Implementations", + "main": "./dist/cjs/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, + "dependencies": { + "@neo-one/client-common": "^3.0.0", + "@neo-one/client-full-common": "^3.0.0", + "@neo-one/node-core": "^3.0.0", + "@neo-one/utils": "^3.0.0", + "bn.js": "^5.0.0", + "lodash": "^4.17.15", + "rxjs": "^6.5.3" + }, + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "@types/jest": "^24.0.18", + "@types/lodash": "^4.14.138", + "gulp": "~4.0.2", + "tslib": "^1.10.0" + } +} diff --git a/packages/neo-one-node-native/src/AccountStates.ts b/packages/neo-one-node-native/src/AccountStates.ts new file mode 100644 index 0000000000..572a3dbf46 --- /dev/null +++ b/packages/neo-one-node-native/src/AccountStates.ts @@ -0,0 +1,78 @@ +import { common, ECPoint } from '@neo-one/client-common'; +import { assertIntegerStackItem, assertStructStackItem, StackItem, StructStackItem } from '@neo-one/node-core'; +import { BN } from 'bn.js'; + +export interface AccountStateAdd { + readonly balance: BN; +} + +export class AccountState { + public static fromStackItem(item: StructStackItem) { + const integerItem = assertIntegerStackItem(item.array[0]); + + return { + balance: integerItem.getInteger(), + }; + } + + public readonly balance: BN; + + public constructor({ balance }: AccountStateAdd) { + this.balance = balance; + } +} + +export interface NEOAccountStateAdd extends AccountStateAdd { + readonly balanceHeight: BN; + readonly voteTo?: ECPoint; +} + +export class NEOAccountState extends AccountState { + public static fromStackItem(item: StackItem) { + const structItem = assertStructStackItem(item); + const { balance } = super.fromStackItem(structItem); + const balanceHeight = structItem.array[1].getInteger(); + const voteTo = structItem.array[2].isNull ? undefined : common.bufferToECPoint(structItem.array[2].getBuffer()); + + return new NEOAccountState({ + balance, + balanceHeight, + voteTo, + }); + } + + public readonly balanceHeight: BN; + public readonly voteTo?: ECPoint; + + public constructor(options: NEOAccountStateAdd) { + super(options); + this.balanceHeight = options.balanceHeight; + this.voteTo = options.voteTo; + } +} + +export interface CandidateStateAdd { + readonly registered: boolean; + readonly votes: BN; +} + +export class CandidateState { + public static fromStackItem(item: StackItem) { + const structItem = assertStructStackItem(item); + const registered = structItem.array[0].getBoolean(); + const votes = structItem.array[1].getInteger(); + + return new CandidateState({ + registered, + votes, + }); + } + + public readonly registered: boolean; + public readonly votes: BN; + + public constructor({ registered = true, votes }: CandidateStateAdd) { + this.registered = registered; + this.votes = votes; + } +} diff --git a/packages/neo-one-node-native/src/CachedCommittee.ts b/packages/neo-one-node-native/src/CachedCommittee.ts new file mode 100644 index 0000000000..1f3c2c2b43 --- /dev/null +++ b/packages/neo-one-node-native/src/CachedCommittee.ts @@ -0,0 +1,31 @@ +import { StackItem, assertArrayStackItem, assertStructStackItem } from '@neo-one/node-core'; +import { ECPoint, common } from '@neo-one/client-common'; +import { BN } from 'bn.js'; + +interface CachedCommitteeElement { + readonly publicKey: ECPoint; + readonly votes: BN; +} + +export class CachedCommittee { + public static fromStackItem(item: StackItem) { + const arrayItem = assertArrayStackItem(item); + + const members = arrayItem.array.map((element) => { + const structItem = assertStructStackItem(element); + + return { + publicKey: common.bufferToECPoint(structItem.array[0].getBuffer()), + votes: structItem.array[1].getInteger(), + }; + }); + + return new CachedCommittee(members); + } + + public readonly members: readonly CachedCommitteeElement[]; + + public constructor(members: readonly CachedCommitteeElement[]) { + this.members = members; + } +} diff --git a/packages/neo-one-node-native/src/DesignationContract.ts b/packages/neo-one-node-native/src/DesignationContract.ts new file mode 100644 index 0000000000..453cef4177 --- /dev/null +++ b/packages/neo-one-node-native/src/DesignationContract.ts @@ -0,0 +1,63 @@ +import { NativeContract } from './NativeContract'; +import { + NativeContractStorageContext, + utils, + StackItem, + assertArrayStackItem, + DesignationRole as Role, +} from '@neo-one/node-core'; +import { map, toArray } from 'rxjs/operators'; +import { ECPoint, common } from '@neo-one/client-common'; + +export class DesignationContract extends NativeContract { + public constructor() { + super({ + id: -5, + name: 'DesignationContract', + }); + } + + public async getDesignatedByRole( + { storages }: NativeContractStorageContext, + role: Role, + height: number, + index: number, + ): Promise { + if (height + 1 < index) { + // TODO: implement makeError + throw new Error(`index: ${index} out of range for getDesignatedByRole.`); + } + + const key = this.createStorageKey(Buffer.from([role])) + .addUInt32BE(index) + .toSearchPrefix(); + const boundary = this.createStorageKey(Buffer.from([role])).toSearchPrefix(); + + const range = await storages + .find$(boundary, key) + .pipe( + map(({ value }) => utils.getInteroperable(value, NodeList.fromStackItem).members), + toArray(), + ) + .toPromise(); + + const publicKeys = range.length === 0 ? undefined : range[range.length - 1]; + + return publicKeys ?? []; + } +} + +class NodeList { + public static fromStackItem(stackItem: StackItem): NodeList { + const arrayItem = assertArrayStackItem(stackItem); + const members = arrayItem.array.map((item) => common.bufferToECPoint(item.getBuffer())); + + return new NodeList(members); + } + + public readonly members: readonly ECPoint[]; + + public constructor(members: readonly ECPoint[]) { + this.members = members; + } +} diff --git a/packages/neo-one-node-native/src/GASToken.ts b/packages/neo-one-node-native/src/GASToken.ts new file mode 100644 index 0000000000..b67ec8b229 --- /dev/null +++ b/packages/neo-one-node-native/src/GASToken.ts @@ -0,0 +1,13 @@ +import { NEP17NativeContract } from './Nep17'; + +export class GASToken extends NEP17NativeContract { + public static readonly decimals: number = 8; + public constructor() { + super({ + id: -2, + name: 'GasToken', + symbol: 'GAS', + decimals: 8, + }); + } +} diff --git a/packages/neo-one-node-native/src/KeyBuilder.ts b/packages/neo-one-node-native/src/KeyBuilder.ts new file mode 100644 index 0000000000..c06eb9ebd6 --- /dev/null +++ b/packages/neo-one-node-native/src/KeyBuilder.ts @@ -0,0 +1,53 @@ +import { SerializableWire, StorageKey } from '@neo-one/node-core'; +import { BN } from 'bn.js'; + +export class KeyBuilder { + private readonly id: number; + private mutableBuffer: Buffer; + + public constructor(id: number, prefix: Buffer) { + if (prefix.length !== 1) { + throw new Error('invalid prefix'); + } + + this.id = id; + this.mutableBuffer = prefix; + } + + public addBuffer(key: Buffer): this { + this.mutableBuffer = Buffer.concat([this.mutableBuffer, key]); + + return this; + } + + public addSerializable(key: SerializableWire): this { + const serialized = key.serializeWire(); + this.mutableBuffer = Buffer.concat([this.mutableBuffer, serialized]); + + return this; + } + + public addUInt32BE(value: number): this { + const buffer = Buffer.alloc(4); + buffer.writeUInt32BE(value); + + return this.addBuffer(buffer); + } + + public addUInt64LE(value: BN): this { + const buffer = value.toArrayLike(Buffer, 'le', 8); + + return this.addBuffer(buffer); + } + + public toSearchPrefix(): Buffer { + return StorageKey.createSearchPrefix(this.id, this.mutableBuffer); + } + + public toStorageKey(): StorageKey { + return new StorageKey({ + id: this.id, + key: this.mutableBuffer, + }); + } +} diff --git a/packages/neo-one-node-native/src/ManagementContract.ts b/packages/neo-one-node-native/src/ManagementContract.ts new file mode 100644 index 0000000000..b6a5a25bce --- /dev/null +++ b/packages/neo-one-node-native/src/ManagementContract.ts @@ -0,0 +1,42 @@ +import { NativeContract } from './NativeContract'; +import { NativeContractStorageContext, utils, ContractState } from '@neo-one/node-core'; +import { UInt160 } from '@neo-one/client-common'; +import { map, toArray } from 'rxjs/operators'; + +export class ManagementContract extends NativeContract { + private readonly prefixes = { + minimumDeploymentFee: Buffer.from([20]), + nextAvailableId: Buffer.from([15]), + contract: Buffer.from([8]), + }; + + public constructor() { + super({ + id: 0, + name: 'ManagementContract', + }); + } + + public async getContract({ storages }: NativeContractStorageContext, hash: UInt160) { + const maybeContract = await storages.tryGet( + this.createStorageKey(this.prefixes.contract).addBuffer(hash).toStorageKey(), + ); + + if (maybeContract === undefined) { + return undefined; + } + + return utils.getInteroperable(maybeContract, ContractState.fromStackItem); + } + + public async listContracts({ storages }: NativeContractStorageContext) { + const searchPrefix = this.createStorageKey(this.prefixes.contract).toSearchPrefix(); + return storages + .find$(searchPrefix) + .pipe( + map(({ value }) => utils.getInteroperable(value, ContractState.fromStackItem)), + toArray(), + ) + .toPromise(); + } +} diff --git a/packages/neo-one-node-native/src/NEOToken.ts b/packages/neo-one-node-native/src/NEOToken.ts new file mode 100644 index 0000000000..3c9b909c3d --- /dev/null +++ b/packages/neo-one-node-native/src/NEOToken.ts @@ -0,0 +1,184 @@ +import { common, crypto, ECPoint, UInt160 } from '@neo-one/client-common'; +import { BlockchainSettings, Candidate, NativeContractStorageContext, utils } from '@neo-one/node-core'; +import { BN } from 'bn.js'; +import _ from 'lodash'; +import { filter, map, toArray } from 'rxjs/operators'; +import { CandidateState, NEOAccountState } from './AccountStates'; +import { NEP17NativeContract } from './Nep17'; +import { CachedCommittee } from './CachedCommittee'; + +type Storages = NativeContractStorageContext['storages']; + +interface CalculateBonusOptions { + readonly storages: Storages; + readonly vote?: ECPoint; + readonly value: BN; + readonly start: number; + readonly end: number; +} + +interface GasRecord { + readonly index: number; + readonly gasPerBlock: BN; +} + +export class NEOToken extends NEP17NativeContract { + public readonly totalAmount: BN; + // TODO: investigate this usage, its a strange decimal value in C# world. `0.2M`. Something to do with rounding. + public readonly effectiveVoterTurnout = 0.2; + + private readonly settings: BlockchainSettings; + private readonly prefixes = { + votersCount: Buffer.from([1]), + candidate: Buffer.from([33]), + committee: Buffer.from([14]), + gasPerBlock: Buffer.from([29]), + voterRewardPerCommittee: Buffer.from([23]), + }; + + private readonly ratios = { + neoHolderReward: 10, + committeeReward: 10, + voterReward: 10, + }; + + public constructor(settings: BlockchainSettings) { + super({ + id: -1, + name: 'NeoToken', + symbol: 'NEO', + decimals: 0, + }); + + this.totalAmount = common.fixedFromDecimal(100000000, this.decimals); + this.settings = settings; + } + + public async totalSupply() { + return this.totalAmount; + } + + public async getCandidates(storage: NativeContractStorageContext): Promise { + const searchKey = this.createStorageKey(this.prefixes.candidate).toSearchPrefix(); + + return storage.storages + .find$(searchKey) + .pipe( + map(({ key, value }) => ({ + point: common.bufferToECPoint(key.key.slice(1)), + state: utils.getInteroperable(value, CandidateState.fromStackItem), + })), + filter((value) => value.state.registered), + map(({ point, state }) => ({ publicKey: point, votes: state.votes })), + toArray(), + ) + .toPromise(); + } + + public async getCommittee(storage: NativeContractStorageContext): Promise { + const cache = await this.getCommitteeFromCache(storage); + + return cache.members.map(({ publicKey }) => publicKey).sort(common.ecPointCompare); + } + + public async getCommitteeAddress(storage: NativeContractStorageContext): Promise { + const committee = await this.getCommittee(storage); + + return crypto.toScriptHash( + crypto.createMultiSignatureRedeemScript(committee.length - (committee.length - 1) / 2, committee), + ); + } + + public async getCommitteeFromCache({ storages }: NativeContractStorageContext): Promise { + const item = await storages.get(this.createStorageKey(this.prefixes.committee).toStorageKey()); + return utils.getInteroperable(item, CachedCommittee.fromStackItem); + } + + public async unclaimedGas({ storages }: NativeContractStorageContext, account: UInt160, end: number) { + const storage = await storages.tryGet( + this.createStorageKey(this.basePrefixes.account).addBuffer(account).toStorageKey(), + ); + if (storage === undefined) { + return new BN(0); + } + + const state = utils.getInteroperable(storage, NEOAccountState.fromStackItem); + + return this.calculateBonus({ + storages, + vote: state.voteTo, + value: state.balance, + start: state.balanceHeight.toNumber(), + end, + }); + } + + public async getNextBlockValidators(storage: NativeContractStorageContext): Promise { + const committeeCache = await this.getCommitteeFromCache(storage); + + return _.take(committeeCache.members, this.settings.validatorsCount) + .map(({ publicKey }) => publicKey) + .sort(common.ecPointCompare); + } + + private async calculateBonus({ storages, vote, value, start, end }: CalculateBonusOptions) { + if (value.isZero() || start >= end) { + return new BN(0); + } + if (value.ltn(0)) { + // TODO: create a real error for here + throw new Error('negative value not supported'); + } + + const neoHolderReward = await this.calculateNeoHolderReward(storages, value, start, end); + if (vote === undefined) { + return neoHolderReward; + } + + const border = this.createStorageKey(this.prefixes.voterRewardPerCommittee).addBuffer(vote).toSearchPrefix(); + const keyStart = this.createStorageKey(this.prefixes.voterRewardPerCommittee) + .addBuffer(vote) + .addUInt32BE(start) + .toSearchPrefix(); + const startRange = await storages.find$(border, keyStart).pipe(toArray()).toPromise(); + const startItem = startRange.length === 0 ? undefined : startRange[startRange.length - 1].value; + const startRewardPerNeo = startItem === undefined ? new BN(0) : new BN(startItem.value, 'le'); + + const keyEnd = this.createStorageKey(this.prefixes.voterRewardPerCommittee) + .addBuffer(vote) + .addUInt32BE(end) + .toSearchPrefix(); + const endRange = await storages.find$(border, keyEnd).pipe(toArray()).toPromise(); + const endItem = endRange.length === 0 ? undefined : endRange[endRange.length - 1].value; + const endRewardPerNeo = endItem === undefined ? new BN(0) : new BN(endItem.value, 'le'); + + return neoHolderReward.add(value.mul(endRewardPerNeo.sub(startRewardPerNeo)).div(this.totalAmount)); + } + + private async calculateNeoHolderReward(storages: Storages, value: BN, start: number, end: number) { + let sum = new BN(0); + const sortedGasRecords = await this.getSortedGasRecords(storages, end); + for (const { index, gasPerBlock } of sortedGasRecords) { + if (index > start) { + sum = sum.add(gasPerBlock.muln(end - index)); + } else { + sum = sum.add(gasPerBlock.muln(end - index)); + break; + } + } + + return value.mul(sum).muln(this.ratios.neoHolderReward).divn(100).div(this.totalAmount); + } + + private async getSortedGasRecords(storages: Storages, end: number): Promise { + const key = this.createStorageKey(this.prefixes.gasPerBlock).addUInt32BE(end).toSearchPrefix(); + const boundary = this.createStorageKey(this.prefixes.gasPerBlock).toSearchPrefix(); + const range = await storages.find$(key, boundary).pipe(toArray()).toPromise(); + return range + .map(({ key, value }) => ({ + index: key.key.readUInt32BE(4), + gasPerBlock: new BN(value.value, 'le'), + })) + .reverse(); + } +} diff --git a/packages/neo-one-node-native/src/NativeContainer.ts b/packages/neo-one-node-native/src/NativeContainer.ts new file mode 100644 index 0000000000..3bc4fc14da --- /dev/null +++ b/packages/neo-one-node-native/src/NativeContainer.ts @@ -0,0 +1,25 @@ +import { BlockchainSettings } from '@neo-one/node-core'; +import { GASToken } from './GASToken'; +import { NEOToken } from './NEOToken'; +import { PolicyContract } from './Policy'; +import { ManagementContract } from './ManagementContract'; +import { OracleContract } from './OracleContract'; +import { DesignationContract } from './DesignationContract'; + +export class NativeContainer { + public readonly Management: ManagementContract; + public readonly NEO: NEOToken; + public readonly GAS: GASToken; + public readonly Policy: PolicyContract; + public readonly Oracle: OracleContract; + public readonly Designation: DesignationContract; + + public constructor(settings: BlockchainSettings) { + this.Management = new ManagementContract(); + this.NEO = new NEOToken(settings); + this.GAS = new GASToken(); + this.Policy = new PolicyContract(); + this.Oracle = new OracleContract(); + this.Designation = new DesignationContract(); + } +} diff --git a/packages/neo-one-node-native/src/NativeContract.ts b/packages/neo-one-node-native/src/NativeContract.ts new file mode 100644 index 0000000000..b0b687ebbd --- /dev/null +++ b/packages/neo-one-node-native/src/NativeContract.ts @@ -0,0 +1,32 @@ +import { crypto, ScriptBuilder, UInt160, common } from '@neo-one/client-common'; +import { KeyBuilder } from './KeyBuilder'; + +export interface NativeContractAdd { + readonly name: string; + readonly id: number; +} + +export abstract class NativeContract { + public readonly name: string; + public readonly script: Buffer; + public readonly hash: UInt160; + public readonly id: number; + // newly added property will see if it is relevant on our end + // public readonly activeBlockIndex: number; + + public constructor({ name, id }: NativeContractAdd) { + this.name = name; + this.id = id; + + const builder = new ScriptBuilder(); + builder.emitPushString(this.name); + builder.emitSysCall('System.Contract.CallNative'); + this.script = builder.build(); + + this.hash = crypto.getContractHash(common.ZERO_UINT160, this.script); + } + + protected createStorageKey(prefix: Buffer) { + return new KeyBuilder(this.id, prefix); + } +} diff --git a/packages/neo-one-node-native/src/Nep17.ts b/packages/neo-one-node-native/src/Nep17.ts new file mode 100644 index 0000000000..c653725c41 --- /dev/null +++ b/packages/neo-one-node-native/src/Nep17.ts @@ -0,0 +1,47 @@ +import { UInt160 } from '@neo-one/client-common'; +import { NativeContractStorageContext } from '@neo-one/node-core'; +import { BN } from 'bn.js'; +import { NativeContract, NativeContractAdd } from './NativeContract'; + +export interface NEP17NativeContractAdd extends NativeContractAdd { + readonly symbol: string; + readonly decimals: number; +} + +export abstract class NEP17NativeContract extends NativeContract { + public readonly symbol: string; + public readonly decimals: number; + public readonly factor: BN; + + protected readonly basePrefixes = { + totalSupply: Buffer.from([11]), + account: Buffer.from([20]), + }; + + public constructor(options: NEP17NativeContractAdd) { + super(options); + this.symbol = options.symbol; + this.decimals = options.decimals; + this.factor = new BN(10 ** this.decimals); + } + + public async totalSupply({ storages }: NativeContractStorageContext): Promise { + const storage = await storages.tryGet(this.createStorageKey(this.basePrefixes.totalSupply).toStorageKey()); + if (storage === undefined) { + return new BN(0); + } + + return new BN(storage.value); + } + + public async balanceOf({ storages }: NativeContractStorageContext, account: UInt160): Promise { + const storage = await storages.tryGet( + this.createStorageKey(this.basePrefixes.totalSupply).addBuffer(account).toStorageKey(), + ); + if (storage === undefined) { + return new BN(0); + } + + return new BN(storage.value); + } +} diff --git a/packages/neo-one-node-native/src/OracleContract.ts b/packages/neo-one-node-native/src/OracleContract.ts new file mode 100644 index 0000000000..04d7ff4d9b --- /dev/null +++ b/packages/neo-one-node-native/src/OracleContract.ts @@ -0,0 +1,95 @@ +import { crypto } from '@neo-one/client-common'; +import { NativeContract } from './NativeContract'; +import { + NativeContractStorageContext, + utils, + StackItem, + assertArrayStackItem, + OracleRequestResults, + OracleRequest, +} from '@neo-one/node-core'; +import { BN } from 'bn.js'; +import { map, toArray } from 'rxjs/operators'; + +export class OracleContract extends NativeContract { + private readonly prefixes = { + requestId: Buffer.from([9]), + request: Buffer.from([7]), + idList: Buffer.from([6]), + }; + + // applicationEngine constants that might be used later + // private maxUrlLength = 256 as const; + // private maxFilterLength = 128 as const; + // private maxCallbackLength = 32 as const; + // private maxUserDataLength = 512 as const; + // private oracleRequestPrice = common.fixed8FromDecimal('.5'); + + public constructor() { + super({ + id: -4, + name: 'OracleContract', + }); + } + + public async getRequest({ storages }: NativeContractStorageContext, id: BN) { + const item = await storages.tryGet(this.createStorageKey(this.prefixes.request).addUInt64LE(id).toStorageKey()); + + if (item === undefined) { + return undefined; + } + + return utils.getInteroperable(item, OracleRequest.fromStackItem); + } + + public async getRequests({ storages }: NativeContractStorageContext): Promise { + return storages + .find$(this.createStorageKey(this.prefixes.request).toSearchPrefix()) + .pipe( + map( + ({ key, value }) => + [new BN(key.key.slice(1), 'le'), utils.getInteroperable(value, OracleRequest.fromStackItem)] as const, + ), + toArray(), + ) + .toPromise(); + } + + public async getRequestsByUrl({ storages }: NativeContractStorageContext, url: string) { + const maybeListItem = await storages.tryGet( + this.createStorageKey(this.prefixes.idList).addBuffer(this.getUrlHash(url)).toStorageKey(), + ); + if (maybeListItem === undefined) { + return []; + } + + const { list } = utils.getInteroperable(maybeListItem, IdList.fromStackItem); + + return Promise.all( + list.map(async (id) => { + const request = await storages.get(this.createStorageKey(this.prefixes.request).addUInt64LE(id).toStorageKey()); + + return utils.getInteroperable(request, OracleRequest.fromStackItem); + }), + ); + } + + private getUrlHash(url: string) { + return crypto.hash160(Buffer.from(url, 'utf8')); + } +} + +class IdList { + public static fromStackItem(stackItem: StackItem): IdList { + const { array } = assertArrayStackItem(stackItem); + const list = array.map((item) => item.getInteger()); + + return new IdList(list); + } + + public list: readonly BN[]; + + public constructor(list: readonly BN[]) { + this.list = list; + } +} diff --git a/packages/neo-one-node-native/src/Policy.ts b/packages/neo-one-node-native/src/Policy.ts new file mode 100644 index 0000000000..6d8b8fa174 --- /dev/null +++ b/packages/neo-one-node-native/src/Policy.ts @@ -0,0 +1,89 @@ +import { common, UInt160 } from '@neo-one/client-common'; +import { NativeContractStorageContext } from '@neo-one/node-core'; +import { BN } from 'bn.js'; +import { GASToken } from './GASToken'; +import { NativeContract } from './NativeContract'; + +// tslint:disable-next-line: export-name +export class PolicyContract extends NativeContract { + private readonly prefixes = { + maxTransactionsPerBlock: Buffer.from([23]), + feePerByte: Buffer.from([10]), + blockedAccounts: Buffer.from([15]), + maxBlockSize: Buffer.from([12]), + maxBlockSystemFee: Buffer.from([17]), + execFeeFactor: Buffer.from([18]), + storagePrice: Buffer.from([19]), + }; + + private readonly defaultExecFeeFactor = 30; + private readonly defaultStoragePrice = 100000; + + public constructor() { + super({ + id: -3, + name: 'PolicyContract', + }); + } + + public async getMaxTransactionsPerBlock({ storages }: NativeContractStorageContext) { + const item = await storages.tryGet(this.createStorageKey(this.prefixes.maxTransactionsPerBlock).toStorageKey()); + if (item === undefined) { + return 512; + } + + return new BN(item.value).toNumber(); + } + + public async getMaxBlockSize({ storages }: NativeContractStorageContext) { + const item = await storages.tryGet(this.createStorageKey(this.prefixes.maxBlockSize).toStorageKey()); + if (item === undefined) { + return 1024 * 256; + } + + return new BN(item.value).toNumber(); + } + + public async getMaxBlockSystemFee({ storages }: NativeContractStorageContext) { + const item = await storages.tryGet(this.createStorageKey(this.prefixes.maxBlockSystemFee).toStorageKey()); + if (item === undefined) { + return common.fixedFromDecimal(9000, GASToken.decimals); + } + + return new BN(item.value); + } + + public async getFeePerByte({ storages }: NativeContractStorageContext) { + const item = await storages.tryGet(this.createStorageKey(this.prefixes.feePerByte).toStorageKey()); + if (item === undefined) { + return new BN(1000); + } + + return new BN(item.value); + } + + public async getExecFeeFactor({ storages }: NativeContractStorageContext) { + const item = await storages.tryGet(this.createStorageKey(this.prefixes.execFeeFactor).toStorageKey()); + if (item === undefined) { + return this.defaultExecFeeFactor; + } + + return new BN(item.value).toNumber(); + } + + public async getStoragePrice({ storages }: NativeContractStorageContext) { + const item = await storages.tryGet(this.createStorageKey(this.prefixes.storagePrice).toStorageKey()); + if (item === undefined) { + return this.defaultStoragePrice; + } + + return new BN(item.value).toNumber(); + } + + public async isBlocked({ storages }: NativeContractStorageContext, account: UInt160) { + const item = await storages.tryGet( + this.createStorageKey(this.prefixes.blockedAccounts).addBuffer(account).toStorageKey(), + ); + return item !== undefined; + } +} diff --git a/packages/neo-one-node-native/src/index.ts b/packages/neo-one-node-native/src/index.ts new file mode 100644 index 0000000000..0c91f79dd7 --- /dev/null +++ b/packages/neo-one-node-native/src/index.ts @@ -0,0 +1,8 @@ +export * from './AccountStates'; +export * from './GASToken'; +export * from './KeyBuilder'; +export * from './NativeContainer'; +export * from './NativeContract'; +export * from './NEOToken'; +export * from './Nep17'; +export * from './Policy'; diff --git a/packages/neo-one-node-native/tsconfig.json b/packages/neo-one-node-native/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-node-native/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-node-neo-settings/.npmignore b/packages/neo-one-node-neo-settings/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-node-neo-settings/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-node-neo-settings/CHANGELOG.json b/packages/neo-one-node-neo-settings/CHANGELOG.json new file mode 100644 index 0000000000..277ecd676f --- /dev/null +++ b/packages/neo-one-node-neo-settings/CHANGELOG.json @@ -0,0 +1,102 @@ +{ + "name": "@neo-one/node-neo-settings", + "entries": [ + { + "version": "3.0.0", + "tag": "@neo-one/node-neo-settings_v3.0.0", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "major": [ + { + "comment": "3.0.0preview3-alpha release bump" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/node-neo-settings_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Add appropriate @types dependencies." + }, + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "dependency": [ + { + "comment": "Dependency @neo-one/client-common version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/node-neo-settings_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/node-neo-settings_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-node-neo-settings/CHANGELOG.md b/packages/neo-one-node-neo-settings/CHANGELOG.md index 7e45680c38..572682fba2 100644 --- a/packages/neo-one-node-neo-settings/CHANGELOG.md +++ b/packages/neo-one-node-neo-settings/CHANGELOG.md @@ -1,121 +1,37 @@ -# Change Log +# Change Log - @neo-one/node-neo-settings -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-neo-settings@1.1.9...@neo-one/node-neo-settings@2.3.0) (2019-10-23) +## 3.0.0 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/node-neo-settings +### Breaking changes +- 3.0.0preview3-alpha release bump +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT +### Patches +- Add appropriate @types dependencies. +- Upgrade TypeScript from v3.8.3 to v3.9.5 -## [1.1.9](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-neo-settings@1.1.8...@neo-one/node-neo-settings@1.1.9) (2019-10-23) +### Updates -**Note:** Version bump only for package @neo-one/node-neo-settings +- bump package version for future release clarity +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes +- update package release process to take better advantage of rush tooling +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -## [1.1.8](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-neo-settings@1.1.7...@neo-one/node-neo-settings@1.1.8) (2019-09-04) +### Minor changes -**Note:** Version bump only for package @neo-one/node-neo-settings +- Migrate to Rush - - - - -## [1.1.7](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-neo-settings@1.1.6...@neo-one/node-neo-settings@1.1.7) (2019-08-30) - -**Note:** Version bump only for package @neo-one/node-neo-settings - - - - - -## [1.1.6](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-neo-settings@1.1.5...@neo-one/node-neo-settings@1.1.6) (2019-08-22) - -**Note:** Version bump only for package @neo-one/node-neo-settings - - - - - -## [1.1.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-neo-settings@1.1.4...@neo-one/node-neo-settings@1.1.5) (2019-07-29) - -**Note:** Version bump only for package @neo-one/node-neo-settings - - - - - -## [1.1.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-neo-settings@1.1.3...@neo-one/node-neo-settings@1.1.4) (2019-06-20) - - -### Bug Fixes - -* **deps:** update dependency typescript to v3.5.1 ([#1365](https://github.com/neo-one-suite/neo-one/issues/1365)) ([ec89546](https://github.com/neo-one-suite/neo-one/commit/ec89546)) - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-neo-settings@1.1.2...@neo-one/node-neo-settings@1.1.3) (2019-06-04) - - -### Bug Fixes - -* **@neo-one/types:** eliminate global types from @neo-one/types ([004330d](https://github.com/neo-one-suite/neo-one/commit/004330d)) - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-neo-settings@1.1.1...@neo-one/node-neo-settings@1.1.2) (2019-04-12) - -**Note:** Version bump only for package @neo-one/node-neo-settings - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-neo-settings@1.1.0...@neo-one/node-neo-settings@1.1.1) (2019-03-27) - -**Note:** Version bump only for package @neo-one/node-neo-settings - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-neo-settings@1.0.2...@neo-one/node-neo-settings@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node-neo-settings - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-neo-settings@1.0.2-alpha.0...@neo-one/node-neo-settings@1.0.2) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node-neo-settings - - - - - -## [1.0.2-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-neo-settings@1.0.1...@neo-one/node-neo-settings@1.0.2-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **build:** adjust several packages to allow emitting .d.ts files. ([27a2d88](https://github.com/neo-one-suite/neo-one/commit/27a2d88)) - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-neo-settings@1.0.0...@neo-one/node-neo-settings@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/node-neo-settings diff --git a/packages/neo-one-node-neo-settings/gulpfile.js b/packages/neo-one-node-neo-settings/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-node-neo-settings/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-node-neo-settings/package.json b/packages/neo-one-node-neo-settings/package.json index 6ba1a993ae..0f1b97475b 100644 --- a/packages/neo-one-node-neo-settings/package.json +++ b/packages/neo-one-node-neo-settings/package.json @@ -1,19 +1,29 @@ { "name": "@neo-one/node-neo-settings", - "version": "2.3.0", + "version": "3.0.0", "description": "NEOβ€’ONE standard MainNet and TestNet blockchain settings.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.3.0", - "@neo-one/node-core": "^2.3.0", - "@neo-one/utils": "^2.3.0", + "@neo-one/client-common": "^3.0.0", + "@neo-one/node-core": "^3.0.0", + "@neo-one/utils": "^3.0.0", + "@types/bn.js": "^4.11.5", + "@types/lodash": "^4.14.138", "bn.js": "^5.0.0", "lodash": "^4.17.15", "tslib": "^1.10.0" }, "devDependencies": { - "@types/bn.js": "^4.11.5", - "@types/lodash": "^4.14.138" - }, - "sideEffects": false + "@neo-one/build-tools": "^1.0.0", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-node-neo-settings/src/common.ts b/packages/neo-one-node-neo-settings/src/common.ts index 2cbe54b15b..8f2df9e0ef 100644 --- a/packages/neo-one-node-neo-settings/src/common.ts +++ b/packages/neo-one-node-neo-settings/src/common.ts @@ -1,144 +1,198 @@ -import { common as clientCommon, crypto, Op, ScriptBuilder, UInt160 } from '@neo-one/client-common'; -import { - AssetType, - Block, - IssueTransaction, - MinerTransaction, - Output, - RegisterTransaction, - Witness, -} from '@neo-one/node-core'; -import { utils } from '@neo-one/utils'; +import { common as clientCommon, crypto, Op, ScriptBuilder, UInt160, WitnessScopeModel } from '@neo-one/client-common'; +import { Block, ConsensusData, Signer, Transaction, Witness } from '@neo-one/node-core'; import { BN } from 'bn.js'; -export const GENERATION_AMOUNT: readonly number[] = [8, 7, 6, 5, 4, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; +export const GENERATION_AMOUNT: readonly number[] = [6, 5, 4, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; export const GENERATION_AMOUNT_PRIVATE: readonly number[] = [8, 7, 6]; export const ISSUE_AMOUNT_PRIVATE = clientCommon.fixed8FromDecimal(58000000); export const DECREMENT_INTERVAL = 2000000; -export const SECONDS_PER_BLOCK = 15; +export const MILLISECONDS_PER_BLOCK = 15000; export const MAX_TRANSACTION_PER_BLOCK = 500; interface Options { - readonly address: UInt160; readonly privateNet?: boolean; readonly consensusAddress: UInt160; + readonly messageMagic: number; } -const ONE_HUNDRED_MILLION = clientCommon.fixed8FromDecimal(100000000); +// const ONE_HUNDRED_MILLION = clientCommon.fixed8FromDecimal(100000000); -const getGoverningToken = () => { - const scriptBuilder = new ScriptBuilder(); - scriptBuilder.emitOp('PUSH1'); - const admin = crypto.toScriptHash(scriptBuilder.build()); - - return new RegisterTransaction({ - asset: { - type: AssetType.GoverningToken, - name: '[{"lang":"zh-CN","name":"ε°θšθ‚‘"},{"lang":"en","name":"AntShare"}]', - amount: ONE_HUNDRED_MILLION, - precision: 0, - owner: clientCommon.ECPOINT_INFINITY, - admin, - }, +// const getGoverningToken = () => { +// const scriptBuilder = new ScriptBuilder(); +// scriptBuilder.emitOp('PUSH1'); +// const admin = crypto.toScriptHash(scriptBuilder.build()); + +// return new RegisterTransaction({ +// asset: { +// type: AssetType.GoverningToken, +// name: '[{"lang":"zh-CN","name":"ε°θšθ‚‘"},{"lang":"en","name":"AntShare"}]', +// amount: ONE_HUNDRED_MILLION, +// precision: 0, +// owner: clientCommon.ECPOINT_INFINITY, +// admin, +// }, +// }); +// }; + +// const getUtilityToken = () => { +// const scriptBuilder = new ScriptBuilder(); +// scriptBuilder.emitOp('PUSH0'); +// const admin = crypto.toScriptHash(scriptBuilder.build()); + +// return new RegisterTransaction({ +// asset: { +// type: AssetType.UtilityToken, +// name: '[{"lang":"zh-CN","name":"小蚁币"},{"lang":"en","name":"AntCoin"}]', +// amount: ONE_HUNDRED_MILLION, +// precision: 8, +// owner: clientCommon.ECPOINT_INFINITY, +// admin, +// }, +// }); +// }; + +// interface GensisBlockOptions { +// readonly privateNet?: boolean; +// readonly governingToken: RegisterTransaction; +// readonly utilityToken: RegisterTransaction; +// readonly address: UInt160; +// readonly consensusAddress: UInt160; +// } + +const getDeployWitness = () => + new Witness({ + invocation: Buffer.from([]), + verification: Buffer.from([Op.PUSH1]), }); -}; -const getUtilityToken = () => { +const getDeployNativeContracts = (messageMagic: number) => { const scriptBuilder = new ScriptBuilder(); - scriptBuilder.emitOp('PUSH0'); - const admin = crypto.toScriptHash(scriptBuilder.build()); - - return new RegisterTransaction({ - asset: { - type: AssetType.UtilityToken, - name: '[{"lang":"zh-CN","name":"小蚁币"},{"lang":"en","name":"AntCoin"}]', - amount: ONE_HUNDRED_MILLION, - precision: 8, - owner: clientCommon.ECPOINT_INFINITY, - admin, - }, + scriptBuilder.emitSysCall('Neo.Native.Deploy'); + const script = scriptBuilder.build(); + + return new Transaction({ + version: 0, + script, + systemFee: new BN(0), + networkFee: new BN(0), + signers: [ + new Signer({ + account: crypto.hash160(Buffer.from([Op.PUSH1])), + scopes: WitnessScopeModel.None, + }), + ], + attributes: [], + witnesses: [getDeployWitness()], + validUntilBlock: 0, + messageMagic, }); }; -interface GensisBlockOptions { - readonly privateNet?: boolean; - readonly governingToken: RegisterTransaction; - readonly utilityToken: RegisterTransaction; - readonly address: UInt160; +interface GetGenesisBlockOptions { readonly consensusAddress: UInt160; + readonly messageMagic: number; + readonly privateNet?: boolean; } -const getGenesisBlock = ({ privateNet, governingToken, utilityToken, address, consensusAddress }: GensisBlockOptions) => +const getGenesisBlock = ({ consensusAddress, messageMagic }: GetGenesisBlockOptions) => new Block({ previousHash: clientCommon.ZERO_UINT256, - timestamp: 1468595301, + timestamp: new BN(Date.UTC(2016, 6, 15, 15, 8, 21)), index: 0, - consensusData: new BN(2083236893), nextConsensus: consensusAddress, - script: new Witness({ - invocation: Buffer.from([]), - verification: Buffer.from([Op.PUSH1]), + witness: getDeployWitness(), + consensusData: new ConsensusData({ + primaryIndex: 0, + nonce: new BN(2083236893), }), - transactions: [ - new MinerTransaction({ nonce: 2083236893 }), - governingToken, - utilityToken, - new IssueTransaction({ - version: 0, - outputs: [ - new Output({ - asset: governingToken.hash, - value: governingToken.asset.amount, - address, - }), - ], - scripts: [ - new Witness({ - invocation: Buffer.from([]), - verification: Buffer.from([Op.PUSH1]), - }), - ], - }), - privateNet - ? new IssueTransaction({ - outputs: [ - new Output({ - asset: utilityToken.hash, - value: ISSUE_AMOUNT_PRIVATE, - address, - }), - ], - - scripts: [ - new Witness({ - invocation: Buffer.from([]), - verification: Buffer.from([Op.PUSH0]), - }), - ], - }) - : undefined, - ].filter(utils.notNull), + transactions: [], + messageMagic, }); -export const common = ({ privateNet, address, consensusAddress }: Options) => { - const utilityToken = getUtilityToken(); - const governingToken = getGoverningToken(); - - return { - genesisBlock: getGenesisBlock({ - privateNet, - governingToken, - utilityToken, - address, - consensusAddress, - }), - governingToken, - utilityToken, - decrementInterval: DECREMENT_INTERVAL, - generationAmount: privateNet ? GENERATION_AMOUNT_PRIVATE : GENERATION_AMOUNT, - secondsPerBlock: SECONDS_PER_BLOCK, - maxTransactionsPerBlock: MAX_TRANSACTION_PER_BLOCK, - memPoolSize: 50000, - }; -}; +export const common = ({ privateNet, consensusAddress, messageMagic }: Options) => ({ + genesisBlock: getGenesisBlock({ + consensusAddress, + privateNet, + messageMagic, + }), + decrementInterval: DECREMENT_INTERVAL, + generationAmount: privateNet ? GENERATION_AMOUNT_PRIVATE : GENERATION_AMOUNT, + millisecondsPerBlock: MILLISECONDS_PER_BLOCK, + maxTransactionsPerBlock: MAX_TRANSACTION_PER_BLOCK, + memoryPoolMaxTransactions: 50000, +}); + +// const getGenesisBlock = ({ privateNet, governingToken, utilityToken, address, consensusAddress }: GensisBlockOptions) => +// new Block({ +// previousHash: clientCommon.ZERO_UINT256, +// timestamp: 1468595301, +// index: 0, +// consensusData: new BN(2083236893), +// nextConsensus: consensusAddress, +// script: new Witness({ +// invocation: Buffer.from([]), +// verification: Buffer.from([Op.PUSH1]), +// }), +// transactions: [ +// new MinerTransaction({ nonce: 2083236893 }), +// governingToken, +// utilityToken, +// new IssueTransaction({ +// version: 0, +// outputs: [ +// new Output({ +// asset: governingToken.hash, +// value: governingToken.asset.amount, +// address, +// }), +// ], +// scripts: [ +// new Witness({ +// invocation: Buffer.from([]), +// verification: Buffer.from([Op.PUSH1]), +// }), +// ], +// }), +// privateNet +// ? new IssueTransaction({ +// outputs: [ +// new Output({ +// asset: utilityToken.hash, +// value: ISSUE_AMOUNT_PRIVATE, +// address, +// }), +// ], + +// scripts: [ +// new Witness({ +// invocation: Buffer.from([]), +// verification: Buffer.from([Op.PUSH0]), +// }), +// ], +// }) +// : undefined, +// ].filter(utils.notNull), +// }); + +// export const common = ({ privateNet, address, consensusAddress }: Options) => { +// const utilityToken = getUtilityToken(); +// const governingToken = getGoverningToken(); + +// return { +// genesisBlock: getGenesisBlock({ +// privateNet, +// governingToken, +// utilityToken, +// address, +// consensusAddress, +// }), +// governingToken, +// utilityToken, +// decrementInterval: DECREMENT_INTERVAL, +// generationAmount: privateNet ? GENERATION_AMOUNT_PRIVATE : GENERATION_AMOUNT, +// secondsPerBlock: SECONDS_PER_BLOCK, +// maxTransactionsPerBlock: MAX_TRANSACTION_PER_BLOCK, +// memPoolSize: 50000, +// }; +// }; diff --git a/packages/neo-one-node-neo-settings/src/createMain.ts b/packages/neo-one-node-neo-settings/src/createMain.ts index d9ed0b428c..f868be36f5 100644 --- a/packages/neo-one-node-neo-settings/src/createMain.ts +++ b/packages/neo-one-node-neo-settings/src/createMain.ts @@ -1,7 +1,9 @@ -import { common as clientCommon, crypto, UInt160 } from '@neo-one/client-common'; -import { Settings, TransactionType } from '@neo-one/node-core'; +import { common as clientCommon, crypto } from '@neo-one/client-common'; +import { Settings } from '@neo-one/node-core'; import { common } from './common'; +const mainNetMessageMagic = 5195086; + const DEFAULT_VALIDATORS: readonly string[] = [ '03b209fd4f53a7170ea4444e0cb0a6bb6a53c2bd016926989cf85f9b0fba17a70c', '02df48f60e8f3e01c48ff40b9b7f1310d7a8b2a193188befe1c2e3df740e895093', @@ -12,68 +14,59 @@ const DEFAULT_VALIDATORS: readonly string[] = [ '02486fd15702c4490a26703112a5cc1d0923fd697a33406bd5a1c00e0013b09a70', ]; +const DEFAULT_EXTRA_MEMBERS: readonly string[] = [ + '023a36c72844610b4d34d1968662424011bf783ca9d984efa19a20babf5582f3fe', + '03708b860c1de5d87f5b151a12c2a99feebd2e8b315ee8e7cf8aa19692a9e18379', + '03c6aa6e12638b36e88adc1ccdceac4db9929575c3e03576c617c49cce7114a050', + '03204223f8c86b8cd5c89ef12e4f0dbb314172e9241e30c9ef2293790793537cf0', + '02a62c915cf19c7f19a50ec217e79fac2439bbaad658493de0c7d8ffa92ab0aa62', + '03409f31f0d66bdc2f70a9730b66fe186658f84a8018204db01c106edc36553cd0', + '0288342b141c30dc8ffcde0204929bb46aed5756b41ef4a56778d15ada8f0c6654', + '020f2887f41474cfeb11fd262e982051c1541418137c02a0f4961af911045de639', + '0222038884bbd1d8ff109ed3bdef3542e768eef76c1247aea8bc8171f532928c30', + '03d281b42002647f0113f36c7b8efb30db66078dfaaa9ab3ff76d043a98d512fde', + '02504acbc1f4b3bdad1d86d6e1a08603771db135a73e61c9d565ae06a1938cd2ad', + '0226933336f1b75baa42d42b71d9091508b638046d19abd67f4e119bf64a7cfb4d', + '03cdcea66032b82f5c30450e381e5295cae85c5e6943af716cc6b646352a6067dc', + '02cd5a5547119e24feaa7c2a0f37b8c9366216bab7054de0065c9be42084003c8a', +]; + export const createMain = ({ privateNet = false, standbyValidators: standbyValidatorsIn = DEFAULT_VALIDATORS, - secondsPerBlock, - address: addressIn, + extraCommitteeMembers: extraCommitteeMembersIn = DEFAULT_EXTRA_MEMBERS, + millisecondsPerBlock, }: { readonly privateNet?: boolean; - readonly secondsPerBlock?: number; readonly standbyValidators?: readonly string[]; - readonly address?: string; + readonly extraCommitteeMembers?: readonly string[]; + readonly millisecondsPerBlock?: number; } = {}): Settings => { const standbyValidators = standbyValidatorsIn.map((value) => clientCommon.stringToECPoint(value)); + const standbyMembers = extraCommitteeMembersIn.map((value) => clientCommon.stringToECPoint(value)); + const standbyCommittee = standbyValidators.concat(standbyMembers); - const consensusAddress = - standbyValidatorsIn === DEFAULT_VALIDATORS - ? clientCommon.asUInt160(Buffer.from('59e75d652b5d3827bf04c165bbe9ef95cca4bf55', 'hex')) - : crypto.getConsensusAddress(standbyValidators); - let address: UInt160; - if (addressIn === undefined) { - address = - standbyValidatorsIn === DEFAULT_VALIDATORS - ? clientCommon.asUInt160(Buffer.from('5fa99d93303775fe50ca119c327759313eccfa1c', 'hex')) - : crypto.toScriptHash( - crypto.createMultiSignatureVerificationScript(standbyValidators.length / 2 + 1, standbyValidators), - ); - } else { - address = clientCommon.stringToUInt160(addressIn); - } + const consensusAddress = crypto.getConsensusAddress(standbyValidators); const commonSettings = common({ privateNet, consensusAddress, - address, + messageMagic: mainNetMessageMagic, }); return { genesisBlock: commonSettings.genesisBlock, - governingToken: commonSettings.governingToken, - utilityToken: commonSettings.utilityToken, decrementInterval: commonSettings.decrementInterval, generationAmount: commonSettings.generationAmount, - secondsPerBlock: secondsPerBlock === undefined ? commonSettings.secondsPerBlock : secondsPerBlock, - maxTransactionsPerBlock: commonSettings.maxTransactionsPerBlock, - memPoolSize: commonSettings.memPoolSize, - fees: { - [TransactionType.Enrollment]: clientCommon.fixed8FromDecimal(1000), - [TransactionType.Issue]: clientCommon.fixed8FromDecimal(500), - [TransactionType.Publish]: clientCommon.fixed8FromDecimal(500), - [TransactionType.Register]: clientCommon.fixed8FromDecimal(10000), - }, - - registerValidatorFee: clientCommon.fixed8FromDecimal(1000), - messageMagic: 7630401, + millisecondsPerBlock: + millisecondsPerBlock === undefined ? commonSettings.millisecondsPerBlock : millisecondsPerBlock, + standbyCommittee, + committeeMembersCount: standbyCommittee.length, + memoryPoolMaxTransactions: commonSettings.memoryPoolMaxTransactions, + validatorsCount: standbyValidators.length, + messageMagic: mainNetMessageMagic, addressVersion: clientCommon.NEO_ADDRESS_VERSION, privateKeyVersion: clientCommon.NEO_PRIVATE_KEY_VERSION, standbyValidators, - vm: { - storageContext: { - v0: { - index: 0, - }, - }, - }, }; }; diff --git a/packages/neo-one-node-neo-settings/src/createPriv.ts b/packages/neo-one-node-neo-settings/src/createPriv.ts new file mode 100644 index 0000000000..4bdbd74d35 --- /dev/null +++ b/packages/neo-one-node-neo-settings/src/createPriv.ts @@ -0,0 +1,46 @@ +import { common as clientCommon, crypto } from '@neo-one/client-common'; +import { Settings } from '@neo-one/node-core'; +import { constants } from '@neo-one/utils'; +import { common } from './common'; + +const DEFAULT_VALIDATORS: readonly string[] = [constants.PRIVATE_NET_PUBLIC_KEY]; + +export const createPriv = ({ + standbyValidators: standbyValidatorsIn = DEFAULT_VALIDATORS, + extraCommitteeMembers: extraCommitteeMembersIn = [], + messageMagic = 7630401, + millisecondsPerBlock, +}: { + readonly standbyValidators?: readonly string[]; + readonly extraCommitteeMembers?: readonly string[]; + readonly millisecondsPerBlock?: number; + readonly messageMagic?: number; +} = {}): Settings => { + const standbyValidators = standbyValidatorsIn.map((value) => clientCommon.stringToECPoint(value)); + const standbyMembers = extraCommitteeMembersIn.map((value) => clientCommon.stringToECPoint(value)); + const standbyCommittee = standbyValidators.concat(standbyMembers); + + const consensusAddress = crypto.getConsensusAddress(standbyValidators); + + const commonSettings = common({ + privateNet: true, + consensusAddress, + messageMagic, + }); + + return { + genesisBlock: commonSettings.genesisBlock, + decrementInterval: commonSettings.decrementInterval, + generationAmount: commonSettings.generationAmount, + millisecondsPerBlock: + millisecondsPerBlock === undefined ? commonSettings.millisecondsPerBlock : millisecondsPerBlock, + standbyCommittee, + committeeMembersCount: standbyCommittee.length, + memoryPoolMaxTransactions: commonSettings.memoryPoolMaxTransactions, + validatorsCount: standbyValidators.length, + messageMagic, + addressVersion: clientCommon.NEO_ADDRESS_VERSION, + privateKeyVersion: clientCommon.NEO_PRIVATE_KEY_VERSION, + standbyValidators, + }; +}; diff --git a/packages/neo-one-node-neo-settings/src/createTest.ts b/packages/neo-one-node-neo-settings/src/createTest.ts index ab9e97f279..b070a16931 100644 --- a/packages/neo-one-node-neo-settings/src/createTest.ts +++ b/packages/neo-one-node-neo-settings/src/createTest.ts @@ -1,79 +1,55 @@ -import { common as clientCommon, crypto, UInt160 } from '@neo-one/client-common'; -import { Settings, TransactionType } from '@neo-one/node-core'; +import { common as clientCommon, crypto } from '@neo-one/client-common'; +import { Settings } from '@neo-one/node-core'; import { common } from './common'; +const testNetMessageMagic = 1951352142; + const DEFAULT_VALIDATORS: readonly string[] = [ - '0327da12b5c40200e9f65569476bbff2218da4f32548ff43b6387ec1416a231ee8', - '026ce35b29147ad09e4afe4ec4a7319095f08198fa8babbe3c56e970b143528d22', - '0209e7fd41dfb5c2f8dc72eb30358ac100ea8c72da18847befe06eade68cebfcb9', - '039dafd8571a641058ccc832c5e2111ea39b09c0bde36050914384f7a48bce9bf9', - '038dddc06ce687677a53d54f096d2591ba2302068cf123c1f2d75c2dddc5425579', - '02d02b1873a0863cd042cc717da31cea0d7cf9db32b74d4c72c01b0011503e2e22', - '034ff5ceeac41acf22cd5ed2da17a6df4dd8358fcb2bfb1a43208ad0feaab2746b', + '023e9b32ea89b94d066e649b124fd50e396ee91369e8e2a6ae1b11c170d022256d', + '03009b7540e10f2562e5fd8fac9eaec25166a58b26e412348ff5a86927bfac22a2', + '02ba2c70f5996f357a43198705859fae2cfea13e1172962800772b3d588a9d4abd', + '03408dcd416396f64783ac587ea1e1593c57d9fea880c8a6a1920e92a259477806', + '02a7834be9b32e2981d157cb5bbd3acb42cfd11ea5c3b10224d7a44e98c5910f1b', + '0214baf0ceea3a66f17e7e1e839ea25fd8bed6cd82e6bb6e68250189065f44ff01', + '030205e9cefaea5a1dfc580af20c8d5aa2468bb0148f1a5e4605fc622c80e604ba', ]; export const createTest = ({ privateNet, standbyValidators: standbyValidatorsIn = DEFAULT_VALIDATORS, - secondsPerBlock, - address: addressIn, + extraCommitteeMembers: extraCommitteeMembersIn = [], + millisecondsPerBlock, }: { readonly privateNet?: boolean; - readonly secondsPerBlock?: number; readonly standbyValidators?: readonly string[]; - readonly address?: string; + readonly extraCommitteeMembers?: readonly string[]; + readonly millisecondsPerBlock?: number; } = {}): Settings => { const standbyValidators = standbyValidatorsIn.map((value) => clientCommon.stringToECPoint(value)); + const standbyMembers = extraCommitteeMembersIn.map((value) => clientCommon.stringToECPoint(value)); + const standbyCommittee = standbyValidators.concat(standbyMembers); - const consensusAddress = - standbyValidatorsIn === DEFAULT_VALIDATORS - ? clientCommon.asUInt160(Buffer.from('f3812db982f3b0089a21a278988efeec6a027b25', 'hex')) - : crypto.getConsensusAddress(standbyValidators); - let address: UInt160; - if (addressIn === undefined) { - address = - standbyValidatorsIn === DEFAULT_VALIDATORS - ? clientCommon.asUInt160(Buffer.from('197ff6783d512a740d42f4cc4f5572955fa44c95', 'hex')) - : crypto.toScriptHash( - crypto.createMultiSignatureVerificationScript(standbyValidators.length / 2 + 1, standbyValidators), - ); - } else { - address = clientCommon.stringToUInt160(addressIn); - } + const consensusAddress = crypto.getConsensusAddress(standbyValidators); const commonSettings = common({ privateNet, - address, consensusAddress, + messageMagic: testNetMessageMagic, }); return { genesisBlock: commonSettings.genesisBlock, - governingToken: commonSettings.governingToken, - utilityToken: commonSettings.utilityToken, decrementInterval: commonSettings.decrementInterval, generationAmount: commonSettings.generationAmount, - secondsPerBlock: secondsPerBlock === undefined ? commonSettings.secondsPerBlock : secondsPerBlock, - maxTransactionsPerBlock: commonSettings.maxTransactionsPerBlock, - memPoolSize: commonSettings.memPoolSize, - fees: { - [TransactionType.Enrollment]: clientCommon.fixed8FromDecimal(10), - [TransactionType.Issue]: clientCommon.fixed8FromDecimal(5), - [TransactionType.Publish]: clientCommon.fixed8FromDecimal(5), - [TransactionType.Register]: clientCommon.fixed8FromDecimal(100), - }, - - registerValidatorFee: clientCommon.fixed8FromDecimal(1000), - messageMagic: 1953787457, + millisecondsPerBlock: + millisecondsPerBlock === undefined ? commonSettings.millisecondsPerBlock : millisecondsPerBlock, + standbyCommittee, + committeeMembersCount: standbyCommittee.length, + memoryPoolMaxTransactions: commonSettings.memoryPoolMaxTransactions, + validatorsCount: standbyValidators.length, + messageMagic: testNetMessageMagic, addressVersion: clientCommon.NEO_ADDRESS_VERSION, privateKeyVersion: clientCommon.NEO_PRIVATE_KEY_VERSION, standbyValidators, - vm: { - storageContext: { - v0: { - index: 163594, - }, - }, - }, }; }; diff --git a/packages/neo-one-node-neo-settings/src/index.ts b/packages/neo-one-node-neo-settings/src/index.ts index f851fa9838..f7fc2823e9 100644 --- a/packages/neo-one-node-neo-settings/src/index.ts +++ b/packages/neo-one-node-neo-settings/src/index.ts @@ -1,5 +1,7 @@ export * from './createMain'; export * from './createTest'; +export * from './createPriv'; export * from './main'; export * from './serde'; export * from './test'; +export * from './priv'; diff --git a/packages/neo-one-node-neo-settings/src/priv.ts b/packages/neo-one-node-neo-settings/src/priv.ts new file mode 100644 index 0000000000..87cc207757 --- /dev/null +++ b/packages/neo-one-node-neo-settings/src/priv.ts @@ -0,0 +1,15 @@ +import { Settings } from '@neo-one/node-core'; +import { createPriv } from './createPriv'; + +// tslint:disable-next-line no-let +let privCache: Settings | undefined; +export const priv = () => { + if (privCache !== undefined) { + return privCache; + } + + const privateSettings = createPriv(); + privCache = privateSettings; + + return privateSettings; +}; diff --git a/packages/neo-one-node-neo-settings/src/serde.ts b/packages/neo-one-node-neo-settings/src/serde.ts index cf70e16a07..b09b4155f1 100644 --- a/packages/neo-one-node-neo-settings/src/serde.ts +++ b/packages/neo-one-node-neo-settings/src/serde.ts @@ -1,45 +1,35 @@ import { common } from '@neo-one/client-common'; -import { Block, deserializeTransactionWire, RegisterTransaction, Settings } from '@neo-one/node-core'; -import { BN } from 'bn.js'; -import _ from 'lodash'; +import { Block, Settings } from '@neo-one/node-core'; export const serializeSettings = (settings: Settings) => { const { genesisBlock, - governingToken, - utilityToken, decrementInterval, generationAmount, - fees, - registerValidatorFee, - messageMagic, - addressVersion, privateKeyVersion, standbyValidators, - vm, - secondsPerBlock, - maxTransactionsPerBlock, - memPoolSize, + messageMagic, + addressVersion, + standbyCommittee, + committeeMembersCount, + validatorsCount, + millisecondsPerBlock, + memoryPoolMaxTransactions, } = settings; return { genesisBlock: genesisBlock.serializeWire().toString('hex'), - governingToken: governingToken.serializeWire().toString('hex'), - utilityToken: utilityToken.serializeWire().toString('hex'), decrementInterval, generationAmount, - fees: _.fromPairs( - Object.entries(fees).map(([key, fee]) => [key, fee === undefined ? JSON.stringify(undefined) : fee.toString(10)]), - ), - registerValidatorFee: registerValidatorFee.toString(10), - messageMagic, - addressVersion, privateKeyVersion, standbyValidators: standbyValidators.map((validator) => common.ecPointToString(validator)), - vm, - secondsPerBlock, - maxTransactionsPerBlock, - memPoolSize, + standbyCommittee: standbyCommittee.map((validator) => common.ecPointToString(validator)), + committeeMembersCount, + validatorsCount, + messageMagic, + addressVersion, + millisecondsPerBlock, + memoryPoolMaxTransactions, }; }; @@ -47,47 +37,33 @@ export const serializeSettings = (settings: Settings) => { export const deserializeSettings = (settings: any): Settings => { const { genesisBlock, - governingToken, - utilityToken, decrementInterval, generationAmount, - fees, - registerValidatorFee, - messageMagic, - addressVersion, privateKeyVersion, standbyValidators, - vm, - secondsPerBlock, - maxTransactionsPerBlock, - memPoolSize, + messageMagic, + addressVersion, + standbyCommittee, + committeeMembersCount, + validatorsCount, + millisecondsPerBlock, + memoryPoolMaxTransactions, } = settings; - const context = { messageMagic }; + const context = { messageMagic, validatorsCount }; return { genesisBlock: Block.deserializeWire({ context, buffer: Buffer.from(genesisBlock, 'hex') }), - governingToken: deserializeTransactionWire({ - context, - buffer: Buffer.from(governingToken, 'hex'), - }) as RegisterTransaction, - utilityToken: deserializeTransactionWire({ - context, - buffer: Buffer.from(utilityToken, 'hex'), - }) as RegisterTransaction, decrementInterval, generationAmount, - fees: _.fromPairs( - Object.entries(fees).map(([key, fee]) => [key, fee === undefined ? undefined : new BN(fee as string, 10)]), - ), - registerValidatorFee: new BN(registerValidatorFee, 10), messageMagic, addressVersion, privateKeyVersion, standbyValidators: standbyValidators.map((validator: string) => common.stringToECPoint(validator)), - vm, - secondsPerBlock, - maxTransactionsPerBlock, - memPoolSize, + standbyCommittee: standbyCommittee.map((validator: string) => common.stringToECPoint(validator)), + committeeMembersCount, + validatorsCount, + millisecondsPerBlock, + memoryPoolMaxTransactions, }; }; diff --git a/packages/neo-one-node-neo-settings/tsconfig-output.json b/packages/neo-one-node-neo-settings/tsconfig-output.json new file mode 100644 index 0000000000..a12b8c8059 --- /dev/null +++ b/packages/neo-one-node-neo-settings/tsconfig-output.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.cjs.json", + "compilerOptions": { + "target": "es2017" + }, + "compileOnSave": false +} \ No newline at end of file diff --git a/packages/neo-one-node-neo-settings/tsconfig.json b/packages/neo-one-node-neo-settings/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-node-neo-settings/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-node-network/.npmignore b/packages/neo-one-node-network/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-node-network/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-node-network/CHANGELOG.json b/packages/neo-one-node-network/CHANGELOG.json new file mode 100644 index 0000000000..d5435109c7 --- /dev/null +++ b/packages/neo-one-node-network/CHANGELOG.json @@ -0,0 +1,111 @@ +{ + "name": "@neo-one/node-network", + "entries": [ + { + "version": "3.0.0", + "tag": "@neo-one/node-network_v3.0.0", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "major": [ + { + "comment": "3.0.0preview3-alpha release bump" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/node-network_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "dependency": [ + { + "comment": "Dependency @neo-one/client-switch version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.6.0` to `^2.6.1`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + } + ], + "patch": [ + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/node-network_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "remove opencensus metrics temporarily" + }, + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/node-network_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-node-network/CHANGELOG.md b/packages/neo-one-node-network/CHANGELOG.md index d581959e5f..5c24038ba9 100644 --- a/packages/neo-one-node-network/CHANGELOG.md +++ b/packages/neo-one-node-network/CHANGELOG.md @@ -1,145 +1,37 @@ -# Change Log +# Change Log - @neo-one/node-network -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-network@1.3.4...@neo-one/node-network@2.3.0) (2019-10-23) +## 3.0.0 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/node-network +### Breaking changes +- 3.0.0preview3-alpha release bump +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT +### Patches +- Upgrade TypeScript from v3.8.3 to v3.9.5 -## [1.3.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-network@1.3.3...@neo-one/node-network@1.3.4) (2019-10-23) +### Updates -**Note:** Version bump only for package @neo-one/node-network +- bump package version for future release clarity +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes +- remove opencensus metrics temporarily +- update package release process to take better advantage of rush tooling +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -## [1.3.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-network@1.3.2...@neo-one/node-network@1.3.3) (2019-10-23) +### Minor changes -**Note:** Version bump only for package @neo-one/node-network +- Migrate to Rush - - - - -## [1.3.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-network@1.3.1...@neo-one/node-network@1.3.2) (2019-09-04) - -**Note:** Version bump only for package @neo-one/node-network - - - - - -## [1.3.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-network@1.3.0...@neo-one/node-network@1.3.1) (2019-08-30) - -**Note:** Version bump only for package @neo-one/node-network - - - - - -# [1.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-network@1.2.0...@neo-one/node-network@1.3.0) (2019-08-23) - - -### Features - -* **e2e:** node-bin e2e consensus test ([0671932](https://github.com/neo-one-suite/neo-one/commit/0671932)) - - - - - -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-network@1.1.5...@neo-one/node-network@1.2.0) (2019-08-22) - - -### Features - -* **monitor:** remove @neo-one/monitor. replace with opencensus, pino, and debug ([#1597](https://github.com/neo-one-suite/neo-one/issues/1597)) ([4b1a28f](https://github.com/neo-one-suite/neo-one/commit/4b1a28f)) - - - - - -## [1.1.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-network@1.1.4...@neo-one/node-network@1.1.5) (2019-07-29) - -**Note:** Version bump only for package @neo-one/node-network - - - - - -## [1.1.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-network@1.1.3...@neo-one/node-network@1.1.4) (2019-06-20) - - -### Bug Fixes - -* **deps:** update dependency typescript to v3.5.1 ([#1365](https://github.com/neo-one-suite/neo-one/issues/1365)) ([ec89546](https://github.com/neo-one-suite/neo-one/commit/ec89546)) - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-network@1.1.2...@neo-one/node-network@1.1.3) (2019-06-04) - - -### Bug Fixes - -* **@neo-one/types:** eliminate global types from @neo-one/types ([004330d](https://github.com/neo-one-suite/neo-one/commit/004330d)) - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-network@1.1.1...@neo-one/node-network@1.1.2) (2019-04-12) - -**Note:** Version bump only for package @neo-one/node-network - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-network@1.1.0...@neo-one/node-network@1.1.1) (2019-03-27) - -**Note:** Version bump only for package @neo-one/node-network - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-network@1.0.2...@neo-one/node-network@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node-network - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-network@1.0.2-alpha.0...@neo-one/node-network@1.0.2) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node-network - - - - - -## [1.0.2-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-network@1.0.1...@neo-one/node-network@1.0.2-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **deps:** update dependency @types/lodash to v4.14.120 ([a76dae7](https://github.com/neo-one-suite/neo-one/commit/a76dae7)) -* **deps:** update dependency rxjs to v6.4.0 ([e28af2a](https://github.com/neo-one-suite/neo-one/commit/e28af2a)) -* **node:** adjust logging levels of the node to make debugging/monitoring more consistent. ([63f7276](https://github.com/neo-one-suite/neo-one/commit/63f7276)) - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-network@1.0.0...@neo-one/node-network@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/node-network diff --git a/packages/neo-one-node-network/gulpfile.js b/packages/neo-one-node-network/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-node-network/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-node-network/package.json b/packages/neo-one-node-network/package.json index 6e3f0537a7..cbf7ad62a0 100644 --- a/packages/neo-one-node-network/package.json +++ b/packages/neo-one-node-network/package.json @@ -1,18 +1,28 @@ { "name": "@neo-one/node-network", - "version": "2.3.0", + "version": "3.0.0", "description": "NEOβ€’ONE NEO network protocol.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/client-switch": "^2.3.0", - "@neo-one/logger": "^2.3.0", - "@neo-one/node-core": "^2.3.0", - "@neo-one/utils": "^2.3.0", + "@neo-one/client-switch": "^3.0.0", + "@neo-one/logger": "^2.6.1", + "@neo-one/node-core": "^3.0.0", + "@neo-one/utils": "^3.0.0", "lodash": "^4.17.15", "tslib": "^1.10.0" }, "devDependencies": { - "@types/lodash": "^4.14.138" - }, - "sideEffects": false + "@neo-one/build-tools": "^1.0.0", + "@types/lodash": "^4.14.138", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-node-network/src/Network.ts b/packages/neo-one-node-network/src/Network.ts index 7c0e70a756..3c0febe94b 100644 --- a/packages/neo-one-node-network/src/Network.ts +++ b/packages/neo-one-node-network/src/Network.ts @@ -1,4 +1,3 @@ -import { AggregationType, globalStats, MeasureUnit } from '@neo-one/client-switch'; import { createChild, nodeLogger } from '@neo-one/logger'; import { ConnectedPeer, @@ -70,57 +69,6 @@ const CONNECT_ERROR_CODES = new Set([ 'ETIMEDOUT', ]); -const peersClosed = globalStats.createMeasureInt64('peers/closed', MeasureUnit.UNIT); -const peersTotal = globalStats.createMeasureInt64('peers/total', MeasureUnit.UNIT); -const peersFailed = globalStats.createMeasureInt64('peers/failures', MeasureUnit.UNIT); -const peersConnected = globalStats.createMeasureInt64('peers/connected', MeasureUnit.UNIT); -const peersConnecting = globalStats.createMeasureInt64('peers/connecting', MeasureUnit.UNIT); - -const NEO_NETWORK_PEER_CLOSED_TOTAL = globalStats.createView( - 'neo_network_peer_closed_total', - peersClosed, - AggregationType.COUNT, - [], - 'Total number of times a peer was closed due to error or ending the socket.', -); -globalStats.registerView(NEO_NETWORK_PEER_CLOSED_TOTAL); - -const NEO_NETWORK_PEER_CONNECT_TOTAL = globalStats.createView( - 'neo_network_peer_connect_total', - peersTotal, - AggregationType.COUNT, - [], - 'total number of peer connections received', -); -globalStats.registerView(NEO_NETWORK_PEER_CONNECT_TOTAL); - -const NEO_NETWORK_PEER_CONNECT_FAILURES_TOTAL = globalStats.createView( - 'neo_network_peer_connect_failures_total', - peersFailed, - AggregationType.COUNT, - [], - 'total number of failed peer connections', -); -globalStats.registerView(NEO_NETWORK_PEER_CONNECT_FAILURES_TOTAL); - -const NEO_NETWORK_CONNECTED_PEERS_TOTAL = globalStats.createView( - 'neo_network_connected_peers_total', - peersConnected, - AggregationType.LAST_VALUE, - [], - 'number of currently connected peers', -); -globalStats.registerView(NEO_NETWORK_CONNECTED_PEERS_TOTAL); - -const NEO_NETWORK_CONNECTING_PEERS_TOTAL = globalStats.createView( - 'neo_network_connecting_peers_total', - peersConnecting, - AggregationType.LAST_VALUE, - [], - 'number of currently connecting peers', -); -globalStats.registerView(NEO_NETWORK_CONNECTING_PEERS_TOTAL); - export class Network { private mutableStarted: boolean; private mutableStopped: boolean; @@ -343,13 +291,17 @@ export class Network { // tslint:disable-next-line no-loop-statement while (!this.mutableStopped) { try { + logger.trace({ + name: 'neo_network_current_connected_peers', + num: Object.values(this.mutableConnectedPeers).length, + }); this.connectToPeers(); this.checkPeerHealth(); await new Promise((resolve) => { this.mutableConnectPeersTimeout = setTimeout(() => { this.mutableConnectPeersTimeout = undefined; resolve(); - // tslint:disable-next-line no-any + // tslint:disable-next-line no-any no-useless-cast }, this.mutableConnectPeersDelayMS) as any; }); } catch (err) { @@ -376,8 +328,9 @@ export class Network { } } + const allEndpoints = endpoints.concat([...this.mutablePeerSeeds]); // tslint:disable-next-line promise-function-async - endpoints.concat([...this.mutablePeerSeeds]).forEach((endpoint) => this.connectToPeer({ endpoint })); + allEndpoints.forEach((endpoint) => this.connectToPeer({ endpoint })); } private checkPeerHealth(): void { @@ -446,12 +399,6 @@ export class Network { ...this.mutableConnectingPeers, [endpoint]: true, }; - globalStats.record([ - { - measure: peersConnecting, - value: Object.keys(this.mutableConnectingPeers).length, - }, - ]); const logData = { [Labels.PEER_ADDRESS]: endpoint, name: 'neo_network_peer_connect' }; try { @@ -465,24 +412,12 @@ export class Network { logger.trace(logData, `Connecting to peer at ${endpoint}`); } catch (err) { logger.trace({ err, ...logData }, `Failed to connect to peer at ${endpoint}.`); - globalStats.record([ - { - measure: peersFailed, - value: 1, - }, - ]); if (this.mutableConnectErrorCodes.has(err.code)) { this.mutableBadEndpoints.add(endpoint); } } finally { const { [endpoint]: _unused, ...rest } = this.mutableConnectingPeers; this.mutableConnectingPeers = rest; - globalStats.record([ - { - measure: peersConnecting, - value: Object.keys(this.mutableConnectingPeers).length, - }, - ]); } } @@ -522,12 +457,7 @@ export class Network { ...this.mutableConnectedPeers, [peer.endpoint]: connectedPeer, }; - globalStats.record([ - { - measure: peersConnected, - value: Object.keys(this.mutableConnectedPeers).length, - }, - ]); + connectedPeer.peer.streamData((message) => this.onMessageReceivedInternal(connectedPeer, message)); this.onEventInternal({ @@ -567,17 +497,6 @@ export class Network { const { [peer.endpoint]: _unused2, ...mutableConnectingPeers } = this.mutableConnectingPeers; this.mutableConnectingPeers = mutableConnectingPeers; - globalStats.record([ - { - measure: peersConnected, - value: Object.keys(this.mutableConnectedPeers).length, - }, - { - measure: peersConnecting, - value: Object.keys(this.mutableConnectingPeers).length, - }, - ]); - const endpoint = this.mutableReverseBlacklist[peer.endpoint]; if (endpoint !== undefined) { const { [peer.endpoint]: _unused3, ...mutableReverseBlacklist } = this.mutableReverseBlacklist; @@ -586,16 +505,10 @@ export class Network { this.endpointBlacklist.delete(endpoint); } - logger.debug( + logger.trace( { [Labels.PEER_ADDRESS]: peer.endpoint, name: 'neo_network_peer_closed' }, `Peer closed at ${peer.endpoint}`, ); - globalStats.record([ - { - measure: peersClosed, - value: 1, - }, - ]); this.onEventInternal({ event: 'PEER_CLOSED', diff --git a/packages/neo-one-node-network/tsconfig.json b/packages/neo-one-node-network/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-node-network/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-node-offline/.npmignore b/packages/neo-one-node-offline/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-node-offline/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-node-offline/CHANGELOG.json b/packages/neo-one-node-offline/CHANGELOG.json new file mode 100644 index 0000000000..1bf9c3594e --- /dev/null +++ b/packages/neo-one-node-offline/CHANGELOG.json @@ -0,0 +1,101 @@ +{ + "name": "@neo-one/node-offline", + "entries": [ + { + "version": "3.0.0", + "tag": "@neo-one/node-offline_v3.0.0", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "major": [ + { + "comment": "3.0.0preview3-alpha release bump" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/node-offline_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.6.0` to `^2.6.1`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/node-offline_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/node-offline_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + } + ], + "patch": [ + { + "comment": "feat(logs): add better logging to chainfile sync" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-node-offline/CHANGELOG.md b/packages/neo-one-node-offline/CHANGELOG.md index 4dec3815e2..21af05173f 100644 --- a/packages/neo-one-node-offline/CHANGELOG.md +++ b/packages/neo-one-node-offline/CHANGELOG.md @@ -1,123 +1,40 @@ -# Change Log +# Change Log - @neo-one/node-offline -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-offline@1.1.9...@neo-one/node-offline@2.3.0) (2019-10-23) +## 3.0.0 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/node-offline +### Breaking changes +- 3.0.0preview3-alpha release bump +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT +### Patches +- Upgrade TypeScript from v3.8.3 to v3.9.5 -## [1.1.9](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-offline@1.1.8...@neo-one/node-offline@1.1.9) (2019-10-23) +### Updates -**Note:** Version bump only for package @neo-one/node-offline +- bump package version for future release clarity +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes +- update package release process to take better advantage of rush tooling +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -## [1.1.8](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-offline@1.1.7...@neo-one/node-offline@1.1.8) (2019-09-04) +### Minor changes -**Note:** Version bump only for package @neo-one/node-offline +- Migrate to Rush +### Patches +- feat(logs): add better logging to chainfile sync - - -## [1.1.7](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-offline@1.1.6...@neo-one/node-offline@1.1.7) (2019-08-30) - -**Note:** Version bump only for package @neo-one/node-offline - - - - - -## [1.1.6](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-offline@1.1.5...@neo-one/node-offline@1.1.6) (2019-08-22) - -**Note:** Version bump only for package @neo-one/node-offline - - - - - -## [1.1.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-offline@1.1.4...@neo-one/node-offline@1.1.5) (2019-07-29) - -**Note:** Version bump only for package @neo-one/node-offline - - - - - -## [1.1.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-offline@1.1.3...@neo-one/node-offline@1.1.4) (2019-06-20) - -**Note:** Version bump only for package @neo-one/node-offline - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-offline@1.1.2...@neo-one/node-offline@1.1.3) (2019-06-04) - - -### Bug Fixes - -* **@neo-one/types:** eliminate global types from @neo-one/types ([004330d](https://github.com/neo-one-suite/neo-one/commit/004330d)) - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-offline@1.1.1...@neo-one/node-offline@1.1.2) (2019-04-12) - -**Note:** Version bump only for package @neo-one/node-offline - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-offline@1.1.0...@neo-one/node-offline@1.1.1) (2019-03-27) - -**Note:** Version bump only for package @neo-one/node-offline - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-offline@1.0.2...@neo-one/node-offline@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node-offline - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-offline@1.0.2-alpha.0...@neo-one/node-offline@1.0.2) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node-offline - - - - - -## [1.0.2-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-offline@1.0.1...@neo-one/node-offline@1.0.2-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **deps:** update dependency @types/lodash to v4.14.120 ([a76dae7](https://github.com/neo-one-suite/neo-one/commit/a76dae7)) - - -### Features - -* **node:** Add backup config and prepare the node for automated backups. ([523fa5b](https://github.com/neo-one-suite/neo-one/commit/523fa5b)) - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-offline@1.0.0...@neo-one/node-offline@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/node-offline diff --git a/packages/neo-one-node-offline/gulpfile.js b/packages/neo-one-node-offline/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-node-offline/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-node-offline/package.json b/packages/neo-one-node-offline/package.json index 931e169ad9..a9759cf8a1 100644 --- a/packages/neo-one-node-offline/package.json +++ b/packages/neo-one-node-offline/package.json @@ -1,16 +1,27 @@ { "name": "@neo-one/node-offline", - "version": "2.3.0", + "version": "3.0.0", "description": "NEOβ€’ONE utility for loading serialized blocks (chain.acc) into a node.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/node-core": "^2.3.0", - "@neo-one/utils": "^2.3.0", + "@neo-one/logger": "^2.6.1", + "@neo-one/node-core": "^3.0.0", + "@neo-one/utils": "^3.0.0", "lodash": "^4.17.15", "tslib": "^1.10.0" }, "devDependencies": { - "@types/lodash": "^4.14.138" - }, - "sideEffects": false + "@neo-one/build-tools": "^1.0.0", + "@types/lodash": "^4.14.138", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-node-offline/src/index.ts b/packages/neo-one-node-offline/src/index.ts index f9906ee3dc..82555ef7e4 100644 --- a/packages/neo-one-node-offline/src/index.ts +++ b/packages/neo-one-node-offline/src/index.ts @@ -1,3 +1,4 @@ +import { createChild, nodeLogger } from '@neo-one/logger'; import { BinaryReader, Block, Blockchain, DeserializeWireContext } from '@neo-one/node-core'; import { makeErrorWithCode } from '@neo-one/utils'; import * as fs from 'fs'; @@ -5,6 +6,8 @@ import _ from 'lodash'; import { Readable, Transform, Writable } from 'stream'; import * as zlib from 'zlib'; +const logger = createChild(nodeLogger, { service: 'chain-file' }); + export const InvalidBlockTransformEncodingError = makeErrorWithCode( 'INVALID_BLOCK_TRANSFORM_ENCODING', (message: string) => message, @@ -124,6 +127,11 @@ export const loadChain = async ({ readonly chain: Chain; }): Promise => new Promise((resolve, reject) => { + logger.info({ + title: 'chain_file_load_start', + message: `attempting to sync from chain-file at: ${chain.path}`, + }); + const stream = getStream(chain); const transform = new BlockTransform(blockchain.deserializeWireContext); @@ -169,7 +177,7 @@ export const loadChain = async ({ pending += 1; blockchain - .persistBlock({ block, unsafe: true }) + .persistBlock({ block, verify: false }) .then(() => { pending -= 1; if (pending < 500 && paused) { @@ -178,15 +186,19 @@ export const loadChain = async ({ } if (block.index === trackIndex) { - // tslint:disable-next-line no-console - console.log(`Loaded chain to current index in ${Date.now() - start} ms`); + logger.info({ + title: 'chain_file_load', + message: `Loaded chain to current index in ${Date.now() - start} ms`, + }); start = Date.now(); } else if (block.index > trackIndex) { processed += 1; if (processed >= 100) { - // tslint:disable-next-line no-console - console.log(`Processed ${processed} blocks in ${Date.now() - start} ms (${block.index})`); + logger.info({ + title: 'chain_file_read', + message: `Processed ${processed} blocks in ${Date.now() - start} ms (${block.index})`, + }); processed = 0; start = Date.now(); @@ -220,10 +232,11 @@ const writeOut = async (blockchain: Blockchain, out: Writable, height: number): // tslint:disable-next-line no-loop-statement for (const chunk of _.chunk(_.range(0, height), 1000)) { // eslint-disable-next-line - const blocks = await Promise.all(chunk.map(async (index) => blockchain.block.get({ hashOrIndex: index }))); + const trimmedBlocks = await Promise.all(chunk.map(async (index) => blockchain.blocks.get({ hashOrIndex: index }))); // tslint:disable-next-line no-loop-statement - for (const block of blocks) { + for (const trimmed of trimmedBlocks) { + const block = await trimmed.getBlock(blockchain.transactions); const buffer = block.serializeWire(); const length = Buffer.alloc(4, 0); length.writeInt32LE(buffer.length, 0); @@ -233,8 +246,10 @@ const writeOut = async (blockchain: Blockchain, out: Writable, height: number): await new Promise((resolve) => out.write(buffer, () => resolve())); processed += 1; if (processed >= 100000) { - // tslint:disable-next-line no-console - console.log(`Processed ${processed} blocks in ${Date.now() - start} ms`); + logger.info({ + title: 'chain_file_write', + message: `Processed ${processed} blocks in ${Date.now() - start} ms`, + }); processed = 0; start = Date.now(); diff --git a/packages/neo-one-node-offline/tsconfig-output.json b/packages/neo-one-node-offline/tsconfig-output.json new file mode 100644 index 0000000000..a12b8c8059 --- /dev/null +++ b/packages/neo-one-node-offline/tsconfig-output.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.cjs.json", + "compilerOptions": { + "target": "es2017" + }, + "compileOnSave": false +} \ No newline at end of file diff --git a/packages/neo-one-node-offline/tsconfig.json b/packages/neo-one-node-offline/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-node-offline/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-node-protocol/.npmignore b/packages/neo-one-node-protocol/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-node-protocol/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-node-protocol/CHANGELOG.json b/packages/neo-one-node-protocol/CHANGELOG.json new file mode 100644 index 0000000000..9374acc587 --- /dev/null +++ b/packages/neo-one-node-protocol/CHANGELOG.json @@ -0,0 +1,138 @@ +{ + "name": "@neo-one/node-protocol", + "entries": [ + { + "version": "3.0.0", + "tag": "@neo-one/node-protocol_v3.0.0", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "major": [ + { + "comment": "3.0.0preview3-alpha release bump" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-consensus\" from `^2.7.0` to `^2.7.1`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/node-protocol_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Add appropriate @types dependencies." + }, + { + "comment": "fixup utxo invocation transactions" + }, + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "dependency": [ + { + "comment": "Dependency @neo-one/client-common version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Dependency @neo-one/client-switch version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.6.0` to `^2.6.1`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/node-protocol_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "remove opencensus metrics temporarily" + }, + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-consensus\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/node-protocol_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-consensus\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-node-protocol/CHANGELOG.md b/packages/neo-one-node-protocol/CHANGELOG.md index c2498ff24b..2dde027e5d 100644 --- a/packages/neo-one-node-protocol/CHANGELOG.md +++ b/packages/neo-one-node-protocol/CHANGELOG.md @@ -1,159 +1,39 @@ -# Change Log +# Change Log - @neo-one/node-protocol -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-protocol@1.3.4...@neo-one/node-protocol@2.3.0) (2019-10-23) +## 3.0.0 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/node-protocol +### Breaking changes +- 3.0.0preview3-alpha release bump +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT +### Patches +- Add appropriate @types dependencies. +- fixup utxo invocation transactions +- Upgrade TypeScript from v3.8.3 to v3.9.5 -## [1.3.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-protocol@1.3.3...@neo-one/node-protocol@1.3.4) (2019-10-23) +### Updates -**Note:** Version bump only for package @neo-one/node-protocol +- bump package version for future release clarity +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes +- remove opencensus metrics temporarily +- update package release process to take better advantage of rush tooling +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -## [1.3.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-protocol@1.3.2...@neo-one/node-protocol@1.3.3) (2019-10-23) +### Minor changes -**Note:** Version bump only for package @neo-one/node-protocol +- Migrate to Rush - - - - -## [1.3.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-protocol@1.3.1...@neo-one/node-protocol@1.3.2) (2019-09-04) - -**Note:** Version bump only for package @neo-one/node-protocol - - - - - -## [1.3.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-protocol@1.3.0...@neo-one/node-protocol@1.3.1) (2019-08-30) - -**Note:** Version bump only for package @neo-one/node-protocol - - - - - -# [1.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-protocol@1.2.0...@neo-one/node-protocol@1.3.0) (2019-08-23) - - -### Features - -* **e2e:** node-bin e2e consensus test ([0671932](https://github.com/neo-one-suite/neo-one/commit/0671932)) - - - - - -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-protocol@1.1.5...@neo-one/node-protocol@1.2.0) (2019-08-22) - - -### Bug Fixes - -* **core, protocol:** describe InvalidFormat errors ([ea9db1b](https://github.com/neo-one-suite/neo-one/commit/ea9db1b)) -* **deps:** update dependency ip-address to v6 ([2f72ad8](https://github.com/neo-one-suite/neo-one/commit/2f72ad8)) - - -### Features - -* **monitor:** remove @neo-one/monitor. replace with opencensus, pino, and debug ([#1597](https://github.com/neo-one-suite/neo-one/issues/1597)) ([4b1a28f](https://github.com/neo-one-suite/neo-one/commit/4b1a28f)) - - - - - -## [1.1.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-protocol@1.1.4...@neo-one/node-protocol@1.1.5) (2019-07-29) - -**Note:** Version bump only for package @neo-one/node-protocol - - - - - -## [1.1.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-protocol@1.1.3...@neo-one/node-protocol@1.1.4) (2019-06-20) - - -### Bug Fixes - -* **deps:** update dependency typescript to v3.5.1 ([#1365](https://github.com/neo-one-suite/neo-one/issues/1365)) ([ec89546](https://github.com/neo-one-suite/neo-one/commit/ec89546)) - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-protocol@1.1.2...@neo-one/node-protocol@1.1.3) (2019-06-04) - - -### Bug Fixes - -* **@neo-one/types:** eliminate global types from @neo-one/types ([004330d](https://github.com/neo-one-suite/neo-one/commit/004330d)) - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-protocol@1.1.1...@neo-one/node-protocol@1.1.2) (2019-04-12) - -**Note:** Version bump only for package @neo-one/node-protocol - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-protocol@1.1.0...@neo-one/node-protocol@1.1.1) (2019-03-27) - - -### Bug Fixes - -* **deps:** update dependency @types/lru-cache to v5 ([2fc1502](https://github.com/neo-one-suite/neo-one/commit/2fc1502)) - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-protocol@1.0.2...@neo-one/node-protocol@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node-protocol - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-protocol@1.0.2-alpha.0...@neo-one/node-protocol@1.0.2) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node-protocol - - - - - -## [1.0.2-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-protocol@1.0.1...@neo-one/node-protocol@1.0.2-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **build:** adjust several packages to allow emitting .d.ts files. ([27a2d88](https://github.com/neo-one-suite/neo-one/commit/27a2d88)) -* **deps:** update dependency @types/lodash to v4.14.120 ([a76dae7](https://github.com/neo-one-suite/neo-one/commit/a76dae7)) -* **deps:** update dependency cross-fetch to v3 ([6344be7](https://github.com/neo-one-suite/neo-one/commit/6344be7)) -* **deps:** update dependency cross-fetch to v3.0.1 ([e7ed336](https://github.com/neo-one-suite/neo-one/commit/e7ed336)) -* **deps:** update dependency lru-cache to v5 ([5ebea06](https://github.com/neo-one-suite/neo-one/commit/5ebea06)) -* **deps:** update dependency rxjs to v6.4.0 ([e28af2a](https://github.com/neo-one-suite/neo-one/commit/e28af2a)) -* **node:** add a catch for better address resolution ([64c7c35](https://github.com/neo-one-suite/neo-one/commit/64c7c35)) -* **node:** adjust logging levels of the node to make debugging/monitoring more consistent. ([63f7276](https://github.com/neo-one-suite/neo-one/commit/63f7276)) - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-protocol@1.0.0...@neo-one/node-protocol@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/node-protocol diff --git a/packages/neo-one-node-protocol/gulpfile.js b/packages/neo-one-node-protocol/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-node-protocol/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-node-protocol/package.json b/packages/neo-one-node-protocol/package.json index ff41bf2a4c..3aba0a3e22 100644 --- a/packages/neo-one-node-protocol/package.json +++ b/packages/neo-one-node-protocol/package.json @@ -1,15 +1,27 @@ { "name": "@neo-one/node-protocol", - "version": "2.3.0", + "version": "3.0.0", "description": "NEOβ€’ONE NEO node and consensus protocol.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.3.0", - "@neo-one/client-switch": "^2.3.0", - "@neo-one/logger": "^2.3.0", - "@neo-one/node-consensus": "^2.3.0", - "@neo-one/node-core": "^2.3.0", - "@neo-one/utils": "^2.3.0", + "@neo-one/client-common": "^3.0.0", + "@neo-one/client-switch": "^3.0.0", + "@neo-one/logger": "^2.6.1", + "@neo-one/node-consensus": "^2.7.1", + "@neo-one/node-core": "^3.0.0", + "@neo-one/utils": "^3.0.0", + "@types/bloom-filter": "^0.2.0", + "@types/bn.js": "^4.11.5", + "@types/ip-address": "^5.8.2", "bloem": "^0.2.4", "bloom-filter": "^0.2.0", "bn.js": "^5.0.0", @@ -17,15 +29,16 @@ "ip-address": "^6.0.0", "lodash": "^4.17.15", "lru-cache": "^5.0.0", + "lz4": "0.6.3", "tslib": "^1.10.0" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", "@types/bloem": "^0.2.0", - "@types/bloom-filter": "^0.2.0", - "@types/bn.js": "^4.11.5", - "@types/ip-address": "^5.8.2", + "@types/jest": "^24.0.18", "@types/lodash": "^4.14.138", - "@types/lru-cache": "^5.1.0" - }, - "sideEffects": false + "@types/lru-cache": "^5.1.0", + "@types/node": "^12.7.7", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-node-protocol/src/Command.ts b/packages/neo-one-node-protocol/src/Command.ts index 3d8430b169..40ea6df9fd 100644 --- a/packages/neo-one-node-protocol/src/Command.ts +++ b/packages/neo-one-node-protocol/src/Command.ts @@ -1,43 +1,71 @@ import { makeErrorWithCode } from '@neo-one/utils'; export enum Command { - addr = 'addr', - block = 'block', - consensus = 'consensus', - filteradd = 'filteradd', - filterclear = 'filterclear', - filterload = 'filterload', - getaddr = 'getaddr', - getblocks = 'getblocks', - getdata = 'getdata', - getheaders = 'getheaders', - headers = 'headers', - inv = 'inv', - mempool = 'mempool', - tx = 'tx', - verack = 'verack', - version = 'version', - alert = 'alert', - merkleblock = 'merkleblock', - notfound = 'notfound', - ping = 'ping', - pong = 'pong', - reject = 'reject', + // Handshaking + Version = 0x00, + Verack = 0x01, + + // Connectivity + GetAddr = 0x10, + Addr = 0x11, + Ping = 0x18, + Pong = 0x19, + + // Synchronization + GetHeaders = 0x20, + Headers = 0x21, + GetBlocks = 0x24, + Mempool = 0x25, + Inv = 0x27, + GetData = 0x28, + GetBlockByIndex = 0x29, + NotFound = 0x2a, + Transaction = 0x2b, + Block = 0x2c, + Consensus = 0x2d, + Reject = 0x2f, + + // SPV Protocol + FilterLoad = 0x30, + FilterAdd = 0x31, + FilterClear = 0x32, + MerkleBlock = 0x38, + + // Others + Alert = 0x40, } export const InvalidCommandError = makeErrorWithCode( 'INVALID_COMMAND', + (command: number) => `Invalid Command, found: ${command}`, +); + +// tslint:disable-next-line: strict-type-predicates +const isCommand = (command: number): command is Command => Command[command] !== undefined; + +export const assertCommand = (command: number): Command => { + if (isCommand(command)) { + return command; + } + + throw new InvalidCommandError(command); +}; + +export type CommandJSON = keyof typeof Command; + +export const InvalidCommandJSONError = makeErrorWithCode( + 'INVALID_COMMAND_JSON', (command: string) => `Invalid Command. Found: ${command}`, ); -const isCommand = (command: string): command is Command => +const isCommandJSON = (command: string): command is CommandJSON => // tslint:disable-next-line strict-type-predicates Command[command as keyof typeof Command] !== undefined; -export const assertCommand = (command: string): Command => { - if (isCommand(command)) { +export const assertCommandJSON = (command: string): CommandJSON => { + if (isCommandJSON(command)) { return command; } - throw new InvalidCommandError(command); + throw new InvalidCommandJSONError(command); }; diff --git a/packages/neo-one-node-protocol/src/Message.ts b/packages/neo-one-node-protocol/src/Message.ts index dfacbd13ac..735106bd7e 100644 --- a/packages/neo-one-node-protocol/src/Message.ts +++ b/packages/neo-one-node-protocol/src/Message.ts @@ -1,10 +1,7 @@ import { BinaryWriter, - common, createSerializeWire, - crypto, InvalidFormatError, - IOHelper, SerializableWire, SerializeWire, } from '@neo-one/client-common'; @@ -12,7 +9,6 @@ import { BinaryReader, Block, ConsensusPayload, - deserializeTransactionWire, DeserializeWireBaseOptions, DeserializeWireContext, DeserializeWireOptions, @@ -21,217 +17,213 @@ import { import { makeErrorWithCode, utils } from '@neo-one/utils'; import { Transform } from 'stream'; import { assertCommand, Command } from './Command'; +import { lz4Helper } from './lz4Helper'; +import { assertMessageFlags, MessageFlags } from './MessageFlags'; import { AddrPayload, FilterAddPayload, FilterLoadPayload, + GetBlockByIndexPayload, GetBlocksPayload, HeadersPayload, InvPayload, MerkleBlockPayload, + PingPayload, VersionPayload, } from './payload'; + export type MessageValue = - | { readonly command: Command.addr; readonly payload: AddrPayload } - | { readonly command: Command.block; readonly payload: Block } - | { readonly command: Command.consensus; readonly payload: ConsensusPayload } - | { readonly command: Command.filteradd; readonly payload: FilterAddPayload } - | { readonly command: Command.filterclear } - | { readonly command: Command.filterload; readonly payload: FilterLoadPayload } - | { readonly command: Command.getaddr } - | { readonly command: Command.getblocks; readonly payload: GetBlocksPayload } - | { readonly command: Command.getdata; readonly payload: InvPayload } - | { readonly command: Command.getheaders; readonly payload: GetBlocksPayload } - | { readonly command: Command.headers; readonly payload: HeadersPayload } - | { readonly command: Command.inv; readonly payload: InvPayload } - | { readonly command: Command.mempool } - | { readonly command: Command.tx; readonly payload: Transaction } - | { readonly command: Command.verack } - | { readonly command: Command.version; readonly payload: VersionPayload } - | { readonly command: Command.alert } - | { readonly command: Command.merkleblock; readonly payload: MerkleBlockPayload } - | { readonly command: Command.notfound } - | { readonly command: Command.ping } - | { readonly command: Command.pong } - | { readonly command: Command.reject }; + | { readonly command: Command.Addr; readonly payload: AddrPayload } + | { readonly command: Command.Block; readonly payload: Block } + | { readonly command: Command.Consensus; readonly payload: ConsensusPayload } + | { readonly command: Command.FilterAdd; readonly payload: FilterAddPayload } + | { readonly command: Command.FilterClear } + | { readonly command: Command.FilterLoad; readonly payload: FilterLoadPayload } + | { readonly command: Command.GetAddr } + | { readonly command: Command.GetBlocks; readonly payload: GetBlocksPayload } + | { readonly command: Command.GetBlockByIndex; readonly payload: GetBlockByIndexPayload } + | { readonly command: Command.GetData; readonly payload: InvPayload } + | { readonly command: Command.GetHeaders; readonly payload: GetBlockByIndexPayload } + | { readonly command: Command.Headers; readonly payload: HeadersPayload } + | { readonly command: Command.Inv; readonly payload: InvPayload } + | { readonly command: Command.Mempool } + | { readonly command: Command.Transaction; readonly payload: Transaction } + | { readonly command: Command.Verack } + | { readonly command: Command.Version; readonly payload: VersionPayload } + | { readonly command: Command.Alert } + | { readonly command: Command.MerkleBlock; readonly payload: MerkleBlockPayload } + | { readonly command: Command.NotFound; readonly payload: InvPayload } + | { readonly command: Command.Ping; readonly payload: PingPayload } + | { readonly command: Command.Pong; readonly payload: PingPayload } + | { readonly command: Command.Reject }; + export interface MessageAdd { - readonly magic: number; + readonly flags: MessageFlags; + readonly payloadBuffer: Buffer; readonly value: MessageValue; } -export const COMMAND_LENGTH = 12; export const PAYLOAD_MAX_SIZE = 0x02000000; - -const calculateChecksum = (buffer: Buffer) => common.toUInt32LE(crypto.hash256(buffer)); - -const deserializeMessageHeader = ({ - context, - reader, -}: DeserializeWireBaseOptions): { - readonly command: Command; - readonly length: number; - readonly checksum: number; -} => { - if (reader.readUInt32LE() !== context.messageMagic) { - throw new InvalidFormatError( - `Expected BinaryReader readUInt32LE(0) to equal ${context.messageMagic}. Received: ${context.messageMagic}`, - ); +const compressionMinSize = 128; +const compressionThreshold = 64; + +export const deserializeMessageValue = (command: Command, options: DeserializeWireOptions): MessageValue => { + switch (command) { + case Command.Addr: + return { + command: Command.Addr, + payload: AddrPayload.deserializeWire(options), + }; + + case Command.Block: + return { + command: Command.Block, + payload: Block.deserializeWire(options), + }; + + case Command.Consensus: + return { + command: Command.Consensus, + payload: ConsensusPayload.deserializeWire(options), + }; + + case Command.FilterAdd: + return { + command: Command.FilterAdd, + payload: FilterAddPayload.deserializeWire(options), + }; + + case Command.FilterClear: + return { command: Command.FilterClear }; + + case Command.FilterLoad: + return { + command: Command.FilterLoad, + payload: FilterLoadPayload.deserializeWire(options), + }; + + case Command.GetAddr: + return { command: Command.GetAddr }; + + case Command.GetBlocks: + return { + command: Command.GetBlocks, + payload: GetBlocksPayload.deserializeWire(options), + }; + + case Command.GetBlockByIndex: + return { + command: Command.GetBlockByIndex, + payload: GetBlockByIndexPayload.deserializeWire(options), + }; + + case Command.GetData: + return { + command: Command.GetData, + payload: InvPayload.deserializeWire(options), + }; + + case Command.GetHeaders: + return { + command: Command.GetHeaders, + payload: GetBlockByIndexPayload.deserializeWire(options), + }; + + case Command.Headers: + return { + command: Command.Headers, + payload: HeadersPayload.deserializeWire(options), + }; + + case Command.Inv: + return { + command: Command.Inv, + payload: InvPayload.deserializeWire(options), + }; + + case Command.Mempool: + return { command: Command.Mempool }; + + case Command.Transaction: + return { + command: Command.Transaction, + payload: Transaction.deserializeWire(options), + }; + + case Command.Verack: + return { command: Command.Verack }; + case Command.Version: + return { + command: Command.Version, + payload: VersionPayload.deserializeWire(options), + }; + + case Command.Alert: + return { command: Command.Alert }; + + case Command.MerkleBlock: + return { + command: Command.MerkleBlock, + payload: MerkleBlockPayload.deserializeWire(options), + }; + + case Command.NotFound: + return { command: Command.NotFound, payload: InvPayload.deserializeWire(options) }; + case Command.Ping: + return { command: Command.Ping, payload: PingPayload.deserializeWire(options) }; + + case Command.Pong: + return { command: Command.Pong, payload: PingPayload.deserializeWire(options) }; + + case Command.Reject: + return { command: Command.Reject }; + + default: + utils.assertNever(command); + throw new InvalidFormatError(``); } - const command = assertCommand(reader.readFixedString(COMMAND_LENGTH)); - const length = reader.readUInt32LE(); - if (length > PAYLOAD_MAX_SIZE) { - throw new InvalidFormatError( - `Expected buffer readout to be less than max payload size of ${PAYLOAD_MAX_SIZE}. Received: ${length}`, - ); - } - const checksum = reader.readUInt32LE(); - - return { command, length, checksum }; }; -export class Message implements SerializableWire { +export class Message implements SerializableWire { + public static create(value: MessageValue): Message { + // tslint:disable-next-line: no-any + const payloadBuffer = (value as any)?.payload?.serializeWire() ?? Buffer.alloc(0); + if (payloadBuffer.length > compressionMinSize) { + const compressed = lz4Helper.compress(payloadBuffer); + if (compressed.length < payloadBuffer.length - compressionThreshold) { + return new Message({ + flags: MessageFlags.Compressed, + value, + payloadBuffer: compressed, + }); + } + } + + return new Message({ + flags: MessageFlags.None, + payloadBuffer, + value, + }); + } + public static deserializeWireBase(options: DeserializeWireBaseOptions): Message { const { reader, context } = options; - const { command, length, checksum } = deserializeMessageHeader(options); - const payloadBuffer = reader.readBytes(length); - const payloadBufferChecksum = calculateChecksum(payloadBuffer); - if (payloadBufferChecksum !== checksum) { - throw new InvalidFormatError( - `Expected payloadBuffer checksum to be ${checksum}. Received: ${payloadBufferChecksum}`, - ); - } + + const flags = assertMessageFlags(reader.readInt8()); + const command = assertCommand(reader.readInt8()); + const payloadBuffer = reader.readVarBytesLE(PAYLOAD_MAX_SIZE); + + const decompressed = + flags === MessageFlags.Compressed ? lz4Helper.decompress(payloadBuffer, PAYLOAD_MAX_SIZE) : payloadBuffer; const payloadOptions = { - context: options.context, - buffer: payloadBuffer, + context, + buffer: decompressed, }; - let value: MessageValue; - switch (command) { - case Command.addr: - value = { - command: Command.addr, - payload: AddrPayload.deserializeWire(payloadOptions), - }; - - break; - case Command.block: - value = { - command: Command.block, - payload: Block.deserializeWire(payloadOptions), - }; - - break; - case Command.consensus: - value = { - command: Command.consensus, - payload: ConsensusPayload.deserializeWire(payloadOptions), - }; - - break; - case Command.filteradd: - value = { - command: Command.filteradd, - payload: FilterAddPayload.deserializeWire(payloadOptions), - }; - - break; - case Command.filterclear: - value = { command: Command.filterclear }; - break; - case Command.filterload: - value = { - command: Command.filterload, - payload: FilterLoadPayload.deserializeWire(payloadOptions), - }; - - break; - case Command.getaddr: - value = { command: Command.getaddr }; - break; - case Command.getblocks: - value = { - command: Command.getblocks, - payload: GetBlocksPayload.deserializeWire(payloadOptions), - }; - - break; - case Command.getdata: - value = { - command: Command.getdata, - payload: InvPayload.deserializeWire(payloadOptions), - }; - - break; - case Command.getheaders: - value = { - command: Command.getheaders, - payload: GetBlocksPayload.deserializeWire(payloadOptions), - }; - - break; - case Command.headers: - value = { - command: Command.headers, - payload: HeadersPayload.deserializeWire(payloadOptions), - }; - - break; - case Command.inv: - value = { - command: Command.inv, - payload: InvPayload.deserializeWire(payloadOptions), - }; - - break; - case Command.mempool: - value = { command: Command.mempool }; - break; - case Command.tx: - value = { - command: Command.tx, - payload: deserializeTransactionWire(payloadOptions), - }; - - break; - case Command.verack: - value = { command: Command.verack }; - break; - case Command.version: - value = { - command: Command.version, - payload: VersionPayload.deserializeWire(payloadOptions), - }; - - break; - case Command.alert: - value = { command: Command.alert }; - break; - case Command.merkleblock: - value = { - command: Command.merkleblock, - payload: MerkleBlockPayload.deserializeWire(payloadOptions), - }; - - break; - case Command.notfound: - value = { command: Command.notfound }; - break; - case Command.ping: - value = { command: Command.ping }; - break; - case Command.pong: - value = { command: Command.pong }; - break; - case Command.reject: - value = { command: Command.reject }; - break; - default: - utils.assertNever(command); - throw new InvalidFormatError(``); - } + const value = deserializeMessageValue(command, payloadOptions); - return new this({ magic: context.messageMagic, value }); + return new this({ flags, value, payloadBuffer }); } public static deserializeWire(options: DeserializeWireOptions): Message { @@ -241,88 +233,21 @@ export class Message implements SerializableWire { }); } - public readonly magic: number; + public readonly flags: MessageFlags; + public readonly payloadBuffer: Buffer; public readonly value: MessageValue; public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - public constructor({ magic, value }: MessageAdd) { - this.magic = magic; + public constructor({ flags, payloadBuffer, value }: MessageAdd) { + this.flags = flags; + this.payloadBuffer = payloadBuffer; this.value = value; } public serializeWireBase(writer: BinaryWriter): void { - const { value } = this; - - writer.writeUInt32LE(this.magic); - writer.writeFixedString(value.command, COMMAND_LENGTH); - - let payload = Buffer.alloc(0); - switch (value.command) { - case Command.addr: - payload = value.payload.serializeWire(); - break; - case Command.block: - payload = value.payload.serializeWire(); - break; - case Command.consensus: - payload = value.payload.serializeWire(); - break; - case Command.filteradd: - payload = value.payload.serializeWire(); - break; - case Command.filterclear: - break; - case Command.filterload: - payload = value.payload.serializeWire(); - break; - case Command.getaddr: - break; - case Command.getblocks: - payload = value.payload.serializeWire(); - break; - case Command.getdata: - payload = value.payload.serializeWire(); - break; - case Command.getheaders: - payload = value.payload.serializeWire(); - break; - case Command.headers: - payload = value.payload.serializeWire(); - break; - case Command.inv: - payload = value.payload.serializeWire(); - break; - case Command.mempool: - break; - case Command.tx: - payload = value.payload.serializeWire(); - break; - case Command.verack: - break; - case Command.version: - payload = value.payload.serializeWire(); - break; - case Command.alert: - break; - case Command.merkleblock: - payload = value.payload.serializeWire(); - break; - case Command.notfound: - break; - case Command.ping: - break; - case Command.pong: - break; - case Command.reject: - break; - default: - utils.assertNever(value); - throw new InvalidFormatError('Command does not exist'); - } - - writer.writeUInt32LE(payload.length); - writer.writeUInt32LE(calculateChecksum(payload)); - writer.writeBytes(payload); + writer.writeUInt8(this.flags); + writer.writeUInt8(this.value.command); + writer.writeVarBytesLE(this.payloadBuffer); } } @@ -331,11 +256,16 @@ export const InvalidMessageTransformEncodingError = makeErrorWithCode( (message: string) => message, ); -const SIZE_OF_MESSAGE_HEADER = - IOHelper.sizeOfUInt32LE + - IOHelper.sizeOfFixedString(COMMAND_LENGTH) + - IOHelper.sizeOfUInt32LE + - IOHelper.sizeOfUInt32LE; +const SIZE_OF_MESSAGE_HEADER = 3; + +const deserializeMessageHeader = (data: Buffer) => { + const header = data.slice(0, 3); + const flags = assertMessageFlags(header[0]); + const command = assertCommand(header[1]); + const length = header[2]; + + return { length, flags, command }; +}; export class MessageTransform extends Transform { public readonly context: DeserializeWireContext; @@ -385,10 +315,7 @@ export class MessageTransform extends Transform { return { remainingBuffer: reader.remainingBuffer, mutableMessages: [] }; } - const { length } = deserializeMessageHeader({ - context: this.context, - reader: reader.clone(), - }); + const { length } = deserializeMessageHeader(reader.clone().remainingBuffer); if (reader.remaining < SIZE_OF_MESSAGE_HEADER + length) { return { remainingBuffer: reader.remainingBuffer, mutableMessages: [] }; diff --git a/packages/neo-one-node-protocol/src/MessageFlags.ts b/packages/neo-one-node-protocol/src/MessageFlags.ts new file mode 100644 index 0000000000..37debb2db4 --- /dev/null +++ b/packages/neo-one-node-protocol/src/MessageFlags.ts @@ -0,0 +1,16 @@ +import { InvalidFormatError } from '@neo-one/client-common'; + +export enum MessageFlags { + None = 0, + Compressed = 1, +} + +export const isMessageFlags = (value: number): value is MessageFlags => value === 0x01 || value === 0x00; + +export const assertMessageFlags = (value: number): MessageFlags => { + if (isMessageFlags(value)) { + return value; + } + + throw new InvalidFormatError(`expected flag to be 0x00 or 0x01, found: ${value}`); +}; diff --git a/packages/neo-one-node-protocol/src/Node.ts b/packages/neo-one-node-protocol/src/Node.ts index bbce56affc..43d5f16961 100644 --- a/packages/neo-one-node-protocol/src/Node.ts +++ b/packages/neo-one-node-protocol/src/Node.ts @@ -1,8 +1,17 @@ -import { common, crypto, UInt256Hex, utils } from '@neo-one/client-common'; -import { AggregationType, globalStats, MeasureUnit } from '@neo-one/client-switch'; +import { + AttributeTypeModel, + common, + InvalidFormatError, + UInt256, + UInt256Hex, + utils, + VerifyResultModel, +} from '@neo-one/client-common'; import { createChild, nodeLogger } from '@neo-one/logger'; import { Consensus, ConsensusOptions } from '@neo-one/node-consensus'; import { + assertFullNodeCapability, + assertServerCapability, Block, Blockchain, ConnectedPeer, @@ -10,28 +19,23 @@ import { createEndpoint, CreateNetwork, Endpoint, + FullNodeCapability, getEndpointConfig, - Header, - MerkleTree, + NativeContainer, NegotiateResult, Network, NetworkEventMessage, Node as INode, + NodeCapability, + NodeCapabilityType, Peer, - RegisterTransaction, RelayTransactionResult, + ServerCapability, Transaction, - TransactionType, - VerifyTransactionResult, + TransactionVerificationContext, + Version, } from '@neo-one/node-core'; -import { - composeDisposables, - Disposable, - Labels, - labelToTag, - noopDisposable, - utils as commonUtils, -} from '@neo-one/utils'; +import { composeDisposables, Disposable, Labels, noopDisposable, utils as commonUtils } from '@neo-one/utils'; import { ScalingBloem } from 'bloem'; // tslint:disable-next-line:match-default-export-name import BloomFilter from 'bloom-filter'; @@ -42,62 +46,45 @@ import _ from 'lodash'; import LRUCache from 'lru-cache'; import { Command } from './Command'; import { AlreadyConnectedError, NegotiationError } from './errors'; -import { Message, MessageTransform, MessageValue } from './Message'; +import { Message, MessageTransform } from './Message'; import { AddrPayload, FilterAddPayload, FilterLoadPayload, + GetBlockByIndexPayload, GetBlocksPayload, HeadersPayload, InventoryType, InvPayload, MerkleBlockPayload, NetworkAddress, - SERVICES, + PingPayload, VersionPayload, } from './payload'; import { PeerData } from './PeerData'; const logger = createChild(nodeLogger, { component: 'node-protocol' }); -const messageReceivedTag = labelToTag(Labels.COMMAND_NAME); - -const messagesReceived = globalStats.createMeasureInt64('messages/received', MeasureUnit.UNIT); -const messagesFailed = globalStats.createMeasureInt64('messages/failed', MeasureUnit.UNIT); -const mempoolSize = globalStats.createMeasureInt64('mempool/size', MeasureUnit.UNIT); - -const NEO_PROTOCOL_MESSAGES_RECEIVED_TOTAL = globalStats.createView( - 'neo_protocol_messages_received_total', - messagesReceived, - AggregationType.COUNT, - [messageReceivedTag], - 'number of messages received', -); -globalStats.registerView(NEO_PROTOCOL_MESSAGES_RECEIVED_TOTAL); - -const NEO_PROTOCOL_MESSAGES_FAILURES_TOTAL = globalStats.createView( - 'neo_protocol_messages_failures_total', - messagesFailed, - AggregationType.COUNT, - [messageReceivedTag], - 'number of message failures', -); -globalStats.registerView(NEO_PROTOCOL_MESSAGES_FAILURES_TOTAL); - -const NEO_PROTOCOL_MEMPOOL_SIZE = globalStats.createView( - 'neo_protocol_mempool_size', - mempoolSize, - AggregationType.LAST_VALUE, - [], - 'current mempool size', -); -globalStats.registerView(NEO_PROTOCOL_MEMPOOL_SIZE); - export interface TransactionAndFee { readonly transaction: Transaction; readonly networkFee: BN; } +const compareBool = (a: boolean, b: boolean) => { + if (a) { + if (b) { + return 0; + } + + return 1; + } + if (b) { + return -1; + } + + return 0; +}; + export interface Options { readonly externalPort?: number; readonly consensus?: ConsensusOptions; @@ -127,24 +114,37 @@ const createScalingBloomFilter = () => }); const compareTransactionAndFees = (val1: TransactionAndFee, val2: TransactionAndFee) => { - const a = val1.networkFee.divn(val1.transaction.size); - const b = val2.networkFee.divn(val2.transaction.size); - if (a.lt(b)) { - return -1; + const attrComp = compareBool( + val1.transaction.attributes.some((attr) => attr.type === AttributeTypeModel.HighPriority), + val2.transaction.attributes.some((attr) => attr.type === AttributeTypeModel.HighPriority), + ); + if (attrComp !== 0) { + return attrComp; } - if (b.lt(a)) { - return 1; + + const feePerByteComp = val1.networkFee.divn(val1.transaction.size).cmp(val2.networkFee.divn(val2.transaction.size)); + if (feePerByteComp !== 0) { + return feePerByteComp; + } + + const feeComp = val1.networkFee.cmp(val2.networkFee); + if (feeComp !== 0) { + return feeComp; } return val1.transaction.hash.compare(val2.transaction.hash); }; +// TODO: We should note what some of these settings used to be, I've made them more aggressive +// while we are testing syncing; and then testnet can be a bit slow. +// const GET_BLOCKS_THROTTLE_MS = 1000; +// const GET_BLOCKS_TIME_MS = 5000; + const MEM_POOL_SIZE = 5000; -const GET_ADDR_PEER_COUNT = 200; const GET_BLOCKS_COUNT = 500; // Assume that we get 500 back, but if not, at least request every 10 seconds const GET_BLOCKS_BUFFER = GET_BLOCKS_COUNT / 3; -const GET_BLOCKS_TIME_MS = 10000; +const GET_BLOCKS_TIME_MS = 1000; const GET_BLOCKS_THROTTLE_MS = 1000; const TRIM_MEMPOOL_THROTTLE = 5000; const GET_BLOCKS_CLOSE_COUNT = 2; @@ -158,20 +158,11 @@ interface PeerHealth { } export class Node implements INode { - public get consensus(): Consensus | undefined { - return this.mutableConsensus; - } - - public get connectedPeers(): readonly Endpoint[] { - return this.network.connectedPeers.map((peer) => peer.endpoint); - } - - public get memPool(): { readonly [hash: string]: Transaction } { - return this.mutableMemPool; - } public readonly blockchain: Blockchain; + public readonly getNewVerificationContext: () => TransactionVerificationContext; // tslint:disable-next-line readonly-keyword private mutableMemPool: { [hash: string]: Transaction }; + private readonly transactionVerificationContext: TransactionVerificationContext; private readonly network: Network; private readonly options: Options; private readonly externalPort: number; @@ -192,11 +183,17 @@ export class Node implements INode { // tslint:disable-next-line readonly-keyword private mutableBlockIndex: { [endpoint: string]: number }; private mutableConsensus: Consensus | undefined; + private readonly requestBlocks = _.debounce(() => { const peer = this.mutableBestPeer; const previousBlock = this.blockchain.previousBlock; const block = previousBlock === undefined ? this.blockchain.currentBlock : previousBlock; - if (peer !== undefined && block.index < peer.data.startHeight) { + if (peer === undefined) { + return; + } + + const peerIndex = this.mutableBlockIndex[peer.endpoint]; + if (block.index < peerIndex) { if (this.mutableGetBlocksRequestsCount > GET_BLOCKS_CLOSE_COUNT) { this.mutableBestPeer = this.findBestPeer(peer); this.network.blacklistAndClose(peer); @@ -208,13 +205,16 @@ export class Node implements INode { this.mutableGetBlocksRequestsCount = 1; this.mutableGetBlocksRequestsIndex = block.index; } + + const requestAmount = Math.min(peerIndex - block.index, this.mutableGetBlocksRequestsCount * 50); this.mutableGetBlocksRequestTime = Date.now(); this.sendMessage( peer, - this.createMessage({ - command: Command.getblocks, + Message.create({ + command: Command.GetBlocks, payload: new GetBlocksPayload({ - hashStart: [block.hash], + hashStart: block.hash, + count: requestAmount, }), }), ); @@ -223,8 +223,9 @@ export class Node implements INode { this.requestBlocks(); } }, GET_BLOCKS_THROTTLE_MS); + private readonly onRequestEndpoints = _.throttle((): void => { - this.relay(this.createMessage({ command: Command.getaddr })); + this.relay(Message.create({ command: Command.GetAddr })); // tslint:disable-next-line no-floating-promises this.fetchEndpointsFromRPC(); }, 5000); @@ -233,44 +234,32 @@ export class Node implements INode { private readonly trimMemPool = _.throttle(async (): Promise => { const memPool = Object.values(this.mutableMemPool); if (memPool.length > MEM_POOL_SIZE) { - const transactionAndFees = await Promise.all( - memPool.map>(async (transaction) => { - const networkFee = await transaction.getNetworkFee({ - getOutput: this.blockchain.output.get, - governingToken: this.blockchain.settings.governingToken, - utilityToken: this.blockchain.settings.utilityToken, - fees: this.blockchain.settings.fees, - registerValidatorFee: this.blockchain.settings.registerValidatorFee, - }); - - return { transaction, networkFee }; - }), - ); + const transactionAndFees = memPool.map((transaction) => { + const networkFee = transaction.networkFee; + + return { transaction, networkFee }; + }); const hashesToRemove = _.take( // tslint:disable-next-line no-array-mutation transactionAndFees.slice().sort(compareTransactionAndFees), - this.blockchain.settings.memPoolSize, + this.blockchain.settings.memoryPoolMaxTransactions, ).map((transactionAndFee) => transactionAndFee.transaction.hashHex); hashesToRemove.forEach((hash) => { // tslint:disable-next-line no-dynamic-delete delete this.mutableMemPool[hash]; }); - globalStats.record([ - { - measure: mempoolSize, - value: Object.keys(this.mutableMemPool).length, - }, - ]); } }, TRIM_MEMPOOL_THROTTLE); public constructor({ blockchain, + native, createNetwork, options, }: { readonly blockchain: Blockchain; + readonly native: NativeContainer; readonly createNetwork: CreateNetwork; readonly options: Options; }) { @@ -291,9 +280,12 @@ export class Node implements INode { const { externalPort = 0 } = options; this.externalPort = externalPort; this.nonce = Math.floor(Math.random() * utils.UINT_MAX_NUMBER); - this.userAgent = `NEO:neo-one-js:1.0.0-preview`; + this.userAgent = `NEO:neo-one-js:3.0.0-preview3`; this.mutableMemPool = {}; + this.getNewVerificationContext = () => + new TransactionVerificationContext({ getGasBalance: native.GAS.balanceOf.bind(native.GAS) }); + this.transactionVerificationContext = this.getNewVerificationContext(); this.mutableKnownBlockHashes = createScalingBloomFilter(); this.tempKnownBlockHashes = new Set(); this.mutableKnownTransactionHashes = createScalingBloomFilter(); @@ -305,6 +297,34 @@ export class Node implements INode { this.mutableBlockIndex = {}; } + public get version(): Version { + return { + tcpPort: this.externalPort, + wsPort: -1, + nonce: this.nonce, + useragent: this.userAgent, + }; + } + + public get capabilities(): readonly NodeCapability[] { + const fullNodeCapability = new FullNodeCapability({ startHeight: this.blockchain.currentBlockIndex }); + const tcpCapability = new ServerCapability({ type: NodeCapabilityType.TcpServer, port: this.externalPort }); + + return [fullNodeCapability, tcpCapability]; + } + + public get consensus(): Consensus | undefined { + return this.mutableConsensus; + } + + public get connectedPeers(): readonly Endpoint[] { + return this.network.connectedPeers.map((peer) => peer.endpoint); + } + + public get memPool(): { readonly [hash: string]: Transaction } { + return this.mutableMemPool; + } + public async reset(): Promise { this.mutableMemPool = {}; this.mutableKnownBlockHashes = createScalingBloomFilter(); @@ -361,14 +381,8 @@ export class Node implements INode { forceAdd: false, }, ): Promise { - const result = {}; - - if ( - transaction.type === TransactionType.Miner || - (this.mutableMemPool[transaction.hashHex] as Transaction | undefined) !== undefined || - this.tempKnownTransactionHashes.has(transaction.hashHex) - ) { - return result; + if (this.tempKnownTransactionHashes.has(transaction.hashHex)) { + return {}; } if (!this.mutableKnownTransactionHashes.has(transaction.hash)) { @@ -379,42 +393,35 @@ export class Node implements INode { if (memPool.length > MEM_POOL_SIZE / 2 && !forceAdd) { this.mutableKnownTransactionHashes.add(transaction.hash); - return result; + return {}; } - // tslint:disable-next-line prefer-immediate-return + let logLabels: {} = { [Labels.NEO_TRANSACTION_HASH]: transaction.hashHex }; let finalResult: RelayTransactionResult; try { let foundTransaction; try { - foundTransaction = await this.blockchain.transaction.tryGet({ - hash: transaction.hash, - }); + foundTransaction = await this.blockchain.transactions.tryGet(transaction.hash); } finally { logLabels = { [Labels.NEO_TRANSACTION_FOUND]: foundTransaction !== undefined, ...logLabels, }; } - let verifyResult: VerifyTransactionResult | undefined; + let verifyResult: VerifyResultModel | undefined; if (foundTransaction === undefined) { - verifyResult = await this.blockchain.verifyTransaction({ + verifyResult = await this.blockchain.verifyTransaction( transaction, - memPool: Object.values(this.mutableMemPool), - }); - const verified = verifyResult.verifications.every(({ failureMessage }) => failureMessage === undefined); + this.mutableMemPool, + this.transactionVerificationContext, + ); - if (verified) { + if (verifyResult === VerifyResultModel.Succeed) { this.mutableMemPool[transaction.hashHex] = transaction; - globalStats.record([ - { - measure: mempoolSize, - value: Object.keys(this.mutableMemPool).length, - }, - ]); if (this.mutableConsensus !== undefined) { this.mutableConsensus.onTransactionReceived(transaction); } + this.transactionVerificationContext.addTransaction(transaction); this.relayTransactionInternal(transaction); await this.trimMemPool(); } @@ -444,7 +451,7 @@ export class Node implements INode { } } - return result; + return {}; } public async relayBlock(block: Block): Promise { @@ -452,8 +459,8 @@ export class Node implements INode { } public relayConsensusPayload(payload: ConsensusPayload): void { - const message = this.createMessage({ - command: Command.inv, + const message = Message.create({ + command: Command.Inv, payload: new InvPayload({ type: InventoryType.Consensus, hashes: [payload.hash], @@ -465,7 +472,7 @@ export class Node implements INode { } public syncMemPool(): void { - this.relay(this.createMessage({ command: Command.mempool })); + this.relay(Message.create({ command: Command.Mempool })); } private relay(message: Message): void { @@ -473,10 +480,10 @@ export class Node implements INode { } private relayTransactionInternal(transaction: Transaction): void { - const message = this.createMessage({ - command: Command.inv, + const message = Message.create({ + command: Command.Inv, payload: new InvPayload({ - type: InventoryType.Transaction, + type: InventoryType.TX, hashes: [transaction.hash], }), }); @@ -495,58 +502,85 @@ export class Node implements INode { private readonly negotiate = async (peer: Peer): Promise> => { this.sendMessage( peer, - this.createMessage({ - command: Command.version, - payload: new VersionPayload({ - protocolVersion: 0, - services: SERVICES.NODE_NETWORK, - timestamp: Math.round(Date.now() / 1000), - port: this.externalPort, + Message.create({ + command: Command.Version, + payload: VersionPayload.create({ + magic: this.blockchain.settings.messageMagic, + version: 0, nonce: this.nonce, userAgent: this.userAgent, - startHeight: this.blockchain.currentBlockIndex, - relay: true, + capabilities: this.capabilities, }), }), ); const message = await peer.receiveMessage(30000); - let versionPayload; - if (message.value.command === Command.version) { - versionPayload = message.value.payload; - } else { + const value = message.value; + if (value.command !== Command.Version) { throw new NegotiationError(message); } + const versionPayload = value.payload; + this.checkVersion(peer, message, versionPayload); const { host } = getEndpointConfig(peer.endpoint); - let address; - if (NetworkAddress.isValid(host)) { - address = new NetworkAddress({ - host, - port: versionPayload.port, - timestamp: versionPayload.timestamp, - services: versionPayload.services, - }); - } - this.sendMessage(peer, this.createMessage({ command: Command.verack })); + const address = NetworkAddress.isValid(host) + ? new NetworkAddress({ + timestamp: versionPayload.timestamp, + address: host, + capabilities: versionPayload.capabilities, + }) + : undefined; + const verackMessage = Message.create({ command: Command.Verack }); + this.sendMessage(peer, verackMessage); const nextMessage = await peer.receiveMessage(30000); - if (nextMessage.value.command !== Command.verack) { + if (nextMessage.value.command !== Command.Verack) { throw new NegotiationError(nextMessage); } + const { relay, port, startHeight } = versionPayload.capabilities.reduce( + (acc, capability) => { + switch (capability.type) { + case NodeCapabilityType.FullNode: + const fullCap = assertFullNodeCapability(capability); + + return { + ...acc, + relay: true, + startHeight: fullCap.startHeight, + }; + + case NodeCapabilityType.TcpServer: + const tcpCap = assertServerCapability(capability); + + return { + ...acc, + port: tcpCap.port, + }; + + case NodeCapabilityType.WsServer: + return acc; + + default: + throw new InvalidFormatError(); + } + }, + { relay: false, port: 0, startHeight: 0 }, + ); + this.mutableBlockIndex[peer.endpoint] = startHeight; + return { data: { nonce: versionPayload.nonce, - startHeight: versionPayload.startHeight, mutableBloomFilter: undefined, address, + listenPort: port, }, - relay: versionPayload.relay, + relay, }; }; private readonly checkPeerHealth = (peer: ConnectedPeer, prevHealth?: PeerHealth) => { @@ -578,13 +612,14 @@ export class Node implements INode { return { healthy: false, checkTimeSeconds, blockIndex }; }; + private readonly onEvent = (event: NetworkEventMessage) => { if (event.event === 'PEER_CONNECT_SUCCESS') { const { connectedPeer } = event; if ( this.mutableBestPeer === undefined || // Only change best peer at most every 100 blocks - this.mutableBestPeer.data.startHeight + 100 < connectedPeer.data.startHeight + this.mutableBlockIndex[this.mutableBestPeer.endpoint] + 100 < this.mutableBlockIndex[connectedPeer.endpoint] ) { this.mutableBestPeer = connectedPeer; this.resetRequestBlocks(); @@ -606,12 +641,14 @@ export class Node implements INode { if (bestPeer !== undefined) { peers = peers.filter((peer) => peer.endpoint !== bestPeer.endpoint); } - const result = _.maxBy(peers, (peer) => peer.data.startHeight); + const result = _.maxBy(peers, (peer) => this.mutableBlockIndex[peer.endpoint]); if (result === undefined) { return undefined; } - return _.shuffle(peers.filter((peer) => peer.data.startHeight === result.data.startHeight))[0]; + return _.shuffle( + peers.filter((peer) => this.mutableBlockIndex[peer.endpoint] === this.mutableBlockIndex[result.endpoint]), + )[0]; } private resetRequestBlocks(): void { @@ -648,7 +685,7 @@ export class Node implements INode { const peer = this.mutableBestPeer; const block = this.blockchain.currentBlock; - return peer !== undefined && block.index >= peer.data.startHeight; + return peer !== undefined && block.index >= this.mutableBlockIndex[peer.endpoint]; } private async fetchEndpointsFromRPC(): Promise { @@ -729,76 +766,76 @@ export class Node implements INode { try { new Promise(async (resolve) => { switch (message.value.command) { - case Command.addr: + case Command.Addr: this.onAddrMessageReceived(message.value.payload); break; - case Command.block: + case Command.Block: await this.onBlockMessageReceived(peer, message.value.payload); break; - case Command.consensus: + case Command.Consensus: await this.onConsensusMessageReceived(message.value.payload); break; - case Command.filteradd: + case Command.FilterAdd: this.onFilterAddMessageReceived(peer, message.value.payload); break; - case Command.filterclear: + case Command.FilterClear: this.onFilterClearMessageReceived(peer); break; - case Command.filterload: + case Command.FilterLoad: this.onFilterLoadMessageReceived(peer, message.value.payload); break; - case Command.getaddr: + case Command.GetAddr: this.onGetAddrMessageReceived(peer); break; - case Command.getblocks: + case Command.GetBlocks: await this.onGetBlocksMessageReceived(peer, message.value.payload); break; - case Command.getdata: - await this.onGetDataMessageReceived(peer, message.value.payload); + case Command.GetBlockByIndex: + await this.onGetBlockByIndexMessageReceived(peer, message.value.payload); break; - case Command.getheaders: - await this.onGetHeadersMessageReceived(peer, message.value.payload); + case Command.GetData: + await this.onGetDataMessageReceived(peer, message.value.payload); break; - case Command.headers: - await this.onHeadersMessageReceived(peer, message.value.payload); + case Command.GetHeaders: + await this.onGetHeadersMessageReceived(peer, message.value.payload); break; - case Command.inv: + case Command.Inv: this.onInvMessageReceived(peer, message.value.payload); + break; - case Command.mempool: + case Command.Mempool: this.onMemPoolMessageReceived(peer); + break; - case Command.tx: - await this.onTransactionReceived(message.value.payload); - break; - case Command.verack: - this.onVerackMessageReceived(peer); - break; - case Command.version: - this.onVersionMessageReceived(peer); - break; - case Command.alert: - break; - case Command.merkleblock: - break; - case Command.notfound: - break; - case Command.ping: + case Command.Ping: + this.onPingMessageReceived(peer, message.value.payload); + break; - case Command.pong: + case Command.Pong: + this.onPongMessageReceived(peer, message.value.payload); + break; - case Command.reject: + case Command.Transaction: + await this.onTransactionReceived(message.value.payload); + break; + case Command.Verack: + case Command.Version: + throw new InvalidFormatError(); + case Command.Alert: + case Command.Headers: + case Command.MerkleBlock: + case Command.NotFound: + case Command.Reject: default: - commonUtils.assertNever(message.value); } resolve(); }).catch(() => { @@ -810,21 +847,16 @@ export class Node implements INode { } private onAddrMessageReceived(addr: AddrPayload): void { - addr.addresses - .filter((address) => !LOCAL_HOST_ADDRESSES.has(address.host)) - .map((address) => - createEndpoint({ - type: 'tcp', - host: address.host, - port: address.port, - }), - ) + addr.addressList + .filter((address) => !LOCAL_HOST_ADDRESSES.has(address.address)) + .filter((address) => address.port > 0) + .map((address) => address.endpoint) .forEach((endpoint) => this.network.addEndpoint(endpoint)); } private async onBlockMessageReceived(peer: ConnectedPeer, block: Block): Promise { const blockIndex = this.mutableBlockIndex[peer.endpoint] as number | undefined; - this.mutableBlockIndex[peer.endpoint] = Math.max(block.index, blockIndex === undefined ? 0 : blockIndex); + this.mutableBlockIndex[peer.endpoint] = Math.max(block.index, blockIndex ?? 0); await this.relayBlock(block); } @@ -838,7 +870,7 @@ export class Node implements INode { this.tempKnownBlockHashes.add(block.hashHex); try { - const foundBlock = await this.blockchain.block.tryGet({ + const foundBlock = await this.blockchain.blocks.tryGet({ hashOrIndex: block.hash, }); @@ -850,10 +882,10 @@ export class Node implements INode { } const peer = this.mutableBestPeer; - if (peer !== undefined && block.index > peer.data.startHeight) { + if (peer !== undefined && block.index > this.mutableBlockIndex[peer.endpoint]) { this.relay( - this.createMessage({ - command: Command.inv, + Message.create({ + command: Command.Inv, payload: new InvPayload({ type: InventoryType.Block, hashes: [block.hash], @@ -861,7 +893,11 @@ export class Node implements INode { }), ); } - logger.info({ name: 'neo_relay_block', [Labels.NEO_BLOCK_INDEX]: block.index }); + logger.debug({ + name: 'neo_relay_block', + [Labels.NEO_BLOCK_INDEX]: block.index, + ['neo.block.transactions']: block.transactions.length, + }); } catch (err) { logger.error({ name: 'neo_relay_block', [Labels.NEO_BLOCK_INDEX]: block.index, err }); throw err; @@ -875,12 +911,6 @@ export class Node implements INode { delete this.mutableMemPool[transaction.hashHex]; this.mutableKnownTransactionHashes.add(transaction.hash); }); - globalStats.record([ - { - measure: mempoolSize, - value: Object.keys(this.mutableMemPool).length, - }, - ]); } finally { this.tempKnownBlockHashes.delete(block.hashHex); } @@ -912,19 +942,22 @@ export class Node implements INode { } private onGetAddrMessageReceived(peer: ConnectedPeer): void { - const addresses = _.take( + const addressList = _.take( _.shuffle( - this.network.connectedPeers.map((connectedPeer) => connectedPeer.data.address).filter(commonUtils.notNull), + this.network.connectedPeers + .filter((connectedPeer) => connectedPeer.data.listenPort > 0) + .map((connectedPeer) => connectedPeer.data.address) + .filter(commonUtils.notNull), ), - GET_ADDR_PEER_COUNT, + AddrPayload.maxCountToSend, ); - if (addresses.length > 0) { + if (addressList.length > 0) { this.sendMessage( peer, - this.createMessage({ - command: Command.addr, - payload: new AddrPayload({ addresses }), + Message.create({ + command: Command.Addr, + payload: new AddrPayload({ addressList }), }), ); } @@ -932,40 +965,103 @@ export class Node implements INode { private async onGetBlocksMessageReceived( peer: ConnectedPeer, - getBlocks: GetBlocksPayload, + payload: GetBlocksPayload, ): Promise { - const headers = await this.getHeaders(getBlocks, this.blockchain.currentBlockIndex); + const hashStart = payload.hashStart; + const count = payload.count < 0 || payload.count > GET_BLOCKS_COUNT ? GET_BLOCKS_COUNT : payload.count; + + const state = await this.blockchain.blocks.tryGet({ hashOrIndex: hashStart }); + if (state === undefined) { + return; + } + + const currentHeaderIndex = this.blockchain.currentHeaderIndex; + + const tempHashes = await Promise.all( + _.range(1, count).map(async (idx) => { + const index = state.index + idx; + if (index > currentHeaderIndex) { + return undefined; + } + + return this.blockchain.getBlockHash(index); + }), + ); + + const hashes = tempHashes.filter(commonUtils.notNull); this.sendMessage( peer, - this.createMessage({ - command: Command.inv, + Message.create({ + command: Command.Inv, payload: new InvPayload({ type: InventoryType.Block, - hashes: headers.map((header) => header.hash), + hashes, }), }), ); } + private async onGetBlockByIndexMessageReceived( + peer: ConnectedPeer, + payload: GetBlockByIndexPayload, + ): Promise { + const count = payload.count === -1 ? GET_BLOCKS_COUNT : Math.min(payload.count, GET_BLOCKS_COUNT); + const max = payload.indexStart + count; + // tslint:disable-next-line: no-loop-statement + for (let idx = payload.indexStart; idx < max; idx += 1) { + const block = await this.blockchain.getBlock(idx); + if (block === undefined) { + break; + } + + if (peer.data.mutableBloomFilter === undefined) { + this.sendMessage( + peer, + Message.create({ + command: Command.Block, + payload: block, + }), + ); + } else { + this.sendMessage( + peer, + Message.create({ + command: Command.MerkleBlock, + payload: MerkleBlockPayload.create({ + block, + flags: block.transactions.map((transaction) => + this.testFilter(peer.data.mutableBloomFilter, transaction), + ), + }), + }), + ); + } + } + } + private async onGetDataMessageReceived(peer: ConnectedPeer, getData: InvPayload): Promise { + let notFound: readonly UInt256[] = []; switch (getData.type) { - case InventoryType.Transaction: + case InventoryType.TX: await Promise.all( getData.hashes.map(async (hash) => { let transaction = this.mutableMemPool[common.uInt256ToHex(hash)] as Transaction | undefined; if (transaction === undefined) { - transaction = await this.blockchain.transaction.tryGet({ hash }); + const state = await this.blockchain.transactions.tryGet(hash); + transaction = state?.transaction; } if (transaction !== undefined) { this.sendMessage( peer, - this.createMessage({ - command: Command.tx, + Message.create({ + command: Command.Transaction, payload: transaction, }), ); + } else { + notFound = notFound.concat(hash); } }), ); @@ -974,25 +1070,23 @@ export class Node implements INode { case InventoryType.Block: // Block await Promise.all( getData.hashes.map(async (hash) => { - const block = await this.blockchain.block.tryGet({ - hashOrIndex: hash, - }); + const block = await this.blockchain.getBlock(hash); if (block !== undefined) { if (peer.data.mutableBloomFilter === undefined) { this.sendMessage( peer, - this.createMessage({ - command: Command.block, + Message.create({ + command: Command.Block, payload: block, }), ); } else { this.sendMessage( peer, - this.createMessage({ - command: Command.merkleblock, - payload: this.createMerkleBlockPayload({ + Message.create({ + command: Command.MerkleBlock, + payload: MerkleBlockPayload.create({ block, flags: block.transactions.map((transaction) => this.testFilter(peer.data.mutableBloomFilter, transaction), @@ -1001,6 +1095,8 @@ export class Node implements INode { }), ); } + } else { + notFound = notFound.concat(hash); } }), ); @@ -1012,75 +1108,73 @@ export class Node implements INode { if (payload !== undefined) { this.sendMessage( peer, - this.createMessage({ - command: Command.consensus, + Message.create({ + command: Command.Consensus, payload, }), ); } }); break; + default: commonUtils.assertNever(getData.type); } + + if (notFound.length > 0) { + InvPayload.createGroup(getData.type, notFound).forEach((payload) => { + this.sendMessage( + peer, + Message.create({ + command: Command.NotFound, + payload, + }), + ); + }); + } } private async onGetHeadersMessageReceived( peer: ConnectedPeer, - getBlocks: GetBlocksPayload, + payload: GetBlockByIndexPayload, ): Promise { - const headers = await this.getHeaders(getBlocks, this.blockchain.currentHeader.index); + const startIndex = payload.indexStart; + const count = payload.count === -1 ? HeadersPayload.maxHeadersCount : payload.count; + if (startIndex > this.blockchain.currentHeaderIndex) { + return; + } - this.sendMessage( - peer, - this.createMessage({ - command: Command.headers, - payload: new HeadersPayload({ headers }), + const currentHeaderIndex = this.blockchain.currentHeaderIndex; + + const tempHeaders = await Promise.all( + _.range(count).map(async (idx) => { + if (startIndex + idx > currentHeaderIndex) { + return undefined; + } + + return this.blockchain.getHeader(startIndex + idx); }), ); - } - private async onHeadersMessageReceived( - peer: ConnectedPeer, - headersPayload: HeadersPayload, - ): Promise { - const headers = headersPayload.headers.filter( - (header) => !this.mutableKnownHeaderHashes.has(header.hash) && !this.tempKnownHeaderHashes.has(header.hashHex), - ); + const headers = tempHeaders.filter(commonUtils.notNull); - if (headers.length > 0) { - headers.forEach((header) => { - this.tempKnownHeaderHashes.add(header.hashHex); - }); - try { - await this.blockchain.persistHeaders(headers); - headers.forEach((header) => { - this.mutableKnownHeaderHashes.add(header.hash); - }); - } finally { - headers.forEach((header) => { - this.tempKnownHeaderHashes.delete(header.hashHex); - }); - } + if (headers.length === 0) { + return; } - if (this.blockchain.currentHeader.index < peer.data.startHeight) { - this.sendMessage( - peer, - this.createMessage({ - command: Command.getheaders, - payload: new GetBlocksPayload({ - hashStart: [this.blockchain.currentHeader.hash], - }), - }), - ); - } + this.sendMessage( + peer, + Message.create({ + command: Command.Headers, + payload: new HeadersPayload({ headers }), + }), + ); } private onInvMessageReceived(peer: ConnectedPeer, inv: InvPayload): void { let hashes; switch (inv.type) { - case InventoryType.Transaction: // Transaction + case InventoryType.TX: // Transaction hashes = inv.hashes.filter( (hash) => !this.mutableKnownTransactionHashes.has(hash) && @@ -1106,8 +1200,8 @@ export class Node implements INode { if (hashes.length > 0) { this.sendMessage( peer, - this.createMessage({ - command: Command.getdata, + Message.create({ + command: Command.GetData, payload: new InvPayload({ type: inv.type, hashes }), }), ); @@ -1115,68 +1209,39 @@ export class Node implements INode { } private onMemPoolMessageReceived(peer: ConnectedPeer): void { - this.sendMessage( - peer, - this.createMessage({ - command: Command.inv, - payload: new InvPayload({ - type: InventoryType.Transaction, - hashes: Object.values(this.mutableMemPool).map((transaction) => transaction.hash), + InvPayload.createGroup( + InventoryType.TX, + Object.values(this.mutableMemPool).map((tx) => tx.hash), + ).forEach((payload) => { + this.sendMessage( + peer, + Message.create({ + command: Command.Inv, + payload, }), - }), - ); + ); + }); } private async onTransactionReceived(transaction: Transaction): Promise { if (this.ready()) { - if (transaction.type === TransactionType.Miner) { - if (this.mutableConsensus !== undefined) { - this.mutableConsensus.onTransactionReceived(transaction); - } - } else { - await this.relayTransaction(transaction); - } + await this.relayTransaction(transaction); } } - private onVerackMessageReceived(peer: ConnectedPeer): void { - peer.close(); + private onPingMessageReceived(peer: ConnectedPeer, payload: PingPayload): void { + this.updateLastBlockIndex(peer.endpoint, payload); + this.sendMessage( + peer, + Message.create({ + command: Command.Pong, + payload: PingPayload.create(this.blockchain.currentBlockIndex, payload.nonce), + }), + ); } - private onVersionMessageReceived(peer: ConnectedPeer): void { - peer.close(); - } - - private async getHeaders(getBlocks: GetBlocksPayload, maxHeight: number): Promise { - let hashStopIndexPromise = Promise.resolve(maxHeight); - if (!getBlocks.hashStop.equals(common.ZERO_UINT256)) { - hashStopIndexPromise = this.blockchain.header - .tryGet({ hashOrIndex: getBlocks.hashStop }) - .then((hashStopHeader) => - hashStopHeader === undefined ? maxHeight : Math.min(hashStopHeader.index, maxHeight), - ); - } - const [hashStartHeaders, hashEnd] = await Promise.all([ - Promise.all(getBlocks.hashStart.map(async (hash) => this.blockchain.header.tryGet({ hashOrIndex: hash }))), - - hashStopIndexPromise, - ]); - - const hashStartHeader = _.head(_.orderBy(hashStartHeaders.filter(commonUtils.notNull), [(header) => header.index])); - - if (hashStartHeader === undefined) { - return []; - } - const hashStart = hashStartHeader.index + 1; - if (hashStart > maxHeight) { - return []; - } - - return Promise.all( - _.range(hashStart, Math.min(hashStart + GET_BLOCKS_COUNT, hashEnd)).map(async (index) => - this.blockchain.header.get({ hashOrIndex: index }), - ), - ); + private onPongMessageReceived(peer: ConnectedPeer, payload: PingPayload) { + this.updateLastBlockIndex(peer.endpoint, payload); } private testFilter(bloomFilterIn: BloomFilter | undefined, transaction: Transaction): boolean { @@ -1187,52 +1252,13 @@ export class Node implements INode { return ( bloomFilter.contains(transaction.hash) || - transaction.outputs.some((output) => bloomFilter.contains(output.address)) || - transaction.inputs.some((input) => bloomFilter.contains(input.serializeWire())) || - transaction.scripts.some((script) => bloomFilter.contains(crypto.toScriptHash(script.verification))) || - (transaction.type === TransactionType.Register && - transaction instanceof RegisterTransaction && - bloomFilter.contains(transaction.asset.admin)) + transaction.witnesses.some((witness) => bloomFilter.contains(witness.scriptHash)) ); } - private createMerkleBlockPayload({ - block, - flags, - }: { - readonly block: Block; - readonly flags: readonly boolean[]; - }): MerkleBlockPayload { - const tree = new MerkleTree(block.transactions.map((transaction) => transaction.hash)).trim(flags); - - const mutableBuffer = Buffer.allocUnsafe(Math.floor((flags.length + 7) / 8)); - // tslint:disable-next-line no-loop-statement - for (let i = 0; i < flags.length; i += 1) { - if (flags[i]) { - // tslint:disable-next-line no-bitwise - mutableBuffer[Math.floor(i / 8)] |= 1 << i % 8; - } + private updateLastBlockIndex(endpoint: string, payload: PingPayload) { + if (payload.lastBlockIndex > (this.mutableBlockIndex[endpoint] ?? 0)) { + this.mutableBlockIndex[endpoint] = payload.lastBlockIndex; } - - return new MerkleBlockPayload({ - version: block.version, - previousHash: block.previousHash, - merkleRoot: block.merkleRoot, - timestamp: block.timestamp, - index: block.index, - consensusData: block.consensusData, - nextConsensus: block.nextConsensus, - script: block.script, - transactionCount: block.transactions.length, - hashes: tree.toHashArray(), - flags: mutableBuffer, - }); - } - - private createMessage(value: MessageValue): Message { - return new Message({ - magic: this.blockchain.settings.messageMagic, - value, - }); } } diff --git a/packages/neo-one-node-protocol/src/PeerData.ts b/packages/neo-one-node-protocol/src/PeerData.ts index ea219e466d..8c62858890 100644 --- a/packages/neo-one-node-protocol/src/PeerData.ts +++ b/packages/neo-one-node-protocol/src/PeerData.ts @@ -4,7 +4,7 @@ import { NetworkAddress } from './payload'; export interface PeerData { readonly nonce: number; - readonly startHeight: number; mutableBloomFilter: BloomFilter | undefined; readonly address?: NetworkAddress; + readonly listenPort: number; } diff --git a/packages/neo-one-node-protocol/src/lz4Helper.ts b/packages/neo-one-node-protocol/src/lz4Helper.ts new file mode 100644 index 0000000000..1ded5d673c --- /dev/null +++ b/packages/neo-one-node-protocol/src/lz4Helper.ts @@ -0,0 +1,35 @@ +import { InvalidFormatError } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import LZ4 from 'lz4'; + +const decompress = (bytes: Buffer, max: number) => { + const length = new BN(bytes.slice(0, 4), 'le').toNumber(); + if (length < 0 || length > max) { + throw new InvalidFormatError(); + } + + const uncompressed = Buffer.alloc(length); + const uncompressedSize = LZ4.decodeBlock(bytes, uncompressed, 4); + + if (uncompressedSize !== length) { + throw new InvalidFormatError(); + } + + return uncompressed; +}; + +const compress = (bytes: Buffer) => { + const maxLength = LZ4.encodeBound(bytes.length); + const encoded = Buffer.alloc(maxLength); + const length = LZ4.encodeBlock(bytes, encoded); + const result = encoded.slice(0, length); + const lengthBuffer = Buffer.alloc(4); + lengthBuffer.writeInt32LE(bytes.length, 0); + + return Buffer.concat([lengthBuffer, result]); +}; + +export const lz4Helper = { + decompress, + compress, +}; diff --git a/packages/neo-one-node-protocol/src/payload/AddrPayload.ts b/packages/neo-one-node-protocol/src/payload/AddrPayload.ts index 32ee061a65..729fcadb73 100644 --- a/packages/neo-one-node-protocol/src/payload/AddrPayload.ts +++ b/packages/neo-one-node-protocol/src/payload/AddrPayload.ts @@ -1,16 +1,27 @@ -import { BinaryWriter, createSerializeWire, SerializableWire, SerializeWire } from '@neo-one/client-common'; +import { + BinaryWriter, + createSerializeWire, + InvalidFormatError, + SerializableWire, + SerializeWire, +} from '@neo-one/client-common'; import { BinaryReader, DeserializeWireBaseOptions, DeserializeWireOptions } from '@neo-one/node-core'; import { NetworkAddress } from './NetworkAddress'; export interface AddrPayloadAdd { - readonly addresses: readonly NetworkAddress[]; + readonly addressList: readonly NetworkAddress[]; } -export class AddrPayload implements SerializableWire { +export class AddrPayload implements SerializableWire { + public static readonly maxCountToSend = 200; public static deserializeWireBase(options: DeserializeWireBaseOptions): AddrPayload { const { reader } = options; - const addresses = reader.readArray(() => NetworkAddress.deserializeWireBase(options)); + const addressList = reader.readArray(() => NetworkAddress.deserializeWireBase(options)); - return new this({ addresses }); + if (addressList.length === 0) { + throw new InvalidFormatError(); + } + + return new this({ addressList }); } public static deserializeWire(options: DeserializeWireOptions): AddrPayload { @@ -20,14 +31,14 @@ export class AddrPayload implements SerializableWire { }); } - public readonly addresses: readonly NetworkAddress[]; + public readonly addressList: readonly NetworkAddress[]; public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - public constructor({ addresses }: AddrPayloadAdd) { - this.addresses = addresses; + public constructor({ addressList }: AddrPayloadAdd) { + this.addressList = addressList; } public serializeWireBase(writer: BinaryWriter): void { - writer.writeArray(this.addresses, (address) => address.serializeWireBase(writer)); + writer.writeArray(this.addressList, (address) => address.serializeWireBase(writer)); } } diff --git a/packages/neo-one-node-protocol/src/payload/FilterAddPayload.ts b/packages/neo-one-node-protocol/src/payload/FilterAddPayload.ts index 063325d78c..9c5a50e129 100644 --- a/packages/neo-one-node-protocol/src/payload/FilterAddPayload.ts +++ b/packages/neo-one-node-protocol/src/payload/FilterAddPayload.ts @@ -4,7 +4,7 @@ export interface FilterAddPayloadAdd { readonly data: Buffer; } -export class FilterAddPayload implements SerializableWire { +export class FilterAddPayload implements SerializableWire { public static deserializeWireBase({ reader }: DeserializeWireBaseOptions): FilterAddPayload { const data = reader.readVarBytesLE(520); diff --git a/packages/neo-one-node-protocol/src/payload/FilterLoadPayload.ts b/packages/neo-one-node-protocol/src/payload/FilterLoadPayload.ts index 00aabd9a66..4e5d6fa140 100644 --- a/packages/neo-one-node-protocol/src/payload/FilterLoadPayload.ts +++ b/packages/neo-one-node-protocol/src/payload/FilterLoadPayload.ts @@ -12,7 +12,7 @@ export interface FilterLoadPayloadAdd { readonly tweak: number; } -export class FilterLoadPayload implements SerializableWire { +export class FilterLoadPayload implements SerializableWire { public static deserializeWireBase({ reader }: DeserializeWireBaseOptions): FilterLoadPayload { const filter = reader.readVarBytesLE(36000); const k = reader.readUInt8(); diff --git a/packages/neo-one-node-protocol/src/payload/GetBlockByIndexPayload.ts b/packages/neo-one-node-protocol/src/payload/GetBlockByIndexPayload.ts new file mode 100644 index 0000000000..9e7758fa4d --- /dev/null +++ b/packages/neo-one-node-protocol/src/payload/GetBlockByIndexPayload.ts @@ -0,0 +1,52 @@ +import { BinaryWriter, createSerializeWire, InvalidFormatError } from '@neo-one/client-common'; +import { BinaryReader, DeserializeWireBaseOptions, DeserializeWireOptions } from '@neo-one/node-core'; +import { HeadersPayload } from './HeadersPayload'; + +export interface GetBlockByIndexPayloadAdd { + readonly indexStart: number; + readonly count: number; +} + +export class GetBlockByIndexPayload { + public static create(indexStart: number, count = -1) { + return new GetBlockByIndexPayload({ + indexStart, + count, + }); + } + + public static deserializeWireBase(options: DeserializeWireBaseOptions) { + const { reader } = options; + const indexStart = reader.readUInt32LE(); + const count = reader.readUInt16LE(); + if (count < -1 || count === 0 || count > HeadersPayload.maxHeadersCount) { + throw new InvalidFormatError(`Expected count to be either -1 or 0 < count < 2000, found: ${count}`); + } + + return new GetBlockByIndexPayload({ + indexStart, + count, + }); + } + + public static deserializeWire(options: DeserializeWireOptions) { + return this.deserializeWireBase({ + reader: new BinaryReader(options.buffer), + context: options.context, + }); + } + + public readonly indexStart: number; + public readonly count: number; + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + + public constructor({ indexStart, count }: GetBlockByIndexPayloadAdd) { + this.indexStart = indexStart; + this.count = count; + } + + public serializeWireBase(writer: BinaryWriter) { + writer.writeInt32LE(this.indexStart); + writer.writeInt16LE(this.count); + } +} diff --git a/packages/neo-one-node-protocol/src/payload/GetBlocksPayload.ts b/packages/neo-one-node-protocol/src/payload/GetBlocksPayload.ts index 5c22e41248..e730e9f16e 100644 --- a/packages/neo-one-node-protocol/src/payload/GetBlocksPayload.ts +++ b/packages/neo-one-node-protocol/src/payload/GetBlocksPayload.ts @@ -1,23 +1,33 @@ import { BinaryWriter, - common, createSerializeWire, + InvalidFormatError, SerializableWire, SerializeWire, UInt256, } from '@neo-one/client-common'; import { BinaryReader, DeserializeWireBaseOptions, DeserializeWireOptions } from '@neo-one/node-core'; export interface GetBlocksPayloadAdd { - readonly hashStart: readonly UInt256[]; - readonly hashStop?: UInt256; + readonly hashStart: UInt256; + readonly count?: number; } -export class GetBlocksPayload implements SerializableWire { +export class GetBlocksPayload implements SerializableWire { + public static create(hashStart: UInt256, count = -1) { + return new GetBlocksPayload({ + hashStart, + count, + }); + } public static deserializeWireBase({ reader }: DeserializeWireBaseOptions): GetBlocksPayload { - const hashStart = reader.readArray(() => reader.readUInt256()); - const hashStop = reader.readUInt256(); + const hashStart = reader.readUInt256(); + const count = reader.readUInt16LE(); - return new this({ hashStart, hashStop }); + if (count < -1 || count === 0) { + throw new InvalidFormatError(`Expected count === -1 || count > 0, found: ${count}`); + } + + return new this({ hashStart, count }); } public static deserializeWire(options: DeserializeWireOptions): GetBlocksPayload { @@ -27,19 +37,17 @@ export class GetBlocksPayload implements SerializableWire { }); } - public readonly hashStart: readonly UInt256[]; - public readonly hashStop: UInt256; + public readonly hashStart: UInt256; + public readonly count: number; public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - public constructor({ hashStart, hashStop = common.ZERO_UINT256 }: GetBlocksPayloadAdd) { + public constructor({ hashStart, count = -1 }: GetBlocksPayloadAdd) { this.hashStart = hashStart; - this.hashStop = hashStop; + this.count = count; } public serializeWireBase(writer: BinaryWriter): void { - writer.writeArray(this.hashStart, (value) => { - writer.writeUInt256(value); - }); - writer.writeUInt256(this.hashStop); + writer.writeUInt256(this.hashStart); + writer.writeUInt16LE(this.count); } } diff --git a/packages/neo-one-node-protocol/src/payload/HeadersPayload.ts b/packages/neo-one-node-protocol/src/payload/HeadersPayload.ts index 866217e0a4..5838264923 100644 --- a/packages/neo-one-node-protocol/src/payload/HeadersPayload.ts +++ b/packages/neo-one-node-protocol/src/payload/HeadersPayload.ts @@ -4,7 +4,8 @@ export interface HeadersPayloadAdd { readonly headers: readonly Header[]; } -export class HeadersPayload implements SerializableWire { +export class HeadersPayload implements SerializableWire { + public static readonly maxHeadersCount = 2000; public static deserializeWireBase(options: DeserializeWireBaseOptions): HeadersPayload { const { reader } = options; const headers = reader.readArray(() => Header.deserializeWireBase(options)); diff --git a/packages/neo-one-node-protocol/src/payload/InvPayload.ts b/packages/neo-one-node-protocol/src/payload/InvPayload.ts index f570bd72c8..14db968086 100644 --- a/packages/neo-one-node-protocol/src/payload/InvPayload.ts +++ b/packages/neo-one-node-protocol/src/payload/InvPayload.ts @@ -1,12 +1,15 @@ import { BinaryWriter, createSerializeWire, SerializableWire, SerializeWire, UInt256 } from '@neo-one/client-common'; import { BinaryReader, DeserializeWireBaseOptions, DeserializeWireOptions } from '@neo-one/node-core'; +import { range } from 'lodash'; import { assertInventoryType, InventoryType } from './InventoryType'; export interface InvPayloadAdd { readonly type: InventoryType; readonly hashes: readonly UInt256[]; } -export class InvPayload implements SerializableWire { +export const maxHashesCount = 500; + +export class InvPayload implements SerializableWire { public static deserializeWireBase({ reader }: DeserializeWireBaseOptions): InvPayload { const type = assertInventoryType(reader.readUInt8()); const hashes = reader.readArray(() => reader.readUInt256()); @@ -21,6 +24,18 @@ export class InvPayload implements SerializableWire { }); } + public static createGroup(type: InventoryType, hashes: readonly UInt256[]) { + return range(0, hashes.length, maxHashesCount).map((idx) => { + const newEndIndex = idx + maxHashesCount; + const endIndex = newEndIndex > hashes.length ? hashes.length : newEndIndex; + + return new InvPayload({ + type, + hashes: hashes.slice(idx, endIndex), + }); + }); + } + public readonly type: InventoryType; public readonly hashes: readonly UInt256[]; public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); diff --git a/packages/neo-one-node-protocol/src/payload/InventoryType.ts b/packages/neo-one-node-protocol/src/payload/InventoryType.ts index 2554c6c4f2..fb96861bc7 100644 --- a/packages/neo-one-node-protocol/src/payload/InventoryType.ts +++ b/packages/neo-one-node-protocol/src/payload/InventoryType.ts @@ -1,9 +1,9 @@ import { makeErrorWithCode } from '@neo-one/utils'; export enum InventoryType { - Transaction = 0x01, - Block = 0x02, - Consensus = 0xe0, + TX = 0x2b, + Block = 0x2c, + Consensus = 0x2d, } export const InvalidInventoryTypeError = makeErrorWithCode( diff --git a/packages/neo-one-node-protocol/src/payload/MerkleBlockPayload.ts b/packages/neo-one-node-protocol/src/payload/MerkleBlockPayload.ts index 46524eccf6..94ab97761c 100644 --- a/packages/neo-one-node-protocol/src/payload/MerkleBlockPayload.ts +++ b/packages/neo-one-node-protocol/src/payload/MerkleBlockPayload.ts @@ -1,25 +1,58 @@ -import { BinaryWriter, IOHelper, SerializableWire, UInt256 } from '@neo-one/client-common'; +import { BinaryWriter, createSerializeWire, IOHelper, SerializableWire, UInt256 } from '@neo-one/client-common'; import { BinaryReader, + Block, BlockBase, BlockBaseAdd, DeserializeWireBaseOptions, DeserializeWireOptions, + MerkleTree, utils, } from '@neo-one/node-core'; export interface MerkleBlockPayloadAdd extends BlockBaseAdd { - readonly transactionCount: number; + readonly contentCount: number; readonly hashes: readonly UInt256[]; readonly flags: Buffer; } -export class MerkleBlockPayload extends BlockBase implements SerializableWire { +export class MerkleBlockPayload extends BlockBase implements SerializableWire { + public static create({ + block, + flags, + }: { + readonly block: Block; + readonly flags: readonly boolean[]; + }): MerkleBlockPayload { + const tree = new MerkleTree(block.transactions.map((transaction) => transaction.hash)).trim(flags); + + const mutableBuffer = Buffer.allocUnsafe(Math.floor((flags.length + 7) / 8)); + // tslint:disable-next-line no-loop-statement + for (let i = 0; i < flags.length; i += 1) { + if (flags[i]) { + // tslint:disable-next-line no-bitwise + mutableBuffer[Math.floor(i / 8)] |= 1 << i % 8; + } + } + + return new MerkleBlockPayload({ + version: block.version, + previousHash: block.previousHash, + merkleRoot: block.merkleRoot, + timestamp: block.timestamp, + index: block.index, + nextConsensus: block.nextConsensus, + witness: block.witness, + contentCount: block.transactions.length + 1, + hashes: tree.toHashArray(), + flags: mutableBuffer, + }); + } public static deserializeWireBase(options: DeserializeWireBaseOptions): MerkleBlockPayload { const { reader } = options; - const blockBase = super.deserializeBlockBaseWireBase(options); - const transactionCount = reader.readVarUIntLE(utils.INT_MAX_VALUE).toNumber(); - const hashes = reader.readArray(() => reader.readUInt256()); - const flags = reader.readVarBytesLE(); + const blockBase = super.deserializeWireBase(options); + const contentCount = reader.readVarUIntLE(Block.MaxTransactionsPerBlock.addn(1)).toNumber(); + const hashes = reader.readArray(() => reader.readUInt256(), contentCount); + const flags = reader.readVarBytesLE((contentCount + 7) / 8); return new this({ version: blockBase.version, @@ -27,10 +60,9 @@ export class MerkleBlockPayload extends BlockBase implements SerializableWire number; @@ -54,10 +87,9 @@ export class MerkleBlockPayload extends BlockBase implements SerializableWire { writer.writeUInt256(hash); }); diff --git a/packages/neo-one-node-protocol/src/payload/NetworkAddress.ts b/packages/neo-one-node-protocol/src/payload/NetworkAddress.ts index f5c9074057..bd457317b9 100644 --- a/packages/neo-one-node-protocol/src/payload/NetworkAddress.ts +++ b/packages/neo-one-node-protocol/src/payload/NetworkAddress.ts @@ -5,33 +5,50 @@ import { SerializableWire, SerializeWire, } from '@neo-one/client-common'; -import { BinaryReader, DeserializeWireBaseOptions, DeserializeWireOptions } from '@neo-one/node-core'; -import { BN } from 'bn.js'; +import { + assertServerCapability, + BinaryReader, + createEndpoint, + deserializeNodeCapabilityWireBase, + DeserializeWireBaseOptions, + DeserializeWireOptions, + NodeCapability, + NodeCapabilityType, + utils, +} from '@neo-one/node-core'; import { Address6 } from 'ip-address'; +import { VersionPayload } from './VersionPayload'; export interface NetworkAddressAdd { - readonly host: string; - readonly port: number; readonly timestamp: number; - readonly services: BN; + readonly address: string; + readonly capabilities: readonly NodeCapability[]; } const BYTE_LENGTH = 16; -export class NetworkAddress implements SerializableWire { - public static deserializeWireBase({ reader }: DeserializeWireBaseOptions): NetworkAddress { +export class NetworkAddress implements SerializableWire { + public static deserializeWireBase(options: DeserializeWireBaseOptions): NetworkAddress { + const { reader } = options; const timestamp = reader.readUInt32LE(); - const services = reader.readUInt64LE(); - const address = Address6.fromByteArray([...reader.readBytes(16)]) as Address6 | undefined | null; - const port = reader.readUInt16BE(); + const address = Address6.fromByteArray([...reader.readBytes(BYTE_LENGTH)]) as Address6 | undefined | null; const canonical = address == undefined ? '' : (address.canonicalForm() as string | undefined | null); + const capabilities = reader.readArray( + () => deserializeNodeCapabilityWireBase(options), + VersionPayload.maxCapabilities, + ); + + if (new Set(capabilities.map((cap) => cap.type)).size !== capabilities.length) { + // TODO: implement new error same as VersionPayload + throw new InvalidFormatError(); + } + return new this({ timestamp, - services, - host: canonical == undefined ? '' : canonical, - port, + address: canonical == undefined ? '' : canonical, + capabilities, }); } @@ -63,28 +80,48 @@ export class NetworkAddress implements SerializableWire { return parts.length === 4 ? Address6.fromAddress4(host) : new Address6(host); } - public readonly host: string; - public readonly port: number; public readonly timestamp: number; - public readonly services: BN; + public readonly address: string; + public readonly capabilities: readonly NodeCapability[]; public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); - public constructor({ host, port, timestamp, services }: NetworkAddressAdd) { - this.host = host; - this.port = port; + public constructor({ timestamp, address, capabilities }: NetworkAddressAdd) { this.timestamp = timestamp; - this.services = services; + this.address = address; + this.capabilities = capabilities; + } + + public get endpoint() { + return utils.lazy(() => this.getEndpointInternal())(); + } + + public get port() { + return utils.lazy(() => this.getPortInternal())(); } public serializeWireBase(writer: BinaryWriter): void { - const address = NetworkAddress.getAddress6(this.host); + const address = NetworkAddress.getAddress6(this.address); if (address == undefined) { throw new InvalidFormatError('Network IP address undefined'); } + writer.writeUInt32LE(this.timestamp); - writer.writeUInt64LE(this.services); + const addressSerialized = Buffer.from(address.toByteArray()); writer.writeBytes(Buffer.concat([Buffer.alloc(BYTE_LENGTH - addressSerialized.length, 0), addressSerialized])); - writer.writeUInt16BE(this.port); + + writer.writeArray(this.capabilities, (cap) => cap.serializeWireBase(writer)); + } + + private getPortInternal() { + const tcpCapabilities = this.capabilities + .filter((cap) => cap.type === NodeCapabilityType.TcpServer) + .map(assertServerCapability); + + return tcpCapabilities[0]?.port ?? 0; + } + + private getEndpointInternal() { + return createEndpoint({ type: 'tcp', host: this.address, port: this.port }); } } diff --git a/packages/neo-one-node-protocol/src/payload/PingPayload.ts b/packages/neo-one-node-protocol/src/payload/PingPayload.ts new file mode 100644 index 0000000000..72082a477d --- /dev/null +++ b/packages/neo-one-node-protocol/src/payload/PingPayload.ts @@ -0,0 +1,59 @@ +import { BinaryWriter, createSerializeWire } from '@neo-one/client-common'; +import { BinaryReader, DeserializeWireBaseOptions, DeserializeWireOptions, utils } from '@neo-one/node-core'; + +export interface PingPayloadAdd { + readonly lastBlockIndex: number; + readonly timestamp: number; + readonly nonce: number; +} + +export class PingPayload { + public static create(height: number, nonceIn?: number) { + const nonce = nonceIn ? nonceIn : utils.randomUInt(); + const timestamp = Math.round(Date.now() / 1000); + + return new PingPayload({ + lastBlockIndex: height, + timestamp, + nonce, + }); + } + + public static deserializeWireBase(options: DeserializeWireBaseOptions) { + const { reader } = options; + const lastBlockIndex = reader.readUInt32LE(); + const timestamp = reader.readUInt32LE(); + const nonce = reader.readUInt32LE(); + + return new this({ + lastBlockIndex, + timestamp, + nonce, + }); + } + + public static deserializeWire(options: DeserializeWireOptions) { + return this.deserializeWireBase({ + reader: new BinaryReader(options.buffer), + context: options.context, + }); + } + + public readonly lastBlockIndex: number; + public readonly timestamp: number; + public readonly nonce: number; + + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + + public constructor({ lastBlockIndex, timestamp, nonce }: PingPayloadAdd) { + this.lastBlockIndex = lastBlockIndex; + this.timestamp = timestamp; + this.nonce = nonce; + } + + public serializeWireBase(writer: BinaryWriter) { + writer.writeUInt32LE(this.lastBlockIndex); + writer.writeUInt32LE(this.timestamp); + writer.writeUInt32LE(this.nonce); + } +} diff --git a/packages/neo-one-node-protocol/src/payload/VersionPayload.ts b/packages/neo-one-node-protocol/src/payload/VersionPayload.ts index a010427a44..d06e62c5bb 100644 --- a/packages/neo-one-node-protocol/src/payload/VersionPayload.ts +++ b/packages/neo-one-node-protocol/src/payload/VersionPayload.ts @@ -1,89 +1,96 @@ -import { BinaryWriter, createSerializeWire, SerializableWire, SerializeWire } from '@neo-one/client-common'; -import { BinaryReader, DeserializeWireBaseOptions, DeserializeWireOptions } from '@neo-one/node-core'; -import { BN } from 'bn.js'; +import { BinaryWriter, createSerializeWire, InvalidFormatError } from '@neo-one/client-common'; +import { + BinaryReader, + deserializeNodeCapabilityWireBase, + DeserializeWireBaseOptions, + DeserializeWireOptions, + NodeCapability, +} from '@neo-one/node-core'; -export const SERVICES = { - NODE_NETWORK: new BN(1), -}; export interface VersionPayloadAdd { - readonly protocolVersion: number; - readonly services: BN; + readonly magic: number; + readonly version: number; readonly timestamp: number; - readonly port: number; readonly nonce: number; readonly userAgent: string; - readonly startHeight: number; - readonly relay: boolean; + readonly capabilities: readonly NodeCapability[]; } -export class VersionPayload implements SerializableWire { - public static deserializeWireBase({ reader }: DeserializeWireBaseOptions): VersionPayload { - const protocolVersion = reader.readUInt32LE(); - const services = reader.readUInt64LE(); +export class VersionPayload { + public static readonly maxCapabilities = 32; + public static deserializeWireBase(options: DeserializeWireBaseOptions): VersionPayload { + const { reader } = options; + const magic = reader.readUInt32LE(); + const version = reader.readUInt32LE(); const timestamp = reader.readUInt32LE(); - const port = reader.readUInt16LE(); const nonce = reader.readUInt32LE(); const userAgent = reader.readVarString(1024); - const startHeight = reader.readUInt32LE(); - const relay = reader.readBoolean(); - return new this({ - protocolVersion, - services, + const capabilities = reader.readArray(() => deserializeNodeCapabilityWireBase(options), this.maxCapabilities); + + // TODO: test this is working as intended (checking distinct capabilities) + if (new Set(capabilities.map((cap) => cap.type)).size !== capabilities.length) { + throw new InvalidFormatError(); + } + + return new VersionPayload({ + magic, + version, timestamp, - port, nonce, userAgent, - startHeight, - relay, + capabilities, }); } public static deserializeWire(options: DeserializeWireOptions): VersionPayload { return this.deserializeWireBase({ - context: options.context, reader: new BinaryReader(options.buffer), + context: options.context, + }); + } + + public static create({ + magic, + version, + nonce, + userAgent, + capabilities, + }: Omit): VersionPayload { + return new VersionPayload({ + magic, + version, + timestamp: Math.round(Date.now() / 1000), + nonce, + userAgent, + capabilities, }); } - public readonly protocolVersion: number; - public readonly services: BN; + public readonly magic: number; + public readonly version: number; public readonly timestamp: number; - public readonly port: number; public readonly nonce: number; public readonly userAgent: string; - public readonly startHeight: number; - public readonly relay: boolean; - public readonly serializeWire: SerializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + public readonly capabilities: readonly NodeCapability[]; - public constructor({ - protocolVersion, - services, - timestamp, - port, - nonce, - userAgent, - startHeight, - relay, - }: VersionPayloadAdd) { - this.protocolVersion = protocolVersion; - this.services = services; + public readonly serializeWire = createSerializeWire(this.serializeWireBase.bind(this)); + + public constructor({ magic, version, timestamp, nonce, userAgent, capabilities }: VersionPayloadAdd) { + this.magic = magic; + this.version = version; this.timestamp = timestamp; - this.port = port; this.nonce = nonce; this.userAgent = userAgent; - this.startHeight = startHeight; - this.relay = relay; + this.capabilities = capabilities; } - public serializeWireBase(writer: BinaryWriter): void { - writer.writeUInt32LE(this.protocolVersion); - writer.writeUInt64LE(this.services); + public serializeWireBase(writer: BinaryWriter) { + writer.writeUInt32LE(this.magic); + writer.writeUInt32LE(this.version); writer.writeUInt32LE(this.timestamp); - writer.writeUInt16LE(this.port); writer.writeUInt32LE(this.nonce); writer.writeVarString(this.userAgent); - writer.writeUInt32LE(this.startHeight); - writer.writeBoolean(this.relay); + writer.writeArray(this.capabilities, (capability) => capability.serializeWireBase(writer)); } } diff --git a/packages/neo-one-node-protocol/src/payload/index.ts b/packages/neo-one-node-protocol/src/payload/index.ts index c48d0f2673..88100270a0 100644 --- a/packages/neo-one-node-protocol/src/payload/index.ts +++ b/packages/neo-one-node-protocol/src/payload/index.ts @@ -2,10 +2,12 @@ export { AddrPayload } from './AddrPayload'; export { FilterAddPayload } from './FilterAddPayload'; export { FilterLoadPayload } from './FilterLoadPayload'; export { GetBlocksPayload } from './GetBlocksPayload'; +export { GetBlockByIndexPayload } from './GetBlockByIndexPayload'; export { HeadersPayload } from './HeadersPayload'; export { InvPayload } from './InvPayload'; export { MerkleBlockPayload } from './MerkleBlockPayload'; export { NetworkAddress } from './NetworkAddress'; -export { VersionPayload, SERVICES } from './VersionPayload'; +export { PingPayload } from './PingPayload'; +export { VersionPayload } from './VersionPayload'; export { InventoryType } from './InventoryType'; diff --git a/packages/neo-one-node-protocol/src/types/lz4.d.ts b/packages/neo-one-node-protocol/src/types/lz4.d.ts new file mode 100644 index 0000000000..656fc5744a --- /dev/null +++ b/packages/neo-one-node-protocol/src/types/lz4.d.ts @@ -0,0 +1,5 @@ +declare module 'lz4' { + export const decodeBlock: (bytes: Buffer, target: Buffer, startId?: number, endId?: number) => number; + export const encodeBlock: (bytes: Buffer, target: Buffer, startId?: number, endId?: number) => number; + export const encodeBound: (size: number) => number; +} diff --git a/packages/neo-one-node-protocol/tsconfig.json b/packages/neo-one-node-protocol/tsconfig.json new file mode 100644 index 0000000000..791f85c17e --- /dev/null +++ b/packages/neo-one-node-protocol/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json", + "types": ["./node_modules/@types", "./src/types/lz4.d.ts"] +} diff --git a/packages/neo-one-node-rpc-handler/.npmignore b/packages/neo-one-node-rpc-handler/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-node-rpc-handler/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-node-rpc-handler/CHANGELOG.json b/packages/neo-one-node-rpc-handler/CHANGELOG.json new file mode 100644 index 0000000000..5d91bd8958 --- /dev/null +++ b/packages/neo-one-node-rpc-handler/CHANGELOG.json @@ -0,0 +1,131 @@ +{ + "name": "@neo-one/node-rpc-handler", + "entries": [ + { + "version": "3.0.0", + "tag": "@neo-one/node-rpc-handler_v3.0.0", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "major": [ + { + "comment": "3.0.0preview3-alpha release bump" + } + ], + "none": [ + { + "comment": "3.0.0preview3.1 release bump" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/node-rpc-handler_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "dependency": [ + { + "comment": "Dependency @neo-one/client-common version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Dependency @neo-one/client-switch version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.6.0` to `^2.6.1`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + } + ], + "patch": [ + { + "comment": "fixup utxo invocation transactions" + }, + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/node-rpc-handler_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "remove opencensus metrics temporarily" + }, + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/node-rpc-handler_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-node-rpc-handler/CHANGELOG.md b/packages/neo-one-node-rpc-handler/CHANGELOG.md index 5e22ca1445..65831ee263 100644 --- a/packages/neo-one-node-rpc-handler/CHANGELOG.md +++ b/packages/neo-one-node-rpc-handler/CHANGELOG.md @@ -1,143 +1,42 @@ -# Change Log +# Change Log - @neo-one/node-rpc-handler -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-rpc-handler@1.3.4...@neo-one/node-rpc-handler@2.3.0) (2019-10-23) +## 3.0.0 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/node-rpc-handler +### Breaking changes +- 3.0.0preview3-alpha release bump +### Updates +- 3.0.0preview3.1 release bump +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT -## [1.3.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-rpc-handler@1.3.3...@neo-one/node-rpc-handler@1.3.4) (2019-10-23) +### Patches -**Note:** Version bump only for package @neo-one/node-rpc-handler +- fixup utxo invocation transactions +- Upgrade TypeScript from v3.8.3 to v3.9.5 +### Updates +- bump package version for future release clarity +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes -## [1.3.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-rpc-handler@1.3.2...@neo-one/node-rpc-handler@1.3.3) (2019-10-23) +- remove opencensus metrics temporarily +- update package release process to take better advantage of rush tooling -**Note:** Version bump only for package @neo-one/node-rpc-handler +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT +### Minor changes +- Migrate to Rush - - -## [1.3.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-rpc-handler@1.3.1...@neo-one/node-rpc-handler@1.3.2) (2019-09-04) - -**Note:** Version bump only for package @neo-one/node-rpc-handler - - - - - -## [1.3.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-rpc-handler@1.3.0...@neo-one/node-rpc-handler@1.3.1) (2019-08-30) - -**Note:** Version bump only for package @neo-one/node-rpc-handler - - - - - -# [1.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-rpc-handler@1.2.0...@neo-one/node-rpc-handler@1.3.0) (2019-08-23) - - -### Features - -* **e2e:** node-bin e2e consensus test ([0671932](https://github.com/neo-one-suite/neo-one/commit/0671932)) - - - - - -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-rpc-handler@1.1.5...@neo-one/node-rpc-handler@1.2.0) (2019-08-22) - - -### Features - -* **monitor:** remove @neo-one/monitor. replace with opencensus, pino, and debug ([#1597](https://github.com/neo-one-suite/neo-one/issues/1597)) ([4b1a28f](https://github.com/neo-one-suite/neo-one/commit/4b1a28f)) - - - - - -## [1.1.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-rpc-handler@1.1.4...@neo-one/node-rpc-handler@1.1.5) (2019-07-29) - -**Note:** Version bump only for package @neo-one/node-rpc-handler - - - - - -## [1.1.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-rpc-handler@1.1.3...@neo-one/node-rpc-handler@1.1.4) (2019-06-20) - - -### Bug Fixes - -* **deps:** update dependency typescript to v3.5.1 ([#1365](https://github.com/neo-one-suite/neo-one/issues/1365)) ([ec89546](https://github.com/neo-one-suite/neo-one/commit/ec89546)) - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-rpc-handler@1.1.2...@neo-one/node-rpc-handler@1.1.3) (2019-06-04) - - -### Bug Fixes - -* **@neo-one/types:** eliminate global types from @neo-one/types ([004330d](https://github.com/neo-one-suite/neo-one/commit/004330d)) - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-rpc-handler@1.1.1...@neo-one/node-rpc-handler@1.1.2) (2019-04-12) - -**Note:** Version bump only for package @neo-one/node-rpc-handler - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-rpc-handler@1.1.0...@neo-one/node-rpc-handler@1.1.1) (2019-03-27) - -**Note:** Version bump only for package @neo-one/node-rpc-handler - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-rpc-handler@1.0.2...@neo-one/node-rpc-handler@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node-rpc-handler - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-rpc-handler@1.0.2-alpha.0...@neo-one/node-rpc-handler@1.0.2) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node-rpc-handler - - - - - -## [1.0.2-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-rpc-handler@1.0.1...@neo-one/node-rpc-handler@1.0.2-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **deps:** update dependency rxjs to v6.4.0 ([e28af2a](https://github.com/neo-one-suite/neo-one/commit/e28af2a)) - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-rpc-handler@1.0.0...@neo-one/node-rpc-handler@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/node-rpc-handler diff --git a/packages/neo-one-node-rpc-handler/gulpfile.js b/packages/neo-one-node-rpc-handler/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-node-rpc-handler/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-node-rpc-handler/package.json b/packages/neo-one-node-rpc-handler/package.json index b79aadd2a3..ee62e6051e 100644 --- a/packages/neo-one-node-rpc-handler/package.json +++ b/packages/neo-one-node-rpc-handler/package.json @@ -1,16 +1,30 @@ { "name": "@neo-one/node-rpc-handler", - "version": "2.3.0", + "version": "3.0.0", "description": "NEOβ€’ONE RPC handler.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.3.0", - "@neo-one/client-switch": "^2.3.0", - "@neo-one/logger": "^2.3.0", - "@neo-one/node-core": "^2.3.0", - "@neo-one/utils": "^2.3.0", - "rxjs": "^6.5.2", + "@neo-one/client-common": "^3.0.0", + "@neo-one/client-switch": "^3.0.0", + "@neo-one/logger": "^2.6.1", + "@neo-one/node-core": "^3.0.0", + "@neo-one/utils": "^3.0.0", + "@types/bn.js": "^4.11.5", + "bn.js": "^5.0.0", + "rxjs": "^6.5.3", "tslib": "^1.10.0" }, - "sideEffects": false + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-node-rpc-handler/src/createHandler.ts b/packages/neo-one-node-rpc-handler/src/createHandler.ts index 4cab338e82..35324bebd5 100644 --- a/packages/neo-one-node-rpc-handler/src/createHandler.ts +++ b/packages/neo-one-node-rpc-handler/src/createHandler.ts @@ -1,21 +1,39 @@ -import { common, crypto, JSONHelper, RelayTransactionResultJSON, TransactionJSON, utils } from '@neo-one/client-common'; -import { AggregationType, globalStats, MeasureUnit, TagMap } from '@neo-one/client-switch'; +import { + CallReceiptJSON, + common, + crypto, + JSONHelper, + RelayTransactionResultJSON, + scriptHashToAddress, + toVerifyResultJSON, + toVMStateJSON, + TransactionJSON, + TransactionReceiptJSON, + utils as commonUtils, + VerboseTransactionJSON, + VerifyResultModel, +} from '@neo-one/client-common'; import { createChild, nodeLogger } from '@neo-one/logger'; import { - Account, + Block, Blockchain, - deserializeTransactionWire, + CallReceipt, getEndpointConfig, - Input, - InvocationTransaction, + NativeContainer, + Nep5Transfer, + Nep5TransferKey, Node, - RelayTransactionResult, + Signer, + Signers, + StackItem, + stackItemToJSON, + StorageKey, Transaction, - TransactionData, - TransactionType, + TransactionState, } from '@neo-one/node-core'; -import { Labels, labelToTag, utils as commonUtils } from '@neo-one/utils'; -import { filter, switchMap, take, timeout, toArray } from 'rxjs/operators'; +import { Labels, utils } from '@neo-one/utils'; +import { BN } from 'bn.js'; +import { filter, map, switchMap, take, timeout, toArray } from 'rxjs/operators'; const logger = createChild(nodeLogger, { component: 'rpc-handler' }); @@ -53,38 +71,67 @@ export class JSONRPCError { } const RPC_METHODS: { readonly [key: string]: string } = { - getaccountstate: 'getaccountstate', - getassetstate: 'getassetstate', + // Blockchain getbestblockhash: 'getbestblockhash', getblock: 'getblock', getblockcount: 'getblockcount', getblockhash: 'getblockhash', - getblocksysfee: 'getblocksysfee', - getconnectioncount: 'getconnectioncount', + getblockheader: 'getblockheader', getcontractstate: 'getcontractstate', getrawmempool: 'getrawmempool', getrawtransaction: 'getrawtransaction', getstorage: 'getstorage', - gettxout: 'gettxout', - invoke: 'invoke', - invokefunction: 'invokefunction', - invokescript: 'invokescript', + getvalidators: 'getvalidators', + gettransactionheight: 'gettransactionheight', + + // Node + getconnectioncount: 'getconnectioncount', + getpeers: 'getpeers', + getversion: 'getversion', sendrawtransaction: 'sendrawtransaction', submitblock: 'submitblock', + + // SmartContract + invokefunction: 'invokefunction', + invokescript: 'invokescript', + getunclaimedgas: 'getunclaimedgas', + testtransaction: 'testtransaction', + + // Utilities + listplugins: 'listplugins', validateaddress: 'validateaddress', - getpeers: 'getpeers', + getapplicationlog: 'getapplicationlog', + + // Wallet + closewallet: 'closewallet', + dumpprivkey: 'dumpprivkey', + getnewaddress: 'getnewaddress', + getwalletbalance: 'getwalletbalance', + getwalletunclaimedgas: 'getwalletunclaimedgas', + importprivkey: 'importprivkey', + listaddress: 'listaddress', + openwallet: 'openwallet', + sendfrom: 'sendfrom', + sendmany: 'sendmany', + sendtoaddress: 'sendtoaddress', + + // NEP5 + getnep5transfers: 'getnep5transfers', + getnep5balances: 'getnep5balances', + + // TODO: I want to say both of these can be removed since you can make changes to policy contract storage + updatesettings: 'updatesettings', + getsettings: 'getsettings', + + // NEOβ€’ONE + getfeeperbyte: 'getfeeperbyte', + getverificationcost: 'getverificationcost', relaytransaction: 'relaytransaction', - getoutput: 'getoutput', - getclaimamount: 'getclaimamount', getallstorage: 'getallstorage', - testinvocation: 'testinvocation', gettransactionreceipt: 'gettransactionreceipt', getinvocationdata: 'getinvocationdata', - getvalidators: 'getvalidators', getnetworksettings: 'getnetworksettings', runconsensusnow: 'runconsensusnow', - updatesettings: 'updatesettings', - getsettings: 'getsettings', fastforwardoffset: 'fastforwardoffset', fastforwardtotime: 'fastforwardtotime', reset: 'reset', @@ -94,29 +141,24 @@ const RPC_METHODS: { readonly [key: string]: string } = { INVALID: 'INVALID', }; -const rpcTag = labelToTag(Labels.RPC_METHOD); - -const requestDurations = globalStats.createMeasureDouble('request/duration', MeasureUnit.MS); -const requestErrors = globalStats.createMeasureInt64('request/failures', MeasureUnit.UNIT); - -const SINGLE_REQUESTS_HISTOGRAM = globalStats.createView( - 'jsonrpc_server_single_request_duration_ms', - requestDurations, - AggregationType.DISTRIBUTION, - [rpcTag], - 'distribution of request durations', - [5, 10, 25, 50, 100, 250, 500, 1000, 2500, 5000, 10000], -); -globalStats.registerView(SINGLE_REQUESTS_HISTOGRAM); - -const SINGLE_REQUEST_ERRORS_COUNTER = globalStats.createView( - 'jsonrpc_server_single_request_failures_total', - requestErrors, - AggregationType.COUNT, - [rpcTag], - 'total number of request errors', -); -globalStats.registerView(SINGLE_REQUEST_ERRORS_COUNTER); +const mapToTransfers = ({ key, value }: { readonly key: Nep5TransferKey; readonly value: Nep5Transfer }) => ({ + timestamp: key.timestampMS.toNumber(), + assethash: common.uInt160ToString(key.assetScriptHash), + transferaddress: scriptHashToAddress(common.uInt160ToString(value.userScriptHash)), + amount: value.amount.toString(), + blockindex: value.blockIndex, + transfernotifyindex: key.blockTransferNotificationIndex, + txhash: common.uInt256ToString(value.txHash), +}); + +const getScriptHashAndAddress = (param: string, addressVersion: number) => { + if (param.length < 40) { + return { address: param, scriptHash: crypto.addressToScriptHash({ addressVersion, address: param }) }; + } + const scriptHash = JSONHelper.readUInt160(param); + + return { scriptHash, address: crypto.scriptHashToAddress({ addressVersion, scriptHash }) }; +}; const createJSONRPCHandler = (handlers: Handlers) => { // tslint:disable-next-line no-any @@ -138,7 +180,6 @@ const createJSONRPCHandler = (handlers: Handlers) => { // tslint:disable-next-line no-any const handleSingleRequest = async (requestIn: any) => { - const startTime = commonUtils.nowSeconds(); let labels = {}; let method = RPC_METHODS.UNKNOWN; try { @@ -176,13 +217,6 @@ const createJSONRPCHandler = (handlers: Handlers) => { const result = await handler(handlerParams); logger.debug({ name: 'jsonrpc_server_single_request', ...labels }); - globalStats.record([ - { - measure: requestDurations, - value: commonUtils.nowSeconds() - startTime, - }, - ]); - return { jsonrpc: '2.0', result, @@ -190,17 +224,6 @@ const createJSONRPCHandler = (handlers: Handlers) => { }; } catch (err) { logger.error({ name: 'jsonrpc_server_single_request', ...labels, err }); - const tags = new TagMap(); - tags.set(rpcTag, { value: method }); - globalStats.record( - [ - { - measure: requestErrors, - value: 1, - }, - ], - tags, - ); throw err; } @@ -256,23 +279,18 @@ const createJSONRPCHandler = (handlers: Handlers) => { return async (request: unknown) => handleRequestSafe({ [Labels.RPC_TYPE]: 'jsonrpc' }, request); }; -const getTransactionReceipt = (value: TransactionData) => ({ - blockIndex: value.startHeight, - blockHash: JSONHelper.writeUInt256(value.blockHash), - transactionIndex: value.index, - globalIndex: JSONHelper.writeUInt64(value.globalIndex), -}); - // tslint:disable-next-line no-any export type RPCHandler = (request: unknown) => Promise; export const createHandler = ({ blockchain, + native, node, handleGetNEOTrackerURL, handleResetProject, }: { readonly blockchain: Blockchain; + readonly native: NativeContainer; readonly node: Node; readonly handleGetNEOTrackerURL: () => Promise; readonly handleResetProject: () => Promise; @@ -283,31 +301,41 @@ export const createHandler = ({ } }; - const handlers: Handlers = { - [RPC_METHODS.getaccountstate]: async (args) => { - const hash = crypto.addressToScriptHash({ - addressVersion: blockchain.settings.addressVersion, - address: args[0], - }); + const getInvokeResult = (script: Buffer, receipt: CallReceipt): CallReceiptJSON => { + const { stack: stackIn, state, notifications, gasConsumed } = receipt; - let account = await blockchain.account.tryGet({ hash }); - if (account === undefined) { - account = new Account({ hash }); - } - - return account.serializeJSON(blockchain.serializeJSONContext); - }, - [RPC_METHODS.getassetstate]: async (args) => { - const asset = await blockchain.asset.tryGet({ - hash: JSONHelper.readUInt256(args[0]), - }); + try { + const stack = stackIn.map((item: StackItem) => stackItemToJSON(item, undefined)); + return { + script: script.toString('hex'), + state: toVMStateJSON(state), + stack, + gasconsumed: gasConsumed.toString(), + notifications: notifications.map((n) => n.serializeJSON()), + }; + } catch { + return { + script: script.toString('hex'), + state: toVMStateJSON(state), + stack: 'error: recursive reference', + gasconsumed: gasConsumed.toString(), + notifications: notifications.map((n) => n.serializeJSON()), + }; + } + }; - if (asset === undefined) { - throw new JSONRPCError(-100, 'Unknown asset'); - } + const getTransactionReceiptJSON = (block: Block, value: TransactionState): TransactionReceiptJSON => ({ + blockIndex: value.blockIndex, + blockHash: JSONHelper.writeUInt256(block.hash), + blockTime: JSONHelper.writeUInt64(block.timestamp), + globalIndex: JSONHelper.writeUInt64(new BN(-1)), + transactionIndex: block.transactions.findIndex((tx) => value.transaction.hash.equals(tx.hash)), + transactionHash: JSONHelper.writeUInt256(value.transaction.hash), + confirmations: blockchain.currentBlockIndex - block.index + 1, + }); - return asset.serializeJSON(blockchain.serializeJSONContext); - }, + const handlers: Handlers = { + // Blockchain [RPC_METHODS.getbestblockhash]: async () => JSONHelper.writeUInt256(blockchain.currentBlock.hash), [RPC_METHODS.getblock]: async (args) => { let hashOrIndex = args[0]; @@ -324,7 +352,7 @@ export const createHandler = ({ watchTimeoutMS = args[2]; } - let block = await blockchain.block.tryGet({ hashOrIndex }); + let block = await blockchain.getBlock(hashOrIndex); if (block === undefined) { if (watchTimeoutMS === undefined) { throw new JSONRPCError(-100, 'Unknown block'); @@ -344,7 +372,11 @@ export const createHandler = ({ } if (args[1] === true || args[1] === 1) { - return block.serializeJSON(blockchain.serializeJSONContext); + const confirmations = blockchain.currentBlockIndex - block.index + 1; + const hash = await blockchain.getNextBlockHash(block.hash); + const nextblockhash = hash ? JSONHelper.writeUInt256(hash) : undefined; + + return block.serializeJSONVerbose(blockchain.serializeJSONContext, { confirmations, nextblockhash }); } return block.serializeWire().toString('hex'); @@ -353,102 +385,209 @@ export const createHandler = ({ [RPC_METHODS.getblockhash]: async (args) => { const height = args[0]; checkHeight(height); - const block = await blockchain.block.get({ hashOrIndex: height }); + const hash = await blockchain.getBlockHash(height); - return JSONHelper.writeUInt256(block.hash); + return hash === undefined ? undefined : JSONHelper.writeUInt256(hash); }, - [RPC_METHODS.getblocksysfee]: async (args) => { - const height = args[0]; - checkHeight(height); - const header = await blockchain.header.get({ hashOrIndex: height }); - const blockData = await blockchain.blockData.get({ - hash: header.hash, - }); - return blockData.systemFee.toString(10); + [RPC_METHODS.getblockheader]: async (args) => { + let hashOrIndex = args[0]; + if (typeof args[0] === 'string') { + hashOrIndex = JSONHelper.readUInt256(args[0]); + } + + const verbose = args.length >= 2 ? !!args[1] : false; + + const header = await blockchain.getHeader(hashOrIndex); + if (header === undefined) { + throw new JSONRPCError(-100, 'Unknown block'); + } + + if (verbose) { + const confirmations = blockchain.currentBlockIndex - header.index + 1; + const hash = await blockchain.getNextBlockHash(header.hash); + const nextblockhash = hash ? JSONHelper.writeUInt256(hash) : undefined; + + return header.serializeJSONVerbose(blockchain.serializeJSONContext, { confirmations, nextblockhash }); + } + + return header.serializeWire().toString('hex'); }, - [RPC_METHODS.getconnectioncount]: async () => node.connectedPeers.length, [RPC_METHODS.getcontractstate]: async (args) => { const hash = JSONHelper.readUInt160(args[0]); - const contract = await blockchain.contract.tryGet({ hash }); + const contract = await blockchain.contracts.tryGet(hash); if (contract === undefined) { throw new JSONRPCError(-100, 'Unknown contract'); } - return contract.serializeJSON(blockchain.serializeJSONContext); + return contract.serializeJSON(); }, - [RPC_METHODS.getrawmempool]: async () => - Object.values(node.memPool).map((transaction) => JSONHelper.writeUInt256(transaction.hash)), - [RPC_METHODS.getrawtransaction]: async (args) => { + [RPC_METHODS.getrawmempool]: async () => ({ + height: blockchain.currentBlockIndex, + verified: Object.values(node.memPool).map((transaction) => JSONHelper.writeUInt256(transaction.hash)), + }), + [RPC_METHODS.getrawtransaction]: async (args): Promise => { const hash = JSONHelper.readUInt256(args[0]); + const verbose = args.length >= 2 && !!args[1]; - let transaction = node.memPool[common.uInt256ToHex(hash)] as Transaction | undefined; - if (transaction === undefined) { - transaction = await blockchain.transaction.tryGet({ hash }); + let tx = node.memPool[common.uInt256ToHex(hash)] as Transaction | undefined; + let state: TransactionState | undefined; + if (tx === undefined || verbose) { + state = await blockchain.transactions.tryGet(hash); + tx = tx ?? state?.transaction; } - if (transaction === undefined) { - throw new JSONRPCError(-100, 'Unknown transaction'); + + if (tx === undefined) { + throw new JSONRPCError(-100, 'Unknown Transaction'); } - if (args[1] === true || args[1] === 1) { - return transaction.serializeJSON(blockchain.serializeJSONContext); + if (verbose) { + if (state !== undefined) { + const header = await blockchain.getHeader(state.blockIndex); + if (header === undefined) { + throw new Error('If you ever see this error something has gone terribly wrong'); + } + + return tx.serializeJSONWithVerboseData({ + blockhash: JSONHelper.writeUInt256(header.hash), + confirmations: blockchain.currentBlockIndex - header.index + 1, + blocktime: header.timestamp.toNumber(), + vmstate: toVMStateJSON(state.state), + }); + } + + return tx.serializeJSON(); } - return transaction.serializeWire().toString('hex'); + return JSONHelper.writeBuffer(tx.serializeWire()); }, [RPC_METHODS.getstorage]: async (args) => { const hash = JSONHelper.readUInt160(args[0]); - const key = Buffer.from(args[1], 'hex'); - const item = await blockchain.storageItem.tryGet({ hash, key }); + const state = await blockchain.contracts.tryGet(hash); + if (state === undefined) { + return undefined; + } + const id = state.id; - return item === undefined ? undefined : item.value.toString('hex'); - }, - [RPC_METHODS.gettxout]: async (args) => { - const hash = JSONHelper.readUInt256(args[0]); - const index = args[1]; - const [output, spentCoins] = await Promise.all([ - blockchain.output.tryGet({ hash, index }), - blockchain.transactionData.tryGet({ hash }), - ]); + const key = JSONHelper.readBuffer(args[1]); + const storageKey = new StorageKey({ id, key }); + const item = await blockchain.storages.tryGet(storageKey); - if (spentCoins !== undefined && (spentCoins.endHeights[index] as number | undefined) !== undefined) { + if (item === undefined) { return undefined; } - return output === undefined ? undefined : output.serializeJSON(blockchain.serializeJSONContext, index); + return JSONHelper.writeBuffer(item.value); }, - [RPC_METHODS.invoke]: async () => { - throw new JSONRPCError(-101, 'Not implemented'); + [RPC_METHODS.getvalidators]: async () => { + const [validators, candidates] = await Promise.all([ + native.NEO.getValidators({ storages: blockchain.storages }), + native.NEO.getCandidates({ storages: blockchain.storages }), + ]); + + return candidates.map((candidate) => ({ + publickey: JSONHelper.writeECPoint(candidate.publicKey), + votes: candidate.votes.toString(), + active: validators.some((validator) => validator.compare(candidate.publicKey) === 0), + })); }, - [RPC_METHODS.invokefunction]: async () => { - throw new JSONRPCError(-101, 'Not implemented'); + [RPC_METHODS.gettransactionheight]: async (args) => { + const hash = JSONHelper.readUInt256(args[0]); + const state = await blockchain.transactions.tryGet(hash); + if (state === undefined) { + throw new JSONRPCError(-100, 'Unknown transaction'); + } + + return state.blockIndex; }, - [RPC_METHODS.invokescript]: async (args) => { - const script = JSONHelper.readBuffer(args[0]); - const receipt = await blockchain.invokeScript(script); + + // Node + [RPC_METHODS.getconnectioncount]: async () => node.connectedPeers.length, + [RPC_METHODS.getpeers]: async () => ({ + connected: node.connectedPeers.map((endpoint) => { + const { host, port } = getEndpointConfig(endpoint); + + return { address: host, port }; + }), + }), + [RPC_METHODS.getversion]: async () => { + const { tcpPort: tcpport, wsPort: wsport, nonce, useragent } = node.version; return { - result: receipt.result.serializeJSON(blockchain.serializeJSONContext), - actions: receipt.actions.map((action) => action.serializeJSON(blockchain.serializeJSONContext)), + tcpport, + wsport, + nonce, + useragent, }; }, [RPC_METHODS.sendrawtransaction]: async (args) => { - const transaction = deserializeTransactionWire({ + const transaction = Transaction.deserializeWire({ context: blockchain.deserializeWireContext, buffer: JSONHelper.readBuffer(args[0]), }); try { - await node.relayTransaction(transaction, { throwVerifyError: true, forceAdd: true }); + const { verifyResult } = await node.relayTransaction(transaction, { throwVerifyError: true, forceAdd: true }); + if (verifyResult !== VerifyResultModel.Succeed) { + throw new JSONRPCError( + -500, + verifyResult === undefined ? 'Unknown verify result' : toVerifyResultJSON(verifyResult), + ); + } - return true; - } catch { - return false; + return { hash: transaction.hash }; + } catch (error) { + throw new JSONRPCError(-500, error.message); } }, [RPC_METHODS.submitblock]: async () => { throw new JSONRPCError(-101, 'Not implemented'); }, + + // SmartContract + [RPC_METHODS.invokefunction]: async (_args) => { + throw new JSONRPCError(-101, 'Not implemented'); + }, + [RPC_METHODS.invokescript]: async (args) => { + const script = JSONHelper.readBuffer(args[0]); + const signers = args[1] !== undefined ? Signers.fromJSON(args[1]) : undefined; + const result = blockchain.invokeScript(script, signers); + + return getInvokeResult(script, result); + }, + [RPC_METHODS.testtransaction]: async (args) => { + const transaction = Transaction.deserializeWire({ + context: blockchain.deserializeWireContext, + buffer: JSONHelper.readBuffer(args[0]), + }); + + const result = blockchain.testTransaction(transaction); + + return getInvokeResult(transaction.script, result); + }, + [RPC_METHODS.getunclaimedgas]: async (args) => { + const address = args[0]; + if (typeof address !== 'string') { + throw new JSONRPCError(-100, 'Invalid argument at position 0'); + } + const scriptHash = crypto.addressToScriptHash({ address, addressVersion: blockchain.settings.addressVersion }); + const isValidAddress = common.isUInt160(scriptHash); + if (!isValidAddress) { + throw new JSONRPCError(-100, 'Invalid address'); + } + + const unclaimed = await native.NEO.unclaimedGas( + { storages: blockchain.storages }, + scriptHash, + blockchain.currentBlockIndex + 1, + ); + + return { + unclaimed: unclaimed.toString(), + address: JSONHelper.writeUInt160(address), + }; + }, + // Utilities [RPC_METHODS.validateaddress]: async (args) => { let scriptHash; try { @@ -462,106 +601,203 @@ export const createHandler = ({ return { address: args[0], isvalid: scriptHash !== undefined }; }, - [RPC_METHODS.getpeers]: async () => ({ - connected: node.connectedPeers.map((endpoint) => { - const { host, port } = getEndpointConfig(endpoint); - return { address: host, port }; - }), - }), + [RPC_METHODS.listplugins]: async () => { + throw new JSONRPCError(-101, 'Not implemented'); + }, + [RPC_METHODS.getapplicationlog]: async (args) => { + const hash = common.stringToUInt256(args[0]); + const value = await blockchain.applicationLogs.tryGet(hash); + if (value === undefined) { + throw new JSONRPCError(-100, 'Unknown transaction'); + } + + const { txid, trigger, vmstate, gasconsumed, stack, notifications } = value; + + return { + txid, + trigger, + vmstate, + gasconsumed, + stack, + notifications, + }; + }, + + // Wallet + [RPC_METHODS.closewallet]: async () => { + throw new JSONRPCError(-101, 'Not implemented'); + }, + [RPC_METHODS.dumpprivkey]: async () => { + throw new JSONRPCError(-101, 'Not implemented'); + }, + [RPC_METHODS.getnewaddress]: async () => { + throw new JSONRPCError(-101, 'Not implemented'); + }, + [RPC_METHODS.getwalletbalance]: async () => { + throw new JSONRPCError(-101, 'Not implemented'); + }, + [RPC_METHODS.getwalletunclaimedgas]: async () => { + throw new JSONRPCError(-101, 'Not implemented'); + }, + [RPC_METHODS.importprivkey]: async () => { + throw new JSONRPCError(-101, 'Not implemented'); + }, + [RPC_METHODS.listaddress]: async () => { + throw new JSONRPCError(-101, 'Not implemented'); + }, + [RPC_METHODS.openwallet]: async () => { + throw new JSONRPCError(-101, 'Not implemented'); + }, + [RPC_METHODS.sendfrom]: async () => { + throw new JSONRPCError(-101, 'Not implemented'); + }, + [RPC_METHODS.sendmany]: async () => { + throw new JSONRPCError(-101, 'Not implemented'); + }, + [RPC_METHODS.sendtoaddress]: async () => { + throw new JSONRPCError(-101, 'Not implemented'); + }, + + // Nep5 + [RPC_METHODS.getnep5transfers]: async (args) => { + const addressVersion = blockchain.settings.addressVersion; + const { address, scriptHash } = getScriptHashAndAddress(args[0], addressVersion); + + const SEVEN_DAYS_IN_MS = 7 * 24 * 60 * 60 * 1000; + const startTime = args[1] === undefined ? Date.now() - SEVEN_DAYS_IN_MS : args[1]; + const endTime = args[2] === undefined ? Date.now() : args[2]; + + if (endTime < startTime) { + throw new JSONRPCError(-32602, 'Invalid params'); + } + + const startTimeBytes = new BN(startTime, 'le').toBuffer(); + const endTimeBytes = new BN(endTime, 'le').toBuffer(); + + const gte = Buffer.concat([scriptHash, startTimeBytes]); + const lte = Buffer.concat([scriptHash, endTimeBytes]); - // Extended + const sentPromise = blockchain.nep5TransfersSent + .find$(gte, lte) + .pipe(take(1000), map(mapToTransfers), toArray()) + .toPromise(); + const receivedPromise = blockchain.nep5TransfersReceived + .find$(gte, lte) + .pipe(take(1000), map(mapToTransfers), toArray()) + .toPromise(); + + const [sent, received] = await Promise.all([sentPromise, receivedPromise]); + + return { + sent, + received, + address, + }; + }, + [RPC_METHODS.getnep5balances]: async (args) => { + const addressVersion = blockchain.settings.addressVersion; + const { address, scriptHash } = getScriptHashAndAddress(args[0], addressVersion); + const storedBalances = await blockchain.nep5Balances.find$(scriptHash).pipe(toArray()).toPromise(); + const validBalances = await Promise.all( + storedBalances.map(async ({ key, value }) => { + const assetStillExists = await blockchain.contracts.tryGet(key.assetScriptHash); + if (!assetStillExists) { + return undefined; + } + + return { + assethash: common.uInt160ToString(key.assetScriptHash), + amount: value.balance.toString(), + lastupdatedblock: value.lastUpdatedBlock, + }; + }), + ); + + return { + balance: validBalances.filter(utils.notNull), + address, + }; + }, + + // Settings + [RPC_METHODS.updatesettings]: async (_args) => { + throw new JSONRPCError(-101, 'Not implemented'); + // const { settings } = blockchain; + // const newSettings = { + // ...settings, + // secondsPerBlock: args[0].secondsPerBlock, + // }; + + // blockchain.updateSettings(newSettings); + + // return true; + }, + [RPC_METHODS.getsettings]: async () => ({ millisecondsPerBlock: blockchain.settings.millisecondsPerBlock }), + + // NEOβ€’ONE [RPC_METHODS.relaytransaction]: async (args): Promise => { - const transaction = deserializeTransactionWire({ + const transaction = Transaction.deserializeWire({ context: blockchain.deserializeWireContext, buffer: JSONHelper.readBuffer(args[0]), }); try { - const [transactionJSON, result] = await Promise.all([ - transaction.serializeJSON(blockchain.serializeJSONContext), - node.relayTransaction(transaction, { forceAdd: true, throwVerifyError: true }), - ]); - const resultJSON = - result.verifyResult === undefined - ? {} - : { - verifyResult: { - verifications: result.verifyResult.verifications.map((verification) => ({ - hash: JSONHelper.writeUInt160(verification.hash), - witness: verification.witness.serializeJSON(blockchain.serializeJSONContext), - actions: verification.actions.map((action) => - action.serializeJSON(blockchain.serializeJSONContext), - ), - failureMessage: verification.failureMessage, - })), - }, - }; - + const transactionJSON = transaction.serializeJSON(); + const result = await node.relayTransaction(transaction, { forceAdd: true, throwVerifyError: true }); + + const resultJSON = result.verifyResult !== undefined ? toVerifyResultJSON(result.verifyResult) : undefined; + + // const resultJSON = + // result.verifyResult === undefined + // ? {} + // : { + // verifyResult: { + // verifications: result.verifyResult.verifications.map((verification) => ({ + // hash: JSONHelper.writeUInt160(verification.hash), + // witness: verification.witness.serializeJSON(blockchain.serializeJSONContext), + // actions: verification.actions.map((action) => + // action.serializeJSON(blockchain.serializeJSONContext), + // ), + // failureMessage: verification.failureMessage, + // })), + // }, + // }; + + // TODO: client expects more information than this return { - ...resultJSON, transaction: transactionJSON, + verifyResult: resultJSON, }; } catch (error) { throw new JSONRPCError(-110, `Relay transaction failed: ${error.message}`); } }, - [RPC_METHODS.getoutput]: async (args) => { - const hash = JSONHelper.readUInt256(args[0]); - const index = args[1]; - const output = await blockchain.output.tryGet({ hash, index }); - if (output === undefined) { - throw new JSONRPCError(-100, 'Unknown output'); - } - - return output.serializeJSON(blockchain.serializeJSONContext, index); - }, - [RPC_METHODS.getclaimamount]: async (args) => { - const hash = JSONHelper.readUInt256(args[0]); - const index = args[1]; - try { - const value = await blockchain.calculateClaimAmount([ - new Input({ - hash, - index, - }), - ]); - - return common.fixed8ToDecimal(value).toString(); - } catch (error) { - throw new JSONRPCError(-102, error.message); - } - }, [RPC_METHODS.getallstorage]: async (args) => { const hash = JSONHelper.readUInt160(args[0]); - const items = await blockchain.storageItem - .getAll$({ hash }) - .pipe(toArray()) + const { NEO, GAS, Policy } = common.nativeHashes; + if (hash.equals(NEO) || hash.equals(GAS) || hash.equals(Policy)) { + throw new Error("Can't get all storage for native contracts."); + } + const contract = await blockchain.contracts.tryGet(hash); + if (contract === undefined) { + return []; + } + const buffer = Buffer.alloc(4); + buffer.writeInt32LE(contract.id); + + return blockchain.storages + .find$(buffer) + .pipe( + take(1000), + map(({ key, value }) => value.serializeJSON(key)), + toArray(), + ) .toPromise(); - - return items.map((item) => item.serializeJSON(blockchain.serializeJSONContext)); }, - [RPC_METHODS.testinvocation]: async (args) => { - const transaction = deserializeTransactionWire({ - context: blockchain.deserializeWireContext, - buffer: JSONHelper.readBuffer(args[0]), - }); - if (transaction instanceof InvocationTransaction) { - const receipt = await blockchain.invokeTransaction(transaction); - - return { - result: receipt.result.serializeJSON(blockchain.serializeJSONContext), - actions: receipt.actions.map((action) => action.serializeJSON(blockchain.serializeJSONContext)), - }; - } - - throw new JSONRPCError(-103, 'Invalid InvocationTransaction'); - }, - [RPC_METHODS.gettransactionreceipt]: async (args) => { - const transactionData = await blockchain.transactionData.tryGet({ - hash: JSONHelper.readUInt256(args[0]), - }); + [RPC_METHODS.gettransactionreceipt]: async (args): Promise => { + const state = await blockchain.transactions.tryGet(JSONHelper.readUInt256(args[0])); let watchTimeoutMS; if (args[1] !== undefined && typeof args[1] === 'number') { @@ -570,7 +806,7 @@ export const createHandler = ({ } let result; - if (transactionData === undefined) { + if (state === undefined) { if (watchTimeoutMS === undefined) { throw new JSONRPCError(-100, 'Unknown transaction'); } @@ -578,12 +814,10 @@ export const createHandler = ({ try { result = await blockchain.block$ .pipe( - switchMap(async () => { - const data = await blockchain.transactionData.tryGet({ - hash: JSONHelper.readUInt256(args[0]), - }); + switchMap(async (block) => { + const data = await blockchain.transactions.tryGet(JSONHelper.readUInt256(args[0])); - return data === undefined ? undefined : getTransactionReceipt(data); + return data === undefined ? undefined : getTransactionReceiptJSON(block, data); }), filter((receipt) => receipt !== undefined), take(1), @@ -594,37 +828,73 @@ export const createHandler = ({ throw new JSONRPCError(-100, 'Unknown transaction'); } } else { - result = getTransactionReceipt(transactionData); + const block = await blockchain.getBlock(state.blockIndex); + if (block === undefined) { + throw new Error('For TS'); + } + + result = getTransactionReceiptJSON(block, state); } return result; }, - [RPC_METHODS.getinvocationdata]: async (args) => { - const transaction = await blockchain.transaction.get({ - hash: JSONHelper.readUInt256(args[0]), - }); - const result = await transaction.serializeJSON(blockchain.serializeJSONContext); + [RPC_METHODS.getinvocationdata]: async (_args) => { + throw new JSONRPCError(-101, 'Not implemented'); + // const transactionState = await blockchain.transactions.get(JSONHelper.readUInt256(args[0])); + // // TODO: check serializeJSON() method. Doesn't include `data` + // const result = transactionState.transaction.serializeJSONWithInvocationData(); - if (result.type !== 'InvocationTransaction' || result.invocationData === undefined) { - throw new JSONRPCError(-103, 'Invalid InvocationTransaction'); - } + // if (result.data === undefined) { + // throw new JSONRPCError(-103, 'Invalid Transaction'); + // } - return result.invocationData; - }, - [RPC_METHODS.getvalidators]: async () => { - const validators = await blockchain.validator.all$.pipe(toArray()).toPromise(); - - return validators.map((validator) => validator.serializeJSON(blockchain.serializeJSONContext)); + // return result.data; }, [RPC_METHODS.getnetworksettings]: async () => { - const fee = blockchain.settings.fees[TransactionType.Issue]; - const issueGASFee = common.fixed8ToDecimal(fee === undefined ? utils.ZERO : fee); + const { + decrementInterval, + generationAmount, + privateKeyVersion, + standbyValidators, + messageMagic, + addressVersion, + standbyCommittee, + committeeMembersCount, + validatorsCount, + millisecondsPerBlock, + memoryPoolMaxTransactions, + } = blockchain.settings; return { - issueGASFee: issueGASFee.toString(), + blockcount: blockchain.currentBlockIndex + 1, + decrementinterval: decrementInterval, + generationamount: generationAmount, + privatekeyversion: privateKeyVersion, + standbyvalidators: standbyValidators.map((val) => common.ecPointToString(val)), + messagemagic: messageMagic, + addressversion: addressVersion, + standbycommittee: standbyCommittee.map((val) => common.ecPointToString(val)), + committeememberscount: committeeMembersCount, + validatorscount: validatorsCount, + millisecondsperblock: millisecondsPerBlock, + memorypoolmaxtransactions: memoryPoolMaxTransactions, }; }, + [RPC_METHODS.getfeeperbyte]: async () => { + const feePerByte = await blockchain.getFeePerByte(); + + return feePerByte.toString(); + }, + [RPC_METHODS.getverificationcost]: async (args) => { + const hash = JSONHelper.readUInt160(args[0]); + const transaction = Transaction.deserializeWire({ + context: blockchain.deserializeWireContext, + buffer: JSONHelper.readBuffer(args[1]), + }); + + return blockchain.getVerificationCost(hash, transaction); + }, [RPC_METHODS.runconsensusnow]: async () => { if (node.consensus) { await node.consensus.runConsensusNow(); @@ -634,20 +904,7 @@ export const createHandler = ({ return true; }, - [RPC_METHODS.updatesettings]: async (args) => { - const { settings } = blockchain; - const newSettings = { - ...settings, - secondsPerBlock: args[0].secondsPerBlock, - }; - - blockchain.updateSettings(newSettings); - return true; - }, - [RPC_METHODS.getsettings]: async () => ({ - secondsPerBlock: blockchain.settings.secondsPerBlock, - }), [RPC_METHODS.fastforwardoffset]: async (args) => { if (node.consensus) { await node.consensus.fastForwardOffset(args[0]); diff --git a/packages/neo-one-node-rpc-handler/tsconfig.json b/packages/neo-one-node-rpc-handler/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-node-rpc-handler/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-node-storage-cache/.npmignore b/packages/neo-one-node-storage-cache/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-node-storage-cache/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-node-storage-cache/CHANGELOG.json b/packages/neo-one-node-storage-cache/CHANGELOG.json new file mode 100644 index 0000000000..fb79765015 --- /dev/null +++ b/packages/neo-one-node-storage-cache/CHANGELOG.json @@ -0,0 +1,111 @@ +{ + "name": "@neo-one/node-storage-cache", + "entries": [ + { + "version": "3.0.0", + "tag": "@neo-one/node-storage-cache_v3.0.0", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "major": [ + { + "comment": "3.0.0preview3-alpha release bump" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-storage-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/node-storage-cache_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Add appropriate @types dependencies." + }, + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "dependency": [ + { + "comment": "Dependency @neo-one/client-common version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/node-storage-cache_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-storage-common\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/node-storage-cache_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-storage-common\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-node-storage-cache/CHANGELOG.md b/packages/neo-one-node-storage-cache/CHANGELOG.md index 3a1f818946..37dfc33950 100644 --- a/packages/neo-one-node-storage-cache/CHANGELOG.md +++ b/packages/neo-one-node-storage-cache/CHANGELOG.md @@ -1,129 +1,37 @@ -# Change Log +# Change Log - @neo-one/node-storage-cache -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-cache@1.2.5...@neo-one/node-storage-cache@2.3.0) (2019-10-23) +## 3.0.0 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/node-storage-cache +### Breaking changes +- 3.0.0preview3-alpha release bump +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT +### Patches +- Add appropriate @types dependencies. +- Upgrade TypeScript from v3.8.3 to v3.9.5 -## [1.2.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-cache@1.2.4...@neo-one/node-storage-cache@1.2.5) (2019-10-23) +### Updates -**Note:** Version bump only for package @neo-one/node-storage-cache +- bump package version for future release clarity +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes +- update package release process to take better advantage of rush tooling +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -## [1.2.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-cache@1.2.3...@neo-one/node-storage-cache@1.2.4) (2019-09-04) +### Minor changes -**Note:** Version bump only for package @neo-one/node-storage-cache +- Migrate to Rush - - - - -## [1.2.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-cache@1.2.2...@neo-one/node-storage-cache@1.2.3) (2019-08-30) - -**Note:** Version bump only for package @neo-one/node-storage-cache - - - - - -## [1.2.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-cache@1.2.1...@neo-one/node-storage-cache@1.2.2) (2019-08-22) - -**Note:** Version bump only for package @neo-one/node-storage-cache - - - - - -## [1.2.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-cache@1.2.0...@neo-one/node-storage-cache@1.2.1) (2019-07-29) - -**Note:** Version bump only for package @neo-one/node-storage-cache - - - - - -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-cache@1.1.3...@neo-one/node-storage-cache@1.2.0) (2019-06-20) - - -### Bug Fixes - -* **deps:** update dependency typescript to v3.5.1 ([#1365](https://github.com/neo-one-suite/neo-one/issues/1365)) ([ec89546](https://github.com/neo-one-suite/neo-one/commit/ec89546)) - - -### Features - -* **@neo-one/smart-contract-compiler:** Do not persist storage on uncaught exception ([bf261ca](https://github.com/neo-one-suite/neo-one/commit/bf261ca)) - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-cache@1.1.2...@neo-one/node-storage-cache@1.1.3) (2019-06-04) - - -### Bug Fixes - -* **@neo-one/types:** eliminate global types from @neo-one/types ([004330d](https://github.com/neo-one-suite/neo-one/commit/004330d)) - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-cache@1.1.1...@neo-one/node-storage-cache@1.1.2) (2019-04-12) - -**Note:** Version bump only for package @neo-one/node-storage-cache - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-cache@1.1.0...@neo-one/node-storage-cache@1.1.1) (2019-03-27) - - -### Bug Fixes - -* **deps:** update dependency @types/lru-cache to v5 ([2fc1502](https://github.com/neo-one-suite/neo-one/commit/2fc1502)) - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-cache@1.0.2...@neo-one/node-storage-cache@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node-storage-cache - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-cache@1.0.2-alpha.0...@neo-one/node-storage-cache@1.0.2) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node-storage-cache - - - - - -## [1.0.2-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-cache@1.0.1...@neo-one/node-storage-cache@1.0.2-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **deps:** update dependency lru-cache to v5 ([5ebea06](https://github.com/neo-one-suite/neo-one/commit/5ebea06)) - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-cache@1.0.0...@neo-one/node-storage-cache@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/node-storage-cache diff --git a/packages/neo-one-node-storage-cache/gulpfile.js b/packages/neo-one-node-storage-cache/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-node-storage-cache/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-node-storage-cache/package.json b/packages/neo-one-node-storage-cache/package.json index abaad06ef6..3d14483035 100644 --- a/packages/neo-one-node-storage-cache/package.json +++ b/packages/neo-one-node-storage-cache/package.json @@ -1,18 +1,28 @@ { "name": "@neo-one/node-storage-cache", - "version": "2.3.0", + "version": "3.0.0", "description": "NEOβ€’ONE node storage cache.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.3.0", - "@neo-one/node-core": "^2.3.0", - "@neo-one/node-storage-common": "^2.3.0", - "@neo-one/utils": "^2.3.0", + "@neo-one/client-common": "^3.0.0", + "@neo-one/node-core": "^3.0.0", + "@neo-one/node-storage-common": "^3.0.0", + "@neo-one/utils": "^3.0.0", + "@types/lru-cache": "^5.1.0", "lru-cache": "^5.0.0", "tslib": "^1.10.0" }, "devDependencies": { - "@types/lru-cache": "^5.1.0" - }, - "sideEffects": false + "@neo-one/build-tools": "^1.0.0", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-node-storage-cache/src/cacheStorage.ts b/packages/neo-one-node-storage-cache/src/cacheStorage.ts index 22a426b143..189a5aabb9 100644 --- a/packages/neo-one-node-storage-cache/src/cacheStorage.ts +++ b/packages/neo-one-node-storage-cache/src/cacheStorage.ts @@ -22,29 +22,18 @@ export const cacheStorage = ({ // length: (value, key) => value.size + Buffer.byteLength(key, 'utf8'), }); - const serializeHeaderKey = ({ hashOrIndex }: { hashOrIndex: number | UInt256 }) => - typeof hashOrIndex === 'number' - ? `header:${hashOrIndex}` - : keys.typeKeyToSerializeKey.header({ hash: hashOrIndex }); + const serializeBlockKey = ({ hashOrIndex }: { hashOrIndex: number | UInt256 }) => { + if (typeof hashOrIndex === 'number') { + // TODO: implement getting a block by index + throw new Error('not implemented'); + } - const headerBase = read.createReadStorage({ - cache, - storage: storage.header, - serializeKeyString: serializeHeaderKey, - }); - - const header = { - get: headerBase.get, - tryGet: headerBase.tryGet, - tryGetLatest: storage.header.tryGetLatest, + return hashOrIndex; }; - const serializeBlockKey = ({ hashOrIndex }: { hashOrIndex: number | UInt256 }) => - typeof hashOrIndex === 'number' ? `block:${hashOrIndex}` : keys.typeKeyToSerializeKey.block({ hash: hashOrIndex }); - const blockBase = read.createReadStorage({ cache, - storage: storage.block, + storage: storage.blocks, serializeKeyString: serializeBlockKey, }); diff --git a/packages/neo-one-node-storage-cache/src/read.ts b/packages/neo-one-node-storage-cache/src/read.ts index c0d7bd803a..6881012ab2 100644 --- a/packages/neo-one-node-storage-cache/src/read.ts +++ b/packages/neo-one-node-storage-cache/src/read.ts @@ -67,15 +67,15 @@ export function createReadAllStorage({ }; } -export function createReadGetAllStorage({ +export function createReadGetAllStorage({ cache, storage, serializeKeyString, }: { readonly cache: LRUCache; - readonly storage: ReadGetAllStorage; + readonly storage: ReadGetAllStorage; readonly serializeKeyString: SerializeKeyString; -}): ReadGetAllStorage { +}): ReadGetAllStorage { const readStorage = createReadStorage({ cache, storage, diff --git a/packages/neo-one-node-storage-cache/tsconfig.json b/packages/neo-one-node-storage-cache/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-node-storage-cache/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-node-storage-common/.npmignore b/packages/neo-one-node-storage-common/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-node-storage-common/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-node-storage-common/CHANGELOG.json b/packages/neo-one-node-storage-common/CHANGELOG.json new file mode 100644 index 0000000000..144f7b1963 --- /dev/null +++ b/packages/neo-one-node-storage-common/CHANGELOG.json @@ -0,0 +1,99 @@ +{ + "name": "@neo-one/node-storage-common", + "entries": [ + { + "version": "3.0.0", + "tag": "@neo-one/node-storage-common_v3.0.0", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "major": [ + { + "comment": "3.0.0preview3-alpha release bump" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/node-storage-common_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "dependency": [ + { + "comment": "Dependency @neo-one/client-common version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + } + ], + "patch": [ + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/node-storage-common_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/node-storage-common_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-node-storage-common/CHANGELOG.md b/packages/neo-one-node-storage-common/CHANGELOG.md index b16ff27499..1dd588cd5a 100644 --- a/packages/neo-one-node-storage-common/CHANGELOG.md +++ b/packages/neo-one-node-storage-common/CHANGELOG.md @@ -1,121 +1,36 @@ -# Change Log +# Change Log - @neo-one/node-storage-common -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-common@1.2.5...@neo-one/node-storage-common@2.3.0) (2019-10-23) +## 3.0.0 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/node-storage-common +### Breaking changes +- 3.0.0preview3-alpha release bump +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT +### Patches +- Upgrade TypeScript from v3.8.3 to v3.9.5 -## [1.2.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-common@1.2.4...@neo-one/node-storage-common@1.2.5) (2019-10-23) +### Updates -**Note:** Version bump only for package @neo-one/node-storage-common +- bump package version for future release clarity +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes +- update package release process to take better advantage of rush tooling +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -## [1.2.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-common@1.2.3...@neo-one/node-storage-common@1.2.4) (2019-09-04) +### Minor changes -**Note:** Version bump only for package @neo-one/node-storage-common +- Migrate to Rush - - - - -## [1.2.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-common@1.2.2...@neo-one/node-storage-common@1.2.3) (2019-08-30) - -**Note:** Version bump only for package @neo-one/node-storage-common - - - - - -## [1.2.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-common@1.2.1...@neo-one/node-storage-common@1.2.2) (2019-08-22) - -**Note:** Version bump only for package @neo-one/node-storage-common - - - - - -## [1.2.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-common@1.2.0...@neo-one/node-storage-common@1.2.1) (2019-07-29) - -**Note:** Version bump only for package @neo-one/node-storage-common - - - - - -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-common@1.1.3...@neo-one/node-storage-common@1.2.0) (2019-06-20) - - -### Features - -* **@neo-one/smart-contract-compiler:** Do not persist storage on uncaught exception ([bf261ca](https://github.com/neo-one-suite/neo-one/commit/bf261ca)) - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-common@1.1.2...@neo-one/node-storage-common@1.1.3) (2019-06-04) - - -### Bug Fixes - -* **@neo-one/types:** eliminate global types from @neo-one/types ([004330d](https://github.com/neo-one-suite/neo-one/commit/004330d)) - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-common@1.1.1...@neo-one/node-storage-common@1.1.2) (2019-04-12) - -**Note:** Version bump only for package @neo-one/node-storage-common - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-common@1.1.0...@neo-one/node-storage-common@1.1.1) (2019-03-27) - -**Note:** Version bump only for package @neo-one/node-storage-common - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-common@1.0.2...@neo-one/node-storage-common@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node-storage-common - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-common@1.0.2-alpha.0...@neo-one/node-storage-common@1.0.2) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node-storage-common - - - - - -## [1.0.2-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-common@1.0.1...@neo-one/node-storage-common@1.0.2-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **build:** adjust several packages to allow emitting .d.ts files. ([27a2d88](https://github.com/neo-one-suite/neo-one/commit/27a2d88)) - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-common@1.0.0...@neo-one/node-storage-common@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/node-storage-common diff --git a/packages/neo-one-node-storage-common/gulpfile.js b/packages/neo-one-node-storage-common/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-node-storage-common/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-node-storage-common/package.json b/packages/neo-one-node-storage-common/package.json index a2a5248905..ca5a96293e 100644 --- a/packages/neo-one-node-storage-common/package.json +++ b/packages/neo-one-node-storage-common/package.json @@ -1,13 +1,27 @@ { "name": "@neo-one/node-storage-common", - "version": "2.3.0", + "version": "3.0.0", "description": "NEOβ€’ONE node storage common.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.3.0", - "@neo-one/node-core": "^2.3.0", - "@neo-one/utils": "^2.3.0", + "@neo-one/client-common": "^3.0.0", + "@neo-one/node-core": "^3.0.0", + "@neo-one/utils": "^3.0.0", + "bn.js": "^5.0.0", "tslib": "^1.10.0" }, - "sideEffects": false + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "@types/bn.js": "^4.11.5", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-node-storage-common/src/index.ts b/packages/neo-one-node-storage-common/src/index.ts index f21e34cfde..b39b2af7cf 100644 --- a/packages/neo-one-node-storage-common/src/index.ts +++ b/packages/neo-one-node-storage-common/src/index.ts @@ -1,2 +1,2 @@ // tslint:disable-next-line export-name -export { keys } from './keys'; +export { keys, Prefix as StoragePrefix } from './keys'; diff --git a/packages/neo-one-node-storage-common/src/keys.ts b/packages/neo-one-node-storage-common/src/keys.ts index ac32d5565f..94986eb14b 100644 --- a/packages/neo-one-node-storage-common/src/keys.ts +++ b/packages/neo-one-node-storage-common/src/keys.ts @@ -1,132 +1,180 @@ -import { common, UInt160, UInt256 } from '@neo-one/client-common'; -import { - AccountInputKey, - AccountInputsKey, - ActionKey, - ActionsKey, - OutputKey, - StorageItemKey, - StorageItemsKey, - ValidatorKey, -} from '@neo-one/node-core'; -import { utils } from '@neo-one/utils'; - -const DELIMITER = '\x00'; -const createPrefix = (value: string) => `${value}${DELIMITER}`; -const MAX_CHAR = '\xff'; -const createMax = (value: string) => `${value}${MAX_CHAR}`; - -const accountKeyPrefix = createPrefix('0'); -const accountUnclaimedKeyPrefix = createPrefix('1'); -const accountUnspentKeyPrefix = createPrefix('2'); -const actionKeyPrefix = createPrefix('3'); -const assetKeyPrefix = createPrefix('4'); -const blockKeyPrefix = createPrefix('5'); -const blockDataKeyPrefix = createPrefix('6'); -const headerKeyPrefix = createPrefix('7'); -const headerHashKeyPrefix = createPrefix('8'); -const transactionKeyPrefix = createPrefix('9'); -const outputKeyPrefix = createPrefix('a'); -const transactionDataKeyPrefix = createPrefix('b'); -const contractKeyPrefix = createPrefix('c'); -const storageItemKeyPrefix = createPrefix('d'); -const validatorKeyPrefix = createPrefix('e'); -const invocationDataKeyPrefix = createPrefix('f'); -const settingsPrefix = createPrefix('g'); -const validatorsCountKey = createPrefix('h'); - -const serializeHeaderIndexHashKey = (index: number) => `${headerHashKeyPrefix}${index}`; - -const maxHeaderHashKey = `${settingsPrefix}0`; -const maxBlockHashKey = `${settingsPrefix}1`; - -const createSerializeAccountInputKey = (prefix: string) => ({ hash, input }: AccountInputKey): string => - `${prefix}${common.uInt160ToString(hash)}${common.uInt256ToString(input.hash)}${input.index}`; -const createGetAccountInputKeyMin = (prefix: string) => ({ hash }: AccountInputsKey): string => - `${prefix}${common.uInt160ToString(hash)}`; -const createGetAccountInputKeyMax = (prefix: string) => ({ hash }: AccountInputsKey): string => - createMax(`${prefix}${common.uInt160ToString(hash)}`); - -const getAccountUnclaimedKeyMin = createGetAccountInputKeyMin(accountUnclaimedKeyPrefix); -const getAccountUnclaimedKeyMax = createGetAccountInputKeyMax(accountUnclaimedKeyPrefix); - -const getAccountUnspentKeyMin = createGetAccountInputKeyMin(accountUnspentKeyPrefix); -const getAccountUnspentKeyMax = createGetAccountInputKeyMax(accountUnspentKeyPrefix); - -const serializeStorageItemKey = ({ hash, key }: StorageItemKey): string => - `${storageItemKeyPrefix}${common.uInt160ToString(hash)}${key.toString('hex')}`; -const getStorageItemKeyMin = ({ hash, prefix }: StorageItemsKey): string => - [ - storageItemKeyPrefix, - hash === undefined ? undefined : common.uInt160ToString(hash), - prefix === undefined ? undefined : prefix.toString('hex'), - ] - .filter(utils.notNull) - .join(''); -const getStorageItemKeyMax = (key: StorageItemsKey): string => createMax(getStorageItemKeyMin(key)); - -const serializeActionKey = ({ index }: ActionKey): string => `${actionKeyPrefix}${index.toString(10, 8)}`; -const getActionKeyMin = ({ indexStart }: ActionsKey): string => - [actionKeyPrefix, indexStart === undefined ? undefined : indexStart.toString(10, 8)].filter(utils.notNull).join(''); -const getActionKeyMax = ({ indexStop }: ActionsKey): string => - createMax( - [actionKeyPrefix, indexStop === undefined ? undefined : indexStop.toString(10, 8)].filter(utils.notNull).join(''), - ); - -const serializeValidatorKey = ({ publicKey }: ValidatorKey): string => - `${validatorKeyPrefix}${common.ecPointToString(publicKey)}`; -const validatorMinKey = validatorKeyPrefix; -const validatorMaxKey = createMax(validatorKeyPrefix); - -const serializeUInt160Key = ({ hash }: { readonly hash: UInt160 }): string => common.uInt160ToString(hash); -const serializeUInt256Key = ({ hash }: { readonly hash: UInt256 }): string => common.uInt256ToString(hash); - -const createSerializeUInt160Key = (prefix: string) => (input: { readonly hash: UInt160 }): string => - `${prefix}${serializeUInt160Key(input)}`; -const createSerializeUInt256Key = (prefix: string) => (input: { readonly hash: UInt256 }): string => - `${prefix}${serializeUInt256Key(input)}`; - -const accountMinKey = accountKeyPrefix; -const accountMaxKey = createMax(accountKeyPrefix); - -const serializeOutputKey = ({ index, hash }: OutputKey): string => - `${outputKeyPrefix}${common.uInt256ToString(hash)}${index}`; - -const typeKeyToSerializeKey = { - account: createSerializeUInt160Key(accountKeyPrefix), - accountUnclaimed: createSerializeAccountInputKey(accountUnclaimedKeyPrefix), - accountUnspent: createSerializeAccountInputKey(accountUnspentKeyPrefix), - action: serializeActionKey, - asset: createSerializeUInt256Key(assetKeyPrefix), - block: createSerializeUInt256Key(blockKeyPrefix), - blockData: createSerializeUInt256Key(blockDataKeyPrefix), - header: createSerializeUInt256Key(headerKeyPrefix), - transaction: createSerializeUInt256Key(transactionKeyPrefix), - output: serializeOutputKey, - transactionData: createSerializeUInt256Key(transactionDataKeyPrefix), - contract: createSerializeUInt160Key(contractKeyPrefix), - storageItem: serializeStorageItemKey, - validator: serializeValidatorKey, - invocationData: createSerializeUInt256Key(invocationDataKeyPrefix), +import { common, InvalidFormatError, UInt160, UInt256 } from '@neo-one/client-common'; +import { BlockKey, Nep5BalanceKey, Nep5TransferKey, StorageKey, StreamOptions } from '@neo-one/node-core'; +import { BN } from 'bn.js'; + +export enum Prefix { + Block = 0x01, + Transaction = 0x02, + Contract = 0x50, + Storage = 0x70, + HeaderHashList = 0x80, + CurrentBlock = 0xc0, + CurrentHeader = 0xc1, + ContractID = 0xc2, + ConsensusState = 0xf4, + Nep5Balance = 0xf8, + Nep5TransferSent = 0xf9, + Nep5TransferReceived = 0xfa, + ApplicationLog = 0xfb, // Custom internal prefix. Can be changed. + + // NEOβ€’ONE prefix, watch out for future collisions with https://github.com/neo-project/neo/blob/master/src/neo/Persistence/Prefixes.cs + Settings = 0xdd, +} + +const getCreateKey = ({ + serializeKey, + prefix, +}: { + readonly serializeKey: (key: Key) => Buffer; + readonly prefix: Prefix; +}) => { + const prefixKey = Buffer.from([prefix]); + + return (key: Key) => Buffer.concat([prefixKey, serializeKey(key)]); }; +const getMetadataKey = ({ prefix }: { readonly prefix: Prefix }) => Buffer.from([prefix]); + +const serializeHeaderHashListKey = (key: number) => { + const buffer = Buffer.alloc(4); + buffer.writeUInt32LE(key); + + return buffer; +}; + +/* crude method but it does what we want it to do */ +const generateSearchRange = (lookupKey: Buffer): Required => { + const asBN = new BN(lookupKey); + const lte = asBN.addn(1).toBuffer(); + if (lte.length !== lookupKey.length) { + throw new InvalidFormatError('not sure how this happened'); + } + + return { + gte: lookupKey, + lte, + }; +}; + +const createGetSearchRange = (prefix: Prefix) => { + const bufferKey = Buffer.from([prefix]); + + return (lookupKey: Buffer, secondaryLookupKey?: Buffer): Required => { + if (secondaryLookupKey) { + return { + gte: Buffer.concat([bufferKey, lookupKey]), + lte: Buffer.concat([bufferKey, secondaryLookupKey]), + }; + } + const { gte: initGte, lte: initLte } = generateSearchRange(lookupKey); + + return { + gte: Buffer.concat([bufferKey, initGte]), + lte: Buffer.concat([bufferKey, initLte]), + }; + }; +}; + +const createBlockKey = getCreateKey({ + serializeKey: ({ hashOrIndex }) => { + if (typeof hashOrIndex === 'number') { + throw new Error(); + } + + return hashOrIndex; + }, + prefix: Prefix.Block, +}); + +const createTransactionKey = getCreateKey({ + serializeKey: (key) => key, + prefix: Prefix.Transaction, +}); + +const createContractKey = getCreateKey({ + serializeKey: (key) => key, + prefix: Prefix.Contract, +}); + +const createStorageKey = getCreateKey({ + serializeKey: (key) => key.serializeWire(), + prefix: Prefix.Storage, +}); + +const createNep5BalanceKey = getCreateKey({ + serializeKey: (key) => key.serializeWire(), + prefix: Prefix.Nep5Balance, +}); + +const createNep5TransferSentKey = getCreateKey({ + serializeKey: (key) => key.serializeWire(), + prefix: Prefix.Nep5TransferSent, +}); + +const createNep5TransferReceivedKey = getCreateKey({ + serializeKey: (key) => key.serializeWire(), + prefix: Prefix.Nep5TransferReceived, +}); + +const createHeaderHashListKey = getCreateKey({ + serializeKey: serializeHeaderHashListKey, + prefix: Prefix.HeaderHashList, +}); + +const blockHashIndexKey = getMetadataKey({ + prefix: Prefix.CurrentBlock, +}); + +const headerHashIndexKey = getMetadataKey({ + prefix: Prefix.CurrentHeader, +}); + +const contractIDKey = getMetadataKey({ + prefix: Prefix.ContractID, +}); + +const consensusStateKey = getMetadataKey({ + prefix: Prefix.ConsensusState, +}); + +const minBlockKey = createBlockKey({ hashOrIndex: common.ZERO_UINT256 }); +const maxBlockKey = createBlockKey({ hashOrIndex: common.MAX_UINT256 }); + +const getStorageSearchRange = createGetSearchRange(Prefix.Storage); + +const getAllNep5BalanceSearchRange = { + gte: Buffer.from([Prefix.Nep5Balance]), + lte: Buffer.from([Prefix.Nep5TransferSent]), +}; + +const getNep5BalanceSearchRange = createGetSearchRange(Prefix.Nep5Balance); +const getNep5TransferReceivedSearchRange = createGetSearchRange(Prefix.Nep5TransferReceived); +const getNep5TransferSentSearchRange = createGetSearchRange(Prefix.Nep5TransferSent); + +const createApplicationLogKey = getCreateKey({ + serializeKey: (key) => key, + prefix: Prefix.ApplicationLog, +}); + export const keys = { - validatorsCountKey, - serializeHeaderIndexHashKey, - maxHeaderHashKey, - maxBlockHashKey, - getAccountUnclaimedKeyMin, - getAccountUnclaimedKeyMax, - getAccountUnspentKeyMin, - getAccountUnspentKeyMax, - getStorageItemKeyMin, - getStorageItemKeyMax, - serializeActionKey, - getActionKeyMin, - getActionKeyMax, - validatorMinKey, - validatorMaxKey, - accountMinKey, - accountMaxKey, - typeKeyToSerializeKey, + createBlockKey, + createNep5BalanceKey, + createNep5TransferSentKey, + createNep5TransferReceivedKey, + createApplicationLogKey, + createTransactionKey, + createContractKey, + createStorageKey, + getStorageSearchRange, + getNep5BalanceSearchRange, + getAllNep5BalanceSearchRange, + getNep5TransferReceivedSearchRange, + getNep5TransferSentSearchRange, + createHeaderHashListKey, + blockHashIndexKey, + headerHashIndexKey, + contractIDKey, + consensusStateKey, + minBlockKey, + maxBlockKey, }; diff --git a/packages/neo-one-node-storage-common/tsconfig-output.json b/packages/neo-one-node-storage-common/tsconfig-output.json new file mode 100644 index 0000000000..a12b8c8059 --- /dev/null +++ b/packages/neo-one-node-storage-common/tsconfig-output.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.cjs.json", + "compilerOptions": { + "target": "es2017" + }, + "compileOnSave": false +} \ No newline at end of file diff --git a/packages/neo-one-node-storage-common/tsconfig.json b/packages/neo-one-node-storage-common/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-node-storage-common/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-node-storage-levelup/.npmignore b/packages/neo-one-node-storage-levelup/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-node-storage-levelup/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-node-storage-levelup/CHANGELOG.json b/packages/neo-one-node-storage-levelup/CHANGELOG.json new file mode 100644 index 0000000000..ab885a8262 --- /dev/null +++ b/packages/neo-one-node-storage-levelup/CHANGELOG.json @@ -0,0 +1,113 @@ +{ + "name": "@neo-one/node-storage-levelup", + "entries": [ + { + "version": "3.0.0", + "tag": "@neo-one/node-storage-levelup_v3.0.0", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "major": [ + { + "comment": "3.0.0preview3-alpha release bump" + } + ], + "none": [ + { + "comment": "Pin level-js and levelup deps." + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-storage-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/node-storage-levelup_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "dependency": [ + { + "comment": "Dependency @neo-one/client-common version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + } + ], + "patch": [ + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/node-storage-levelup_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-storage-common\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/node-storage-levelup_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-storage-common\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-node-storage-levelup/CHANGELOG.md b/packages/neo-one-node-storage-levelup/CHANGELOG.md index 040d4fd78e..958b905ebb 100644 --- a/packages/neo-one-node-storage-levelup/CHANGELOG.md +++ b/packages/neo-one-node-storage-levelup/CHANGELOG.md @@ -1,127 +1,40 @@ -# Change Log +# Change Log - @neo-one/node-storage-levelup -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-levelup@1.2.5...@neo-one/node-storage-levelup@2.3.0) (2019-10-23) +## 3.0.0 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/node-storage-levelup +### Breaking changes +- 3.0.0preview3-alpha release bump +### Updates +- Pin level-js and levelup deps. +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT -## [1.2.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-levelup@1.2.4...@neo-one/node-storage-levelup@1.2.5) (2019-10-23) +### Patches -**Note:** Version bump only for package @neo-one/node-storage-levelup +- Upgrade TypeScript from v3.8.3 to v3.9.5 +### Updates +- bump package version for future release clarity +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes -## [1.2.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-levelup@1.2.3...@neo-one/node-storage-levelup@1.2.4) (2019-09-04) +- update package release process to take better advantage of rush tooling -**Note:** Version bump only for package @neo-one/node-storage-levelup +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT +### Minor changes +- Migrate to Rush - - -## [1.2.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-levelup@1.2.2...@neo-one/node-storage-levelup@1.2.3) (2019-08-30) - -**Note:** Version bump only for package @neo-one/node-storage-levelup - - - - - -## [1.2.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-levelup@1.2.1...@neo-one/node-storage-levelup@1.2.2) (2019-08-22) - -**Note:** Version bump only for package @neo-one/node-storage-levelup - - - - - -## [1.2.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-levelup@1.2.0...@neo-one/node-storage-levelup@1.2.1) (2019-07-29) - -**Note:** Version bump only for package @neo-one/node-storage-levelup - - - - - -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-levelup@1.1.3...@neo-one/node-storage-levelup@1.2.0) (2019-06-20) - - -### Bug Fixes - -* **deps:** update dependency typescript to v3.5.1 ([#1365](https://github.com/neo-one-suite/neo-one/issues/1365)) ([ec89546](https://github.com/neo-one-suite/neo-one/commit/ec89546)) -* **node:** First wave of node fixes ([d50fd34](https://github.com/neo-one-suite/neo-one/commit/d50fd34)) - - -### Features - -* **@neo-one/smart-contract-compiler:** Do not persist storage on uncaught exception ([bf261ca](https://github.com/neo-one-suite/neo-one/commit/bf261ca)) - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-levelup@1.1.2...@neo-one/node-storage-levelup@1.1.3) (2019-06-04) - - -### Bug Fixes - -* **@neo-one/types:** eliminate global types from @neo-one/types ([004330d](https://github.com/neo-one-suite/neo-one/commit/004330d)) - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-levelup@1.1.1...@neo-one/node-storage-levelup@1.1.2) (2019-04-12) - -**Note:** Version bump only for package @neo-one/node-storage-levelup - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-levelup@1.1.0...@neo-one/node-storage-levelup@1.1.1) (2019-03-27) - -**Note:** Version bump only for package @neo-one/node-storage-levelup - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-levelup@1.0.2...@neo-one/node-storage-levelup@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node-storage-levelup - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-levelup@1.0.2-alpha.0...@neo-one/node-storage-levelup@1.0.2) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node-storage-levelup - - - - - -## [1.0.2-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-levelup@1.0.1...@neo-one/node-storage-levelup@1.0.2-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **deps:** update dependency rxjs to v6.4.0 ([e28af2a](https://github.com/neo-one-suite/neo-one/commit/e28af2a)) - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-storage-levelup@1.0.0...@neo-one/node-storage-levelup@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/node-storage-levelup diff --git a/packages/neo-one-node-storage-levelup/gulpfile.js b/packages/neo-one-node-storage-levelup/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-node-storage-levelup/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-node-storage-levelup/package.json b/packages/neo-one-node-storage-levelup/package.json index 2dd9867c78..a4a9680d7c 100644 --- a/packages/neo-one-node-storage-levelup/package.json +++ b/packages/neo-one-node-storage-levelup/package.json @@ -1,19 +1,37 @@ { "name": "@neo-one/node-storage-levelup", - "version": "2.3.0", + "version": "3.0.0", "description": "NEOβ€’ONE levelup node storage.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.3.0", - "@neo-one/node-core": "^2.3.0", - "@neo-one/node-storage-common": "^2.3.0", - "@neo-one/utils": "^2.3.0", - "levelup": "^4.1.0", - "rxjs": "^6.5.2", + "@neo-one/client-common": "^3.0.0", + "@neo-one/node-core": "^3.0.0", + "@neo-one/node-storage-common": "^3.0.0", + "@neo-one/utils": "^3.0.0", + "@types/levelup": "^3.1.1", + "@types/abstract-leveldown": "^5.0.1", + "abstract-leveldown": "^6.0.3", + "levelup": "4.1.0", + "rocksdb": "^4.1.0", + "rxjs": "^6.5.3", "tslib": "^1.10.0" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "@types/jest": "^24.0.18", + "@types/memdown": "^3.0.0", + "@types/rocksdb": "3.0.0", + "bn.js": "^5.0.0", + "gulp": "~4.0.2", "memdown": "^5.0.0" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-node-storage-levelup/src/__tests__/levelUpStorage.test.ts b/packages/neo-one-node-storage-levelup/src/__tests__/levelUpStorage.test.ts index 96e3438ee0..f12af4ca80 100644 --- a/packages/neo-one-node-storage-levelup/src/__tests__/levelUpStorage.test.ts +++ b/packages/neo-one-node-storage-levelup/src/__tests__/levelUpStorage.test.ts @@ -1,5 +1,14 @@ import { common } from '@neo-one/client-common'; -import { AddChange, DeleteChange, Storage, StorageFlags, StorageItem } from '@neo-one/node-core'; +import { + AddChange, + DeleteChange, + Nep5Balance, + Nep5BalanceKey, + Storage, + StorageItem, + StorageKey, +} from '@neo-one/node-core'; +import { BN } from 'bn.js'; import LevelUp from 'levelup'; import MemDown from 'memdown'; import { storage as levelUpStorage } from '../'; @@ -11,33 +20,56 @@ describe('levelUpStorage', () => { }); test('deleted items are undefined', async () => { const hash = common.bufferToUInt160(Buffer.from('3775292229eccdf904f16fff8e83e7cffdc0f0ce', 'hex')); - const key = Buffer.from('b500', 'hex'); + const key = new StorageKey({ id: 20, key: hash }); const value = Buffer.from('5f8d70', 'hex'); - const firstGet = await storage.storageItem.tryGet({ hash, key }); + const firstGet = await storage.storages.tryGet(key); expect(firstGet).toEqual(undefined); const storageItem = new StorageItem({ - hash, - key, value, - flags: StorageFlags.None, + isConstant: false, }); const addChange: AddChange = { - type: 'storageItem', + type: 'storage', + key, value: storageItem, }; + await storage.commit([{ type: 'add', change: addChange, subType: 'add' }]); - const secondGet = await storage.storageItem.tryGet({ hash, key }); + const secondGet = await storage.storages.tryGet(key); expect(JSON.stringify(secondGet)).toEqual(JSON.stringify(storageItem)); const deleteChange: DeleteChange = { - type: 'storageItem', - key: { hash, key }, + type: 'storage', + key, }; + await storage.commit([{ type: 'delete', change: deleteChange }]); - const thirdGet = await storage.storageItem.tryGet({ hash, key }); + const thirdGet = await storage.storages.tryGet(key); expect(thirdGet).toEqual(undefined); }); + + test('Can add and retrieve Nep5Balance', async () => { + const value = new Nep5Balance({ balanceBuffer: new BN(10).toBuffer('le'), lastUpdatedBlock: 1 }); + const key = new Nep5BalanceKey({ + userScriptHash: common.bufferToUInt160(Buffer.from('3775292229eccdf904f16fff8e83e7cffdc0f0ce', 'hex')), + assetScriptHash: common.bufferToUInt160(Buffer.from('3775292229eccdf904f16fff8e83e7cffdc0f0ce', 'hex')), + }); + + const addChange: AddChange = { + type: 'nep5Balance', + key, + value, + }; + + const firstGet = await storage.nep5Balances.tryGet(key); + expect(firstGet).toBeUndefined(); + await storage.commit([{ type: 'add', change: addChange, subType: 'add' }]); + const secondGet = await storage.nep5Balances.tryGet(key); + expect(secondGet).toBeDefined(); + expect(secondGet?.balance.toString()).toEqual('10'); + expect(secondGet?.lastUpdatedBlock).toEqual(1); + }); }); diff --git a/packages/neo-one-node-storage-levelup/src/__tests__/rocksDBStorage.test.ts b/packages/neo-one-node-storage-levelup/src/__tests__/rocksDBStorage.test.ts new file mode 100644 index 0000000000..0e4192a7f5 --- /dev/null +++ b/packages/neo-one-node-storage-levelup/src/__tests__/rocksDBStorage.test.ts @@ -0,0 +1,47 @@ +import { common } from '@neo-one/client-common'; +import { AddChange, DeleteChange, Storage, StorageItem, StorageKey } from '@neo-one/node-core'; +import LevelUp from 'levelup'; +import RocksDB from 'rocksdb'; +import { storage as levelUpStorage } from '../'; + +describe('levelUpStorage', () => { + let storage: Storage; + beforeEach(async () => { + const rocks = new RocksDB('/Users/danielbyrne/Desktop/test-location'); + storage = levelUpStorage({ db: LevelUp(rocks), context: { messageMagic: 1953787457 } }); + }); + test('deleted items are undefined', async () => { + const hash = common.bufferToUInt160(Buffer.from('3775292229eccdf904f16fff8e83e7cffdc0f0ce', 'hex')); + const key = new StorageKey({ id: 20, key: hash }); + const value = Buffer.from('5f8d70', 'hex'); + + const firstGet = await storage.storages.tryGet(key); + console.log(firstGet); + expect(firstGet).toEqual(undefined); + + const storageItem = new StorageItem({ + value, + isConstant: false, + }); + const addChange: AddChange = { + type: 'storage', + key, + value: storageItem, + }; + + await storage.commit([{ type: 'add', change: addChange, subType: 'add' }]); + const secondGet = await storage.storages.tryGet(key); + console.log(secondGet); + expect(JSON.stringify(secondGet)).toEqual(JSON.stringify(storageItem)); + + const deleteChange: DeleteChange = { + type: 'storage', + key, + }; + + await storage.commit([{ type: 'delete', change: deleteChange }]); + + const thirdGet = await storage.storages.tryGet(key); + expect(thirdGet).toEqual(undefined); + }); +}); diff --git a/packages/neo-one-node-storage-levelup/src/convertChange.ts b/packages/neo-one-node-storage-levelup/src/convertChange.ts index c588480e41..d02fbfa2b5 100644 --- a/packages/neo-one-node-storage-levelup/src/convertChange.ts +++ b/packages/neo-one-node-storage-levelup/src/convertChange.ts @@ -1,67 +1,49 @@ import { AddChange, Change, DeleteChange } from '@neo-one/node-core'; import { keys } from '@neo-one/node-storage-common'; import { utils } from '@neo-one/utils'; -import * as common from './common'; +import type { AbstractBatch, DelBatch, PutBatch } from 'abstract-leveldown'; import { UnknownChangeTypeError, UnknownTypeError } from './errors'; -// tslint:disable-next-line no-any -type AbstractBatch = any; +/** + * TODO: previously we had extra storage for things like `latestBlock`, etc + * If we decide we need those back we'll need to add the logic back to here + * like we did in 2.x, revisit this. + */ -const convertAddChange = (changeIn: AddChange): readonly AbstractBatch[] => { - const change = changeIn; +const convertAddChange = (change: AddChange): readonly PutBatch[] => { switch (change.type) { - case 'account': + case 'nep5Balance': return [ { type: 'put', - key: keys.typeKeyToSerializeKey.account(change.value), + key: keys.createNep5BalanceKey(change.key), value: change.value.serializeWire(), }, ]; - case 'accountUnspent': + case 'nep5TransferReceived': return [ { type: 'put', - key: keys.typeKeyToSerializeKey.accountUnspent({ - hash: change.value.hash, - input: change.value.input, - }), - + key: keys.createNep5TransferReceivedKey(change.key), value: change.value.serializeWire(), }, ]; - case 'accountUnclaimed': + case 'nep5TransferSent': return [ { type: 'put', - key: keys.typeKeyToSerializeKey.accountUnclaimed({ - hash: change.value.hash, - input: change.value.input, - }), - + key: keys.createNep5TransferSentKey(change.key), value: change.value.serializeWire(), }, ]; - case 'action': + case 'applicationLog': return [ { type: 'put', - key: keys.typeKeyToSerializeKey.action({ - index: change.value.index, - }), - - value: change.value.serializeWire(), - }, - ]; - - case 'asset': - return [ - { - type: 'put', - key: keys.typeKeyToSerializeKey.asset(change.value), + key: keys.createApplicationLogKey(change.key), value: change.value.serializeWire(), }, ]; @@ -70,172 +52,98 @@ const convertAddChange = (changeIn: AddChange): readonly AbstractBatch[] => { return [ { type: 'put', - key: keys.typeKeyToSerializeKey.block(change.value), - value: change.value.serializeWire(), - }, - - { - type: 'put', - key: keys.maxBlockHashKey, - value: common.serializeBlockHash(change.value.hash), - }, - ]; - - case 'blockData': - return [ - { - type: 'put', - key: keys.typeKeyToSerializeKey.blockData(change.value), + key: keys.createBlockKey(change.key), value: change.value.serializeWire(), }, ]; - case 'header': - return [ - { - type: 'put', - key: keys.typeKeyToSerializeKey.header(change.value), - value: change.value.serializeWire(), - }, - - { - type: 'put', - key: keys.maxHeaderHashKey, - value: common.serializeHeaderHash(change.value.hash), - }, - - { - type: 'put', - key: keys.serializeHeaderIndexHashKey(change.value.index), - value: common.serializeHeaderHash(change.value.hash), - }, - ]; - case 'transaction': return [ { type: 'put', - key: keys.typeKeyToSerializeKey.transaction(change.value), + key: keys.createTransactionKey(change.key), value: change.value.serializeWire(), }, ]; - case 'output': - return [ - { - type: 'put', - key: keys.typeKeyToSerializeKey.output({ - hash: change.value.hash, - index: change.value.index, - }), - - value: change.value.output.serializeWire(), - }, - ]; - - case 'transactionData': + case 'contract': return [ { type: 'put', - key: keys.typeKeyToSerializeKey.transactionData(change.value), + key: keys.createContractKey(change.key), value: change.value.serializeWire(), }, ]; - case 'contract': + case 'storage': return [ { type: 'put', - key: keys.typeKeyToSerializeKey.contract(change.value), + key: keys.createStorageKey(change.key), value: change.value.serializeWire(), }, ]; - case 'storageItem': + case 'headerHashList': return [ { type: 'put', - key: keys.typeKeyToSerializeKey.storageItem({ - hash: change.value.hash, - key: change.value.key, - }), - + key: keys.createHeaderHashListKey(change.key), value: change.value.serializeWire(), }, ]; - case 'validator': + case 'blockHashIndex': return [ { type: 'put', - key: keys.typeKeyToSerializeKey.validator({ - publicKey: change.value.publicKey, - }), - + key: keys.blockHashIndexKey, value: change.value.serializeWire(), }, ]; - case 'invocationData': + case 'headerHashIndex': return [ { type: 'put', - key: keys.typeKeyToSerializeKey.invocationData(change.value), + key: keys.headerHashIndexKey, value: change.value.serializeWire(), }, ]; - case 'validatorsCount': + case 'contractID': return [ { type: 'put', - key: keys.validatorsCountKey, + key: keys.contractIDKey, value: change.value.serializeWire(), }, ]; default: utils.assertNever(change); - throw new UnknownTypeError(changeIn.type); + throw new UnknownTypeError(); } }; -const convertDeleteChange = (change: DeleteChange): AbstractBatch => { +const convertDeleteChange = (change: DeleteChange): DelBatch => { switch (change.type) { - case 'account': - return { - type: 'del', - key: keys.typeKeyToSerializeKey.account(change.key), - }; - - case 'accountUnspent': - return { - type: 'del', - key: keys.typeKeyToSerializeKey.accountUnspent(change.key), - }; - - case 'accountUnclaimed': - return { - type: 'del', - key: keys.typeKeyToSerializeKey.accountUnclaimed(change.key), - }; - case 'contract': return { type: 'del', - key: keys.typeKeyToSerializeKey.contract(change.key), + key: keys.createContractKey(change.key), }; - case 'storageItem': + case 'storage': return { type: 'del', - key: keys.typeKeyToSerializeKey.storageItem(change.key), + key: keys.createStorageKey(change.key), }; - case 'validator': + case 'nep5Balance': return { type: 'del', - key: keys.typeKeyToSerializeKey.validator(change.key), + key: keys.createNep5BalanceKey(change.key), }; default: diff --git a/packages/neo-one-node-storage-levelup/src/index.ts b/packages/neo-one-node-storage-levelup/src/index.ts index 5e17c56b41..bf80327334 100644 --- a/packages/neo-one-node-storage-levelup/src/index.ts +++ b/packages/neo-one-node-storage-levelup/src/index.ts @@ -1,2 +1,3 @@ // tslint:disable-next-line export-name export { levelUpStorage as storage } from './levelUpStorage'; +export * from './streamToObservable'; diff --git a/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts b/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts index e6ef7ecc5b..3d14a4f9a0 100644 --- a/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts +++ b/packages/neo-one-node-storage-levelup/src/levelUpStorage.ts @@ -1,227 +1,163 @@ -import { UInt256 } from '@neo-one/client-common'; import { - Account, - AccountUnclaimed, - AccountUnspent, - Asset, - Block, - BlockData, + ApplicationLog, + BinaryReader, BlockKey, - Contract, - deserializeActionWire, - deserializeTransactionWire, + ContractIDState, + ContractState, DeserializeWireContext, - Header, - HeaderKey, - InvocationData, - Output, + // InvocationData, + HashIndexState, + HeaderHashList, + // TransactionData, + Nep5Balance, + Nep5BalanceKey, + Nep5Transfer, + Nep5TransferKey, Storage, StorageItem, - TransactionData, - Validator, - ValidatorsCount, + StorageKey, + TransactionState, + TrimmedBlock, } from '@neo-one/node-core'; import { keys } from '@neo-one/node-storage-common'; import { LevelUp } from 'levelup'; -import * as common from './common'; import { convertChange } from './convertChange'; -import { KeyNotFoundError } from './errors'; +// import { KeyNotFoundError } from './errors'; import * as read from './read'; -export const levelUpStorage = ({ - db, - context, -}: { +interface LevelUpStorageOptions { readonly db: LevelUp; readonly context: DeserializeWireContext; -}): Storage => { - const getHash = async ({ hashOrIndex }: HeaderKey): Promise => { - let hash = hashOrIndex; - if (typeof hash === 'number') { - try { - const result = await db.get(keys.serializeHeaderIndexHashKey(hash)); - hash = common.deserializeHeaderHash(result as Buffer); - } catch (error) { - if (error.notFound) { - throw new KeyNotFoundError(`${hash}`); - } - throw error; - } - } - - return hash; - }; +} - const headerBase = read.createReadStorage({ - db, - serializeKey: keys.typeKeyToSerializeKey.header, - deserializeValue: (buffer) => - Header.deserializeWire({ - context, - buffer, - }), - }); +export const levelUpStorage = ({ db, context }: LevelUpStorageOptions): Storage => { + // TODO: implement getting blockHash from an index + // const getHash = async ({ hashOrIndex }: HeaderKey): Promise => { + // let hash = hashOrIndex; + // if (typeof hash === 'number') { + // try { + // const result = await db.get(keys.serializeHeaderIndexHashKey(hash)); + // hash = common.deserializeHeaderHash(result as Buffer); + // } catch (error) { + // if (error.notFound) { + // throw new KeyNotFoundError(`${hash}`); + // } + // throw error; + // } + // } - const getHeader = async ({ hashOrIndex }: HeaderKey): Promise
=> { - const hash = await getHash({ hashOrIndex }); - - return headerBase.get({ hash }); - }; - - const header = { - get: getHeader, - tryGet: read.createTryGet({ get: getHeader }), - tryGetLatest: read.createTryGetLatest({ - db, - latestKey: keys.maxHeaderHashKey, - deserializeResult: (result) => ({ - hash: common.deserializeHeaderHash(result), - }), - - get: headerBase.get, - }), - }; + // return hash; + // }; const blockBase = read.createReadStorage({ db, - serializeKey: keys.typeKeyToSerializeKey.block, + serializeKey: keys.createBlockKey, deserializeValue: (buffer) => - Block.deserializeWire({ + TrimmedBlock.deserializeWireBase({ context, - buffer, + reader: new BinaryReader(buffer), }), }); - const getBlock = async ({ hashOrIndex }: BlockKey): Promise => { - const hash = await getHash({ hashOrIndex }); + const getBlock = async ({ hashOrIndex }: BlockKey): Promise => { + // TODO: implement getting block hash from index + if (typeof hashOrIndex === 'number') { + throw new Error('not implemented'); + } - return blockBase.get({ hash }); + return blockBase.get({ hashOrIndex }); }; - const block = { + // TODO: confirm when this is in storage blocks come back in order using this range + const blocks = { get: getBlock, tryGet: read.createTryGet({ get: getBlock }), - tryGetLatest: read.createTryGetLatest({ + all$: read.createAll$({ db, - latestKey: keys.maxBlockHashKey, - deserializeResult: (result) => ({ - hash: common.deserializeBlockHash(result), - }), - - get: blockBase.get, + range: { gte: keys.minBlockKey, lte: keys.maxBlockKey }, + deserializeValue: (buffer) => + TrimmedBlock.deserializeWire({ + context, + buffer, + }), }), }; - const transaction = read.createReadStorage({ - db, - serializeKey: keys.typeKeyToSerializeKey.transaction, - deserializeValue: (buffer) => - deserializeTransactionWire({ - context, - buffer, - }), - }); - - const output = read.createReadStorage({ - db, - serializeKey: keys.typeKeyToSerializeKey.output, - deserializeValue: (buffer) => Output.deserializeWire({ context, buffer }), - }); - return { - header, - block, - blockData: read.createReadStorage({ + blocks, + + nep5Balances: read.createReadAllFindStorage({ db, - serializeKey: keys.typeKeyToSerializeKey.blockData, + searchRange: keys.getAllNep5BalanceSearchRange, + getSearchRange: keys.getNep5BalanceSearchRange, + serializeKey: keys.createNep5BalanceKey, deserializeValue: (buffer) => - BlockData.deserializeWire({ + Nep5Balance.deserializeWire({ context, buffer, }), + deserializeKey: (buffer) => Nep5BalanceKey.deserializeWire({ context, buffer }), }), - account: read.createReadAllStorage({ + nep5TransfersReceived: read.createReadFindStorage({ db, - serializeKey: keys.typeKeyToSerializeKey.account, - minKey: keys.accountMinKey, - maxKey: keys.accountMaxKey, + getSearchRange: keys.getNep5TransferReceivedSearchRange, + serializeKey: keys.createNep5TransferReceivedKey, deserializeValue: (buffer) => - Account.deserializeWire({ + Nep5Transfer.deserializeWire({ context, buffer, }), + deserializeKey: (buffer) => Nep5TransferKey.deserializeWire({ context, buffer }), }), - accountUnclaimed: read.createReadGetAllStorage({ + nep5TransfersSent: read.createReadFindStorage({ db, - serializeKey: keys.typeKeyToSerializeKey.accountUnclaimed, - getMinKey: keys.getAccountUnclaimedKeyMin, - getMaxKey: keys.getAccountUnclaimedKeyMax, + getSearchRange: keys.getNep5TransferSentSearchRange, + serializeKey: keys.createNep5TransferSentKey, deserializeValue: (buffer) => - AccountUnclaimed.deserializeWire({ + Nep5Transfer.deserializeWire({ context, buffer, }), + deserializeKey: (buffer) => Nep5TransferKey.deserializeWire({ context, buffer }), }), - accountUnspent: read.createReadGetAllStorage({ + applicationLogs: read.createReadStorage({ db, - serializeKey: keys.typeKeyToSerializeKey.accountUnspent, - getMinKey: keys.getAccountUnspentKeyMin, - getMaxKey: keys.getAccountUnspentKeyMax, - deserializeValue: (buffer) => - AccountUnspent.deserializeWire({ - context, - buffer, - }), + serializeKey: keys.createApplicationLogKey, + deserializeValue: (buffer) => ApplicationLog.deserializeWire({ context, buffer }), }), - action: read.createReadGetAllStorage({ + transactions: read.createReadStorage({ db, - serializeKey: keys.typeKeyToSerializeKey.action, - getMinKey: keys.getActionKeyMin, - getMaxKey: keys.getActionKeyMax, + serializeKey: keys.createTransactionKey, deserializeValue: (buffer) => - deserializeActionWire({ + TransactionState.deserializeWire({ context, buffer, }), }), - asset: read.createReadStorage({ + contracts: read.createReadStorage({ db, - serializeKey: keys.typeKeyToSerializeKey.asset, + serializeKey: keys.createContractKey, deserializeValue: (buffer) => - Asset.deserializeWire({ + ContractState.deserializeWire({ context, buffer, }), }), - transaction, - transactionData: read.createReadStorage({ + storages: read.createReadFindStorage({ db, - serializeKey: keys.typeKeyToSerializeKey.transactionData, - deserializeValue: (buffer) => TransactionData.deserializeWire({ context, buffer }), - }), - - output, - contract: read.createReadStorage({ - db, - serializeKey: keys.typeKeyToSerializeKey.contract, - deserializeValue: (buffer) => - Contract.deserializeWire({ + getSearchRange: keys.getStorageSearchRange, + serializeKey: keys.createStorageKey, + deserializeKey: (buffer) => + StorageKey.deserializeWire({ context, buffer, }), - }), - - storageItem: read.createReadGetAllStorage({ - db, - serializeKey: keys.typeKeyToSerializeKey.storageItem, - getMinKey: keys.getStorageItemKeyMin, - getMaxKey: keys.getStorageItemKeyMax, deserializeValue: (buffer) => StorageItem.deserializeWire({ context, @@ -229,38 +165,40 @@ export const levelUpStorage = ({ }), }), - validator: read.createReadAllStorage({ + headerHashList: read.createReadStorage({ db, - serializeKey: keys.typeKeyToSerializeKey.validator, - minKey: keys.validatorMinKey, - maxKey: keys.validatorMaxKey, + serializeKey: keys.createHeaderHashListKey, deserializeValue: (buffer) => - Validator.deserializeWire({ + HeaderHashList.deserializeWire({ context, buffer, }), }), - invocationData: read.createReadStorage({ + blockHashIndex: read.createReadMetadataStorage({ db, - serializeKey: keys.typeKeyToSerializeKey.invocationData, - deserializeValue: (buffer) => - InvocationData.deserializeWire({ - context, - buffer, - }), + key: keys.blockHashIndexKey, + deserializeValue: (buffer) => HashIndexState.deserializeWire({ context, buffer }), }), - validatorsCount: read.createReadMetadataStorage({ + headerHashIndex: read.createReadMetadataStorage({ db, - key: keys.validatorsCountKey, - deserializeValue: (buffer) => - ValidatorsCount.deserializeWire({ - context, - buffer, - }), + key: keys.headerHashIndexKey, + deserializeValue: (buffer) => HashIndexState.deserializeWire({ context, buffer }), }), + contractID: read.createReadMetadataStorage({ + db, + key: keys.headerHashIndexKey, + deserializeValue: (buffer) => ContractIDState.deserializeWire({ context, buffer }), + }), + + // consensusState: read.createReadMetadataStorage({ + // db, + // key: keys.consensusStateKey, + // deserializeValue: (buffer) => ConsensusContext.deserializeWire({ context, buffer }), + // }), + async close(): Promise { await db.close(); }, @@ -275,6 +213,9 @@ export const levelUpStorage = ({ }, []); await db.batch(changes); }, + async commitBatch(batch): Promise { + await db.batch(batch); + }, async reset(): Promise { // tslint:disable-next-line readonly-array no-any const batch: any[] = []; @@ -295,3 +236,62 @@ export const levelUpStorage = ({ }, }; }; +// blockData: read.createReadStorage({ +// db, +// serializeKey: keys.typeKeyToSerializeKey.blockData, +// deserializeValue: (buffer) => +// BlockData.deserializeWire({ +// context, +// buffer, +// }), +// }), +// +// action: read.createReadGetAllStorage({ +// db, +// serializeKey: keys.typeKeyToSerializeKey.action, +// getMinKey: keys.getActionKeyMin, +// getMaxKey: keys.getActionKeyMax, +// deserializeValue: (buffer) => +// deserializeActionWire({ +// context, +// buffer, +// }), +// }), +// +// transactionData: read.createReadStorage({ +// db, +// serializeKey: keys.typeKeyToSerializeKey.transactionData, +// deserializeValue: (buffer) => TransactionData.deserializeWire({ context, buffer }), +// }), +// validator: read.createReadAllStorage({ +// db, +// serializeKey: keys.typeKeyToSerializeKey.validator, +// minKey: keys.validatorMinKey, +// maxKey: keys.validatorMaxKey, +// deserializeValue: (buffer) => +// Validator.deserializeWire({ +// context, +// buffer, +// }), +// }), + +// invocationData: read.createReadStorage({ +// db, +// serializeKey: keys.typeKeyToSerializeKey.invocationData, +// deserializeValue: (buffer) => +// InvocationData.deserializeWire({ +// context, +// buffer, +// }), +// }), + +// validatorsCount: read.createReadMetadataStorage({ +// db, +// key: keys.validatorsCountKey, +// deserializeValue: (buffer) => +// ValidatorsCount.deserializeWire({ +// context, +// buffer, +// }), +// }), +// }; diff --git a/packages/neo-one-node-storage-levelup/src/read.ts b/packages/neo-one-node-storage-levelup/src/read.ts index 0e4af9bf22..a99fe265bb 100644 --- a/packages/neo-one-node-storage-levelup/src/read.ts +++ b/packages/neo-one-node-storage-levelup/src/read.ts @@ -1,12 +1,20 @@ // tslint:disable no-var-before-return prefer-immediate-return -import { ReadAllStorage, ReadGetAllStorage, ReadMetadataStorage, ReadStorage } from '@neo-one/node-core'; +import { + ReadAllFindStorage, + ReadAllStorage, + ReadFindStorage, + ReadMetadataStorage, + ReadStorage, + StorageReturn, + StreamOptions, +} from '@neo-one/node-core'; import { LevelUp } from 'levelup'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; import { KeyNotFoundError } from './errors'; import { streamToObservable } from './streamToObservable'; -type SerializeKey = (key: Key) => string; +type SerializeKey = (key: Key) => Buffer; export function createTryGet({ get, @@ -27,31 +35,32 @@ export function createTryGet({ }; } -export function createTryGetLatest({ - db, - latestKey, - deserializeResult, - get, -}: { - readonly db: LevelUp; - readonly latestKey: string; - readonly deserializeResult: (latestResult: Buffer) => Key; - readonly get: (key: Key) => Promise; -}): () => Promise { - return async (): Promise => { - try { - const result = await db.get(latestKey); - const value = await get(deserializeResult(result as Buffer)); +// TODO: we haven't implemented any `tryGetLatest` functions, should we reimplement for something? +// export function createTryGetLatest({ +// db, +// latestKey, +// deserializeResult, +// get, +// }: { +// readonly db: LevelUp; +// readonly latestKey: string; +// readonly deserializeResult: (latestResult: Buffer) => Key; +// readonly get: (key: Key) => Promise; +// }): () => Promise { +// return async (): Promise => { +// try { +// const result = await db.get(latestKey); +// const value = await get(deserializeResult(result as Buffer)); - return value; - } catch (error) { - if (error.notFound || error.code === 'KEY_NOT_FOUND') { - return undefined; - } - throw error; - } - }; -} +// return value; +// } catch (error) { +// if (error.notFound || error.code === 'KEY_NOT_FOUND') { +// return undefined; +// } +// throw error; +// } +// }; +// } export function createReadStorage({ db, @@ -70,7 +79,7 @@ export function createReadStorage({ return deserializeValue(result as Buffer); } catch (error) { if (error.notFound || error.code === 'KEY_NOT_FOUND') { - throw new KeyNotFoundError(serialized); + throw new KeyNotFoundError(serialized.toString('hex')); } throw error; @@ -82,34 +91,25 @@ export function createReadStorage({ export function createAll$({ db, - minKey, - maxKey, + range, deserializeValue, }: { readonly db: LevelUp; - readonly minKey: string; - readonly maxKey: string; + readonly range: StreamOptions; readonly deserializeValue: (value: Buffer) => Value; }): Observable { - return streamToObservable(() => - db.createValueStream({ - gte: minKey, - lte: maxKey, - }), - ).pipe(map(deserializeValue)); + return streamToObservable(() => db.createValueStream(range)).pipe(map(deserializeValue)); } export function createReadAllStorage({ db, serializeKey, - minKey, - maxKey, + range, deserializeValue, }: { readonly db: LevelUp; readonly serializeKey: SerializeKey; - readonly minKey: string; - readonly maxKey: string; + readonly range: StreamOptions; readonly deserializeValue: (value: Buffer) => Value; }): ReadAllStorage { const readStorage = createReadStorage({ @@ -121,42 +121,127 @@ export function createReadAllStorage({ return { get: readStorage.get, tryGet: readStorage.tryGet, - all$: createAll$({ db, minKey, maxKey, deserializeValue }), + all$: createAll$({ db, range, deserializeValue }), + }; +} + +export function createFind$({ + db, + getSearchRange, + deserializeKey, + deserializeValue, +}: { + readonly db: LevelUp; + readonly getSearchRange: (key: Buffer, secondary?: Buffer) => StreamOptions; + readonly deserializeKey: (key: Buffer) => Key; + readonly deserializeValue: (value: Buffer) => Value; +}): (lookup: Buffer, secondaryLookup?: Buffer) => Observable> { + return (lookup: Buffer, secondaryLookup?: Buffer) => + streamToObservable>(() => + db.createReadStream(getSearchRange(lookup, secondaryLookup)), + ).pipe(map(({ key, value }) => ({ key: deserializeKey(key.slice(1)), value: deserializeValue(value) }))); +} + +export function createReadFindStorage({ + db, + getSearchRange, + serializeKey, + deserializeKey, + deserializeValue, +}: { + readonly db: LevelUp; + readonly getSearchRange: (key: Buffer, secondary?: Buffer) => StreamOptions; + readonly serializeKey: SerializeKey; + readonly deserializeKey: (value: Buffer) => Key; + readonly deserializeValue: (value: Buffer) => Value; +}): ReadFindStorage { + const readStorage = createReadStorage({ + db, + serializeKey, + deserializeValue, + }); + + return { + get: readStorage.get, + tryGet: readStorage.tryGet, + find$: createFind$({ + db, + getSearchRange, + deserializeKey, + deserializeValue, + }), }; } -export function createReadGetAllStorage({ +export function createReadAllFindStorage({ db, + searchRange, + getSearchRange, serializeKey, - getMinKey, - getMaxKey, + deserializeKey, deserializeValue, }: { readonly db: LevelUp; + readonly searchRange: StreamOptions; + readonly getSearchRange: (key: Buffer, secondary?: Buffer) => StreamOptions; readonly serializeKey: SerializeKey; - readonly getMinKey: (keys: Keys) => string; - readonly getMaxKey: (keys: Keys) => string; + readonly deserializeKey: (value: Buffer) => Key; readonly deserializeValue: (value: Buffer) => Value; -}): ReadGetAllStorage { +}): ReadAllFindStorage { const readStorage = createReadStorage({ db, serializeKey, deserializeValue, }); + const all$ = createAll$({ db, range: searchRange, deserializeValue }); + return { get: readStorage.get, tryGet: readStorage.tryGet, - getAll$: (keys: Keys) => - createAll$({ - db, - minKey: getMinKey(keys), - maxKey: getMaxKey(keys), - deserializeValue, - }), + find$: createFind$({ + db, + getSearchRange, + deserializeKey, + deserializeValue, + }), + all$, }; } +// TODO: do we need to reimplement this for something? +// export function createReadGetAllStorage({ +// db, +// serializeKey, +// getMinKey, +// getMaxKey, +// deserializeValue, +// }: { +// readonly db: LevelUp; +// readonly serializeKey: SerializeKey; +// readonly getMinKey: (keys: Keys) => string; +// readonly getMaxKey: (keys: Keys) => string; +// readonly deserializeValue: (value: Buffer) => Value; +// }): ReadGetAllStorage { +// const readStorage = createReadStorage({ +// db, +// serializeKey, +// deserializeValue, +// }); + +// return { +// get: readStorage.get, +// tryGet: readStorage.tryGet, +// getAll$: (keys: Keys) => +// createAll$({ +// db, +// minKey: getMinKey(keys), +// maxKey: getMaxKey(keys), +// deserializeValue, +// }), +// }; +// } + export function createTryGetMetadata({ get, }: { @@ -182,7 +267,7 @@ export function createReadMetadataStorage({ deserializeValue, }: { readonly db: LevelUp; - readonly key: string; + readonly key: Buffer; readonly deserializeValue: (value: Buffer) => Value; }): ReadMetadataStorage { const get = async (): Promise => { @@ -192,7 +277,7 @@ export function createReadMetadataStorage({ return deserializeValue(result as Buffer); } catch (error) { if (error.notFound || error.code === 'KEY_NOT_FOUND') { - throw new KeyNotFoundError(key); + throw new KeyNotFoundError(key.toString('hex')); } throw error; diff --git a/packages/neo-one-node-storage-levelup/src/streamToObservable.ts b/packages/neo-one-node-storage-levelup/src/streamToObservable.ts index 12f6ba043d..a76e49a487 100644 --- a/packages/neo-one-node-storage-levelup/src/streamToObservable.ts +++ b/packages/neo-one-node-storage-levelup/src/streamToObservable.ts @@ -1,7 +1,7 @@ import { Observable, Observer } from 'rxjs'; -export const streamToObservable = (getStream: () => NodeJS.ReadableStream): Observable => - new Observable((observer: Observer) => { +export const streamToObservable = (getStream: () => NodeJS.ReadableStream): Observable => + new Observable((observer: Observer) => { const stream = getStream(); let done = false; const cleanup = () => { @@ -23,7 +23,7 @@ export const streamToObservable = (getStream: () => NodeJS.ReadableStream): Obse cleanup(); observer.error(error); }; - const onData = (data: Buffer) => observer.next(data); + const onData = (data: T) => observer.next(data); stream.once('error', onError); stream.once('end', onEnd); diff --git a/packages/neo-one-node-storage-levelup/src/types.ts b/packages/neo-one-node-storage-levelup/src/types.ts deleted file mode 100644 index 3dfc1603d7..0000000000 --- a/packages/neo-one-node-storage-levelup/src/types.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface StreamOptions { - readonly gte?: Buffer; - readonly lte?: Buffer; -} diff --git a/packages/neo-one-node-storage-levelup/tsconfig.json b/packages/neo-one-node-storage-levelup/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-node-storage-levelup/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-node-tools/bin/node-restore.js b/packages/neo-one-node-tools/bin/node-restore.js new file mode 100644 index 0000000000..5e0dc065e7 --- /dev/null +++ b/packages/neo-one-node-tools/bin/node-restore.js @@ -0,0 +1,2 @@ +#!/usr/bin/env node +require('../dist/cjs/node-restore.js'); diff --git a/packages/neo-one-node-tools/gulpfile.js b/packages/neo-one-node-tools/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-node-tools/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-node-tools/package.json b/packages/neo-one-node-tools/package.json new file mode 100644 index 0000000000..8b572da6b7 --- /dev/null +++ b/packages/neo-one-node-tools/package.json @@ -0,0 +1,36 @@ +{ + "name": "@neo-one/node-tools", + "version": "2.3.1", + "description": "tools for the node", + "bin": { + "node-restore": "./bin/node-restore.js" + }, + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, + "dependencies": { + "@google-cloud/storage": "^4.3.2", + "@neo-one/logger": "^2.6.1", + "@neo-one/utils-node": "^2.6.2", + "execa": "^3.2.0", + "import-local": "^3.0.2", + "rc": "^1.2.8", + "semver": "^6.3.0", + "source-map-support": "^0.5.13", + "tslib": "^1.10.0", + "yargs": "^14.2.0" + }, + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "@types/fs-extra": "^8.0.0", + "@types/rc": "^1.1.0", + "@types/yargs": "^13.0.3", + "fs-extra": "^8.1.0", + "gulp": "~4.0.2" + } +} diff --git a/packages/neo-one-node-tools/src/bin/node-restore.ts b/packages/neo-one-node-tools/src/bin/node-restore.ts new file mode 100644 index 0000000000..50989a6f14 --- /dev/null +++ b/packages/neo-one-node-tools/src/bin/node-restore.ts @@ -0,0 +1,12 @@ +import yargs from 'yargs'; +import * as cmd from '../cmd'; + +const { command } = cmd; +// tslint:disable-next-line no-unused-expression +yargs + .command({ + ...cmd, + command: ['$0'].concat(command.split(' ').slice(1)).join(' '), + }) + .scriptName(command.split(' ')[0]) + .help('help').argv; diff --git a/packages/neo-one-node-tools/src/cmd.ts b/packages/neo-one-node-tools/src/cmd.ts new file mode 100644 index 0000000000..73a3d01a17 --- /dev/null +++ b/packages/neo-one-node-tools/src/cmd.ts @@ -0,0 +1,36 @@ +import { createChild, nodeLogger } from '@neo-one/logger'; +import { createStart, Yarguments } from '@neo-one/utils-node'; +import yargs from 'yargs'; +import { restore } from './restore'; + +const start = createStart(createChild(nodeLogger, { service: 'node-restore' })); + +export const command = 'node-restore'; +export const describe = 'restore node data from google bucket'; +export const builder = (yargsBuilder: typeof yargs) => + yargsBuilder.string('path').string('bucket').string('folder').demandOption(['path', 'bucket', 'folder']); +export const handler = ({ path, bucket, folder }: Yarguments>) => { + start(async () => { + const restoreFunc = await restore({ path, bucket, folder }); + + if (restoreFunc === undefined) { + return async () => { + await Promise.resolve(); + }; + } + + const runner = restoreFunc(); + + return async () => { + await new Promise((resolve, reject) => { + try { + runner.kill(); + + resolve(); + } catch (error) { + reject(error); + } + }); + }; + }); +}; diff --git a/packages/neo-one-node-tools/src/restore.ts b/packages/neo-one-node-tools/src/restore.ts new file mode 100644 index 0000000000..330f782520 --- /dev/null +++ b/packages/neo-one-node-tools/src/restore.ts @@ -0,0 +1,62 @@ +import { Storage } from '@google-cloud/storage'; +import execa from 'execa'; +import fs from 'fs-extra'; +// tslint:disable-next-line: match-default-export-name +import nodePath from 'path'; + +interface RestoreOptions { + readonly path: string; + readonly bucket: string; + readonly folder: string; +} + +const runRestore = ({ path, bucket, folder }: RestoreOptions) => { + if (!fs.existsSync(path)) { + fs.mkdirSync(path); + } + + return execa('gsutil', ['-m', 'rsync', '-r', `gs://${bucket}/${folder}`, path], { + shell: true, + stdio: 'inherit', + }); +}; + +const getLocalMTime = async (path: string) => { + let stats: fs.Stats; + try { + stats = await fs.stat(nodePath.join(path, 'LOG')); + } catch (error) { + if (error.code === 'ENOENT') { + return new Date(0); + } + + throw error; + } + + if (!stats.isFile()) { + return new Date(0); + } + + return stats.mtime; +}; + +const getCloudMTime = async (bucket: string, folder: string) => { + const storage = new Storage(); + + const [metadata] = await storage.bucket(bucket).file(nodePath.join(folder, 'LOG')).getMetadata(); + + return new Date(metadata.updated); +}; + +export const restore = async ({ path, bucket, folder }: RestoreOptions) => { + const [localMTime, cloudMTime] = await Promise.all([getLocalMTime(path), getCloudMTime(bucket, folder)]); + + if (localMTime.getTime() >= cloudMTime.getTime()) { + // tslint:disable-next-line: no-console + console.log('skipping restore, local files more synced'); + + return undefined; + } + + return () => runRestore({ path, bucket, folder }); +}; diff --git a/packages/neo-one-node-tools/tsconfig.json b/packages/neo-one-node-tools/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-node-tools/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-node-vm/.npmignore b/packages/neo-one-node-vm/.npmignore new file mode 100644 index 0000000000..758d82503c --- /dev/null +++ b/packages/neo-one-node-vm/.npmignore @@ -0,0 +1,23 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** +!/lib/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-node-vm/CHANGELOG.json b/packages/neo-one-node-vm/CHANGELOG.json new file mode 100644 index 0000000000..6b6934b5d7 --- /dev/null +++ b/packages/neo-one-node-vm/CHANGELOG.json @@ -0,0 +1,111 @@ +{ + "name": "@neo-one/node-vm", + "entries": [ + { + "version": "3.0.0", + "tag": "@neo-one/node-vm_v3.0.0", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "major": [ + { + "comment": "3.0.0preview3-alpha release bump" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/node-vm_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Add appropriate @types dependencies." + }, + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "dependency": [ + { + "comment": "Dependency @neo-one/client-common version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Dependency @neo-one/client-full-common version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/node-vm_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full-common\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/node-vm_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full-common\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-node-vm/CHANGELOG.md b/packages/neo-one-node-vm/CHANGELOG.md index 158b581db0..d013a3696c 100644 --- a/packages/neo-one-node-vm/CHANGELOG.md +++ b/packages/neo-one-node-vm/CHANGELOG.md @@ -1,161 +1,37 @@ -# Change Log +# Change Log - @neo-one/node-vm -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-vm@1.4.3...@neo-one/node-vm@2.3.0) (2019-10-23) +## 3.0.0 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/node-vm +### Breaking changes +- 3.0.0preview3-alpha release bump +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT +### Patches +- Add appropriate @types dependencies. +- Upgrade TypeScript from v3.8.3 to v3.9.5 -## [1.4.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-vm@1.4.2...@neo-one/node-vm@1.4.3) (2019-10-23) +### Updates -**Note:** Version bump only for package @neo-one/node-vm +- bump package version for future release clarity +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes +- update package release process to take better advantage of rush tooling +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -## [1.4.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-vm@1.4.1...@neo-one/node-vm@1.4.2) (2019-09-04) +### Minor changes -**Note:** Version bump only for package @neo-one/node-vm +- Migrate to Rush - - - - -## [1.4.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-vm@1.4.0...@neo-one/node-vm@1.4.1) (2019-08-30) - -**Note:** Version bump only for package @neo-one/node-vm - - - - - -# [1.4.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-vm@1.3.0...@neo-one/node-vm@1.4.0) (2019-08-23) - - -### Features - -* **e2e:** node-bin e2e consensus test ([0671932](https://github.com/neo-one-suite/neo-one/commit/0671932)) - - - - - -# [1.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-vm@1.2.1...@neo-one/node-vm@1.3.0) (2019-08-22) - - -### Features - -* **monitor:** remove @neo-one/monitor. replace with opencensus, pino, and debug ([#1597](https://github.com/neo-one-suite/neo-one/issues/1597)) ([4b1a28f](https://github.com/neo-one-suite/neo-one/commit/4b1a28f)) - - - - - -## [1.2.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-vm@1.2.0...@neo-one/node-vm@1.2.1) (2019-07-29) - - -### Bug Fixes - -* **node:** Final round of node fixes ([a88a04e](https://github.com/neo-one-suite/neo-one/commit/a88a04e)) - - - - - -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-vm@1.1.3...@neo-one/node-vm@1.2.0) (2019-06-20) - - -### Bug Fixes - -* **@neo-one/node-vm:** Remove GetClaimReferences ([6ab91a7](https://github.com/neo-one-suite/neo-one/commit/6ab91a7)), closes [#1412](https://github.com/neo-one-suite/neo-one/issues/1412) -* **@neo-one/node-vm:** Throw errors on invalid syscalls during verification ([7435b20](https://github.com/neo-one-suite/neo-one/commit/7435b20)) -* **deps:** update dependency typescript to v3.5.1 ([#1365](https://github.com/neo-one-suite/neo-one/issues/1365)) ([ec89546](https://github.com/neo-one-suite/neo-one/commit/ec89546)) -* **node:** First wave of node fixes ([d50fd34](https://github.com/neo-one-suite/neo-one/commit/d50fd34)) - - -### Features - -* **@neo-one/smart-contract-compiler:** Do not persist storage on uncaught exception ([bf261ca](https://github.com/neo-one-suite/neo-one/commit/bf261ca)) - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-vm@1.1.2...@neo-one/node-vm@1.1.3) (2019-06-04) - - -### Bug Fixes - -* **@neo-one/types:** eliminate global types from @neo-one/types ([004330d](https://github.com/neo-one-suite/neo-one/commit/004330d)) - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-vm@1.1.1...@neo-one/node-vm@1.1.2) (2019-04-12) - -**Note:** Version bump only for package @neo-one/node-vm - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-vm@1.1.0...@neo-one/node-vm@1.1.1) (2019-03-27) - - -### Bug Fixes - -* **deps:** update dependency @reactivex/ix-es2015-cjs to v2.5.2 ([bb4047b](https://github.com/neo-one-suite/neo-one/commit/bb4047b)) - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-vm@1.0.2...@neo-one/node-vm@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node-vm - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-vm@1.0.2-alpha.0...@neo-one/node-vm@1.0.2) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node-vm - - - - - -## [1.0.2-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-vm@1.0.1...@neo-one/node-vm@1.0.2-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **@neo-one/node-vm:** sort witness script hashes ([a5f682b](https://github.com/neo-one-suite/neo-one/commit/a5f682b)) -* **build:** adjust several packages to allow emitting .d.ts files. ([27a2d88](https://github.com/neo-one-suite/neo-one/commit/27a2d88)) -* **deps:** update dependency @reactivex/ix-es2015-cjs and @reactivex/ix-esnext-esm to v2.5.1 ([b16cb09](https://github.com/neo-one-suite/neo-one/commit/b16cb09)) -* **deps:** update dependency @types/lodash to v4.14.120 ([a76dae7](https://github.com/neo-one-suite/neo-one/commit/a76dae7)) -* **deps:** update dependency bitwise to v2.0.1 ([f0d5d33](https://github.com/neo-one-suite/neo-one/commit/f0d5d33)) -* **deps:** update dependency rxjs to v6.4.0 ([e28af2a](https://github.com/neo-one-suite/neo-one/commit/e28af2a)) -* **deps:** update dependency typescript to v3.3.1 ([975bf8e](https://github.com/neo-one-suite/neo-one/commit/975bf8e)) -* **reactivex:** downgrade and pin reactivex dependencies ([a9ee114](https://github.com/neo-one-suite/neo-one/commit/a9ee114)) - - -### Features - -* **@neo-one/node-vm:** hash syscalls ([9c7f378](https://github.com/neo-one-suite/neo-one/commit/9c7f378)) - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node-vm@1.0.0...@neo-one/node-vm@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/node-vm diff --git a/packages/neo-one-node-vm/gulpfile.js b/packages/neo-one-node-vm/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-node-vm/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs b/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs new file mode 100644 index 0000000000..cae8b20e56 --- /dev/null +++ b/packages/neo-one-node-vm/lib/Dispatcher.Engine.cs @@ -0,0 +1,280 @@ +using System; +using System.IO; +using System.Linq; +using Neo; +using Neo.IO; +using Neo.Network.P2P.Payloads; +using Neo.Persistence; +using Neo.SmartContract; +using Neo.VM; +using Neo.VM.Types; + +namespace NEOONE +{ + partial class Dispatcher + { + + private enum ContainerType + { + Block, + Transaction, + Signers, + ConsensusPayload, + } + + private IVerifiable deserializeContainer(dynamic args) + { + byte[] serializedContainer = (byte[])args.buffer; + string typeIn = (string)args.type; + IVerifiable container; + + ContainerType type; + if (Enum.TryParse(typeIn, out type)) + { + + switch (type) + { + case ContainerType.Block: + container = new Block(); + break; + case ContainerType.Transaction: + container = new Transaction(); + break; + case ContainerType.Signers: + container = new Signers(); + break; + case ContainerType.ConsensusPayload: + container = new ConsensusPayload(); + break; + default: + throw new ArgumentException($"{typeIn} is not a valid container type"); + } + using (MemoryStream ms = new MemoryStream(serializedContainer)) + using (BinaryReader reader = new BinaryReader(ms)) + { + container.Deserialize(reader); + } + + return container; + } + + throw new ArgumentException($"{typeIn} is not a valid container type"); + } + + private enum EngineMethod + { + create, + execute, + loadscript, + setinstructionpointer, + getvmstate, + getresultstack, + gettrigger, + getgasconsumed, + getnotifications, + getlogs, + dispose_engine, + } + + private dynamic dispatchEngineMethod(EngineMethod method, dynamic args) + { + switch (method) + { + case EngineMethod.create: + TriggerType trigger = (TriggerType)args.trigger; + long gas = long.Parse((string)args.gas); + IVerifiable container = null; + if (args.container != null) + { + container = deserializeContainer(args.container); + } + return this._create(trigger, container, this.selectSnapshot(args.snapshot, false), gas); + + case EngineMethod.execute: + return this._execute(); + + case EngineMethod.loadscript: + Script script = new Script((byte[])args.script); + CallFlags flags = (CallFlags)((byte)args.flags); + UInt160 scriptHash = null; + int initialPosition = 0; + + if (args.scriptHash != null) + { + scriptHash = UInt160.Parse((string)args.scriptHash); + } + + if (args.initialPosition != null) + { + initialPosition = (int)args.initialPosition; + } + + return this._loadScript(script, flags, scriptHash, initialPosition); + + case EngineMethod.getvmstate: + return this._getVMState(); + + case EngineMethod.getresultstack: + return this._getResultStack(); + + case EngineMethod.gettrigger: + return this._getTrigger(); + + case EngineMethod.getgasconsumed: + return this._getGasConsumed(); + + case EngineMethod.getnotifications: + return this._getNotifications(); + + case EngineMethod.getlogs: + return this._getLogs(); + + case EngineMethod.dispose_engine: + this.disposeEngine(); + + return true; + + default: + throw new InvalidOperationException(); + } + } + + private void disposeEngine() + { + if (this.engine != null) + { + this.engine.Dispose(); + this.engine = null; + } + } + + private bool _create(TriggerType trigger, IVerifiable container, StoreView snapshot, long gas) + { + this.disposeEngine(); + this.engine = ApplicationEngine.Create(trigger, container, snapshot, gas); + + return true; + } + + private VMState _execute() + { + this.isEngineInitialized(); + return this.engine.Execute(); + } + + private bool _loadScript(Script script, CallFlags flags, UInt160 hash = null, int initialPosition = 0) + { + this.isEngineInitialized(); + this.engine.LoadScript(script, flags, hash, initialPosition); + return true; + } + + private VMState _getVMState() + { + return this.engine != null ? this.engine.State : VMState.BREAK; + } + + private dynamic[] _getResultStack() + { + return this.engine != null ? this.engine.ResultStack.Select((StackItem p) => ReturnHelpers.convertStackItem(p)).ToArray() : new dynamic[0]; + } + + private TriggerType _getTrigger() + { + this.isEngineInitialized(); + return this.engine.Trigger; + } + + private dynamic _getContainer() + { + this.isEngineInitialized(); + return this.engine.ScriptContainer; + } + + private string _getGasConsumed() + { + return this.engine != null ? this.engine.GasConsumed.ToString() : "0"; + } + + private dynamic[] _getNotifications() + { + this.isEngineInitialized(); + var events = this.engine.Notifications; + if (events == null || events.Count == 0) + { + return new dynamic[] { }; + } + + return events.Select((p) => ReturnHelpers.convertStackItem(p.ToStackItem(new ReferenceCounter()))).ToArray(); + } + + private dynamic[] _getLogs() + { + this.isEngineInitialized(); + var events = this.engine.Logs; + if (events == null || events.Count == 0) + { + return new dynamic[] { }; + } + + return events.Select((p) => ReturnHelpers.convertLog(p)).ToArray(); + } + + private bool isEngineInitialized() + { + if (this.engine == null) + { + throw new InvalidOperationException("Can't invoke an engine method without creating the engine"); + } + + return true; + } + } + + internal class Signers : IVerifiable + { + private Signer[] _signers; + public Witness[] Witnesses { get; set; } + public int Size { get; } + + public Signers(Signer[] signers) + { + _signers = signers; + } + + public Signers() + { + + } + + public void Serialize(BinaryWriter writer) + { + throw new NotImplementedException(); + } + + public void Deserialize(BinaryReader reader) + { + _signers = reader.ReadSerializableArray(); + } + + public void DeserializeUnsigned(BinaryReader reader) + { + throw new NotImplementedException(); + } + + public Neo.UInt160[] GetScriptHashesForVerifying(StoreView snapshot) + { + return _signers.Select(p => p.Account).ToArray(); + } + + public Signer[] GetSigners() + { + return _signers; + } + + public void SerializeUnsigned(BinaryWriter writer) + { + throw new NotImplementedException(); + } + } +} diff --git a/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs b/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs new file mode 100644 index 0000000000..aecb8920ad --- /dev/null +++ b/packages/neo-one-node-vm/lib/Dispatcher.Snapshot.cs @@ -0,0 +1,217 @@ +using System; +using System.IO; +using Neo; +using Neo.Ledger; +using Neo.Network.P2P.Payloads; +using Neo.Persistence; +using Neo.VM; +using NEOONE.Storage; +using System.Threading; +using Neo.IO.Caching; + +namespace NEOONE +{ + partial class Dispatcher + { + + private StoreView snapshot; + private StoreView clonedSnapshot; + + enum SnapshotMethod + { + snapshot_blocks_add, + snapshot_transactions_add, + snapshot_clone, + snapshot_commit, + snapshot_reset, + snapshot_change_block_hash_index, + snapshot_change_header_hash_index, + snapshot_set_persisting_block, + snapshot_has_persisting_block, + snapshot_get_change_set, + snapshot_transactions_delete, + } + + private dynamic dispatchSnapshotMethod(SnapshotMethod method, dynamic args) + { + switch (method) + { + case SnapshotMethod.snapshot_blocks_add: + UInt256 blockHash = new UInt256((byte[])args.hash); + byte[] blockSerialized = (byte[])args.block; + Block block = new Block(); + using (MemoryStream ms = new MemoryStream(blockSerialized)) + using (BinaryReader reader = new BinaryReader(ms)) + { + block.Deserialize(reader); + } + + return this._snapshotBlocksAdd(this.selectSnapshot(args.snapshot), blockHash, block); + + case SnapshotMethod.snapshot_transactions_add: + uint blockIndex = (uint)args.index; + byte[] txSerialized = (byte[])args.tx; + VMState vmState = (VMState)args.state; + Transaction tx = new Transaction(); + using (MemoryStream ms = new MemoryStream(txSerialized)) + using (BinaryReader reader = new BinaryReader(ms)) + { + + ((IVerifiable)tx).Deserialize(reader); + } + + return this._snapshotTransactionsAdd(this.selectSnapshot(args.snapshot), tx, blockIndex, vmState); + + case SnapshotMethod.snapshot_transactions_delete: + UInt256 transactionHash = new UInt256((byte[])args.hash); + + return this._snapshotTransactionsDelete(this.selectSnapshot(args.snapshot), transactionHash); + + case SnapshotMethod.snapshot_clone: + return this._snapshotClone(); + + case SnapshotMethod.snapshot_change_block_hash_index: + uint bIndex = (uint)args.index; + UInt256 blockChangeHash = new UInt256((byte[])args.hash); + + return this._snapshotChangeBlockHashIndex(this.selectSnapshot(args.snapshot), bIndex, blockChangeHash); + + case SnapshotMethod.snapshot_change_header_hash_index: + uint hIndex = (uint)args.index; + UInt256 headerChangeHash = new UInt256((byte[])args.hash); + + return this._snapshotChangeHeaderHashIndex(this.selectSnapshot(args.snapshot), hIndex, headerChangeHash); + + case SnapshotMethod.snapshot_get_change_set: + return this._snapshotGetChangeSet(this.selectSnapshot(args.snapshot, true)); + + + case SnapshotMethod.snapshot_commit: + this._snapshotCommit( + this.selectSnapshot(args.snapshot), + args.partial + ); + + return true; + + case SnapshotMethod.snapshot_set_persisting_block: + byte[] persistingBlockSerialized = (byte[])args.block; + Block persisting = new Block(); + using (MemoryStream ms = new MemoryStream(persistingBlockSerialized)) + using (BinaryReader reader = new BinaryReader(ms)) + { + persisting.Deserialize(reader); + } + + this.selectSnapshot(args.snapshot).PersistingBlock = persisting; + + return true; + + case SnapshotMethod.snapshot_has_persisting_block: + return this.selectSnapshot(args.snapshot).PersistingBlock != null; + + + case SnapshotMethod.snapshot_reset: + this.resetSnapshots(); + + return true; + + default: + throw new InvalidOperationException(); + } + } + + + private void resetSnapshots() + { + this.store?.Dispose(); + this.store = null; + this.store = this.path != null ? new RocksDBStore(this.path).GetStore() : new MemoryStore(); + this.snapshot = new SnapshotView(this.store); + this.clonedSnapshot = this.snapshot.Clone(); + } + + private StoreView selectSnapshot(string snapshot, bool required = true) + { + switch (snapshot) + { + case "main": + return this.snapshot; + case "clone": + return this.clonedSnapshot; + default: + if (required) throw new InvalidOperationException("Must specify snapshot for this method"); + return null; + } + } + + private void _snapshotCommit(StoreView snapshot, string partial) + { + switch (partial) + { + case "blocks": + snapshot.Blocks.Commit(); + break; + case "transactions": + snapshot.Transactions.Commit(); + break; + default: + snapshot.Commit(); + break; + } + } + + private bool _snapshotBlocksAdd(StoreView snapshot, UInt256 hash, Block block) + { + snapshot.Blocks.Add(hash, block.Trim()); + + return true; + } + + private bool _snapshotTransactionsAdd(StoreView snapshot, Transaction tx, uint index, VMState vmState = VMState.BREAK) + { + var state = new TransactionState { BlockIndex = index, Transaction = tx, VMState = vmState }; + snapshot.Transactions.Add(tx.Hash, state); + + return true; + } + + private bool _snapshotTransactionsDelete(StoreView snapshot, UInt256 hash) + { + snapshot.Transactions.Delete(hash); + + return true; + } + + private bool _snapshotChangeBlockHashIndex(StoreView snapshot, uint index, UInt256 hash) + { + HashIndexState hashIndex = snapshot.BlockHashIndex.GetAndChange(); + hashIndex.Index = index; + hashIndex.Hash = hash; + + return true; + } + + private bool _snapshotChangeHeaderHashIndex(StoreView snapshot, uint index, UInt256 hash) + { + HashIndexState hashIndex = snapshot.HeaderHashIndex.GetAndChange(); + hashIndex.Index = index; + hashIndex.Hash = hash; + + return true; + } + + private dynamic _snapshotGetChangeSet(StoreView snapshot) + { + return new ChangeSet(snapshot).set.ToArray(); + } + + private bool _snapshotClone() + { + this.clonedSnapshot = this.snapshot.Clone(); + + return true; + } + } + +} diff --git a/packages/neo-one-node-vm/lib/Dispatcher.TestHelper.cs b/packages/neo-one-node-vm/lib/Dispatcher.TestHelper.cs new file mode 100644 index 0000000000..46a88422b3 --- /dev/null +++ b/packages/neo-one-node-vm/lib/Dispatcher.TestHelper.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using Neo.Persistence; + +// It is worth noting this helper method shouldn't be used outside of testing purposes. +namespace NEOONE +{ + partial class Dispatcher + { + enum TestMethod + { + test_update_store + } + + public class RawChange + { + public byte table { get; set; } + public byte[] key { get; set; } + public byte[] value { get; set; } + } + private dynamic dispatchTestMethod(TestMethod method, dynamic args) + { + switch (method) + { + case TestMethod.test_update_store: + List changes = new List { }; + foreach (dynamic change in args.changes) + { + changes.Add(new RawChange() { table = (byte)change.table, key = (byte[])change.key, value = (byte[])change.value }); + } + return this._updateStore(changes.ToArray()); + default: + throw new InvalidOperationException(); + } + } + + private bool _updateStore(RawChange[] changes) + { + if (this.path != null) + { + throw new InvalidOperationException("Must use a memory store for this operation to be useful"); + } + + this.store?.Dispose(); + this.store = null; + this.store = new MemoryStore(); + foreach (RawChange change in changes) + { + this.store.PutSync(change.table, change.key, change.value); + } + this.snapshot = new SnapshotView(this.store); + this.clonedSnapshot = this.snapshot.Clone(); + + return true; + } + } +} diff --git a/packages/neo-one-node-vm/lib/Dispatcher.cs b/packages/neo-one-node-vm/lib/Dispatcher.cs new file mode 100644 index 0000000000..2e68662c36 --- /dev/null +++ b/packages/neo-one-node-vm/lib/Dispatcher.cs @@ -0,0 +1,232 @@ +using System; +using System.Threading.Tasks; +using Neo.SmartContract; +using System.Dynamic; +using System.Collections.Generic; +using Neo.Persistence; +using Microsoft.Extensions.Configuration; + +namespace NEOONE +{ + public partial class Dispatcher + { + + private ApplicationEngine engine; + private IStore store; + private bool init = false; + private string path; + private enum BaseMethod + { + init, + dispose, + test, + get_config, + } + + private dynamic dispatchBaseMethod(BaseMethod method, dynamic args) + { + switch (method) + { + case BaseMethod.init: + if (args.path == null && args.settings == null) + { + return this._init(); + } + if (args.path == null && args.settings != null) + { + return this._init(parseConfig(args.settings)); + } + if (args.path != null && args.settings == null) + { + return this._init((string)args.path); + } + + return this._init((string)args.path, parseConfig(args.settings)); + + case BaseMethod.dispose: + return this._dispose(); + + case BaseMethod.get_config: + return this._getConfig(); + + case BaseMethod.test: + return this._test(); + + default: + throw new InvalidOperationException(); + + } + } + + private bool _init(string path, IConfiguration config) + { + if (!this.init) + { + Neo.ProtocolSettings.Initialize(config); + this.path = path; + this.resetSnapshots(); + + this.init = true; + } + + return this.init; + } + + private bool _init(IConfiguration config) + { + if (!this.init) + { + Neo.ProtocolSettings.Initialize(config); + this.resetSnapshots(); + + this.init = true; + } + + return this.init; + } + + private bool _init(string path) + { + if (!this.init) + { + this.path = path; + this.resetSnapshots(); + + this.init = true; + } + + return this.init; + } + + private bool _init() + { + if (!this.init) + { + this.resetSnapshots(); + + this.init = true; + } + + return this.init; + } + + private bool _dispose() + { + this.snapshot = null; + this.clonedSnapshot = null; + this.store.Dispose(); + this.store = null; + this.disposeEngine(); + this.init = false; + + return true; + } + + private dynamic _test() + { + return sizeof(uint); + } + + private NEOONE.ReturnHelpers.ProtocolSettingsReturn _getConfig() + { + return new NEOONE.ReturnHelpers.ProtocolSettingsReturn(Neo.ProtocolSettings.Default); + } + +#pragma warning disable 1998 + public async Task Invoke(dynamic input) + { + string method = (string)input.method; + if (!this.init && method != "init") + { + throw new InvalidOperationException("Dispatcher must be initalized"); + } + + object args = hasArgs(input) ? input.args : null; + + BaseMethod baseMethod; + if (Enum.TryParse(method, out baseMethod)) + { + return this.dispatchBaseMethod(baseMethod, args); + } + + EngineMethod engineMethod; + if (Enum.TryParse(method, out engineMethod)) + { + return this.dispatchEngineMethod(engineMethod, args); + } + + SnapshotMethod snapshotMethod; + if (Enum.TryParse(method, out snapshotMethod)) + { + return this.dispatchSnapshotMethod(snapshotMethod, args); + } + + TestMethod testMethod; + if (Enum.TryParse(method, out testMethod)) + { + return this.dispatchTestMethod(testMethod, args); + } + + throw new ArgumentException($"{method} is not a valid dispatch method"); + } + + private bool hasArgs(dynamic input) + { + Type inputType = input.GetType(); + + if (inputType == typeof(ExpandoObject)) + { + return ((IDictionary)input).ContainsKey("args"); + } + + return inputType.GetProperty("args") != null; + } + + private IConfiguration parseConfig(dynamic input) + { + Dictionary config = new Dictionary { }; + if (input.magic != null) + { + uint Magic = (uint)input.magic; + config.Add("ProtocolConfiguration:Magic", Magic.ToString()); + } + if (input.addressVersion != null) + { + byte AddressVersion = (byte)input.addressVersion; + config.Add("ProtocolConfiguration:AddressVersion", AddressVersion.ToString()); + } + if (input.standbyCommittee != null) + { + object[] StandbyCommittee = (object[])input.standbyCommittee; + int idx = 0; + foreach (object member in StandbyCommittee) + { + config.Add($"ProtocolConfiguration:StandbyCommittee:{idx}", member.ToString()); + idx++; + } + } + if (input.committeeMembersCount != null) + { + int CommitteeMembersCount = (int)input.committeeMembersCount; + config.Add("ProtocolConfiguration:CommitteeMembersCount", CommitteeMembersCount.ToString()); + } + if (input.validatorsCount != null) + { + int ValidatorsCount = (int)input.validatorsCount; + config.Add("ProtocolConfiguration:ValidatorsCount", ValidatorsCount.ToString()); + } + if (input.millisecondsPerBlock != null) + { + uint MillisecondsPerBlock = (uint)input.millisecondsPerBlock; + config.Add("ProtocolConfiguration:MillisecondsPerBlock", MillisecondsPerBlock.ToString()); + } + if (input.memoryPoolMaxTransactions != null) + { + int MemoryPoolMaxTransactions = (int)input.memoryPoolMaxTransactions; + config.Add("ProtocolConfiguration:MemoryPoolMaxTransactions", MemoryPoolMaxTransactions.ToString()); + } + + return new ConfigurationBuilder().AddInMemoryCollection(config).Build(); + } + } +} diff --git a/packages/neo-one-node-vm/lib/Dispatcher.csproj b/packages/neo-one-node-vm/lib/Dispatcher.csproj new file mode 100644 index 0000000000..c93ca3843e --- /dev/null +++ b/packages/neo-one-node-vm/lib/Dispatcher.csproj @@ -0,0 +1,31 @@ + + + + netcoreapp3.0 + true + true + true + + + + + + + + + + + + + + + + + + + + ../node_modules/@neo-one/edge/src/double/Edge.js/bin/Release/netcoreapp3.0/EdgeJs.dll + true + + + diff --git a/packages/neo-one-node-vm/lib/ReturnHelpers.cs b/packages/neo-one-node-vm/lib/ReturnHelpers.cs new file mode 100644 index 0000000000..aadc41c8ff --- /dev/null +++ b/packages/neo-one-node-vm/lib/ReturnHelpers.cs @@ -0,0 +1,195 @@ +using System; +using System.Linq; +using Neo.IO; +using Neo.VM.Types; +using Neo; +using Neo.SmartContract; +using Neo.Network.P2P; +using Neo.Cryptography; + +namespace NEOONE +{ + public class ReturnHelpers + { + public class PrimitiveReturn + { + public readonly object value; + public readonly int Size; + public readonly bool IsNull; + public readonly StackItemType Type; + + public PrimitiveReturn(PrimitiveType item, dynamic value) + { + this.value = value; + this.Size = item.Size; + this.IsNull = item.IsNull; + this.Type = item.Type; + } + } + + public class PointerReturn + { + public readonly byte[] value; + public readonly int Position; + public StackItemType Type => StackItemType.Pointer; + public readonly bool IsNull; + + public PointerReturn(Neo.VM.Types.Pointer item) + { + this.value = (byte[])item.Script; + this.Position = item.Position; + this.IsNull = item.IsNull; + } + } + + public class ArrayReturn + { + public object[] value; + public readonly int Count; + public StackItemType Type => StackItemType.Array; + public readonly bool IsNull; + + public ArrayReturn(Neo.VM.Types.Array item) + { + this.Count = item.Count; + this.IsNull = item.IsNull; + this.value = item.ToArray().Select((p) => convertStackItem(p)).ToArray(); + } + } + + public class StructReturn + { + public object[] value; + public readonly int Count; + public StackItemType Type => StackItemType.Struct; + public readonly bool IsNull; + + public StructReturn(Struct item) + { + this.Count = item.Count; + this.IsNull = item.IsNull; + this.value = item.ToArray().Select((p) => convertStackItem(p)).ToArray(); + } + } + + public class KeyValueReturn + { + public PrimitiveReturn key; + public object value; + + public KeyValueReturn(PrimitiveReturn key, dynamic value) + { + this.key = key; + this.value = value; + } + } + + public class MapReturn + { + public KeyValueReturn[] value; + public readonly int Count; + public readonly bool IsNull; + public StackItemType Type => StackItemType.Map; + + public MapReturn(Map item) + { + this.Count = item.Count; + this.IsNull = item.IsNull; + this.value = item.ToArray().Select((keyValue) => + { + return new KeyValueReturn( + convertStackItem(keyValue.Key), + convertStackItem(keyValue.Value) + ); + }).ToArray(); + } + } + + public class InteropInterfaceReturn + { + public dynamic value; + public StackItemType Type => StackItemType.InteropInterface; + public readonly bool IsNull; + + public InteropInterfaceReturn(InteropInterface item) + { + this.value = item.GetInterface(); + this.IsNull = item.IsNull; + } + } + + public static PrimitiveReturn convertStackItem(PrimitiveType item) + { + return item.Type switch + { + StackItemType.Boolean => new PrimitiveReturn(item, item.GetBoolean()), + StackItemType.Integer => new PrimitiveReturn(item, item.GetInteger().ToByteArray()), + StackItemType.ByteString => new PrimitiveReturn(item, item.GetSpan().ToArray()), + _ => throw new ArgumentException($"{item.Type} is not a valid StackItem argument") + }; + } + + public static dynamic convertStackItem(StackItem item) + { + return item.Type switch + { + StackItemType.Any => item, + StackItemType.Buffer => item, + StackItemType.Pointer => new PointerReturn((Neo.VM.Types.Pointer)item), + StackItemType.Array => new ArrayReturn((Neo.VM.Types.Array)item), + StackItemType.Struct => new StructReturn((Struct)item), + StackItemType.Map => new MapReturn((Map)item), + StackItemType.InteropInterface => new InteropInterfaceReturn((InteropInterface)item), + _ => convertStackItem((PrimitiveType)item) + }; + } + + public class LogReturn + { + public byte[] containerHash; + public byte[] callingScriptHash; + public string message; + public int position; + + public LogReturn(LogEventArgs log) + { + containerHash = log.ScriptContainer != null ? Crypto.Hash256(log.ScriptContainer.GetHashData()) : null; + callingScriptHash = log.ScriptHash != null ? log.ScriptHash.ToArray() : null; + message = log.Message; + position = log.Position; + } + } + + public static dynamic convertLog(LogEventArgs log) + { + return new LogReturn(log); + } + public class ProtocolSettingsReturn + { + public int magic; + public int addressVersion; + public string[] standbyCommittee; + public int committeeMembersCount; + public int validatorsCount; + public string[] seedList; + public int millisecondsPerBlock; + public int memoryPoolMaxTransactions; + public int maxTraceableBlocks; + public dynamic nativeActivations; + + public ProtocolSettingsReturn(ProtocolSettings value) + { + this.magic = Convert.ToInt32(value.Magic); + this.addressVersion = Convert.ToInt32(value.AddressVersion); + this.standbyCommittee = value.StandbyCommittee; + this.committeeMembersCount = value.CommitteeMembersCount; + this.validatorsCount = value.ValidatorsCount; + this.seedList = value.SeedList; + this.millisecondsPerBlock = Convert.ToInt32(value.MillisecondsPerBlock); + this.memoryPoolMaxTransactions = value.MemoryPoolMaxTransactions; + this.maxTraceableBlocks = Convert.ToInt32(value.MaxTraceableBlocks); + this.nativeActivations = value.MaxTraceableBlocks; + } + } + } +} diff --git a/packages/neo-one-node-vm/lib/SnapshotHelpers.cs b/packages/neo-one-node-vm/lib/SnapshotHelpers.cs new file mode 100644 index 0000000000..319a24f873 --- /dev/null +++ b/packages/neo-one-node-vm/lib/SnapshotHelpers.cs @@ -0,0 +1,54 @@ +using Neo.Persistence; +using System.Collections.Generic; +using Neo.IO; + +namespace NEOONE +{ + interface CommitStore + { + void Commit(); + } + + public class ChangeSet + { + public List set = new List(); + public ChangeSet(StoreView snapshot) + { + foreach (var value in snapshot.Blocks.GetChangeSet()) + { + set.Add(new Change("block", value)); + } + + foreach (var value in snapshot.Transactions.GetChangeSet()) + { + set.Add(new Change("transaction", value)); + } + foreach (var value in snapshot.Storages.GetChangeSet()) + { + set.Add(new Change("storage", value)); + } + foreach (var value in snapshot.HeaderHashList.GetChangeSet()) + { + set.Add(new Change("headerHashList", value)); + } + } + } + + public class Change + { + public string type; + public string itemType; + public byte[] key; + public byte[] value; + public Change(string itemType, dynamic change) + { + this.type = change.State.ToString(); + this.key = ((ISerializable)change.Key).ToArray(); + this.value = ((ISerializable)change.Item).ToArray(); + this.itemType = itemType; + } + } + +} + + diff --git a/packages/neo-one-node-vm/lib/Storage/RocksDB/Options.cs b/packages/neo-one-node-vm/lib/Storage/RocksDB/Options.cs new file mode 100644 index 0000000000..f155db653a --- /dev/null +++ b/packages/neo-one-node-vm/lib/Storage/RocksDB/Options.cs @@ -0,0 +1,25 @@ +using RocksDbSharp; + +namespace NEOONE.Storage.RocksDB +{ + public static class Options + { + public static readonly DbOptions Default = CreateDbOptions(); + public static readonly ReadOptions ReadDefault = new ReadOptions(); + public static readonly WriteOptions WriteDefault = new WriteOptions(); + public static readonly WriteOptions WriteDefaultSync = new WriteOptions().SetSync(true); + + public static DbOptions CreateDbOptions() + { + DbOptions options = new DbOptions(); + options.SetCreateMissingColumnFamilies(true); + options.SetCreateIfMissing(true); + options.SetErrorIfExists(false); + options.SetMaxOpenFiles(1000); + options.SetParanoidChecks(false); + options.SetWriteBufferSize(4 << 20); + options.SetBlockBasedTableFactory(new BlockBasedTableOptions().SetBlockSize(4096)); + return options; + } + } +} diff --git a/packages/neo-one-node-vm/lib/Storage/RocksDB/RocksDBStore.cs b/packages/neo-one-node-vm/lib/Storage/RocksDB/RocksDBStore.cs new file mode 100644 index 0000000000..0edca66d1f --- /dev/null +++ b/packages/neo-one-node-vm/lib/Storage/RocksDB/RocksDBStore.cs @@ -0,0 +1,21 @@ +using Neo.Persistence; +using NEOONE.Storage.RocksDB; + +namespace NEOONE.Storage +{ + public class RocksDBStore + { + private string path; + + public RocksDBStore(string path) + { + this.path = path; + } + + public IStore GetStore() + { + return new Store(path); + } + } + +} diff --git a/packages/neo-one-node-vm/lib/Storage/RocksDB/Settings.cs b/packages/neo-one-node-vm/lib/Storage/RocksDB/Settings.cs new file mode 100644 index 0000000000..e904e3cc2a --- /dev/null +++ b/packages/neo-one-node-vm/lib/Storage/RocksDB/Settings.cs @@ -0,0 +1,12 @@ +namespace NEOONE.Storage.RocksDB +{ + class Settings + { + public string Path { get; } + + public Settings(string path) + { + this.Path = path; + } + } +} diff --git a/packages/neo-one-node-vm/lib/Storage/RocksDB/Snapshot.cs b/packages/neo-one-node-vm/lib/Storage/RocksDB/Snapshot.cs new file mode 100644 index 0000000000..619249b03f --- /dev/null +++ b/packages/neo-one-node-vm/lib/Storage/RocksDB/Snapshot.cs @@ -0,0 +1,77 @@ +using Neo.IO.Caching; +using Neo.Persistence; +using RocksDbSharp; +using System; +using System.Collections.Generic; +using System.IO; +using Neo; +namespace NEOONE.Storage.RocksDB +{ + internal class Snapshot : ISnapshot + { + private readonly Store store; + private readonly RocksDb db; + private readonly RocksDbSharp.Snapshot snapshot; + private readonly ReadOptions options; + + public Snapshot(Store store, RocksDb db) + { + this.store = store; + this.db = db; + this.snapshot = db.CreateSnapshot(); + + options = new ReadOptions(); + options.SetFillCache(false); + options.SetSnapshot(snapshot); + } + + public void Commit() + { + throw new InvalidOperationException(); + } + + public void Delete(byte table, byte[] key) + { + throw new InvalidOperationException(); + } + + public void Put(byte table, byte[] key, byte[] value) + { + throw new InvalidOperationException(); + } + + public IEnumerable<(byte[] Key, byte[] Value)> Seek(byte table, byte[] keyOrPrefix, SeekDirection direction) + { + if (keyOrPrefix == null) keyOrPrefix = Array.Empty(); + + using var it = db.NewIterator(store.defaultFamily, options); + byte[] fullKey = store.getFullKey(table, keyOrPrefix); + + if (direction == SeekDirection.Forward) + for (it.Seek(fullKey); it.Valid() && it.Key()[0] == table; it.Next()) + yield return (it.Key()[1..], it.Value()); + else + for (it.SeekForPrev(fullKey); it.Valid() && it.Key()[0] == table; it.Prev()) + { + yield return (it.Key()[1..], it.Value()); + } + } + + public bool Contains(byte table, byte[] key) + { + byte[] fullKey = key == null ? new byte[] { table } : store.getFullKey(table, key); + return db.Get(fullKey ?? Array.Empty(), store.defaultFamily, options) != null; + } + + public byte[] TryGet(byte table, byte[] key) + { + byte[] fullKey = key == null ? new byte[] { table } : store.getFullKey(table, key); + return db.Get(fullKey ?? Array.Empty(), store.defaultFamily, options); + } + + public void Dispose() + { + snapshot.Dispose(); + } + } +} diff --git a/packages/neo-one-node-vm/lib/Storage/RocksDB/Store.cs b/packages/neo-one-node-vm/lib/Storage/RocksDB/Store.cs new file mode 100644 index 0000000000..b14d9592c0 --- /dev/null +++ b/packages/neo-one-node-vm/lib/Storage/RocksDB/Store.cs @@ -0,0 +1,89 @@ +using Neo.IO.Caching; +using Neo.Persistence; +using RocksDbSharp; +using System; +using System.Collections.Generic; +using System.IO; +using System.Runtime.CompilerServices; + +namespace NEOONE.Storage.RocksDB +{ + internal class Store : IStore + { + private readonly RocksDb db; + public readonly ColumnFamilyHandle defaultFamily; + public Store(string path) + { + var families = new ColumnFamilies(); + db = RocksDb.OpenReadOnly(Options.Default, Path.GetFullPath(path), families, false); + defaultFamily = db.GetDefaultColumnFamily(); + } + + + public void Dispose() + { + db.Dispose(); + } + + /// + /// Get family + /// + /// Table + /// Return column family + [MethodImpl(MethodImplOptions.AggressiveInlining)] + + public ISnapshot GetSnapshot() + { + return new Snapshot(this, db); + } + + public byte[] getFullKey(byte table, byte[] keyOrPrefix) + { + byte[] fullKey = new byte[keyOrPrefix.Length + 1]; + System.Buffer.SetByte(fullKey, 0, table); + System.Buffer.BlockCopy(keyOrPrefix, 0, fullKey, 1, keyOrPrefix.Length); + return fullKey; + } + + public IEnumerable<(byte[] Key, byte[] Value)> Seek(byte table, byte[] keyOrPrefix, SeekDirection direction = SeekDirection.Forward) + { + if (keyOrPrefix == null) keyOrPrefix = Array.Empty(); + + byte[] fullKey = getFullKey(table, keyOrPrefix); + using var it = db.NewIterator(defaultFamily, Options.ReadDefault); + if (direction == SeekDirection.Forward) + for (it.Seek(fullKey); it.Valid() && it.Key()[0] == table; it.Next()) + yield return (it.Key()[1..], it.Value()); + else + for (it.SeekForPrev(fullKey); it.Valid() && it.Key()[0] == table; it.Prev()) + yield return (it.Key()[1..], it.Value()); + } + + public bool Contains(byte table, byte[] key) + { + byte[] fullKey = key == null ? new byte[] { table } : getFullKey(table, key); + return db.Get(fullKey ?? Array.Empty(), defaultFamily, Options.ReadDefault) != null; + } + + public byte[] TryGet(byte table, byte[] key) + { + byte[] fullKey = key == null ? new byte[] { table } : getFullKey(table, key); + return db.Get(fullKey ?? Array.Empty(), defaultFamily, Options.ReadDefault); + } + + public void Delete(byte table, byte[] key) + { + throw new InvalidOperationException(); + } + + public void Put(byte table, byte[] key, byte[] value) + { + throw new InvalidOperationException(); + } + + public void PutSync(byte table, byte[] key, byte[] value) + { + throw new InvalidOperationException(); + } + } +} diff --git a/packages/neo-one-node-vm/package.json b/packages/neo-one-node-vm/package.json index 1c522a037e..1cb3e7decb 100644 --- a/packages/neo-one-node-vm/package.json +++ b/packages/neo-one-node-vm/package.json @@ -1,23 +1,30 @@ { "name": "@neo-one/node-vm", - "version": "2.3.0", - "description": "NEOβ€’ONE NEO VM.", - "main": "./src/index", + "version": "3.0.0", + "description": "NEOβ€’ONE C# Wrapper for neo3 VM", + "main": "./dist/cjs/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "install": "dotnet build ./lib", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.3.0", - "@neo-one/client-full-common": "^2.3.0", - "@neo-one/node-core": "^2.3.0", - "@neo-one/utils": "^2.3.0", - "@reactivex/ix-es2015-cjs": "^2.5.3", - "bitwise": "^2.0.3", - "bn.js": "^5.0.0", - "lodash": "^4.17.15", - "rxjs": "^6.5.2", - "tslib": "^1.10.0" + "@neo-one/edge": "^15.0.0", + "@neo-one/node-core": "^3.0.0", + "@neo-one/client-common": "^3.0.0", + "@neo-one/utils": "^3.0.0", + "bn.js": "^5.0.0" }, "devDependencies": { - "@types/bn.js": "^4.11.5", - "@types/lodash": "^4.14.138" - }, - "sideEffects": false + "@neo-one/build-tools": "^1.0.0", + "@types/jest": "^24.0.18", + "@types/lodash": "^4.14.138", + "gulp": "~4.0.2", + "lodash": "^4.17.15", + "tslib": "^1.10.0" + } } diff --git a/packages/neo-one-node-vm/src/ApplicationEngine.ts b/packages/neo-one-node-vm/src/ApplicationEngine.ts new file mode 100644 index 0000000000..532079db48 --- /dev/null +++ b/packages/neo-one-node-vm/src/ApplicationEngine.ts @@ -0,0 +1,122 @@ +import { TriggerType, VMState, common } from '@neo-one/client-common'; +import { + CallFlags, + SerializableContainer, + serializeScriptContainer, + SnapshotName, + LoadScriptOptions, +} from '@neo-one/node-core'; +import { BN } from 'bn.js'; +import _ from 'lodash'; +import { parseStackItems, convertLog } from './converters'; +import { EngineMethods } from './Methods'; +import { DispatcherFunc } from './types'; + +export interface CreateOptions { + readonly trigger: TriggerType; + readonly container?: SerializableContainer; + readonly snapshot?: SnapshotName; + readonly gas: BN; +} + +interface ApplicationEngineDispatcher { + readonly dispatch: DispatcherFunc; +} + +export class ApplicationEngine { + private readonly dispatch: DispatcherFunc; + + public constructor(dispatcher: ApplicationEngineDispatcher) { + this.dispatch = dispatcher.dispatch.bind(this); + } + + public get trigger() { + return TriggerType[ + this.dispatch({ + method: 'gettrigger', + }) + ]; + } + + public get gasConsumed() { + try { + return new BN( + this.dispatch({ + method: 'getgasconsumed', + }), + ); + } catch { + return new BN(-1); + } + } + + public get state() { + return VMState[ + this.dispatch({ + method: 'getvmstate', + }) + ]; + } + + public get resultStack() { + return _.reverse( + parseStackItems( + this.dispatch({ + method: 'getresultstack', + }), + ), + ); + } + + public get notifications() { + return parseStackItems( + this.dispatch({ + method: 'getnotifications', + }), + ); + } + + public get logs() { + return this.dispatch({ + method: 'getlogs', + }).map(convertLog); + } + + public create({ trigger, container, gas, snapshot }: CreateOptions) { + return this.dispatch({ + method: 'create', + args: { + trigger, + container: container ? serializeScriptContainer(container) : undefined, + gas: gas.toString(), + snapshot, + }, + }); + } + + public execute() { + return VMState[ + this.dispatch({ + method: 'execute', + }) + ]; + } + + public loadScript({ script, flags = CallFlags.All, scriptHash, initialPosition }: LoadScriptOptions) { + return this.dispatch({ + method: 'loadscript', + args: { + script, + flags, + scriptHash: scriptHash ? common.uInt160ToHex(scriptHash) : undefined, + initialPosition, + }, + }); + } + + public checkScript() { + return this.dispatch({ + method: 'checkscript', + }); + } +} diff --git a/packages/neo-one-node-vm/src/Dispatcher.ts b/packages/neo-one-node-vm/src/Dispatcher.ts new file mode 100644 index 0000000000..96c3f1af91 --- /dev/null +++ b/packages/neo-one-node-vm/src/Dispatcher.ts @@ -0,0 +1,128 @@ +import * as nodePath from 'path'; +import { ApplicationEngine, CreateOptions } from './ApplicationEngine'; +import { + BaseMethods, + EngineMethods, + ProtocolSettings, + ProtocolSettingsReturn, + SnapshotMethods, + TestMethods, +} from './Methods'; +import { SnapshotHandler } from './SnapshotHandler'; +import { DispatcherFunc } from './types'; +import { constants, createCSharpDispatchInvoke, validateProtocolSettings } from './utils'; + +export interface DispatcherMethods extends BaseMethods, SnapshotMethods, EngineMethods, TestMethods {} + +const engineAssemblyOptions = { + assemblyFile: nodePath.join(constants.CSHARP_APP_ROOT, 'Dispatcher.dll'), + methodName: 'Invoke', + typeName: 'NEOONE.Dispatcher', +}; + +export const createDispatcher = () => createCSharpDispatchInvoke(engineAssemblyOptions); + +export interface DispatcherOptions { + readonly levelDBPath?: string; + readonly protocolSettings?: ProtocolSettings; +} + +export class Dispatcher { + public readonly init: boolean; + public readonly dispatch: DispatcherFunc; + public readonly options: DispatcherOptions; + + public constructor(options: DispatcherOptions = {}) { + this.options = options; + this.dispatch = createDispatcher(); + this.init = this.initialize(this.options.levelDBPath, this.options.protocolSettings); + } + + public withSnapshots( + func: (snapshots: { readonly main: SnapshotHandler; readonly clone: Omit }) => T, + ) { + const main = new SnapshotHandler(this, 'main'); + const clone = new SnapshotHandler(this, 'clone'); + + return func({ main, clone }); + } + + public withApplicationEngine( + options: CreateOptions, + func: (engine: Omit) => T, + ) { + const engine = new ApplicationEngine(this); + engine.create(options); + let result: T; + try { + result = func(engine); + } catch (error) { + throw error; + } finally { + this.disposeEngine(); + } + + return result; + } + + public disposeEngine(): void { + this.dispatch({ + method: 'dispose_engine', + }); + } + + public updateSnapshots(): void { + this.dispatch({ + method: 'snapshot_reset', + }); + } + + public dispose(): void { + this.dispatch({ + method: 'dispose', + }); + } + + public reset(): void { + this.dispose(); + this.initialize(this.options.levelDBPath); + } + + public getConfig(): ProtocolSettingsReturn { + return this.dispatch({ + method: 'get_config', + }); + } + + public updateStore(storage: ReadonlyArray<{ key: Buffer; value: Buffer }>): void { + const tableChanges = storage.map((change) => ({ + table: change.key[0], + key: change.key.slice(1), + value: change.value, + })); + + this.dispatch({ + method: 'test_update_store', + args: { + changes: tableChanges, + }, + }); + } + + // tslint:disable-next-line: no-any + public test(): any { + return this.dispatch({ + method: 'test', + }); + } + + private initialize(path?: string, settings?: ProtocolSettings): boolean { + return this.dispatch({ + method: 'init', + args: { + path, + settings: settings ? validateProtocolSettings(settings) : undefined, + }, + }); + } +} diff --git a/packages/neo-one-node-vm/src/Methods/BaseMethods.ts b/packages/neo-one-node-vm/src/Methods/BaseMethods.ts new file mode 100644 index 0000000000..e0a7f22d2a --- /dev/null +++ b/packages/neo-one-node-vm/src/Methods/BaseMethods.ts @@ -0,0 +1,36 @@ +import { DefaultMethods, DispatchMethod } from '../types'; + +interface InitArgs { + readonly path?: string; + readonly settings?: ProtocolSettings; +} + +export interface ProtocolSettings { + readonly magic?: number; + readonly addressVersion?: number; + readonly standbyCommittee?: readonly string[]; + readonly committeeMembersCount?: number; + readonly validatorsCount?: number; + readonly seedList?: readonly string[]; + readonly millisecondsPerBlock?: number; + readonly memoryPoolMaxTransactions?: number; +} + +export interface ProtocolSettingsReturn { + readonly magic: number; + readonly addressVersion: number; + readonly standbyCommittee: readonly string[]; + readonly committeeMembersCount: number; + readonly validatorsCount: number; + readonly seedList: readonly string[]; + readonly millisecondsPerBlock: number; + readonly memoryPoolMaxTransactions: number; +} + +export interface BaseMethods extends DefaultMethods { + readonly init: DispatchMethod; + readonly dispose_engine: DispatchMethod; + readonly snapshot_reset: DispatchMethod; + readonly dispose: DispatchMethod; + readonly get_config: DispatchMethod; +} diff --git a/packages/neo-one-node-vm/src/Methods/EngineMethods.ts b/packages/neo-one-node-vm/src/Methods/EngineMethods.ts new file mode 100644 index 0000000000..af2edfc2f9 --- /dev/null +++ b/packages/neo-one-node-vm/src/Methods/EngineMethods.ts @@ -0,0 +1,33 @@ +import { TriggerType, VMState, UInt160Hex } from '@neo-one/client-common'; +import { CallFlags, SerializedScriptContainer, SnapshotName, LoadScriptOptions } from '@neo-one/node-core'; +import { StackItemReturn, LogReturn } from '../converters'; +import { DefaultMethods, DispatchMethod } from '../types'; + +interface CreateEngineArgs { + readonly trigger: TriggerType; + readonly container?: SerializedScriptContainer; + readonly gas: string; + readonly snapshot?: SnapshotName; +} + +interface LoadScriptVMArgs { + readonly script: Buffer; + readonly flags: CallFlags; + readonly scriptHash?: UInt160Hex; + readonly initialPosition?: number; +} + +export interface EngineMethods extends DefaultMethods { + // constructor + readonly create: DispatchMethod; + // getters + readonly gettrigger: DispatchMethod; + readonly getgasconsumed: DispatchMethod; + readonly getvmstate: DispatchMethod; + readonly getresultstack: DispatchMethod; + readonly getnotifications: DispatchMethod; + readonly getlogs: DispatchMethod; + // methods + readonly execute: DispatchMethod; + readonly loadscript: DispatchMethod; +} diff --git a/packages/neo-one-node-vm/src/Methods/SnapshotMethods.ts b/packages/neo-one-node-vm/src/Methods/SnapshotMethods.ts new file mode 100644 index 0000000000..e7e9214d24 --- /dev/null +++ b/packages/neo-one-node-vm/src/Methods/SnapshotMethods.ts @@ -0,0 +1,48 @@ +import { UInt256, VMState } from '@neo-one/client-common'; +import { SnapshotName, SnapshotPartial } from '@neo-one/node-core'; +import { ChangeReturn } from '../converters'; +import { DefaultMethods, DispatchMethod } from '../types'; + +interface SnapshotChoice { + readonly snapshot: SnapshotName; +} +interface BlocksAddArgs extends SnapshotChoice { + readonly hash: UInt256; + readonly block: Buffer; +} + +interface TransactionsAddArgs extends SnapshotChoice { + readonly tx: Buffer; + readonly index: number; + readonly state?: VMState; +} + +interface TransactionsDeleteArgs extends SnapshotChoice { + readonly hash: UInt256; +} + +interface CommitArgs extends Partial { + readonly partial?: SnapshotPartial; +} + +interface ChangeHashIndexArgs extends SnapshotChoice { + readonly index: number; + readonly hash: UInt256; +} + +interface SetPersistingBlockArgs extends SnapshotChoice { + readonly block: Buffer; +} + +export interface SnapshotMethods extends DefaultMethods { + readonly snapshot_blocks_add: DispatchMethod; + readonly snapshot_transactions_add: DispatchMethod; + readonly snapshot_transactions_delete: DispatchMethod; + readonly snapshot_commit: DispatchMethod; + readonly snapshot_clone: DispatchMethod; + readonly snapshot_change_block_hash_index: DispatchMethod; + readonly snapshot_change_header_hash_index: DispatchMethod; + readonly snapshot_set_persisting_block: DispatchMethod; + readonly snapshot_has_persisting_block: DispatchMethod; + readonly snapshot_get_change_set: DispatchMethod; +} diff --git a/packages/neo-one-node-vm/src/Methods/TestMethods.ts b/packages/neo-one-node-vm/src/Methods/TestMethods.ts new file mode 100644 index 0000000000..d251a9fe15 --- /dev/null +++ b/packages/neo-one-node-vm/src/Methods/TestMethods.ts @@ -0,0 +1,15 @@ +import { DefaultMethods, DispatchMethod } from '../types'; + +interface RawChange { + readonly table: number; + readonly key: Buffer; + readonly value: Buffer; +} + +interface UpdateStoreArgs { + readonly changes: readonly RawChange[]; +} + +export interface TestMethods extends DefaultMethods { + readonly test_update_store: DispatchMethod; +} diff --git a/packages/neo-one-node-vm/src/Methods/common.ts b/packages/neo-one-node-vm/src/Methods/common.ts new file mode 100644 index 0000000000..046b3a2585 --- /dev/null +++ b/packages/neo-one-node-vm/src/Methods/common.ts @@ -0,0 +1 @@ +export type SnapshotName = 'main' | 'clone'; diff --git a/packages/neo-one-node-vm/src/Methods/index.ts b/packages/neo-one-node-vm/src/Methods/index.ts new file mode 100644 index 0000000000..09f6a76c85 --- /dev/null +++ b/packages/neo-one-node-vm/src/Methods/index.ts @@ -0,0 +1,4 @@ +export * from './BaseMethods'; +export * from './EngineMethods'; +export * from './SnapshotMethods'; +export * from './TestMethods'; diff --git a/packages/neo-one-node-vm/src/SnapshotHandler.ts b/packages/neo-one-node-vm/src/SnapshotHandler.ts new file mode 100644 index 0000000000..e885ba5a58 --- /dev/null +++ b/packages/neo-one-node-vm/src/SnapshotHandler.ts @@ -0,0 +1,132 @@ +import { UInt256, VMState } from '@neo-one/client-common'; +import { Block, SnapshotName, SnapshotPartial, Transaction } from '@neo-one/node-core'; +import { parseChangeReturns } from './converters'; +import { SnapshotMethods } from './Methods'; +import { DispatcherFunc } from './types'; + +interface SnapshotDispatcher { + readonly dispatch: DispatcherFunc; +} + +export class SnapshotHandler { + private readonly dispatch: DispatcherFunc; + private readonly snapshot: SnapshotName; + private readonly cloneInternal: () => void; + + public constructor(dispatcher: SnapshotDispatcher, snapshot: SnapshotName) { + this.dispatch = dispatcher.dispatch.bind(this); + this.snapshot = snapshot; + this.cloneInternal = + this.snapshot === 'main' + ? () => this.dispatch({ method: 'snapshot_clone' }) + : () => { + /* do nothing */ + }; + } + + public addBlock(block: Block) { + const hash = block.hash; + const buffer = block.serializeWire(); + + return this.dispatch({ + method: 'snapshot_blocks_add', + args: { + hash, + block: buffer, + snapshot: this.snapshot, + }, + }); + } + + public addTransaction(transaction: Transaction, index: number, state = VMState.BREAK) { + const tx = transaction.serializeWire(); + + return this.dispatch({ + method: 'snapshot_transactions_add', + args: { + tx, + index, + state, + snapshot: this.snapshot, + }, + }); + } + + public deleteTransaction(hash: UInt256) { + return this.dispatch({ + method: 'snapshot_transactions_delete', + args: { + hash, + snapshot: this.snapshot, + }, + }); + } + + public changeBlockHashIndex(index: number, hash: UInt256) { + return this.dispatch({ + method: 'snapshot_change_block_hash_index', + args: { + index, + hash, + snapshot: this.snapshot, + }, + }); + } + + public changeHeaderHashIndex(index: number, hash: UInt256) { + return this.dispatch({ + method: 'snapshot_change_header_hash_index', + args: { + index, + hash, + snapshot: this.snapshot, + }, + }); + } + + public setPersistingBlock(block: Block) { + const buffer = block.serializeWire(); + + return this.dispatch({ + method: 'snapshot_set_persisting_block', + args: { + snapshot: this.snapshot, + block: buffer, + }, + }); + } + + public hasPersistingBlock() { + return this.dispatch({ + method: 'snapshot_has_persisting_block', + args: { + snapshot: this.snapshot, + }, + }); + } + + public commit(partial?: SnapshotPartial) { + return this.dispatch({ + method: 'snapshot_commit', + args: { + partial, + snapshot: this.snapshot, + }, + }); + } + + public getChangeSet() { + return parseChangeReturns( + this.dispatch({ + method: 'snapshot_get_change_set', + args: { + snapshot: this.snapshot, + }, + }), + ); + } + + public clone() { + this.cloneInternal(); + } +} diff --git a/packages/neo-one-node-vm/src/__data__/assets.ts b/packages/neo-one-node-vm/src/__data__/assets.ts deleted file mode 100644 index cb9576891f..0000000000 --- a/packages/neo-one-node-vm/src/__data__/assets.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { common, crypto, ScriptBuilder } from '@neo-one/client-common'; -import { Asset, AssetType } from '@neo-one/node-core'; - -const ONE_HUNDRED_MILLION = common.fixed8FromDecimal(100000000); - -const neoAdmin = crypto.toScriptHash(new ScriptBuilder().emitOp('PUSH1').build()); - -export const NEO_ASSET_HASH_UINT256 = common.stringToUInt256(common.NEO_ASSET_HASH); - -export const NEO_ASSET = new Asset({ - hash: NEO_ASSET_HASH_UINT256, - type: AssetType.GoverningToken, - name: '[{"lang":"zh-CN","name":"ε°θšθ‚‘"},{"lang":"en","name":"AntShare"}]', - amount: ONE_HUNDRED_MILLION, - precision: 0, - owner: common.ECPOINT_INFINITY, - admin: neoAdmin, - issuer: neoAdmin, - expiration: 2 * 2000000, - isFrozen: false, -}); - -const gasAdmin = crypto.toScriptHash(new ScriptBuilder().emitOp('PUSH0').build()); - -export const GAS_ASSET_HASH_UINT256 = common.stringToUInt256(common.GAS_ASSET_HASH); - -export const GAS_ASSET = new Asset({ - hash: GAS_ASSET_HASH_UINT256, - type: AssetType.UtilityToken, - name: '[{"lang":"zh-CN","name":"小蚁币"},{"lang":"en","name":"AntCoin"}]', - amount: ONE_HUNDRED_MILLION, - precision: 8, - owner: common.ECPOINT_INFINITY, - admin: gasAdmin, - issuer: gasAdmin, - expiration: 2 * 2000000, - isFrozen: false, -}); - -const assets = { - [common.NEO_ASSET_HASH]: NEO_ASSET, - [common.GAS_ASSET_HASH]: GAS_ASSET, -}; - -// tslint:disable-next-line no-any -export const createGetAsset = (): any => - jest.fn(({ hash }) => { - // tslint:disable-next-line no-any - const asset = assets[common.uInt256ToString(hash)] as any; - if (asset === undefined) { - throw new Error(`Unknown asset ${common.uInt256ToString(hash)}`); - } - - return asset; - }); diff --git a/packages/neo-one-node-vm/src/__data__/createBlockchain.ts b/packages/neo-one-node-vm/src/__data__/createBlockchain.ts deleted file mode 100644 index 9d49850805..0000000000 --- a/packages/neo-one-node-vm/src/__data__/createBlockchain.ts +++ /dev/null @@ -1,87 +0,0 @@ -// tslint:disable no-any no-object-mutation readonly-keyword -import { common, crypto } from '@neo-one/client-common'; -import { Contract, StorageItem } from '@neo-one/node-core'; - -interface Storages { - [key: string]: StorageItem; -} - -export const createBlockchain = ({ contracts = [] }: { readonly contracts?: readonly Contract[] }): any => { - const blockchain = { - contract: {}, - storageItem: {}, - settings: { - vm: {}, - }, - action: {}, - output: {}, - asset: {}, - currentBlock: { - timestamp: 1518512400, - }, - } as any; - - if (contracts.length > 0) { - const scriptHashToContract = contracts.reduce<{ [key: string]: Contract }>((acc, contract) => { - acc[common.uInt160ToString(crypto.toScriptHash(contract.script))] = contract; - - return acc; - }, {}); - blockchain.contract.get = jest.fn(async ({ hash }) => { - const contract = scriptHashToContract[common.uInt160ToString(hash)] as Contract | undefined; - if (contract === undefined) { - throw new Error(`Unknown contract: ${common.uInt160ToString(hash)}`); - } - - return contract; - }); - blockchain.contract.tryGet = jest.fn( - async ({ hash }) => scriptHashToContract[common.uInt160ToString(hash)] as Contract | undefined, - ); - } - - const storage: { [key: string]: Storages } = {}; - blockchain.storageItem.add = jest.fn(async (item) => { - const hash = common.uInt160ToString(item.hash); - if ((storage[hash] as Storages | undefined) === undefined) { - storage[hash] = {}; - } - - storage[hash][item.key.toString('hex')] = item; - }); - blockchain.storageItem.update = jest.fn(async (item, { value }) => { - storage[common.uInt160ToString(item.hash)][item.key.toString('hex')] = item.update({ value }); - }); - blockchain.storageItem.get = jest.fn(async ({ hash, key }) => { - const hashStorage = storage[common.uInt160ToString(hash)]; - if ((hashStorage as Storages | undefined) === undefined) { - throw new Error('Item not found'); - } - - const item = hashStorage[key.toString('hex')] as StorageItem | undefined; - if (item === undefined) { - throw new Error('Item not found'); - } - - return item; - }); - blockchain.storageItem.tryGet = jest.fn(async ({ hash, key }) => { - const storages = storage[common.uInt160ToString(hash)] as Storages | undefined; - if (storages === undefined) { - return undefined; - } - - return storages[key.toString('hex')]; - }); - - blockchain.storageItem.delete = jest.fn(async ({ hash, key }) => { - if ((storage[common.uInt160ToString(hash)] as Storages | undefined) !== undefined) { - // tslint:disable-next-line no-dynamic-delete - delete storage[common.uInt160ToString(hash)][key.toString('hex')]; - } - }); - - blockchain.action.add = jest.fn(async () => Promise.resolve()); - - return blockchain; -}; diff --git a/packages/neo-one-node-vm/src/__data__/factory.ts b/packages/neo-one-node-vm/src/__data__/factory.ts deleted file mode 100644 index 034c2beba8..0000000000 --- a/packages/neo-one-node-vm/src/__data__/factory.ts +++ /dev/null @@ -1,310 +0,0 @@ -// tslint:disable no-any -import { common, ECPoint, InputModelAdd, OutputModelAdd, UInt160, UInt256 } from '@neo-one/client-common'; -import { - Account, - AccountAdd, - Asset, - AssetAdd, - Block, - BlockBaseAdd, - BufferAttribute, - BufferAttributeAdd, - ChangeViewConsensusMessage, - ConsensusPayload, - ConsensusPayloadAdd, - Contract, - ContractAdd, - ECPointAttribute, - ECPointAttributeAdd, - Header, - HeaderAdd, - Input, - Output, - TransactionData, - UInt160Attribute, - UInt160AttributeAdd, - UInt256Attribute, - UInt256AttributeAdd, - Validator, - ValidatorAdd, - Witness, - WitnessAdd, -} from '@neo-one/node-core'; -import { BN } from 'bn.js'; -import _ from 'lodash'; - -const internalData: ReadonlyArray<{ - readonly version: number; - readonly hash256: UInt256; - readonly hash160: UInt160; - readonly asset: UInt256; - readonly address: UInt160; - readonly script: Buffer; - readonly merkleRoot: UInt256; - readonly timestamp: number; - readonly consensusData: BN; - readonly nextConsensus: UInt160; - readonly verification: Buffer; - readonly invocation: Buffer; - readonly publicKey: ECPoint; -}> = [ - { - version: 1, - hash160: common.asUInt160(Buffer.from('f3812db982f3b0089a21a278988efeec6a027b25', 'hex')), - hash256: common.hexToUInt256('0x07ae9ba488514e014fdbf166108b038fe94c54dbaedebfb6e676504b2a32cb47'), - asset: common.hexToUInt256('0xb50034d97ba8c836758de1124b6c77d38bc772abc9a8f22c85e7389014e75234'), - address: common.asUInt160(Buffer.from('197ff6783d512a740d42f4cc4f5572955fa44c95', 'hex')), - script: Buffer.from([0x01]), - merkleRoot: common.hexToUInt256('0x823e4d905b88d042e5a4038668a0068e331b673d79ebc91e3c9ecc5828a28de4'), - consensusData: new BN(1), - timestamp: 0, - nextConsensus: common.asUInt160(Buffer.from('197ff6783d512a740d42f4cc4f5572955fa44c95', 'hex')), - verification: Buffer.from('asdf08asdfljawerlk', 'hex'), - invocation: Buffer.from('savpoudfglkwerl;wqer', 'hex'), - publicKey: common.bufferToECPoint( - Buffer.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef', 'hex'), - ), - }, - { - version: 1, - hash160: common.asUInt160(Buffer.from('197ff6783d512a740d42f4cc4f5572955fa44c95', 'hex')), - hash256: common.hexToUInt256('0x9bf50b229d070a243ec43f9979e1922d8275cbe2676b811e614ef4c3271ab7a9'), - asset: common.hexToUInt256('0x0621113df436c180a47b833a2814008dc4f332915b22253651593a40a342e0fb'), - address: common.asUInt160(Buffer.from('f3812db982f3b0089a21a278988efeec6a027b25', 'hex')), - script: Buffer.from([0x02]), - merkleRoot: common.hexToUInt256('0x7e2a450ffecb98d95380185a7f099697e0679a501403ae453cd79d171b40cc5f'), - consensusData: new BN(2), - timestamp: 1, - nextConsensus: common.asUInt160(Buffer.from('f3812db982f3b0089a21a278988efeec6a027b25', 'hex')), - verification: Buffer.from('sfgjuioyrsfgvacsf', 'hex'), - invocation: Buffer.from('4356wr6i8fdgdnbsd', 'hex'), - publicKey: common.bufferToECPoint( - Buffer.from('031d8e1630ce640966967bc6d95223d21f44304133003140c3b52004dc981349c9', 'hex'), - ), - }, - { - version: 1, - hash160: common.asUInt160(Buffer.from('197ff6783d512a740d42f4cc4f5572955fa44c95', 'hex')), - hash256: common.hexToUInt256('0x963edfc071a8708711cc3ed842dc4a06b5357d7330b3df7d147e7c150580f29c'), - asset: common.hexToUInt256('0x0621113df436c180a47b833a2814008dc4f332915b22253651593a40a342e0fb'), - address: common.asUInt160(Buffer.from('f3812db982f3b0089a21a278988efeec6a027b25', 'hex')), - script: Buffer.from([0x02]), - merkleRoot: common.hexToUInt256('0x7e2a450ffecb98d95380185a7f099697e0679a501403ae453cd79d171b40cc5f'), - consensusData: new BN(2), - timestamp: 1, - nextConsensus: common.asUInt160(Buffer.from('197ff6783d512a740d42f4cc4f5572955fa44c95', 'hex')), - verification: Buffer.from('fgntyotfd', 'hex'), - invocation: Buffer.from('ert7rsxdgfs', 'hex'), - publicKey: common.bufferToECPoint( - Buffer.from('02232ce8d2e2063dce0451131851d47421bfc4fc1da4db116fca5302c0756462fa', 'hex'), - ), - }, -]; - -// tslint:disable:no-let -let index = 1; -const previousData = internalData[index - 1]; -const currentData = internalData[index]; -// tslint:enable:no-let - -const incrementData = () => { - if (index === internalData.length - 1) { - index = 1; - } - index = index + 1; -}; - -const resetDataIndex = () => { - index = 1; -}; - -const createAccount = (options: Partial = {}) => - new Account({ - version: currentData.version, - hash: currentData.hash160, - ...options, - }); - -const createAsset = (options: Partial = {}) => - new Asset({ - hash: currentData.hash256, - type: 0x60, - name: 'test', - amount: new BN(1), - precision: 8, - owner: createECPoint(0x20), - admin: previousData.hash160, - issuer: currentData.hash160, - expiration: 20, - ...options, - }); - -const createBufferAttribute = (options: Partial = {}) => - new BufferAttribute({ - usage: 0x81, - value: currentData.asset, - ...options, - }); - -const createBlock = (options: Partial = {}) => - new Block({ - previousHash: previousData.hash256, - merkleRoot: currentData.merkleRoot, - timestamp: 0, - index: 0, - consensusData: new BN(3), - nextConsensus: currentData.nextConsensus, - transactions: [], - script: createWitness(), - hash: currentData.hash256, - ...options, - }); - -const createECPointAttribute = (options: Partial = {}) => - new ECPointAttribute({ - usage: 0x02, - value: createECPoint(), - ...options, - }); - -const createUInt160Attribute = (options: Partial = {}) => - new UInt160Attribute({ - usage: 0x20, - value: currentData.hash160, - ...options, - }); - -const createUInt256Attribute = (options: Partial = {}) => - new UInt256Attribute({ - usage: 0x00, - value: currentData.hash256, - ...options, - }); - -const createOutput = (options: Partial = {}) => - new Output({ - asset: currentData.asset, - value: new BN(0), - address: currentData.address, - ...options, - }); - -const createConsensusPayload = (options: Partial = {}) => - new ConsensusPayload({ - version: currentData.version, - previousHash: currentData.hash256, - blockIndex: index, - validatorIndex: index + 10, - consensusMessage: new ChangeViewConsensusMessage({ - newViewNumber: 5, - viewNumber: 3, - }), - script: createWitness(), - ...options, - }); - -const createContract = (options: Partial = {}) => - new Contract({ - version: currentData.version, - script: currentData.script, - parameterList: [], - returnType: 0x01, - contractProperties: 0x01, - name: 'test', - codeVersion: '1.0', - author: 'Herby Hind', - email: 'HerbyHind@neotracker.io', - description: 'test contract', - ...options, - }); -const createECPoint = (byte?: number) => - common.asECPoint(Buffer.from(_.range(33).map(() => (byte === undefined ? 0x01 : byte)))); - -const createInput = (options: Partial = {}) => - new Input({ - hash: currentData.asset, - index, - ...options, - }); - -const createHeader = (options: Partial = {}): Header => - new Header({ - previousHash: previousData.hash256, - merkleRoot: currentData.merkleRoot, - timestamp: currentData.timestamp, - index, - consensusData: currentData.consensusData, - nextConsensus: currentData.nextConsensus, - script: createWitness(), - hash: currentData.hash256, - ...options, - }); - -const createUInt160 = () => currentData.hash160; -const createUInt256 = () => currentData.hash256; - -const createValidator = (options: Partial = {}) => - new Validator({ - publicKey: currentData.publicKey, - ...options, - }); - -const createWitness = (options: Partial = {}): Witness => - new Witness({ - verification: currentData.verification, - invocation: currentData.invocation, - ...options, - }); - -const createTransactionData = ({ - version, - hash = createUInt256(), - blockHash = createUInt256(), - startHeight = 0, - index: indexIn = 1, - globalIndex = new BN(1), - endHeights, - claimed, -}: { - readonly version?: number; - readonly hash?: UInt256; - readonly blockHash?: UInt256; - readonly startHeight?: number; - readonly index?: number; - readonly globalIndex?: BN; - readonly endHeights?: any; - readonly claimed?: any; -}) => - new TransactionData({ - version, - hash, - blockHash, - startHeight, - index: indexIn, - globalIndex, - endHeights, - claimed, - }); - -export const factory = { - createAccount, - createAsset, - createBlock, - createBufferAttribute, - createConsensusPayload, - createContract, - createECPoint, - createECPointAttribute, - createHeader, - createInput, - createOutput, - createUInt160, - createUInt160Attribute, - createUInt256, - createUInt256Attribute, - createValidator, - createWitness, - createTransactionData, - incrementData, - resetDataIndex, -}; diff --git a/packages/neo-one-node-vm/src/__data__/index.ts b/packages/neo-one-node-vm/src/__data__/index.ts deleted file mode 100644 index 89f3ef0cf2..0000000000 --- a/packages/neo-one-node-vm/src/__data__/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -import * as assets from './assets'; -import * as transactions from './transactions'; -import * as testUtils from './utils'; - -export * from './createBlockchain'; -export * from './keys'; -export * from './factory'; - -export { assets, testUtils, transactions }; diff --git a/packages/neo-one-node-vm/src/__data__/keys.ts b/packages/neo-one-node-vm/src/__data__/keys.ts deleted file mode 100644 index 011a134a12..0000000000 --- a/packages/neo-one-node-vm/src/__data__/keys.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { common, crypto, ECPoint, PrivateKey, PublicKeyString, UInt160 } from '@neo-one/client-common'; - -export const keys: ReadonlyArray<{ - readonly name: string; - readonly address: string; - readonly privateKey: PrivateKey; - readonly privateKeyString: string; - readonly publicKey: ECPoint; - readonly publicKeyString: PublicKeyString; - readonly wif: string; - readonly password: string; - readonly encryptedWIF: string; - readonly scriptHash: UInt160; - readonly scriptHashString: string; -}> = [ - { - name: 'first', - address: 'ALq7AWrhAueN6mJNqk6FHJjnsEoPRytLdW', - privateKey: common.bufferToPrivateKey( - Buffer.from('7d128a6d096f0c14c3a25a2b0c41cf79661bfcb4a8cc95aaaea28bde4d732344', 'hex'), - ), - privateKeyString: '7d128a6d096f0c14c3a25a2b0c41cf79661bfcb4a8cc95aaaea28bde4d732344', - publicKey: common.bufferToECPoint( - Buffer.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef', 'hex'), - ), - publicKeyString: common.ecPointToString( - common.bufferToECPoint(Buffer.from('02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef', 'hex')), - ), - wif: 'L1QqQJnpBwbsPGAuutuzPTac8piqvbR1HRjrY5qHup48TBCBFe4g', - password: 'city of zion', - encryptedWIF: '6PYLHmDf6AjF4AsVtosmxHuPYeuyJL3SLuw7J1U8i7HxKAnYNsp61HYRfF', - scriptHash: common.bufferToUInt160(Buffer.from('3775292229eccdf904f16fff8e83e7cffdc0f0ce', 'hex')), - scriptHashString: common.uInt160ToString( - common.bufferToUInt160(Buffer.from('3775292229eccdf904f16fff8e83e7cffdc0f0ce', 'hex')), - ), - }, - { - name: 'second', - address: 'ALfnhLg7rUyL6Jr98bzzoxz5J7m64fbR4s', - privateKey: common.bufferToPrivateKey( - Buffer.from('9ab7e154840daca3a2efadaf0df93cd3a5b51768c632f5433f86909d9b994a69', 'hex'), - ), - privateKeyString: '9ab7e154840daca3a2efadaf0df93cd3a5b51768c632f5433f86909d9b994a69', - publicKey: common.bufferToECPoint( - Buffer.from('031d8e1630ce640966967bc6d95223d21f44304133003140c3b52004dc981349c9', 'hex'), - ), - publicKeyString: common.ecPointToString( - common.bufferToECPoint(Buffer.from('031d8e1630ce640966967bc6d95223d21f44304133003140c3b52004dc981349c9', 'hex')), - ), - wif: 'L2QTooFoDFyRFTxmtiVHt5CfsXfVnexdbENGDkkrrgTTryiLsPMG', - password: 'ζˆ‘ηš„ε―†η ', - encryptedWIF: '6PYWVp3xfgvnuNKP7ZavSViYvvim2zuzx9Q33vuWZr8aURiKeJ6Zm7BfPQ', - scriptHash: common.bufferToUInt160(Buffer.from('35b20010db73bf86371075ddfba4e6596f1ff35d', 'hex')), - scriptHashString: common.uInt160ToString( - common.bufferToUInt160(Buffer.from('35b20010db73bf86371075ddfba4e6596f1ff35d', 'hex')), - ), - }, - { - name: 'third', - address: 'AVf4UGKevVrMR1j3UkPsuoYKSC4ocoAkKx', - privateKey: common.bufferToPrivateKey( - Buffer.from('3edee7036b8fd9cef91de47386b191dd76db2888a553e7736bb02808932a915b', 'hex'), - ), - privateKeyString: '3edee7036b8fd9cef91de47386b191dd76db2888a553e7736bb02808932a915b', - publicKey: common.bufferToECPoint( - Buffer.from('02232ce8d2e2063dce0451131851d47421bfc4fc1da4db116fca5302c0756462fa', 'hex'), - ), - publicKeyString: common.ecPointToString( - common.bufferToECPoint(Buffer.from('02232ce8d2e2063dce0451131851d47421bfc4fc1da4db116fca5302c0756462fa', 'hex')), - ), - wif: 'KyKvWLZsNwBJx5j9nurHYRwhYfdQUu9tTEDsLCUHDbYBL8cHxMiG', - password: 'MyL33tP@33w0rd', - encryptedWIF: '6PYNoc1EG5J38MTqGN9Anphfdd6UwbS4cpFCzHhrkSKBBbV1qkbJJZQnkn', - scriptHash: common.bufferToUInt160(Buffer.from('9847e26135152874355e324afd5cc99f002acb33', 'hex')), - scriptHashString: common.uInt160ToString( - common.bufferToUInt160(Buffer.from('9847e26135152874355e324afd5cc99f002acb33', 'hex')), - ), - }, -]; - -export const addKeysToCrypto = () => { - keys.forEach(({ privateKey, publicKey }) => { - crypto.addPublicKey(privateKey, publicKey); - }); -}; diff --git a/packages/neo-one-node-vm/src/__data__/transactions.ts b/packages/neo-one-node-vm/src/__data__/transactions.ts deleted file mode 100644 index 4498513b97..0000000000 --- a/packages/neo-one-node-vm/src/__data__/transactions.ts +++ /dev/null @@ -1,460 +0,0 @@ -import { common } from '@neo-one/client-common'; -import { - Attribute, - BufferAttribute, - ClaimTransaction, - Contract, - ContractParameterType, - ContractPropertyState, - Input, - InvocationTransaction, - Output, - utils, - Witness, -} from '@neo-one/node-core'; -import { BN } from 'bn.js'; -import { randomBytes } from 'crypto'; -import { keys } from './keys'; - -export const createInvocation = ({ - script, - gas = utils.ZERO, - attributes, - inputs, - outputs, - scripts, -}: { - readonly script: Buffer; - readonly gas?: BN; - readonly attributes?: ReadonlyArray; - readonly inputs?: ReadonlyArray; - readonly outputs?: ReadonlyArray; - readonly scripts?: ReadonlyArray; -}) => - new InvocationTransaction({ - script, - gas, - attributes, - inputs, - outputs, - scripts, - }); - -export const createClaim = ({ - attributes, - inputs, - outputs, - scripts, - claims, -}: { - readonly attributes?: ReadonlyArray; - readonly inputs?: ReadonlyArray; - readonly outputs?: ReadonlyArray; - readonly scripts?: ReadonlyArray; - readonly claims: ReadonlyArray; -}) => - new ClaimTransaction({ - attributes, - inputs, - outputs, - scripts, - claims, - }); - -const kycContractScript = Buffer.from( - '013dc56b6c766b00527ac46c766b51527ac46168164e656f2e52756e74696d652e47657454726967676572616c766b52527ac46159c66b0f4e617272617469766520546f6b656e6c766b00527ac4034e52566c766b51527ac4586c766b52527ac414f08ab37aa888a44a8abab51bb292727b093bb1df6c766b53527ac4056f776e65726c766b54527ac4096e65775f6f776e65726c766b55527ac40b73616c655f7061757365646c766b56527ac40e696e5f63697263756c6174696f6e6c766b57527ac4070080e03779c3116c766b58527ac46c6c766b53527ac46c766b52c36165883a9c6457026151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b54527ac46c766b54c36c766b53c354c37c6165a5396c766b55527ac46c766b55c3642c006c766b55c36168184e656f2e52756e74696d652e436865636b5769746e6573736164370051666232006c766b53c353c36168184e656f2e52756e74696d652e436865636b5769746e65737361640c0062030051616c75666165dc346c766b56527ac4610119c66b066b79635f6f6b6c766b00527ac4077072655f656e646c766b51527ac40272316c766b52527ac40500b864d9456c766b53527ac40500902f50096c766b54527ac40500205fa0126c766b55527ac4070040f09bbce1086c766b56527ac402ad0e6c766b57527ac4097075625f73746172746c766b58527ac40272326c766b59527ac40500ac23fc066c766b5a527ac40500add5c0076c766b5b527ac40272336c766b5c527ac40500e87648176c766b5d527ac40500db8b55076c766b5e527ac40500ac23fc066c766b5f527ac40410e1b35a6c766b60527ac403f01e026c766b0111527ac40700008d49fd1a076c766b0112527ac40b7465616d5f746f6b656e736c766b0113527ac40480ad2a5c6c766b0114527ac407008053ee7ba80a6c766b0115527ac40e636f6d70616e795f746f6b656e736c766b0116527ac40700608fc692a3226c766b0117527ac40c726577617264735f66756e646c766b0118527ac46c6c766b57527ac46203006c766b57c36c766b53c36c766b56c36c766b54c35154795179567275517275537952795572755272756165a31900a0616c75666c766b52c361651b389c648e056c766b00c3009e6484056100c66b6c6c766b58527ac461006c766b5d527ac46c766b58c361654b316c766b5e527ac46c766b58c361653b3161c06c766b5c527ac4616c766b5dc36c766b5cc39f6461006c766b5ec36c766b5dc3c36c766b59527ac46c766b5dc351936c766b5d527ac46c766b00c36c766b59c39c64c6ff6c766b58c36c766b00c36c766b51c36c766b53c3537951795572755172755279527954727552727561655a2d666296ff616c766b00c3066465706c6f799c6413006203006c766b53c36165ea09616c75666c766b00c30b63697263756c6174696f6e9c6447006151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b54527ac46203006c766b53c36c766b54c37c6165f430616c7566610119c66b066b79635f6f6b6c766b00527ac4077072655f656e646c766b51527ac40272316c766b52527ac40500b864d9456c766b53527ac40500902f50096c766b54527ac40500205fa0126c766b55527ac4070040f09bbce1086c766b56527ac402ad0e6c766b57527ac4097075625f73746172746c766b58527ac40272326c766b59527ac40500ac23fc066c766b5a527ac40500add5c0076c766b5b527ac40272336c766b5c527ac40500e87648176c766b5d527ac40500db8b55076c766b5e527ac40500ac23fc066c766b5f527ac40410e1b35a6c766b60527ac403f01e026c766b0111527ac40700008d49fd1a076c766b0112527ac40b7465616d5f746f6b656e736c766b0113527ac40480ad2a5c6c766b0114527ac407008053ee7ba80a6c766b0115527ac40e636f6d70616e795f746f6b656e736c766b0116527ac40700608fc692a3226c766b0117527ac40c726577617264735f66756e646c766b0118527ac46c6c766b5a527ac46c766b00c30a6d696e74546f6b656e739c6419006203006c766b5ac36c766b53c37c6165e017616c75666c766b00c31263726f776473616c655f72656769737465729c641f006203006c766b5ac36c766b51c36c766b53c352726165501b616c75666c766b00c31463726f776473616c655f646572656769737465729c641f006203006c766b5ac36c766b51c36c766b53c352726165c819616c75666c766b00c31063726f776473616c655f7374617475739c6419006203006c766b5ac36c766b51c37c61651f19616c75666c766b00c31363726f776473616c655f617661696c61626c659c6413006203006c766b53c36165172f616c75666c766b00c3147472616e736665725f7465616d5f746f6b656e739c641f006203006c766b5ac36c766b53c36c766b51c352726165610d616c75666c766b00c3177472616e736665725f636f6d70616e795f746f6b656e739c641f006203006c766b5ac36c766b53c36c766b51c352726165150a616c75666c766b00c3136d696e745f726577617264735f746f6b656e739c641f006203006c766b5ac36c766b53c36c766b51c3527261655107616c75666c766b00c30c6368616e67655f6f776e65729c6427006c766b51c300c36c766b5b527ac46203006c766b53c36c766b5bc37c61652805616c75666c766b00c30c6163636570745f6f776e65729c6413006203006c766b53c361658602616c75666c766b00c31363616e63656c5f6368616e67655f6f776e65729c6413006203006c766b53c361658903616c75666c766b00c30c656e645f7072655f73616c659c6419006203006c766b5ac36c766b53c37c61659f1c616c75666c766b00c31173746172745f7075626c69635f73616c659c6419006203006c766b5ac36c766b53c37c6165db1a616c75666c766b00c30a70617573655f73616c659c6413006203006c766b53c361651201616c75666c766b00c30b726573756d655f73616c659c6413006203006c766b53c361652800616c756662030011756e6b6e6f776e206f7065726174696f6e616c756662030000616c756658c56b6c766b00527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b51527ac46c766b51c36c766b00c354c37c6165a7316c766b52527ac46c766b52c36168184e656f2e52756e74696d652e436865636b5769746e65737361633b001c4d757374206265206f776e657220746f20726573756d652073616c6561680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b00c356c37c6165b1307562030051616c756658c56b6c766b00527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b51527ac46c766b51c36c766b00c354c37c6165e2306c766b52527ac46c766b52c36168184e656f2e52756e74696d652e436865636b5769746e65737361633a001b4d757374206265206f776e657220746f2070617573652073616c6561680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b00c356c3515272616527307562030051616c75665cc56b6c766b00527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b51527ac46c766b51c36c766b00c355c37c61651c306c766b52527ac46c766b52c36349002a4d7573742063616c6c206368616e67655f6f776e6572206265666f7265206163636570745f6f776e657261680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b52c36168184e656f2e52756e74696d652e436865636b5769746e65737361634000214d757374206265206e65775f6f776e657220746f20616363657074206f776e657261680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b00c354c36c766b52c352726165092f756c766b51c36c766b00c355c37c6165bb2e7562030051616c75665cc56b6c766b00527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b51527ac46c766b51c36c766b00c355c37c6165ec2e6c766b52527ac46c766b52c36362004343616e27742063616e63656c5f6368616e67655f6f776e657220756e6c65737320616e206f776e6572206368616e676520697320616c72656164792070656e64696e6761680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b00c354c37c61656d2e6c766b53527ac46c766b53c36168184e656f2e52756e74696d652e436865636b5769746e65737361634300244d757374206265206f776e657220746f2063616e63656c206368616e67655f6f776e657261680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b00c355c37c61656f2d7562030051616c75665cc56b6c766b00527ac46c766b51527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b52527ac46c766b52c36c766b00c354c37c6165992d6c766b53527ac46c766b53c3634000214d757374206465706c6f79206265666f7265206368616e67696e67206f776e657261680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b53c36168184e656f2e52756e74696d652e436865636b5769746e65737361633c001d4d757374206265206f776e657220746f206368616e6765206f776e657261680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b52c36c766b00c355c36c766b51c352726165932c7562030051616c756659c56b6c766b00527ac46c766b00c353c36168184e656f2e52756e74696d652e436865636b5769746e65737361634000204d757374206265206f726967696e616c5f6f776e657220746f206465706c6f7961680f4e656f2e52756e74696d652e4c6f676162030000616c75666151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b51527ac46c766b51c36c766b00c354c37c6165262c640b0062030000616c75666c766b51c36c766b00c354c36c766b00c353c352726165bc2b7562030051616c75660122c56b6c766b00527ac46c766b51527ac46c766b52527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b53527ac46c766b53c36c766b51c354c37c6165a22b6c766b54527ac46c766b54c36168184e656f2e52756e74696d652e436865636b5769746e65737361630b0062030000616c75666c766b52c361c0529e640b0062030000616c75666c766b52c300c36c766b55527ac46c766b52c351c36c766b56527ac46c766b55c361c001149e640b0062030000616c75666c766b56c300a1640c0062030000616c7566616542166c766b57527ac46c766b57c36c766b00c360c39f6449002a63616e2774206d696e745f726577617264735f746f6b656e73206265666f72652073616c6520656e647361680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b53c36c766b00c30118c37c6165a52a6c766b58527ac46c766b58c36c766b56c3936c766b58527ac46c766b58c36c766b00c30117c3a06445002663616e277420657863656564206d696e745f726577617264735f746f6b656e73206c696d697461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b53c36c766b00c30118c36c766b58c352726165db29756165bd256c766b59527ac46c766b59c353c36c766b5a527ac46c766b55c36c766b5b527ac46c766b53c36c766b5bc37c6165ec296c766b5c527ac46c766b56c36c766b5cc3936c766b5d527ac46c766b53c36c766b5bc36c766b5dc3527261657829756c766b51c36c766b56c36c766b53c3527261656624756c766b5ac36c766b5bc36c766b56c3527261087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667962030051616c75660128c56b6c766b00527ac46c766b51527ac46c766b52527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b53527ac46c766b53c36c766b51c354c37c616517296c766b54527ac46c766b54c36168184e656f2e52756e74696d652e436865636b5769746e65737361630b0062030000616c75666c766b52c361c0529e640b0062030000616c75666c766b52c300c36c766b55527ac46c766b52c351c36c766b56527ac46c766b55c361c001149e640b0062030000616c75666c766b56c300a1640c0062030000616c75666165b7136c766b57527ac4048033e1016c766b58527ac46c766b57c36c766b00c360c39f644d002e63616e2774207472616e736665725f636f6d70616e795f746f6b656e73206265666f72652073616c6520656e647361680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b57c36c766b00c360c36c766b58c3939f6419006c766b00c30115c355955a966c766b59527ac46242006c766b57c36c766b00c360c3526c766b58c395939f641b006c766b00c30115c3014b950164966c766b59527ac46212006c766b00c30115c36c766b59527ac46c766b53c36c766b00c30116c37c61659f276c766b5a527ac46c766b5ac36c766b56c3936c766b5a527ac46c766b5ac36c766b59c3a06451003263616e277420657863656564207472616e736665725f636f6d70616e795f746f6b656e732076657374696e67206c696d697461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b53c36c766b00c30116c36c766b5ac352726165cc26756165ae226c766b5b527ac46c766b5bc353c36c766b5c527ac46c766b55c36c766b5d527ac46c766b53c36c766b5dc37c6165dd266c766b5e527ac46c766b56c36c766b5ec3936c766b5f527ac46c766b53c36c766b5dc36c766b5fc3527261656926756c766b51c36c766b56c36c766b53c3527261655721756c766b5cc36c766b5dc36c766b56c3527261087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667962030051616c7566012ac56b6c766b00527ac46c766b51527ac46c766b52527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b53527ac46c766b53c36c766b51c354c37c616508266c766b54527ac46c766b54c36168184e656f2e52756e74696d652e436865636b5769746e65737361630b0062030000616c75666c766b52c361c0529e640b0062030000616c75666c766b52c300c36c766b55527ac46c766b52c351c36c766b56527ac46c766b55c361c001149e640b0062030000616c75666c766b56c300a1640c0062030000616c75666165a8106c766b57527ac46c766b57c36c766b00c30114c39f644d002e63616e2774207472616e736665725f7465616d5f746f6b656e73206265666f72652076657374696e67206461746561680f4e656f2e52756e74696d652e4c6f676162030000616c7566048033e1016c766b58527ac46c766b57c36c766b00c30114c36c766b58c3939f6419006c766b00c30112c353955a966c766b59527ac46270006c766b57c36c766b00c30114c3526c766b58c395939f6419006c766b00c30112c356955a966c766b59527ac46241006c766b57c36c766b00c30114c3536c766b58c395939f6419006c766b00c30112c358955a966c766b59527ac46212006c766b00c30112c36c766b59527ac46c766b53c36c766b00c30113c37c616560246c766b5a527ac46c766b5ac36c766b56c3936c766b5a527ac46c766b5ac36c766b59c3a0644e002f63616e277420657863656564207472616e736665725f7465616d5f746f6b656e732076657374696e67206c696d697461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b53c36c766b00c30113c36c766b5ac3527261659023756165721f6c766b5b527ac46c766b5bc353c36c766b5c527ac46c766b55c36c766b5d527ac46c766b53c36c766b5dc37c6165a1236c766b5e527ac46c766b56c36c766b5ec3936c766b5f527ac46c766b53c36c766b5dc36c766b5fc3527261652d23756c766b51c36c766b56c36c766b53c3527261651b1e756c766b5cc36c766b5dc36c766b56c3527261087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667962030051616c75665bc56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac46c766b55c36c766b53c37c6165e7226c766b56527ac46c766b54c36c766b56c3936c766b57527ac46c766b55c36c766b53c36c766b57c3527261657322756c766b51c36c766b54c36c766b55c352726165611d756203006c766b52c36c766b53c36c766b54c3527261087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667900616c75660137c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46168184e656f2e426c6f636b636861696e2e476574486569676874616c766b55527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b56527ac46c766b51c358c36c766b57527ac46c766b56c36c766b00c351c37c6165d3216c766b58527ac46c766b56c36c766b00c358c37c6165bb216c766b59527ac46c766b58c3638b006c766b52c36c766b00c355c39f64400021696e73756666696369656e742070726573616c6520636f6e747269627574696f6e61680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b00c356c36c766b57527ac46c766b00c352c36c766b5a527ac46c766b00c353c36c766b5b527ac46c766b00c354c36c766b5c527ac46232016c766b59c36342002370726573616c65206f7665722c206d61696e2073616c65206e6f74207374617274656461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b55c36c766b59c36c766b00c30111c393a0642e000f63726f776473616c6520656e64656461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b55c36c766b59c3526c766b00c357c39593a0642400006c766b5a527ac44f6c766b5b527ac46c766b00c35fc36c766b5c527ac46270006c766b55c36c766b59c36c766b00c357c393a06430006c766b00c35cc36c766b5a527ac46c766b00c35dc36c766b5b527ac46c766b00c35ec36c766b5c527ac4622d006c766b00c359c36c766b5a527ac46c766b00c35ac36c766b5b527ac46c766b00c35bc36c766b5c527ac46c766b52c30400e1f505966c766b5cc3956c766b5d527ac46c766b56c36c766b51c357c37c6165cc1f6c766b5e527ac46c766b5ec36c766b5dc3936c766b5f527ac46c766b5fc36c766b57c3a064450026707572636861736520776f756c642065786365656420746f6b656e2073616c65206c696d697461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b5bc300a1640f006203006c766b5dc3616c75666c766b52c36c766b5bc3a164bb006c766b5ac36c766b53c3617e6c766b60527ac46c766b56c36c766b60c37c61651d1f6c766b0111527ac46c766b0111c36c766b52c3936c766b0111527ac46c766b0111c36c766b5bc3a1642e006c766b54c3631a006c766b56c36c766b60c36c766b0111c3527261658e1e756203006c766b5dc3616c756624636f6e747269627574696f6e206c696d697420657863656564656420696e20726f756e6461680f4e656f2e52756e74696d652e4c6f676162030000616c75661a746f6f206d75636820666f72206c696d6974656420726f756e6461680f4e656f2e52756e74696d652e4c6f676162030000616c756658c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b51c361c001149c6432006c766b00c300c36c766b51c3617e6c766b53527ac46c766b52c36c766b53c37c6165081e640b0062030051616c756662030000616c756660c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b53c36c766b51c356c37c6165be1d640b0062030000616c75666c766b52c300c3009c642e000f6e6f206e656f20617474616368656461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b00c36c766b52c352c36c766b53c35272616517ff6c766b55527ac46c766b55c3632f00106e6f74204b594320617070726f76656461680f4e656f2e52756e74696d652e4c6f676162030000616c7566006c766b56527ac46c766b00c36c766b51c36c766b52c300c36c766b52c352c36c766b54c35479517956727551727553795279557275527275616587fa616c75665dc56b6c766b00527ac46c766b51527ac4616575186c766b52527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b53527ac46c766b00c36c766b51c36c766b52c36c766b53c3005479517956727551727553795279557275527275616581fe6c766b54527ac46c766b54c300a164d7001543616e6e6f742065786368616e67652076616c756561680f4e656f2e52756e74696d652e4c6f67616c766b52c300c300a06430006c766b52c352c36c766b52c300c37c6106726566756e6453c168124e656f2e52756e74696d652e4e6f7469667962030000616c75666c766b00c36165cff86c766b51c36c766b52c353c36c766b52c352c36c766b54c36c766b53c36c766b00c36c766b51c36c766b52c353c36c766b52c352c36c766b54c36c766b53c355795179577275517275547952795672755272755379537955727553727561656ef86c766b00c36c766b51c36c766b52c353c36c766b52c352c36c766b54c36c766b53c355795179577275517275547952795672755272755379537955727553727561652af8756c766b52c352c36c766b52c300c36c766b54c35272610c636f6e747269627574696f6e54c168124e656f2e52756e74696d652e4e6f7469667962030051616c756657c56b6c766b00527ac46c766b51527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b52527ac46c766b51c361c000a0642a006c766b51c300c36c766b53527ac46c766b00c36c766b53c36c766b52c3527261654dfc616c756662030000616c75665fc56b6c766b00527ac46c766b51527ac46c766b52527ac4006c766b53527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b54527ac46c766b54c36c766b52c354c37c6165311a6c766b55527ac46c766b55c36168184e656f2e52756e74696d652e436865636b5769746e6573736164bc0061006c766b59527ac46c766b51c361c06c766b58527ac4616c766b59c36c766b58c39f6495006c766b51c36c766b59c3c36c766b56527ac46c766b59c351936c766b59527ac46c766b56c361c001149c64c7ff6c766b00c300c36c766b56c3617e6c766b57527ac46c766b54c36c766b57c37c61650d19756c766b56c361126b79635f6465726567697374726174696f6e52c168124e656f2e52756e74696d652e4e6f746966796c766b53c351936c766b53527ac46262ff616203006c766b53c3616c75660117c56b6c766b00527ac46c766b51527ac46c766b52527ac4006c766b53527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b54527ac46c766b54c36c766b52c354c37c6165e2186c766b55527ac46c766b55c36168184e656f2e52756e74696d652e436865636b5769746e6573736164290161006c766b5e527ac46c766b51c361c06c766b5d527ac4616c766b5ec36c766b5dc39f6402016c766b51c36c766b5ec3c36c766b56527ac46c766b5ec351936c766b5e527ac46c766b56c361c06c766b57527ac46c766b57c3011497009e64060062b6ff6c766b57c30114966c766b58527ac4006c766b59527ac4616c766b59c36c766b58c39f649a006c766b59c30114956c766b5a527ac46c766b56c36c766b5ac30114617f6c766b5b527ac46c766b00c300c36c766b5bc3617e6c766b5c527ac46c766b54c36c766b5cc351527261659d17756c766b5bc361106b79635f726567697374726174696f6e52c168124e656f2e52756e74696d652e4e6f746966796c766b53c351936c766b53527ac46c766b59c351936c766b59527ac4625eff6162f5fe616203006c766b53c3616c75660111c56b6c766b00527ac46c766b51527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b52527ac46c766b52c36c766b51c354c37c616535176c766b53527ac46c766b53c36168184e656f2e52756e74696d652e436865636b5769746e65737361630b0062030000616c75666c766b52c36c766b00c351c37c6165f1166c766b54527ac46c766b54c36353003463616e277420737461727420746865207075626c69632073616c6520756e74696c207072652d73616c652068617320656e64656461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b52c36c766b00c358c37c616581166c766b55527ac46c766b55c36441002163616e277420737461727420746865207075626c69632073616c6520747769636561680f4e656f2e52756e74696d652e4c6f676162030000616c75666168184e656f2e426c6f636b636861696e2e476574486569676874616c766b56527ac46c766b52c36c766b00c358c36c766b56c352726165b5157562030051616c75665dc56b6c766b00527ac46c766b51527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b52527ac46c766b52c36c766b51c354c37c6165a3156c766b53527ac46c766b53c36168184e656f2e52756e74696d652e436865636b5769746e65737361630b0062030000616c75666c766b52c36c766b00c351c37c61655f156c766b54527ac46c766b54c3643c001c63616e277420656e6420746865207072652d73616c6520747769636561680f4e656f2e52756e74696d652e4c6f676162030000616c75666168184e656f2e426c6f636b636861696e2e476574486569676874616c766b55527ac46c766b52c36c766b00c351c36c766b55c35272616598147562030051616c756653c56b6168184e656f2e426c6f636b636861696e2e476574486569676874616c766b00527ac46c766b00c36168184e656f2e426c6f636b636861696e2e476574486561646572616c766b51527ac46203006c766b51c36168174e656f2e4865616465722e47657454696d657374616d7061616c756654c56b6c766b00527ac46c766b51527ac46c766b52527ac462030000616c756652c56b6c766b00527ac462030000616c756651c56b62030000616c756652c56b6c766b00527ac46203006c766b00c361681e4e656f2e436f6e74726163742e47657453746f72616765436f6e7465787461616c756652c56b6c766b00527ac462030000616c756659c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac46c766b56527ac46c766b57527ac462030000616c756659c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac46c766b56527ac46c766b57527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac46203006c766b00c36168134e656f2e41737365742e47657449737375657261616c756653c56b6c766b00527ac46c766b51527ac462030000616c756658c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac46c766b56527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac46203006c766b00c36168144e656f2e4163636f756e742e476574566f74657361616c756653c56b6c766b00527ac46c766b51527ac462030000616c756653c56b6c766b00527ac46c766b51527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac46203006c766b00c361681b4e656f2e4865616465722e4765744e657874436f6e73656e73757361616c756653c56b6c766b00527ac46c766b51527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac46203006c766b00c361681b4e656f2e4865616465722e4765744e657874436f6e73656e73757361616c756652c56b6c766b00527ac46203006c766b00c36168124e656f2e4865616465722e4765744861736861616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756659c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b52c36c766b53c3617e6c766b54527ac46c766b54c361c001289e640b0062030000616c75666c766b51c36c766b54c37c6165860f6c766b55527ac46203006c766b55c3616c75660116c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b52c36168184e656f2e52756e74696d652e436865636b5769746e6573736163330014496e636f7272656374207065726d697373696f6e61680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b54c3009f642e000f4e6567617469766520616d6f756e7461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b52c37c6165b40e6c766b55527ac46c766b55c36c766b54c3a26496006c766b52c36c766b53c3617e6c766b56527ac46c766b56c361c001289e640b0062030000616c75666c766b54c3009c6416006c766b51c36c766b56c37c6165dc0d756219006c766b51c36c766b56c36c766b54c352726165ff0d756c766b52c36c766b53c36c766b54c352726107617070726f766554c168124e656f2e52756e74696d652e4e6f7469667962030051616c756662030000616c75660120c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b54c300a1640b0062030000616c75666c766b52c36c766b53c3617e6c766b55527ac46c766b55c361c001289e640b0062030000616c75666c766b51c36c766b55c37c6165940d6c766b56527ac46c766b56c36c766b54c39f643a001b496e73756666696369656e742066756e647320617070726f76656461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b52c37c6165390d6c766b57527ac46c766b57c36c766b54c39f64420023496e73756666696369656e7420746f6b656e7320696e2066726f6d2062616c616e636561680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b53c37c6165d60c6c766b58527ac46c766b57c36c766b54c3946c766b59527ac46c766b58c36c766b54c3936c766b5a527ac46c766b51c36c766b53c36c766b5ac352726165500c756c766b51c36c766b52c36c766b59c3527261653a0c75117472616e7366657220636f6d706c65746561680f4e656f2e52756e74696d652e4c6f67616c766b56c36c766b54c3946c766b5b527ac46c766b5bc3009c643e001472656d6f76696e6720616c6c2062616c616e636561680f4e656f2e52756e74696d652e4c6f67616c766b51c36c766b55c37c6165850b75625000237570646174696e6720616c6c6f77616e636520746f206e657720616c6c6f77616e636561680f4e656f2e52756e74696d652e4c6f67616c766b51c36c766b55c36c766b5bc352726165710b756c766b52c36c766b53c36c766b54c3527261087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667962030051616c7566011cc56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b54c300a1640b0062030000616c75666c766b53c361c001149e640b0062030000616c75666c766b52c36168184e656f2e52756e74696d652e436865636b5769746e657373616450016c766b52c36c766b53c39c643000117472616e7366657220746f2073656c662161680f4e656f2e52756e74696d652e4c6f676162030051616c75666c766b51c36c766b52c37c6165c10a6c766b55527ac46c766b55c36c766b54c39f64310012696e73756666696369656e742066756e647361680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b55c36c766b54c39c6416006c766b51c36c766b52c37c6165df0975622b006c766b55c36c766b54c3946c766b56527ac46c766b51c36c766b52c36c766b56c352726165f009756c766b51c36c766b53c37c6165260a6c766b57527ac46c766b57c36c766b54c3936c766b58527ac46c766b51c36c766b53c36c766b58c352726165b209756c766b52c36c766b53c36c766b54c3527261087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667962030051616c75662166726f6d2061646472657373206973206e6f74207468652074782073656e64657261680f4e656f2e52756e74696d652e4c6f676162030000616c75660131c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b51c3046e616d659c6411006203006c766b53c300c3616c75666c766b51c308646563696d616c739c6411006203006c766b53c352c3616c75666c766b51c30673796d626f6c9c6412006203006c766b53c351c3616c75666151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b54527ac414496e636f727265637420417267204c656e6774686c766b55527ac46c766b51c30b746f74616c537570706c799c6419006203006c766b53c36c766b54c37c61652c03616c75666c766b51c30962616c616e63654f669c6454006c766b52c361c0519c643c006c766b52c300c36c766b56527ac46c766b56c361c001149e640b0062030000616c75666203006c766b54c36c766b56c37c61653f08616c75666203006c766b55c3616c75666c766b51c3087472616e736665729c647a006c766b52c361c0539c6462006c766b52c300c36c766b57527ac46c766b52c351c36c766b58527ac46c766b52c352c36c766b59527ac46c766b00c36c766b54c36c766b57c36c766b58c36c766b59c3547951795672755172755379527955727552727561653cfc616c75666203006c766b55c3616c75666c766b51c30c7472616e7366657246726f6d9c647a006c766b52c361c0539c6462006c766b52c300c36c766b57527ac46c766b52c351c36c766b58527ac46c766b52c352c36c766b59527ac46c766b00c36c766b54c36c766b57c36c766b58c36c766b59c35479517956727551727553795279557275527275616528f9616c75666203006c766b55c3616c75666c766b51c307617070726f76659c647a006c766b52c361c0539c6462006c766b52c300c36c766b5a527ac46c766b52c351c36c766b5b527ac46c766b52c352c36c766b59527ac46c766b00c36c766b54c36c766b5ac36c766b5bc36c766b59c35479517956727551727553795279557275527275616531f7616c75666203006c766b55c3616c75666c766b51c309616c6c6f77616e63659c6467006c766b52c361c0529c644f006c766b52c300c36c766b5a527ac46c766b52c351c36c766b5b527ac46c766b00c36c766b54c36c766b5ac36c766b5bc35379517955727551727552795279547275527275616551f6616c75666203006c766b55c3616c756662030000616c756653c56b6c766b00527ac409616c6c6f77616e636507617070726f76650c7472616e7366657246726f6d087472616e736665720962616c616e63654f660b746f74616c537570706c7908646563696d616c730673796d626f6c046e616d6559c16c766b51527ac46203006c766b51c3616c756653c56b6c766b00527ac46c766b51527ac462030000616c756653c56b6c766b00527ac46c766b51527ac462030000616c756653c56b6c766b00527ac46c766b51527ac46203006c766b51c36c766b00c357c37c61654905616c756656c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b52c36c766b00c357c37c61651c056c766b53527ac46c766b53c36c766b51c3936c766b53527ac46203006c766b52c36c766b00c357c36c766b53c352726165a3047500616c756657c56b6c766b00527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b51527ac46c766b51c36c766b00c357c37c61659b046c766b52527ac46c766b00c358c36c766b52c3946c766b53527ac46c766b53c3009f640b0062030000616c75666203006c766b53c3616c75660112c56b6156c66b006c766b00527ac4006c766b51527ac4006c766b52527ac4006c766b53527ac4209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc56c766b54527ac420e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c606c766b55527ac46c6c766b00527ac461682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e6572616c766b51527ac46c766b51c361681d4e656f2e5472616e73616374696f6e2e4765745265666572656e636573616c766b52527ac461682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e6753637269707448617368616c766b00c3537bc46c766b52c361c000a064f2016c766b52c300c36c766b53527ac46c766b53c36168184e656f2e4f75747075742e47657453637269707448617368616c766b00c3527bc4006c766b54527ac4006c766b55527ac461006c766b58527ac46c766b51c361681a4e656f2e5472616e73616374696f6e2e4765744f757470757473616c766b59527ac46c766b51c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736161c06c766b57527ac4616c766b58c36c766b57c39f6422016c766b59c36c766b58c3c36c766b56527ac46c766b58c351936c766b58527ac46c766b56c36168184e656f2e4f75747075742e47657453637269707448617368616c766b00c353c39c6455006c766b56c36168154e656f2e4f75747075742e47657441737365744964616c766b00c354c39c642c006c766b54c36c766b56c36168134e656f2e4f75747075742e47657456616c756561936c766b54527ac46c766b56c36168184e656f2e4f75747075742e47657453637269707448617368616c766b00c353c39c642aff6c766b56c36168154e656f2e4f75747075742e47657441737365744964616c766b00c355c39c6401ff6c766b55c36c766b56c36168134e656f2e4f75747075742e47657456616c756561936c766b55527ac462d5fe616c766b54c36c766b00c3007bc46c766b55c36c766b00c3517bc46203006c766b00c3616c756652c56b6c766b00527ac46203006c766b00c36168184e656f2e4f75747075742e4765745363726970744861736861616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac46203006c766b00c361659fef616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756651c56b62030000616c756651c56b62030000616c756653c56b6c766b00527ac46c766b51527ac46203006c766b00c300c36c766b51c37c6168124e656f2e53746f726167652e44656c6574656100616c756654c56b6c766b00527ac46c766b51527ac46c766b52527ac46203006c766b00c300c36c766b51c36c766b52c3527261680f4e656f2e53746f726167652e5075746100616c756653c56b6c766b00527ac46c766b51527ac46203006c766b00c300c36c766b51c37c61680f4e656f2e53746f726167652e47657461616c756653c56b6c766b00527ac46c766b51527ac462030000616c756654c56b6c766b00527ac46c766b51527ac46c766b52527ac462030000616c756653c56b6c766b00527ac46c766b51527ac462030000616c756651c56b62030000616c756651c56b6203000110616c756651c56b6203000100616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756651c56b62030000616c7566', - 'hex', -); - -export const kycContract = new Contract({ - script: kycContractScript, - parameterList: [ContractParameterType.String, ContractParameterType.Array], - - returnType: ContractParameterType.Void, - name: '', - codeVersion: '', - author: '', - email: '', - description: '', - contractProperties: ContractPropertyState.HasStoragePayable, -}); - -export const kycTransaction = new InvocationTransaction({ - script: Buffer.from( - '4d80025c2721a33bf665880fb2c1c0d504d92dcfe1616f03a8b007549dd4d19f367d6b71ed5c6fe9aa827298d3602f1e4f5ba179481398e55593862a0df92c62b9d04e2d8b2a989d72c3c9478c18f2ef714cf2c2c1bac70b182dbf8434323013c72d66c57591d849b197c38b07107c7ac4097ba47c1c9c39a04409dbfae7df8d49ad1319079604318ba12252ace7f1ace575f6847bc025bb30d752d73892bbb875e8d2baa6caaaf1b6efeb33744ace65f19fad05b26e12c1e347ae7770a182a4934e47332bebbd4cc848692cf5480980a6d99833e84fece90e31b196cbfe775ea2beb13b95ed41179becfb21dffcfbc3696d56dd270aa03397e5831c6b21f3542bfec1bf48fdafc51b2a9364f1d85268737eb7421911f6f581744475ab2bec031da981f65df6372f0a9dabcc4d5a174cadc544894ee83981fc66021d33025579f4eec82b96c64588ff0def56e0b0304f584f0acfa9632d6a3d3c88d3689b06954f57bcc860e78de1713d98982fb2a042a9b9a973435b5d49ddaca01d707ae0287bc0f0c2cceeb41a15131c5f98a6b690ca6c57366d229bd2b2f266b5b240f2057f50eb43f41945d84f65776cc194dd408e2cbb12a665cd2b9502b576cd518f09f9eddec27374fe8c9978db7d50a8144bb7dd13f517e8f0e1b4f90b20918f605fbcbfd6afa86a36b7555bfb9910128651af954dfa3a7de539949b4c0c4d28b55ac089e85cd8ec118f8ea34e2a7045b5d17a344b63f2dde9bef9a3ae624320d73875dff29fd7a4779f6dca2417e6f8c7f6b62d7f8ee2d22a87228f0c8b456fb43dc9fdb04793044493e9403daefed173a9e5a82acdfb7f40c4845419d360c06efe559805a52f4c554ff5d8de17ba8a28d815cbb32e904328d57179ef7282d5e33b546ee651c11263726f776473616c655f726567697374657267fcd7d436b2fe02473935afdec640027e12d2252e', - 'hex', - ), - - gas: utils.ZERO, -}); - -export const mintTransaction = new InvocationTransaction({ - script: Buffer.from('00c10a6d696e74546f6b656e7367dc6cc7701762e83d2d3795d27b1aac14469e5734', 'hex'), - - gas: utils.ZERO, - inputs: [ - new Input({ - hash: common.bufferToUInt256(Buffer.alloc(32, 0)), - index: 0, - }), - ], - - outputs: [ - new Output({ - value: new BN(54).mul(utils.ONE_HUNDRED_MILLION), - asset: common.stringToUInt256(common.NEO_ASSET_HASH), - address: kycContract.hash, - }), - - new Output({ - value: new BN(150).mul(utils.ONE_HUNDRED_MILLION), - asset: common.stringToUInt256(common.NEO_ASSET_HASH), - address: keys[0].scriptHash, - }), - ], - - attributes: [ - new BufferAttribute({ - usage: 0x81, - value: Buffer.alloc(32, 0), - }), - ], -}); - -export const claimOutput = new Output({ - value: new BN(54).mul(utils.ONE_HUNDRED_MILLION), - asset: common.stringToUInt256(common.NEO_ASSET_HASH), - address: kycContract.hash, -}); - -export const claimTransaction = createClaim({ - claims: [ - new Input({ - hash: common.bufferToUInt256(Buffer.alloc(32, 0)), - index: 0, - }), - ], -}); - -export const badTransaction = new InvocationTransaction({ - script: Buffer.from('00c10a6d696e74546f6b656e7367dc6cc7701762e83d2d3795d27b1aac14469e5735', 'hex'), - - gas: utils.ZERO, - // tslint:disable-next-line prefer-array-literal - inputs: [...Array(1025)].map( - (value) => - new Input({ - hash: common.bufferToUInt256(randomBytes(32)), - index: value, - }), - ), - // tslint:disable-next-line prefer-array-literal - outputs: [...Array(1025)].map( - () => - new Output({ - value: new BN(54).mul(utils.ONE_HUNDRED_MILLION), - asset: common.stringToUInt256(common.NEO_ASSET_HASH), - address: kycContract.hash, - }), - ), - - attributes: [ - new BufferAttribute({ - usage: 0x81, - value: Buffer.alloc(32, 0), - }), - ], -}); - -export const conciergeContractScript = Buffer.from( - '0135c56b6c766b00527ac46c766b51527ac4616168164e656f2e52756e74696d652e47657454726967676572009c6c766b54527ac46c766b54c364c500611446098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78c001149c6c766b55527ac46c766b55c3643e00611446098ed8eb1554fcb5a1a2ab3f40f30e35d2ba786168184e656f2e52756e74696d652e436865636b5769746e6573736c766b56527ac462440a1446098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78c001219c6c766b57527ac46c766b57c3643500616c766b00c36c766b58527ac46c766b58c31446098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78ac6c766b56527ac462ea0961626e096168164e656f2e52756e74696d652e47657454726967676572609c6c766b59527ac46c766b59c3644409616c766b00c3066465706c6f79876c766b5a527ac46c766b5ac36411006165ce096c766b56527ac46291096c766b00c30a6d696e74546f6b656e73876c766b5b527ac46c766b5bc36411006165cb0c6c766b56527ac46263096c766b00c30b746f74616c537570706c79876c766b5c527ac46c766b5cc36411006165aa0e6c766b56527ac46234096c766b00c3046e616d65876c766b5d527ac46c766b5dc364110061651f096c766b56527ac4620c096c766b00c30673796d626f6c876c766b5e527ac46c766b5ec364110061650c096c766b56527ac462e2086c766b00c3087472616e73666572876c766b5f527ac46c766b5fc3647700616c766b51c3c0539c009c6c766b0113527ac46c766b0113c3640e00006c766b56527ac4629d086c766b51c300c36c766b60527ac46c766b51c351c36c766b0111527ac46c766b51c352c36c766b0112527ac46c766b60c36c766b0111c36c766b0112c361527265150e6c766b56527ac46250086c766b00c30962616c616e63654f66876c766b0114527ac46c766b0114c3644d00616c766b51c3c0519c009c6c766b0116527ac46c766b0116c3640e00006c766b56527ac46208086c766b51c300c36c766b0115527ac46c766b0115c36165ee0f6c766b56527ac462e5076c766b00c308646563696d616c73876c766b0117527ac46c766b0117c36411006165ec076c766b56527ac462b7076c766b00c30e616464546f57686974656c697374876c766b0118527ac46c766b0118c3644d00616c766b51c3c0519c009c6c766b011a527ac46c766b011ac3640e00006c766b56527ac4626a076c766b51c300c36c766b0119527ac46c766b0119c36165b2116c766b56527ac46247076c766b00c31372656d6f766546726f6d57686974656c697374876c766b011b527ac46c766b011bc3644d00616c766b51c3c0519c009c6c766b011d527ac46c766b011dc3640e00006c766b56527ac462f5066c766b51c300c36c766b011c527ac46c766b011cc3616575116c766b56527ac462d2066c766b00c30d6973496e57686974656c697374876c766b011e527ac46c766b011ec3644d00616c766b51c3c0519c009c6c766b0120527ac46c766b0120c3640e00006c766b56527ac46286066c766b51c300c36c766b011f527ac46c766b011fc361653e116c766b56527ac46263066c766b00c310676574506172616d56616c7565496e74876c766b0121527ac46c766b0121c3644d00616c766b51c3c0519c009c6c766b0123527ac46c766b0123c3640e00006c766b56527ac46214066c766b51c300c36c766b0122527ac46c766b0122c36165490e6c766b56527ac462f1056c766b00c31573657457686974656c69737453616c65426567696e876c766b0124527ac46c766b0124c3642f00611457484954454c4953545f53414c455f424547494e6c766b51c300c3617c65210f6c766b56527ac46298056c766b00c31473657457686974656c69737453616c6552617465876c766b0125527ac46c766b0125c3643200611757484954454c4953545f53414c455f524154455f4e454f6c766b51c300c3617c65c60e6c766b56527ac4623d056c766b00c31373657457686974656c69737448617264636170876c766b0126527ac46c766b0126c3642d00611257484954454c4953545f484152445f4341506c766b51c300c3617c65710e6c766b56527ac462e8046c766b00c30f73657450726573616c65426567696e876c766b0127527ac46c766b0127c3642900610e5052455f53414c455f424547494e6c766b51c300c3617c65240e6c766b56527ac4629b046c766b00c31373657450726573616c655765656b3152617465876c766b0128527ac46c766b0128c364320061175052455f53414c455f5745454b315f524154455f4e454f6c766b51c300c3617c65ca0d6c766b56527ac46241046c766b00c31373657450726573616c655765656b3252617465876c766b0129527ac46c766b0129c364320061175052455f53414c455f5745454b325f524154455f4e454f6c766b51c300c3617c65700d6c766b56527ac462e7036c766b00c31373657450726573616c655765656b3352617465876c766b012a527ac46c766b012ac364320061175052455f53414c455f5745454b335f524154455f4e454f6c766b51c300c3617c65160d6c766b56527ac4628d036c766b00c31373657450726573616c655765656b3452617465876c766b012b527ac46c766b012bc364320061175052455f53414c455f5745454b345f524154455f4e454f6c766b51c300c3617c65bc0c6c766b56527ac46233036c766b00c31173657450726573616c6548617264636170876c766b012c527ac46c766b012cc3642c0061115052455f53414c455f484152445f4341506c766b51c300c3617c656a0c6c766b56527ac462e1026c766b00c3107365744d61696e73616c65426567696e876c766b012d527ac46c766b012dc3642a00610f4d41494e5f53414c455f424547494e6c766b51c300c3617c651b0c6c766b56527ac46292026c766b00c3147365744d61696e73616c655765656b3152617465876c766b012e527ac46c766b012ec364330061184d41494e5f53414c455f5745454b315f524154455f4e454f6c766b51c300c3617c65bf0b6c766b56527ac46236026c766b00c3147365744d61696e73616c655765656b3252617465876c766b012f527ac46c766b012fc364330061184d41494e5f53414c455f5745454b325f524154455f4e454f6c766b51c300c3617c65630b6c766b56527ac462da016c766b00c3147365744d61696e73616c655765656b3352617465876c766b0130527ac46c766b0130c364330061184d41494e5f53414c455f5745454b335f524154455f4e454f6c766b51c300c3617c65070b6c766b56527ac4627e016c766b00c3147365744d61696e73616c655765656b3452617465876c766b0131527ac46c766b0131c364330061184d41494e5f53414c455f5745454b345f524154455f4e454f6c766b51c300c3617c65ab0a6c766b56527ac46222016c766b00c3127365744d61696e73616c6548617264636170876c766b0132527ac46c766b0132c3642d0061124d41494e5f53414c455f484152445f4341506c766b51c300c3617c65570a6c766b56527ac462ce006c766b00c30e7365744d61785075726368617365876c766b0133527ac46c766b0133c3642f0061144d41585f4e454f5f5045525f5452414e534645526c766b51c300c3617c65050a6c766b56527ac4627c006161659a156c766b52527ac461650e176c766b53527ac46c766b53c300907c907ca1630e006c766b52c3c000a0620400006c766b0134527ac46c766b0134c3642f00616c766b52c36c766b53c3617c06726566756e6453c168124e656f2e52756e74696d652e4e6f746966796161006c766b56527ac46203006c766b56c3616c756600c56b0f436f6e63696572676520546f6b656e616c756600c56b03434745616c756600c56b58616c756653c56b616168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c79617c680f4e656f2e53746f726167652e4765746c766b00527ac46c766b00c3c000a06c766b51527ac46c766b51c3640e00006c766b52527ac462c0026168164e656f2e53746f726167652e476574436f6e746578741446098ed8eb1554fcb5a1a2ab3f40f30e35d2ba780700c09f8207db0d615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c790700c09f8207db0d615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e746578741457484954454c4953545f53414c455f424547494e0410a9825a615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e746578741257484954454c4953545f484152445f4341500440a5ae02615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e746578740e5052455f53414c455f424547494e0490fa835a615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e74657874115052455f53414c455f484152445f43415004c03b4703615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e746578740f4d41494e5f53414c455f424547494e04104ebf5a615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e74657874124d41494e5f53414c455f484152445f4341500400e1f505615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e74657874144d41585f4e454f5f5045525f5452414e5346455202fa00615272680f4e656f2e53746f726167652e50757461001446098ed8eb1554fcb5a1a2ab3f40f30e35d2ba780700c09f8207db0d615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667961516c766b52527ac46203006c766b52c3616c75665ac56b616165c0116c766b00527ac46c766b00c3c0009c6c766b56527ac46c766b56c3640f0061006c766b57527ac462d601616511136c766b51527ac461656b076c766b52527ac46c766b52c3009c6c766b58527ac46c766b58c3643900616c766b00c36c766b51c3617c06726566756e6453c168124e656f2e52756e74696d652e4e6f7469667961006c766b57527ac46274016c766b00c36c766b51c36c766b52c361527265280f6c766b53527ac46c766b53c3009c6c766b59527ac46c766b59c3640f0061006c766b57527ac46236016168164e656f2e53746f726167652e476574436f6e746578746c766b00c3617c680f4e656f2e53746f726167652e4765746c766b54527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b00c36c766b53c36c766b54c393615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c79617c680f4e656f2e53746f726167652e4765746c766b55527ac46168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c796c766b53c36c766b55c393615272680f4e656f2e53746f726167652e50757461006c766b00c36c766b53c3615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667961516c766b57527ac46203006c766b57c3616c756651c56b616168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c79617c680f4e656f2e53746f726167652e4765746c766b00527ac46203006c766b00c3616c75665bc56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b52c300a16c766b55527ac46c766b55c3640e00006c766b56527ac46204026c766b00c36168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b57527ac46c766b57c3640e00006c766b56527ac462c8016c766b00c36c766b51c39c6c766b58527ac46c766b58c3640e00516c766b56527ac462a3016168164e656f2e53746f726167652e476574436f6e746578746c766b00c3617c680f4e656f2e53746f726167652e4765746c766b53527ac46c766b53c36c766b52c39f6c766b59527ac46c766b59c3640e00006c766b56527ac46246016c766b53c36c766b52c39c6c766b5a527ac46c766b5ac3643b006168164e656f2e53746f726167652e476574436f6e746578746c766b00c3617c68124e656f2e53746f726167652e44656c657465616241006168164e656f2e53746f726167652e476574436f6e746578746c766b00c36c766b53c36c766b52c394615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e746578746c766b51c3617c680f4e656f2e53746f726167652e4765746c766b54527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b51c36c766b54c36c766b52c393615272680f4e656f2e53746f726167652e507574616c766b00c36c766b51c36c766b52c3615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667961516c766b56527ac46203006c766b56c3616c756652c56b6c766b00527ac4616168164e656f2e53746f726167652e476574436f6e746578746c766b00c3617c680f4e656f2e53746f726167652e4765746c766b51527ac46203006c766b51c3616c756652c56b6c766b00527ac4616168164e656f2e53746f726167652e476574436f6e746578746c766b00c3617c680f4e656f2e53746f726167652e4765746c766b51527ac46203006c766b51c3616c756654c56b6c766b00527ac46c766b51527ac4611446098ed8eb1554fcb5a1a2ab3f40f30e35d2ba786168184e656f2e52756e74696d652e436865636b5769746e65737363380014b463764383882e6f376d77d2df39f633237a1fc56168184e656f2e52756e74696d652e436865636b5769746e657373009c620400006c766b52527ac46c766b52c3640f0061006c766b53527ac46246006168164e656f2e53746f726167652e476574436f6e746578746c766b00c36c766b51c3615272680f4e656f2e53746f726167652e50757461516c766b53527ac46203006c766b53c3616c756654c56b6c766b00527ac46c766b51527ac4611446098ed8eb1554fcb5a1a2ab3f40f30e35d2ba786168184e656f2e52756e74696d652e436865636b5769746e65737363380014b463764383882e6f376d77d2df39f633237a1fc56168184e656f2e52756e74696d652e436865636b5769746e657373009c620400006c766b52527ac46c766b52c3640f0061006c766b53527ac46246006168164e656f2e53746f726167652e476574436f6e746578746c766b00c36c766b51c3615272680f4e656f2e53746f726167652e50757461516c766b53527ac46203006c766b53c3616c756653c56b6c766b00527ac4616c766b00c301317e6c766b51527ac46c766b51c351617c651afe6c766b52527ac46203006c766b52c3616c756653c56b6c766b00527ac4616c766b00c301317e6c766b51527ac46c766b51c300617c65e2fd6c766b52527ac46203006c766b52c3616c756653c56b6c766b00527ac4616c766b00c301317e6c766b51527ac46c766b51c361655dfd6c766b52527ac46203006c766b52c3616c75660111c56b616168134e656f2e52756e74696d652e47657454696d656c766b00527ac403803a096c766b51527ac46168164e656f2e53746f726167652e476574436f6e746578741457484954454c4953545f53414c455f424547494e617c680f4e656f2e53746f726167652e4765746c766b52527ac46168164e656f2e53746f726167652e476574436f6e746578740e5052455f53414c455f424547494e617c680f4e656f2e53746f726167652e4765746c766b53527ac46168164e656f2e53746f726167652e476574436f6e746578740f4d41494e5f53414c455f424547494e617c680f4e656f2e53746f726167652e4765746c766b54527ac4006c766b55527ac46c766b52c36c766b00c3907c907ca26311006c766b00c36c766b53c39f620400006c766b56527ac46c766b56c3647800616165e808616592fe519e6c766b57527ac46c766b57c3640f0061006c766b58527ac46224046168164e656f2e53746f726167652e476574436f6e746578741757484954454c4953545f53414c455f524154455f4e454f617c680f4e656f2e53746f726167652e4765746c766b55527ac46162c0036c766b53c36c766b00c3907c907ca06319006c766b00c36c766b53c3546c766b51c395939f620400006c766b59527ac46c766b59c364a901616c766b00c36c766b53c36c766b51c3939f6c766b5a527ac46c766b5ac3645300616168164e656f2e53746f726167652e476574436f6e74657874175052455f53414c455f5745454b315f524154455f4e454f617c680f4e656f2e53746f726167652e4765746c766b55527ac4616234016c766b00c36c766b53c3526c766b51c395939f6c766b5b527ac46c766b5bc3645300616168164e656f2e53746f726167652e476574436f6e74657874175052455f53414c455f5745454b325f524154455f4e454f617c680f4e656f2e53746f726167652e4765746c766b55527ac46162c2006c766b00c36c766b53c3536c766b51c395939f6c766b5c527ac46c766b5cc3645300616168164e656f2e53746f726167652e476574436f6e74657874175052455f53414c455f5745454b335f524154455f4e454f617c680f4e656f2e53746f726167652e4765746c766b55527ac461625000616168164e656f2e53746f726167652e476574436f6e74657874175052455f53414c455f5745454b345f524154455f4e454f617c680f4e656f2e53746f726167652e4765746c766b55527ac4616162e2016c766b54c36c766b00c3907c907ca06319006c766b00c36c766b54c3546c766b51c395939f620400006c766b5d527ac46c766b5dc364aa01616c766b00c36c766b54c36c766b51c3939f6c766b5e527ac46c766b5ec3645400616168164e656f2e53746f726167652e476574436f6e74657874184d41494e5f53414c455f5745454b315f524154455f4e454f617c680f4e656f2e53746f726167652e4765746c766b55527ac4616237016c766b00c36c766b54c3526c766b51c395939f6c766b5f527ac46c766b5fc3645400616168164e656f2e53746f726167652e476574436f6e74657874184d41494e5f53414c455f5745454b325f524154455f4e454f617c680f4e656f2e53746f726167652e4765746c766b55527ac46162c4006c766b00c36c766b54c3536c766b51c395939f6c766b60527ac46c766b60c3645400616168164e656f2e53746f726167652e476574436f6e74657874184d41494e5f53414c455f5745454b335f524154455f4e454f617c680f4e656f2e53746f726167652e4765746c766b55527ac461625100616168164e656f2e53746f726167652e476574436f6e74657874184d41494e5f53414c455f5745454b345f524154455f4e454f617c680f4e656f2e53746f726167652e4765746c766b55527ac461616c766b55c30400e1f505956c766b58527ac46203006c766b58c3616c756659c56b616168134e656f2e52756e74696d652e47657454696d656c766b00527ac403803a096c766b51527ac46168164e656f2e53746f726167652e476574436f6e746578741457484954454c4953545f53414c455f424547494e617c680f4e656f2e53746f726167652e4765746c766b52527ac46168164e656f2e53746f726167652e476574436f6e746578740e5052455f53414c455f424547494e617c680f4e656f2e53746f726167652e4765746c766b53527ac46168164e656f2e53746f726167652e476574436f6e746578740f4d41494e5f53414c455f424547494e617c680f4e656f2e53746f726167652e4765746c766b54527ac46c766b52c36c766b00c3907c907ca26311006c766b00c36c766b53c39f620400006c766b55527ac46c766b55c3645300616168164e656f2e53746f726167652e476574436f6e746578741257484954454c4953545f484152445f434150617c680f4e656f2e53746f726167652e4765740400e1f505956c766b56527ac46224016c766b53c36c766b00c3907c907ca26319006c766b00c36c766b53c3546c766b51c395939f620400006c766b57527ac46c766b57c3645200616168164e656f2e53746f726167652e476574436f6e74657874115052455f53414c455f484152445f434150617c680f4e656f2e53746f726167652e4765740400e1f505956c766b56527ac4629d006c766b54c36c766b00c3907c907ca26319006c766b00c36c766b54c3546c766b51c395939f620400006c766b58527ac46c766b58c3645300616168164e656f2e53746f726167652e476574436f6e74657874124d41494e5f53414c455f484152445f434150617c680f4e656f2e53746f726167652e4765740400e1f505956c766b56527ac4621500070000c16ff286236c766b56527ac46203006c766b56c3616c75665dc56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b51c30400e1f505966c766b52c3956c766b53527ac46168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c79617c680f4e656f2e53746f726167652e4765746c766b54527ac46165ecfc6c766b55527ac46c766b55c36c766b54c3946c766b56527ac46c766b56c300a16c766b58527ac46c766b58c3643900616c766b00c36c766b51c3617c06726566756e6453c168124e656f2e52756e74696d652e4e6f7469667961006c766b59527ac46218016168164e656f2e53746f726167652e476574436f6e74657874144d41585f4e454f5f5045525f5452414e53464552617c680f4e656f2e53746f726167652e4765746c766b52c3956c766b57527ac46c766b57c300907c907ca16311006c766b56c36c766b57c3a0620400006c766b5a527ac46c766b5ac3641100616c766b57c36c766b56527ac4616c766b56c36c766b53c39f6c766b5b527ac46c766b5bc3646700616c766b56c36c766b56c36c766b52c397946c766b5c527ac46c766b00c36c766b53c36c766b5cc3946c766b52c3960400e1f50595617c06726566756e6453c168124e656f2e52756e74696d652e4e6f74696679616c766b5cc36c766b59527ac46212006c766b53c36c766b59527ac46203006c766b59c3616c756657c56b6161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b00527ac46c766b00c361681d4e656f2e5472616e73616374696f6e2e4765745265666572656e6365736c766b51527ac4616c766b51c36c766b52527ac4006c766b53527ac4629d006c766b52c36c766b53c3c36c766b54527ac4616c766b54c36168154e656f2e4f75747075742e47657441737365744964209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c6c766b55527ac46c766b55c3642d006c766b54c36168184e656f2e4f75747075742e476574536372697074486173686c766b56527ac4622c00616c766b53c351936c766b53527ac46c766b53c36c766b52c3c09f635aff006c766b56527ac46203006c766b56c3616c756651c56b6161682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686c766b00527ac46203006c766b00c3616c756658c56b6161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b00527ac46c766b00c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736c766b51527ac4006c766b52527ac4616c766b51c36c766b53527ac4006c766b54527ac462cd006c766b53c36c766b54c3c36c766b55527ac4616c766b55c36168184e656f2e4f75747075742e47657453637269707448617368616505ff907c907c9e6345006c766b55c36168154e656f2e4f75747075742e47657441737365744964209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c620400006c766b56527ac46c766b56c3642d00616c766b52c36c766b55c36168134e656f2e4f75747075742e47657456616c7565936c766b52527ac461616c766b54c351936c766b54527ac46c766b54c36c766b53c3c09f632aff6c766b52c36c766b57527ac46203006c766b57c3616c7566', - 'hex', -); - -export const conciergeContract = new Contract({ - script: conciergeContractScript, - parameterList: [ContractParameterType.String, ContractParameterType.Array], - - returnType: ContractParameterType.Void, - name: '', - codeVersion: '', - author: '', - email: '', - description: '', - contractProperties: ContractPropertyState.HasStoragePayable, -}); - -export const switcheoTokenContractScript = Buffer.from( - '0133c56b6c766b00527ac46c766b51527ac4616168164e656f2e52756e74696d652e47657454726967676572009c6c766b52527ac46c766b52c36498016161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b53527ac46c766b53c361681d4e656f2e5472616e73616374696f6e2e4765745265666572656e6365736c766b54527ac4006c766b55527ac4616c766b54c36c766b56527ac4006c766b57527ac462cc006c766b56c36c766b57c3c36c766b58527ac4616c766b58c36168184e656f2e4f75747075742e476574536372697074486173686c766b55527ac46c766b55c361682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c6c766b59527ac46c766b59c3643e00611446fca70ca7f0526d6955f915ce07cbe326fbadd06168184e656f2e52756e74696d652e436865636b5769746e6573736c766b5a527ac4625508616c766b57c351936c766b57527ac46c766b57c36c766b56c3c09f632bff6c766b55c36165961700a1630c006165ec0e009c620400516c766b5b527ac46c766b5bc3640e00006c766b5a527ac4620508516c766b5a527ac462fa076168164e656f2e52756e74696d652e47657454726967676572609c6c766b5c527ac46c766b5cc364c507616c766b00c30b746f74616c537570706c79876c766b5d527ac46c766b5dc3641100616517096c766b5a527ac462a0076c766b00c3046e616d65876c766b5e527ac46c766b5ec364110061658b076c766b5a527ac46278076c766b00c30673796d626f6c876c766b5f527ac46c766b5fc3641100616571076c766b5a527ac4624e076c766b00c308646563696d616c73876c766b60527ac46c766b60c3641100616550076c766b5a527ac46222076c766b00c3066465706c6f79876c766b0111527ac46c766b0111c364110061652c076c766b5a527ac462f6066c766b00c30d73616c65537461727454696d65876c766b0112527ac46c766b0112c36411006165430d6c766b5a527ac462c3066c766b00c30962616c616e63654f66876c766b0113527ac46c766b0113c3644d00616c766b51c3c0519c009c6c766b0115527ac46c766b0115c3640e00006c766b5a527ac4627b066c766b51c300c36c766b0114527ac46c766b0114c361651e086c766b5a527ac46258066c766b00c3087472616e73666572876c766b0116527ac46c766b0116c3644f00616c766b51c3c0539c009c6c766b0117527ac46c766b0117c3640e00006c766b5a527ac46211066c766b51c300c36c766b51c351c36c766b51c352c36152726501086c766b5a527ac462ec056c766b00c30c7472616e7366657246726f6d876c766b0118527ac46c766b0118c3646800616c766b51c3c0549c009c6c766b0119527ac46c766b0119c3640e00006c766b5a527ac462a1056c766b51c300c36c766b51c351c36c766b51c352c36c766b51c353c3615379517955727551727552795279547275527275653a0a6c766b5a527ac46263056c766b00c307617070726f7665876c766b011a527ac46c766b011ac3644f00616c766b51c3c0539c009c6c766b011b527ac46c766b011bc3640e00006c766b5a527ac4621d056c766b51c300c36c766b51c351c36c766b51c352c361527265d10a6c766b5a527ac462f8046c766b00c30a6d696e74546f6b656e73876c766b011c527ac46c766b011cc364270061006165f50c6c766b011d527ac4516165e80c6c766b011dc3856c766b5a527ac462b2046c766b00c30d73657453616c65436f6e666967876c766b011e527ac46c766b011ec3649e00616c766b51c3c0539c009c6c766b011f527ac46c766b011fc3640f00006c766b5a527ac4626604611446fca70ca7f0526d6955f915ce07cbe326fbadd06168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b0120527ac46c766b0120c3640e00006c766b5a527ac46217046c766b51c300c36c766b51c351c36c766b51c352c3615272650f0b6c766b5a527ac462f2036c766b00c30e616464546f57686974656c697374876c766b0121527ac46c766b0121c3649600616c766b51c3c0529c009c6c766b0122527ac46c766b0122c3640f00006c766b5a527ac462a503611446fca70ca7f0526d6955f915ce07cbe326fbadd06168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b0123527ac46c766b0123c3640e00006c766b5a527ac46256036c766b51c300c36c766b51c351c3617c65b1146c766b5a527ac46239036c766b00c31372656d6f766546726f6d57686974656c697374876c766b0124527ac46c766b0124c3649600616c766b51c3c0529c009c6c766b0125527ac46c766b0125c3640f00006c766b5a527ac462e702611446fca70ca7f0526d6955f915ce07cbe326fbadd06168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b0126527ac46c766b0126c3640e00006c766b5a527ac46298026c766b51c300c36c766b51c351c3617c6502156c766b5a527ac4627b026c766b00c310746f74616c57686974656c6973746564876c766b0127527ac46c766b0127c3644300616c766b51c3c0519c009c6c766b0128527ac46c766b0128c3640e00006c766b5a527ac4622c026c766b51c300c36165b0156165da156c766b5a527ac46213026c766b00c30d697357686974656c6973746564876c766b0129527ac46c766b0129c3645900616c766b51c3c0529c009c6c766b012b527ac46c766b012bc3640e00006c766b5a527ac462c7016c766b51c351c361654b156c766b012a527ac46c766b012ac36c766b51c300c3617c650b166c766b5a527ac46298016c766b00c30f656e61626c655472616e7366657273876c766b012c527ac46c766b012cc364940061611446fca70ca7f0526d6955f915ce07cbe326fbadd06168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b012d527ac46c766b012dc3640e00006c766b5a527ac46221016168164e656f2e53746f726167652e476574436f6e74657874107472616e7366657273456e61626c656451615272680f4e656f2e53746f726167652e50757461616c766b00c30f696e646976696475616c4361704f66876c766b012e527ac46c766b012ec3644d00616c766b51c3c0519c009c6c766b0130527ac46c766b0130c3640e00006c766b5a527ac46292006c766b51c300c36c766b012f527ac46c766b012fc36165e10f6c766b5a527ac4626f006c766b00c30c65786368616e676552617465876c766b0131527ac46c766b0131c3643f00616c766b51c3c0519c009c6c766b0132527ac46c766b0132c3640e00006c766b5a527ac46224006c766b51c300c36165ed096c766b5a527ac4620f0061006c766b5a527ac46203006c766b5ac3616c756600c56b08537769746368656f616c756600c56b03535748616c756600c56b58616c756652c56b616168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c79617c680f4e656f2e53746f726167652e476574c000a06c766b00527ac46c766b00c3640e00006c766b51527ac462e2006168164e656f2e53746f726167652e476574436f6e74657874611446fca70ca7f0526d6955f915ce07cbe326fbadd0080000087e93371c01615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c79080000087e93371c01615272680f4e656f2e53746f726167652e507574616100611446fca70ca7f0526d6955f915ce07cbe326fbadd0080000087e93371c01615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667961516c766b51527ac46203006c766b51c3616c756651c56b616168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c79617c680f4e656f2e53746f726167652e4765746c766b00527ac46203006c766b00c3616c756652c56b6c766b00527ac4616168164e656f2e53746f726167652e476574436f6e746578746c766b00c3617c680f4e656f2e53746f726167652e4765746c766b51527ac46203006c766b51c3616c75665cc56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b52c300a16c766b55527ac46c766b55c3640e00006c766b56527ac46282026c766b00c36168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b57527ac46c766b57c3640e00006c766b56527ac46246026c766b00c36c766b51c39c6c766b58527ac46c766b58c3640e00516c766b56527ac46221026168164e656f2e53746f726167652e476574436f6e74657874107472616e7366657273456e61626c6564617c680f4e656f2e53746f726167652e476574c06324006c766b00c3611446fca70ca7f0526d6955f915ce07cbe326fbadd09c009c620400006c766b59527ac46c766b59c3640e00006c766b56527ac462a4016168164e656f2e53746f726167652e476574436f6e746578746c766b00c3617c680f4e656f2e53746f726167652e4765746c766b53527ac46c766b53c36c766b52c39f6c766b5a527ac46c766b5ac3640e00006c766b56527ac46247016c766b53c36c766b52c39c6c766b5b527ac46c766b5bc3643b006168164e656f2e53746f726167652e476574436f6e746578746c766b00c3617c68124e656f2e53746f726167652e44656c657465616241006168164e656f2e53746f726167652e476574436f6e746578746c766b00c36c766b53c36c766b52c394615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e746578746c766b51c3617c680f4e656f2e53746f726167652e4765746c766b54527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b51c36c766b54c36c766b52c393615272680f4e656f2e53746f726167652e50757461616c766b00c36c766b51c36c766b52c3615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667961516c766b56527ac46203006c766b56c3616c756658c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac4616168164e656f2e53746f726167652e476574436f6e746578746c766b51c36c766b00c37e617c680f4e656f2e53746f726167652e4765746c766b54527ac46c766b54c36c766b53c3a26c766b55527ac46c766b55c3647900616c766b51c36c766b52c36c766b53c361527265b3fc6c766b56527ac46c766b56c3645300616168164e656f2e53746f726167652e476574436f6e746578746c766b51c36c766b00c37e6c766b54c36c766b53c394615272680f4e656f2e53746f726167652e50757461516c766b57527ac4620f0061006c766b57527ac46203006c766b57c3616c756655c56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b00c36168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b53527ac46c766b53c3640e00006c766b54527ac4624c006168164e656f2e53746f726167652e476574436f6e746578746c766b00c36c766b51c37e6c766b52c3615272680f4e656f2e53746f726167652e50757461516c766b54527ac46203006c766b54c3616c756651c56b616168164e656f2e53746f726167652e476574436f6e746578740d73616c65537461727454696d65617c680f4e656f2e53746f726167652e4765746c766b00527ac46203006c766b00c3616c756652c56b616165aaff6c766b00527ac46c766b00c36424006c766b00c36168134e656f2e52756e74696d652e47657454696d65a0009c620400006c766b51527ac46203006c766b51c3616c756655c56b6c766b00527ac46c766b51527ac46c766b52527ac46161659aff6c766b53527ac46c766b53c3640e00006c766b54527ac462d5006168164e656f2e53746f726167652e476574436f6e746578740d73616c65537461727454696d656c766b00c3615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e746578740f746f6b656e73466f724f6e654e656f6c766b51c3615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e746578740f746f6b656e73466f724f6e654761736c766b52c3615272680f4e656f2e53746f726167652e50757461516c766b54527ac46203006c766b54c3616c756659c56b6c766b00527ac4616c766b00c3616514036c766b51527ac46c766b51c3c0009c6c766b55527ac46c766b55c3640e00006c766b56527ac4626c016c766b00c361655b046c766b52527ac4616554fe009c6c766b57527ac46c766b57c3643a0061616c766b51c36c766b52c3617c06726566756e6453c168124e656f2e52756e74696d652e4e6f7469667961006c766b56527ac46210016c766b00c3616510016c766b53527ac46c766b51c36c766b52c36c766b53c361527265aa016c766b54527ac46c766b54c300a16c766b58527ac46c766b58c3640e00006c766b56527ac462c3006168164e656f2e53746f726167652e476574436f6e746578746c766b51c36c766b54c36c766b51c3616588f893615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c796c766b54c36165f5f793615272680f4e656f2e53746f726167652e5075746161006c766b51c36c766b54c3615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667961516c766b56527ac46203006c766b56c3616c756653c56b6c766b00527ac4616c766b00c36c766b51527ac46c766b51c3644a00616168164e656f2e53746f726167652e476574436f6e746578740f746f6b656e73466f724f6e65476173617c680f4e656f2e53746f726167652e4765746c766b52527ac4624a00616168164e656f2e53746f726167652e476574436f6e746578740f746f6b656e73466f724f6e654e656f617c680f4e656f2e53746f726167652e4765746c766b52527ac46203006c766b52c3616c756657c56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b51c36c766b52c3950400e1f505966c766b53527ac46c766b00c36165a7046c766b54527ac46c766b53c36c766b54c3a06c766b55527ac46c766b55c364500061616c766b00c36c766b53c36c766b54c3940400e1f505956c766b52c396617c06726566756e6453c168124e656f2e52756e74696d652e4e6f74696679616c766b54c36c766b56527ac46212006c766b53c36c766b56527ac46203006c766b56c3616c756659c56b6c766b00527ac46161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b51527ac46c766b51c361681d4e656f2e5472616e73616374696f6e2e4765745265666572656e6365736c766b52527ac46c766b00c363290061209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc56225006120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c606c766b53527ac4616c766b52c36c766b54527ac4006c766b55527ac46281006c766b54c36c766b55c3c36c766b56527ac4616c766b56c36168154e656f2e4f75747075742e476574417373657449646c766b53c39c6c766b57527ac46c766b57c3642d006c766b56c36168184e656f2e4f75747075742e476574536372697074486173686c766b58527ac4622c00616c766b55c351936c766b55527ac46c766b55c36c766b54c3c09f6376ff006c766b58527ac46203006c766b58c3616c75665bc56b6c766b00527ac46161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b51527ac46c766b00c363290061209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc56225006120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c606c766b52527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b51c36168174e656f2e5472616e73616374696f6e2e476574486173686c766b52c37e617c680f4e656f2e53746f726167652e476574c000a06c766b55527ac46c766b55c3640e00006c766b56527ac4629d016c766b51c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736c766b53527ac4006c766b54527ac4616c766b53c36c766b57527ac4006c766b58527ac462dd006c766b57c36c766b58c3c36c766b59527ac4616c766b59c36168184e656f2e4f75747075742e4765745363726970744861736861682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e6753637269707448617368907c907c9e6329006c766b59c36168154e656f2e4f75747075742e476574417373657449646c766b52c39c620400006c766b5a527ac46c766b5ac3642d00616c766b54c36c766b59c36168134e656f2e4f75747075742e47657456616c7565936c766b54527ac461616c766b58c351936c766b58527ac46c766b58c36c766b57c3c09f631aff6168164e656f2e53746f726167652e476574436f6e746578746c766b51c36168174e656f2e5472616e73616374696f6e2e476574486173686c766b52c37e057370656e74615272680f4e656f2e53746f726167652e507574616c766b54c36c766b56527ac46203006c766b56c3616c75660111c56b6c766b00527ac4610131616518046c766b51527ac4013261650b046c766b52527ac46c766b51c36c766b00c3617c65cf046c766b53527ac46c766b52c36c766b00c3617c65b9046c766b54527ac46c766b53c3630d006c766b54c3009c620400006c766b5a527ac46c766b5ac3640e00006c766b5b527ac46281016c766b53c363070051620400536c766b55527ac40800008a5d78456301616568f1946c766b57527ac46c766b51c36165a70353956c766b52c361659c03936c766b58527ac46168134e656f2e52756e74696d652e47657454696d65616533f6946c766b59527ac46c766b59c3038051019f6c766b5c527ac46c766b5cc3642d006107000082dfe40d476c766b55c3956c766b58c3966c766b00c361653af1946c766b56527ac461627e006c766b59c30300a3029f6c766b5d527ac46c766b5dc3642f006107000082dfe40d476c766b55c39555956c766b58c3966c766b00c36165f5f0946c766b56527ac4616239006c766b59c30380f4039f6c766b5e527ac46c766b5ec3641400616c766b57c36c766b56527ac461620f0061006c766b5b527ac4625c006c766b56c3009f6c766b5f527ac46c766b5fc3640e00006c766b5b527ac4623b006c766b56c36c766b57c3a06c766b60527ac46c766b60c36412006c766b57c36c766b5b527ac46212006c766b56c36c766b5b527ac46203006c766b5bc3616c756657c56b6c766b00527ac46c766b51527ac4616c766b00c3c001149c009c6c766b54527ac46c766b54c3640e00006c766b55527ac462d2006c766b51c36165e4016c766b52527ac46c766b52c3616502026c766b53527ac46c766b52c36c766b00c3617c6598026c766b56527ac46c766b56c3640e00006c766b55527ac46289006168164e656f2e53746f726167652e476574436f6e746578746c766b52c305746f74616c7e6c766b53c35193615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e746578746c766b52c36c766b00c37e51615272680f4e656f2e53746f726167652e50757461516c766b55527ac46203006c766b55c3616c756657c56b6c766b00527ac46c766b51527ac4616c766b00c3c001149c009c6c766b54527ac46c766b54c3640e00006c766b55527ac462d5006c766b51c36165d5006c766b52527ac46c766b52c36165f3006c766b53527ac46c766b52c36c766b00c3617c658901009c6c766b56527ac46c766b56c3640e00006c766b55527ac4628a006168164e656f2e53746f726167652e476574436f6e746578746c766b52c305746f74616c7e6c766b53c35194615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e746578746c766b52c36c766b00c37e617c68124e656f2e53746f726167652e44656c65746561516c766b55527ac46203006c766b55c3616c756652c56b6c766b00527ac4610977686974656c6973746c766b00c37e6c766b51527ac46203006c766b51c3616c756652c56b6c766b00527ac4616168164e656f2e53746f726167652e476574436f6e746578746c766b00c305746f74616c7e617c680f4e656f2e53746f726167652e4765746c766b51527ac46203006c766b51c3616c756652c56b6c766b00527ac4616168164e656f2e53746f726167652e476574436f6e746578746c766b00c305746f74616c7e617c680f4e656f2e53746f726167652e4765746c766b51527ac46203006c766b51c3616c756653c56b6c766b00527ac46c766b51527ac4616168164e656f2e53746f726167652e476574436f6e746578746c766b00c36c766b51c37e617c680f4e656f2e53746f726167652e476574c000a06c766b52527ac46203006c766b52c3616c7566', - 'hex', -); - -export const switcheoTokenContract = new Contract({ - script: switcheoTokenContractScript, - parameterList: [ContractParameterType.String, ContractParameterType.Array], - - returnType: ContractParameterType.ByteArray, - name: 'Switcheo Token', - codeVersion: '1.0.0', - author: 'Ivan Poon', - email: 'ivan.poon@switcheo.network', - description: 'NEP-5 Token for Switcheo Network', - contractProperties: ContractPropertyState.HasStoragePayable, -}); - -export const switcheoContractScript = Buffer.from( - '015ac56b6c766b00527ac46c766b51527ac4616168164e656f2e52756e74696d652e47657454726967676572009c6c766b52527ac46c766b52c364bb08616165011461009c6c766b5d527ac46c766b5dc3640e00006c766b5e527ac462a01161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b53527ac46c766b53c36165da336c766b54527ac46c766b53c36c766b54c3617c6564316c766b55527ac46c766b53c361656a326c766b56527ac46c766b56c3c001149c6c766b57527ac46c766b53c36168194e656f2e5472616e73616374696f6e2e476574496e707574736c766b58527ac46c766b53c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736c766b59527ac4006c766b5a527ac46c766b54c36101509c6c766b5f527ac46c766b5fc3643d03616c766b55c36168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b0111527ac46c766b0111c3640e00006c766b5e527ac46277106c766b55c36c766b56c3617c65c425009c6c766b0112527ac46c766b0112c3640e00006c766b5e527ac4624a10616c766b58c36c766b0113527ac4006c766b0114527ac4629a006c766b0113c36c766b0114c3c36c766b0115527ac46161652b366c766b0115c36168114e656f2e496e7075742e476574486173686c766b0115c36168124e656f2e496e7075742e476574496e646578616534367e617c680f4e656f2e53746f726167652e476574c000a06c766b0116527ac46c766b0116c3640e00006c766b5e527ac462aa0f616c766b0114c351936c766b0114527ac46c766b0114c36c766b0113c3c09f635bff6c766b57c3630c006c766b56c36225006120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c606c766b60527ac4616c766b59c36c766b0117527ac4006c766b0118527ac46205016c766b0117c36c766b0118c3c36c766b0119527ac4616c766b5ac36c766b0119c36168134e656f2e4f75747075742e47657456616c7565936c766b5a527ac46c766b0119c36168184e656f2e4f75747075742e4765745363726970744861736861682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c009c6c766b011a527ac46c766b011ac3640e00006c766b5e527ac462860e6c766b0119c36168154e656f2e4f75747075742e476574417373657449646c766b60c39c009c6c766b011b527ac46c766b011bc3640e00006c766b5e527ac462440e616c766b0118c351936c766b0118527ac46c766b0118c36c766b0117c3c09f63f0fe6c766b57c36c766b011c527ac46c766b011cc3646400616c766b58c3c051a06c766b011d527ac46c766b011dc3640e00006c766b5e527ac462e70d6c766b59c300c36168134e656f2e4f75747075742e47657456616c756551a06c766b011e527ac46c766b011ec3640e00006c766b5e527ac462ac0d616c766b59c3c06c766b58c3c09451a06c766b011f527ac46c766b011fc3640e00006c766b5e527ac462800d6162c6026c766b54c36101519c6c766b0120527ac46c766b0120c364a00261616c766b58c36c766b0124527ac4006c766b0125527ac4629f006c766b0124c36c766b0125c3c36c766b0126527ac461616542336c766b0126c36168114e656f2e496e7075742e476574486173686c766b0126c36168124e656f2e496e7075742e476574496e64657861654b337e617c680f4e656f2e53746f726167652e4765746c766b55c39c009c6c766b0127527ac46c766b0127c3640e00006c766b5e527ac462bc0c616c766b0125c351936c766b0125527ac46c766b0125c36c766b0124c3c09f6356ff6c766b57c3630c006c766b56c36225006120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c606c766b0121527ac46c766b57c3630b006c766b55c362330061682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686c766b0122527ac4616c766b59c36c766b0128527ac4006c766b0129527ac462dc006c766b0128c36c766b0129c3c36c766b012a527ac4616c766b5ac36c766b012ac36168134e656f2e4f75747075742e47657456616c7565936c766b5a527ac46c766b012ac36168154e656f2e4f75747075742e476574417373657449646c766b0121c39c009c6c766b012b527ac46c766b012bc3640e00006c766b5e527ac4627c0b6c766b012ac36168184e656f2e4f75747075742e476574536372697074486173686c766b0122c39c009c6c766b012c527ac46c766b012cc3640e00006c766b5e527ac462360b616c766b0129c351936c766b0129527ac46c766b0129c36c766b0128c3c09f6319ff6c766b57c36315006c766b55c36c766b56c3617c65fc0e620400516c766b0123527ac46c766b5ac36c766b0123c39e6c766b012d527ac46c766b012dc3640e00006c766b5e527ac462c90a61620f0061006c766b5e527ac462b90a006c766b5b527ac4616c766b53c361681d4e656f2e5472616e73616374696f6e2e4765745265666572656e6365736c766b012e527ac4006c766b012f527ac46251006c766b012ec36c766b012fc3c36c766b0130527ac46c766b5bc36c766b0130c36168134e656f2e4f75747075742e47657456616c7565936c766b5b527ac46c766b012fc351936c766b012f527ac46c766b012fc36c766b012ec3c09f63a4ff6c766b5bc36c766b5ac39c009c6c766b0131527ac46c766b0131c3640e00006c766b5e527ac462ef096c766b53c36168174e656f2e5472616e73616374696f6e2e476574547970656102d1009c009c6c766b0132527ac46c766b0132c3640e00006c766b5e527ac462ad096c766b53c36c766b5c527ac46c766b5cc36168234e656f2e496e766f636174696f6e5472616e73616374696f6e2e476574536372697074610b00c10877697468647261776101697e61682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173687e9c009c6c766b0133527ac46c766b0133c3640e00006c766b5e527ac4621509516c766b5e527ac4620a096168164e656f2e52756e74696d652e47657454726967676572609c6c766b0134527ac46c766b0134c364d308616c766b00c30a696e697469616c697a65876c766b0135527ac46c766b0135c364d700616114f4d0e0d0f9c885e82829375b9f5036372c3b90ed6168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b0136527ac46c766b0136c364470061244f776e6572207369676e617475726520766572696669636174696f6e206661696c65642161680f4e656f2e52756e74696d652e4c6f6761006c766b5e527ac46232086c766b51c3c0539c009c6c766b0137527ac46c766b0137c3640e00006c766b5e527ac4620c086c766b51c300c36c766b51c351c36c766b51c352c36152726527096c766b5e527ac462e7076c766b00c3086765745374617465876c766b0138527ac46c766b0138c36411006165070a6c766b5e527ac462b9076c766b00c30b6765744d616b6572466565876c766b0139527ac46c766b0139c364130061006165080a6c766b5e527ac46286076c766b00c30b67657454616b6572466565876c766b013a527ac46c766b013ac364130061006165730a6c766b5e527ac46253076c766b00c30f67657445786368616e676552617465876c766b013b527ac46c766b013bc36418006c766b51c300c361656b0b6c766b5e527ac46217076c766b00c3096765744f6666657273876c766b013c527ac46c766b013cc36420006c766b51c300c36c766b51c351c3617c65650b6c766b5e527ac462d9066c766b00c30a67657442616c616e6365876c766b013d527ac46c766b013dc36420006c766b51c300c36c766b51c351c3617c65580a6c766b5e527ac4629a066c766b00c3076465706f736974876c766b013e527ac46c766b013ec364af00616165ba0861519c009c6c766b013f527ac46c766b013fc3640e00006c766b5e527ac46255066c766b51c3c0539c009c6c766b0140527ac46c766b0140c3640e00006c766b5e527ac4622f066c766b51c300c36c766b51c351c36c766b51c352c361527265041c009c6c766b0141527ac46c766b0141c3640e00006c766b5e527ac462f6056c766b51c300c36c766b51c351c36c766b51c352c361527265762161516c766b5e527ac462cf056c766b00c3096d616b654f66666572876c766b0142527ac46c766b0142c364be00616165ed0761519c009c6c766b0144527ac46c766b0144c3640e00006c766b5e527ac46288056c766b51c3c0569c009c6c766b0145527ac46c766b0145c3640e00006c766b5e527ac46262056c766b51c300c36c766b51c351c36c766b51c352c36c766b51c353c36c766b51c354c36c766b51c352c36c766b51c355c3615679517958727551727555795279577275527275547953795672755372756518056c766b0143527ac46c766b0143c36165eb0a6c766b5e527ac462f3046c766b00c30966696c6c4f66666572876c766b0146527ac46c766b0146c3649400616165110761519c009c6c766b0147527ac46c766b0147c3640e00006c766b5e527ac462ac046c766b51c3c0559c009c6c766b0148527ac46c766b0148c3640e00006c766b5e527ac46286046c766b51c300c36c766b51c351c36c766b51c352c36c766b51c353c36c766b51c354c361547951795672755172755379527955727552727565660c6c766b5e527ac46241046c766b00c30b63616e63656c4f66666572876c766b0149527ac46c766b0149c3646a006161655d0661009c6c766b014a527ac46c766b014ac3640e00006c766b5e527ac462fa036c766b51c3c0529c009c6c766b014b527ac46c766b014bc3640e00006c766b5e527ac462d4036c766b51c300c36c766b51c351c3617c65fc116c766b5e527ac462b7036c766b00c3087769746864726177876c766b014c527ac46c766b014cc364130061616562146c766b5e527ac46288036114f4d0e0d0f9c885e82829375b9f5036372c3b90ed6168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b014d527ac46c766b014dc364460061234f776e6572207369676e617475726520766572696669636174696f6e206661696c656461680f4e656f2e52756e74696d652e4c6f6761006c766b5e527ac46201036c766b00c30d667265657a6554726164696e67876c766b014e527ac46c766b014ec3643000616165ec280573746174656152615272680f4e656f2e53746f726167652e50757461516c766b5e527ac462af026c766b00c30f756e667265657a6554726164696e67876c766b014f527ac46c766b014fc364300061616598280573746174656151615272680f4e656f2e53746f726167652e50757461516c766b5e527ac4625b026c766b00c30b7365744d616b6572466565876c766b0150527ac46c766b0150c3644700616c766b51c3c0529c009c6c766b0151527ac46c766b0151c3640e00006c766b5e527ac46211026c766b51c300c36c766b51c351c3617c6533116c766b5e527ac462f4016c766b00c30b73657454616b6572466565876c766b0152527ac46c766b0152c3644700616c766b51c3c0529c009c6c766b0153527ac46c766b0153c3640e00006c766b5e527ac462aa016c766b51c300c36c766b51c351c3617c6563116c766b5e527ac4628d016c766b00c30d73657446656541646472657373876c766b0154527ac46c766b0154c3643f00616c766b51c3c0519c009c6c766b0155527ac46c766b0155c3640e00006c766b5e527ac46241016c766b51c300c3616599116c766b5e527ac4622c016c766b00c30e616464546f57686974656c697374876c766b0156527ac46c766b0156c3649e00616c766b51c3c0519c009c6c766b0157527ac46c766b0157c3640e00006c766b5e527ac462df006165f026167374617465436f6e747261637457686974656c697374617c680f4e656f2e53746f726167652e47657461529c6c766b0158527ac46c766b0158c3640e00006c766b5e527ac46292006165a3266c766b51c300c361655d270131615272680f4e656f2e53746f726167652e50757461616c766b00c31064657374726f7957686974656c697374876c766b0159527ac46c766b0159c36437006161655326167374617465436f6e747261637457686974656c6973746152615272680f4e656f2e53746f726167652e507574616161516c766b5e527ac46203006c766b5ec3616c75665dc56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac46c766b56527ac461610298006c766b57527ac4610298006c766b58527ac46c766b51c3c001209c6c766b59527ac46c766b59c3640e00610299006c766b57527ac46c766b53c3c001209c6c766b5a527ac46c766b5ac3640e00610299006c766b58527ac45b6159c66c766b527a527ac46c766b5bc36c766b00c3011480007cc46c766b5bc36c766b51c3517cc46c766b5bc36c766b57c3527cc46c766b5bc36c766b52c3537cc46c766b5bc36c766b53c3547cc46c766b5bc36c766b58c3557cc46c766b5bc36c766b54c3567cc46c766b5bc36c766b55c3577cc46c766b5bc36c766b56c3587cc46c766b5bc36c766b5c527ac46203006c766b5cc3616c756658c56b6c766b00527ac46c766b51527ac46c766b52527ac4616165f40061009c009c6c766b53527ac46c766b53c3640e00006c766b54527ac462cc006c766b51c36100617c65ba0d009c6c766b55527ac46c766b55c3640e00006c766b54527ac462a4006c766b00c36100617c65290e009c6c766b56527ac46c766b56c3640e00006c766b54527ac4627c006c766b52c361659b0e009c6c766b57527ac46c766b57c3640e00006c766b54527ac462570061652d240573746174656151615272680f4e656f2e53746f726167652e5075746114436f6e747261637420696e697469616c697a656461680f4e656f2e52756e74696d652e4c6f6761516c766b54527ac46203006c766b54c3616c756651c56b616165cc23057374617465617c680f4e656f2e53746f726167652e4765746c766b00527ac46203006c766b00c3616c756654c56b6c766b00527ac46161659123086d616b65724665656c766b00c37e617c680f4e656f2e53746f726167652e4765746c766b51527ac46c766b51c3c0630e006c766b00c3c0009c620400516c766b52527ac46c766b52c36412006c766b51c36c766b53527ac4622d0061653123086d616b6572466565617c680f4e656f2e53746f726167652e4765746c766b53527ac46203006c766b53c3616c756654c56b6c766b00527ac4616165f3220874616b65724665656c766b00c37e617c680f4e656f2e53746f726167652e4765746c766b51527ac46c766b51c3c0630e006c766b00c3c0009c620400516c766b52527ac46c766b52c36412006c766b51c36c766b53527ac4622d00616593220874616b6572466565617c680f4e656f2e53746f726167652e4765746c766b53527ac46203006c766b53c3616c756653c56b6c766b00527ac46c766b51527ac46161654e226c766b00c36c766b51c3617c65c022617c680f4e656f2e53746f726167652e4765746c766b52527ac46203006c766b52c3616c756653c56b6c766b00527ac46c766b51527ac461616503226c766b00c36c766b51c3617c659522617c680f4e656f2e53746f726167652e4765746c766b52527ac46203006c766b52c3616c756653c56b6c766b00527ac4616165df216c766b51527ac46c766b51c36c766b00c3617c6504216c766b52527ac46203006c766b52c3616c75665cc56b6c766b00527ac46c766b51527ac4610132c56c766b52527ac4616576216c766b00c3617c68104e656f2e53746f726167652e46696e646c766b53527ac4623700616c766b53c36168124e656f2e4974657261746f722e56616c75656c766b51c39c6c766b55527ac46c766b55c3640600622c00616c766b53c36168114e656f2e4974657261746f722e4e6578746c766b56527ac46c766b56c363a7ff006c766b54527ac4627600616c766b53c36168124e656f2e4974657261746f722e56616c75656c766b57527ac46c766b57c36168174e656f2e52756e74696d652e446573657269616c697a656c766b58527ac46c766b58c36c766b59527ac46c766b52c36c766b54c36c766b59c3c46c766b54c351936c766b54527ac4616c766b53c36168114e656f2e4974657261746f722e4e657874640e006c766b54c301329f620400006c766b5a527ac46c766b5ac36359ff6c766b52c36c766b5b527ac46203006c766b5bc3616c75665ac56b6c766b00527ac4616c766b00c300c36168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b53527ac46c766b53c3640e00006c766b54527ac462de016c766b00c361653c206c766b51527ac46c766b00c36165531d6c766b52527ac46165bd1f6c766b51c36c766b52c37e617c680f4e656f2e53746f726167652e47657461009c009c6c766b55527ac46c766b55c3640e00006c766b54527ac4627d016c766b00c353c300a06411006c766b00c356c300a0009c620400516c766b56527ac46c766b56c3640e00006c766b54527ac46248016c766b00c351c36c766b00c354c39c6c766b57527ac46c766b57c3640e00006c766b54527ac4621f016c766b00c351c3c001149c6315006c766b00c351c3c00120907c907c9e6325006c766b00c354c3c001149c6313006c766b00c354c3c001209c009c62040000620400516c766b58527ac46c766b58c3640e00006c766b54527ac462c2006c766b00c300c36c766b00c351c36c766b00c353c361527265ff14009c6c766b59527ac46c766b59c3640e00006c766b54527ac4628b006c766b51c36c766b52c36c766b00c361527265051361616c766b00c300c36c766b52c36c766b00c351c36c766b00c353c36c766b00c354c36c766b00c356c361557951795772755172755479527956727552727553795379557275537275076372656174656457c168124e656f2e52756e74696d652e4e6f7469667961516c766b54527ac46203006c766b54c3616c75660122c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac4616c766b00c36168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b5f527ac46c766b5fc3640e00006c766b60527ac462b6056c766b51c36c766b52c3617c6550116c766b55527ac46c766b55c300c361009c6c766b0111527ac46c766b0111c3643a0061616c766b00c36c766b52c3617c066661696c656453c168124e656f2e52756e74696d652e4e6f7469667961516c766b60527ac4624e056c766b00c36c766b55c300c39c6c766b0112527ac46c766b0112c3640e00006c766b60527ac46225056c766b55c353c36c766b53c3956c766b55c356c3966c766b56527ac46c766b56c36c766b55c357c3a06c766b0113527ac46c766b0113c3642d00616c766b55c357c36c766b56527ac46c766b56c36c766b55c356c3956c766b55c353c3966a53527ac4616c766b56c300a16c766b0114527ac46c766b0114c3643a0061616c766b00c36c766b52c3617c066661696c656453c168124e656f2e52756e74696d652e4e6f7469667961516c766b60527ac46272046c766b53c300a0641f006c766b00c36c766b55c354c36c766b53c3615272658912009c620400006c766b0115527ac46c766b0115c3640e00006c766b60527ac4622f0461650e1c0a66656541646472657373617c680f4e656f2e53746f726167652e4765746c766b57527ac46c766b55c354c3616541f86c766b58527ac46c766b55c351c36165cdf86c766b59527ac46c766b53c36c766b58c3950340420f966c766b5a527ac46c766b56c36c766b59c3950340420f966c766b5b527ac4006c766b5c527ac46c766b55c351c36114dd2b538e2a0c1db1ae5061c15be14f916bd1e6789c6c766b0116527ac46c766b0116c3641600616c766b5bc352966c766b5c527ac4616203016c766b54c36c766b0117527ac46c766b0117c364ed0061145573696e67204e617469766520466565732e2e2e61680f4e656f2e52756e74696d652e4c6f676161652a1b6c766b0118527ac46c766b0118c36c766b55c351c3617c654b1a6c766b0119527ac46c766b0119c300c36c766b011a527ac46c766b0119c351c36c766b011b527ac46c766b011bc300a06c766b011c527ac46c766b011cc3642100616c766b5bc36c766b011ac3956c766b011bc35295966c766b5c527ac4616c766b00c36114dd2b538e2a0c1db1ae5061c15be14f916bd1e6786c766b5cc361527265c010009c6c766b011d527ac46c766b011dc3640d0061006c766b5c527ac461616c766b56c36c766b5cc300a0630b006c766b5bc362040000946c766b5d527ac46c766b00c36c766b55c351c36c766b5dc3615272659c0f61616c766b00c36c766b55c351c36c766b5dc36152720b7472616e7366657272656454c168124e656f2e52756e74696d652e4e6f74696679616c766b53c36c766b5ac3946c766b5e527ac46c766b55c300c36c766b55c354c36c766b5ec361527265380f61616c766b55c300c36c766b55c354c36c766b5ec36152720b7472616e7366657272656454c168124e656f2e52756e74696d652e4e6f74696679616c766b5ac300a06c766b011e527ac46c766b011ec3641b006c766b57c36c766b55c354c36c766b5ac361527265ce0e616c766b5cc3009c6c766b011f527ac46c766b011fc3641b006c766b57c36c766b55c351c36c766b5bc3615272659e0e616c766b55c351c36114dd2b538e2a0c1db1ae5061c15be14f916bd1e6789c6c766b0120527ac46c766b0120c3641d00616c766b55c354c36c766b53c36c766b56c361527265af1675616c766b55c354c36114dd2b538e2a0c1db1ae5061c15be14f916bd1e6789c6c766b0121527ac46c766b0121c3641d00616c766b55c351c36c766b56c36c766b53c361527265661675616c766b55c36c766b55c357c36c766b56c394577cc46c766b51c36c766b52c36c766b55c361527265e70c61616c766b00c36c766b52c36c766b53c36c766b55c351c36c766b55c353c36c766b55c354c36c766b55c356c3615679517958727551727555795279577275527275547953795672755372750666696c6c656458c168124e656f2e52756e74696d652e4e6f7469667961516c766b60527ac46203006c766b60c3616c756656c56b6c766b00527ac46c766b51527ac4616c766b00c36c766b51c3617c65820b6c766b52527ac46c766b52c300c361009c6c766b53527ac46c766b53c3640e00006c766b54527ac462a8006c766b52c300c36168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b55527ac46c766b55c3640e00006c766b54527ac4626a006c766b52c300c36c766b52c351c36c766b52c357c361527265be0c616c766b00c36c766b51c3617c65720c61616c766b52c300c36c766b51c3617c0963616e63656c6c656453c168124e656f2e52756e74696d652e4e6f7469667961516c766b54527ac46203006c766b54c3616c756655c56b6c766b00527ac46c766b51527ac4616c766b00c3028813a06c766b52527ac46c766b52c3640e00006c766b53527ac4625c006c766b00c3009f6c766b54527ac46c766b54c3640e00006c766b53527ac4623b0061658916086d616b65724665656c766b51c37e6c766b00c3615272680f4e656f2e53746f726167652e50757461516c766b53527ac46203006c766b53c3616c756655c56b6c766b00527ac46c766b51527ac4616c766b00c3028813a06c766b52527ac46c766b52c3640e00006c766b53527ac4625c006c766b00c3009f6c766b54527ac46c766b54c3640e00006c766b53527ac4623b006165f2150874616b65724665656c766b51c37e6c766b00c3615272680f4e656f2e53746f726167652e50757461516c766b53527ac46203006c766b53c3616c756653c56b6c766b00527ac4616c766b00c3c001149c009c6c766b51527ac46c766b51c3640e00006c766b52527ac4623700616581150a666565416464726573736c766b00c3615272680f4e656f2e53746f726167652e50757461516c766b52527ac46203006c766b52c3616c75660117c56b6161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b00527ac46c766b00c3616568116c766b51527ac46c766b51c361009c6c766b57527ac46c766b57c3640e00006c766b58527ac4621c046c766b00c36c766b51c3617c65d00e6c766b52527ac46c766b00c36165d60f6c766b53527ac46c766b53c3c001149c6c766b54527ac46c766b00c36168194e656f2e5472616e73616374696f6e2e476574496e707574736c766b55527ac46c766b00c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736c766b56527ac46c766b51c36101509c6c766b59527ac46c766b59c364ef01616c766b52c36c766b53c3617c65cef16c766b5a527ac46c766b53c361209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c6c766b5b527ac46c766b5bc3641d00616c766b5ac30400e1f505960400e1f505956c766b5a527ac4616c766b52c36c766b53c36c766b5ac3615272658a0b756c766b54c36c766b5c527ac46c766b5cc3644b00616165a8136c766b00c36168174e656f2e5472616e73616374696f6e2e47657448617368006165c6137e6c766b52c3615272680f4e656f2e53746f726167652e507574616162d40061006c766b5d527ac4006c766b5e527ac462a400616c766b5dc36c766b56c36c766b5ec3c36168134e656f2e4f75747075742e47657456616c7565936c766b5d527ac46c766b5dc36c766b5ac3a16c766b5f527ac46c766b5fc3644c0061616503136c766b00c36168174e656f2e5472616e73616374696f6e2e476574486173686c766b5ec361651d137e6c766b52c3615272680f4e656f2e53746f726167652e5075746161616c766b5ec351936c766b5e527ac46c766b5ec36c766b56c3c09f6c766b60527ac46c766b60c36347ff61616c766b52c36c766b53c36c766b5ac36152720b7769746864726177696e6754c168124e656f2e52756e74696d652e4e6f7469667961516c766b58527ac46291016c766b51c36101519c6c766b0111527ac46c766b0111c3646c0161616c766b55c36c766b0113527ac4006c766b0114527ac4627f006c766b0113c36c766b0114c3c36c766b0115527ac461616504126c766b0115c36168114e656f2e496e7075742e476574486173686c766b0115c36168124e656f2e496e7075742e476574496e64657861650d127e617c68124e656f2e53746f726167652e44656c65746561616c766b0114c351936c766b0114527ac46c766b0114c36c766b0113c3c09f6376ff6c766b52c36c766b53c3617c656cef6c766b0112527ac46c766b54c3641e006c766b52c36c766b53c36c766b0112c3615272652a0a009c620400006c766b0116527ac46c766b0116c3640e00006c766b58527ac4627800616536116c766b52c36c766b53c3617c65c811617c68124e656f2e53746f726167652e44656c65746561616c766b52c36c766b53c36c766b0112c36152720977697468647261776e54c168124e656f2e52756e74696d652e4e6f7469667961516c766b58527ac4620e00006c766b58527ac46203006c766b58c3616c756657c56b6c766b00527ac46c766b51527ac4616c766b00c36c766b51c3617c653aee6c766b52527ac46c766b52c300a16c766b54527ac46c766b54c3640e00006c766b55527ac46245006c766b00c36c766b51c3617c654eee6c766b53527ac46c766b53c300a06c766b56527ac46c766b56c3640e00006c766b55527ac4620e00516c766b55527ac46203006c766b55c3616c75660114c56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b51c3c001209c6c766b53527ac46c766b53c3643e026161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b54527ac46c766b54c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736c766b55527ac4006c766b56527ac4616c766b55c36c766b58527ac4006c766b59527ac462dd006c766b58c36c766b59c3c36c766b5a527ac4616c766b5ac36168154e656f2e4f75747075742e476574417373657449646c766b51c3907c907c9e6357006c766b5ac36168184e656f2e4f75747075742e4765745363726970744861736861682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c620400006c766b5b527ac46c766b5bc3642d00616c766b56c36c766b5ac36168134e656f2e4f75747075742e47657456616c7565936c766b56527ac461616c766b59c351936c766b59527ac46c766b59c36c766b58c3c09f631aff6c766b56c36c766b52c39e6c766b5c527ac46c766b5cc3640f0061006c766b5d527ac4629b016165660e6c766b54c36168174e656f2e5472616e73616374696f6e2e476574486173686c766b51c37e617c680f4e656f2e53746f726167652e476574c000a06c766b57527ac46c766b57c36c766b5e527ac46c766b5ec3640e00006c766b5d527ac46236016165010e6c766b54c36168174e656f2e5472616e73616374696f6e2e476574486173686c766b51c37e51615272680f4e656f2e53746f726167652e50757461516c766b5d527ac462ec006c766b51c3c001149c6c766b5f527ac46c766b5fc364c900616c766b51c36165d300009c6c766b0113527ac46c766b0113c3640e00006c766b5d527ac462ac0053c576006c766b00c3c4765161682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e6753637269707448617368c476526c766b52c3c46c766b60527ac46c766b51c36c766b0111527ac46c766b0111c3087472616e736665726c766b60c3617c527a6700000000000000000000000000000000000000006c766b0112527ac46c766b0112c36c766b5d527ac4620e00006c766b5d527ac46203006c766b5dc3616c756653c56b6c766b00527ac4616165ba0c167374617465436f6e747261637457686974656c697374617c680f4e656f2e53746f726167652e47657461529c6c766b51527ac46c766b51c3640e00516c766b52527ac462300061656f0c6c766b00c361652b0d617c680f4e656f2e53746f726167652e476574c000a06c766b52527ac46203006c766b52c3616c756656c56b6c766b00527ac46c766b51527ac4616165270c6c766b00c36c766b51c37e617c680f4e656f2e53746f726167652e4765746c766b52527ac46c766b52c3c0009c6c766b53527ac46c766b53c3641e00546159c66c766b527a527ac46c766b54c36c766b55527ac462530013446573657269616c697a696e67206f6666657261680f4e656f2e52756e74696d652e4c6f67616c766b52c36168174e656f2e52756e74696d652e446573657269616c697a656c766b55527ac46203006c766b55c3616c756655c56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b52c357c3009c6c766b53527ac46c766b53c3641800616c766b00c36c766b51c3617c6580006161627700611153657269616c697a696e67206f6666657261680f4e656f2e52756e74696d652e4c6f67616c766b52c36168154e656f2e52756e74696d652e53657269616c697a656c766b54527ac46165e30a6c766b00c36c766b51c37e6c766b54c3615272680f4e656f2e53746f726167652e5075746161616c756652c56b6c766b00527ac46c766b51527ac4616165a30a6c766b00c36c766b51c37e617c68124e656f2e53746f726167652e44656c65746561616c756656c56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b52c3519f6c766b55527ac46c766b55c3643d006122416d6f756e7420746f207472616e73666572206973206c657373207468616e20312161680f4e656f2e52756e74696d652e4c6f67616265006c766b00c36c766b51c3617c65860a6c766b53527ac46165fa096c766b53c3617c680f4e656f2e53746f726167652e4765746c766b54527ac46165d7096c766b53c36c766b54c36c766b52c393615272680f4e656f2e53746f726167652e50757461616c75665ac56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b52c3519f6c766b56527ac46c766b56c36443006120416d6f756e7420746f20726564756365206973206c657373207468616e20312161680f4e656f2e52756e74696d652e4c6f6761006c766b57527ac462fe006c766b00c36c766b51c3617c65b1096c766b53527ac4616525096c766b53c3617c680f4e656f2e53746f726167652e4765746c766b54527ac46c766b54c36c766b52c3946c766b55527ac46c766b55c3009f6c766b58527ac46c766b58c364360061134e6f7420656e6f7567682062616c616e63652161680f4e656f2e52756e74696d652e4c6f6761006c766b57527ac4626a006c766b55c300a06c766b59527ac46c766b59c3642900616591086c766b53c36c766b55c3615272680f4e656f2e53746f726167652e5075746162230061656b086c766b53c3617c68124e656f2e53746f726167652e44656c65746561516c766b57527ac46203006c766b57c3616c756656c56b6c766b00527ac46c766b51527ac46c766b52527ac46114436865636b696e67204c617374204d61726b2e2e61680f4e656f2e52756e74696d652e4c6f67616c766b00c36c766b51c3617c6532f7009c6c766b53527ac46c766b53c3640e00006c766b54527ac4629400144d61726b696e67205769746864726177616c2e2e61680f4e656f2e52756e74696d652e4c6f67616c766b00c36c766b51c36c766b52c361527265e7fd009c6c766b55527ac46c766b55c3640e00006c766b54527ac4623b00616572076c766b00c36c766b51c3617c6504086c766b52c3615272680f4e656f2e53746f726167652e50757461516c766b54527ac46203006c766b54c3616c756659c56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b51c361654dfa009c6c766b56527ac46c766b56c3640e00006c766b57527ac462ef0053c5760061682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e6753637269707448617368c476516c766b00c3c476526c766b52c3c46c766b53527ac46c766b51c36c766b54527ac46c766b54c3087472616e736665726c766b53c3617c527a6700000000000000000000000000000000000000006c766b55527ac46c766b55c3009c6c766b58527ac46c766b58c364430061204661696c656420746f207472616e73666572204e45502d3520746f6b656e732161680f4e656f2e52756e74696d652e4c6f6761006c766b57527ac4620e00516c766b57527ac46203006c766b57c3616c756659c56b6c766b00527ac46c766b51527ac4616c766b51c36101509c630b006102a4006206006101206c766b52527ac46c766b00c361681d4e656f2e5472616e73616374696f6e2e476574417474726962757465736c766b53527ac4616c766b53c36c766b54527ac4006c766b55527ac46282006c766b54c36c766b55c3c36c766b56527ac4616c766b56c36168164e656f2e4174747269627574652e47657455736167656c766b52c39c6c766b57527ac46c766b57c3642d006c766b56c36168154e656f2e4174747269627574652e476574446174610114806c766b58527ac4622d00616c766b55c351936c766b55527ac46c766b55c36c766b54c3c09f6375ff61006c766b58527ac46203006c766b58c3616c756658c56b6c766b00527ac4616c766b00c361681d4e656f2e5472616e73616374696f6e2e476574417474726962757465736c766b51527ac4616c766b51c36c766b52527ac4006c766b53527ac462da006c766b52c36c766b53c3c36c766b54527ac4616c766b54c36168164e656f2e4174747269627574652e47657455736167656102a2009c6c766b55527ac46c766b55c3642d006c766b54c36168154e656f2e4174747269627574652e476574446174610114806c766b56527ac46286006c766b54c36168164e656f2e4174747269627574652e47657455736167656102a3009c6c766b57527ac46c766b57c3642a006c766b54c36168154e656f2e4174747269627574652e476574446174616c766b56527ac4622d00616c766b53c351936c766b53527ac46c766b53c36c766b52c3c09f631dff61006c766b56527ac46203006c766b56c3616c756657c56b6c766b00527ac4616c766b00c361681d4e656f2e5472616e73616374696f6e2e476574417474726962757465736c766b51527ac4616c766b51c36c766b52527ac4006c766b53527ac46280006c766b52c36c766b53c3c36c766b54527ac4616c766b54c36168164e656f2e4174747269627574652e47657455736167656102a1009c6c766b55527ac46c766b55c3642c006c766b54c36168154e656f2e4174747269627574652e4765744461746151806c766b56527ac4622d00616c766b53c351936c766b53527ac46c766b53c36c766b52c3c09f6377ff61006c766b56527ac46203006c766b56c3616c756653c56b6c766b00527ac46c766b51527ac4616c766b00c353c36c766b51c3956c766b00c356c3966c766b52527ac46203006c766b52c3616c756653c56b6c766b00527ac4616c766b00c300c36c766b00c36165c1027e6c766b00c353c37e6c766b00c356c37e6c766b00c358c37e6c766b51527ac46c766b51c3aa6c766b52527ac46203006c766b52c3616c75665ac56b6c766b00527ac46c766b51527ac46c766b52527ac461616527026c766b53527ac46c766b53c36c766b00c3617c65dc026c766b54527ac46165e6016c766b54c3617c680f4e656f2e53746f726167652e4765746c766b55527ac46c766b55c3c0009c6c766b57527ac46c766b57c3643a0061586152c66c766b527a527ac46c766b58c36c766b51c3007cc46c766b58c36c766b52c3517cc46c766b58c36c766b56527ac461625500616c766b55c36168174e656f2e52756e74696d652e446573657269616c697a656c766b56527ac46c766b56c36c766b56c300c36c766b51c393007cc46c766b56c36c766b56c351c36c766b52c393517cc461616523016c766b54c36c766b56c36168154e656f2e52756e74696d652e53657269616c697a65615272680f4e656f2e53746f726167652e507574611c446f6e652073657269616c697a696e6720616e642073746f72696e6761680f4e656f2e52756e74696d652e4c6f6761516c766b59527ac46203006c766b59c3616c756656c56b6c766b00527ac46c766b51527ac461616592006c766b00c36c766b51c3617c656e01617c680f4e656f2e53746f726167652e4765746c766b52527ac46c766b52c3c0009c6c766b53527ac46c766b53c3641f0061546152c66c766b527a527ac46c766b54c36c766b55527ac4622d00616c766b52c36168174e656f2e52756e74696d652e446573657269616c697a656c766b55527ac46203006c766b55c3616c756600c56b6168164e656f2e53746f726167652e476574436f6e74657874616c756600c56b6168134e656f2e52756e74696d652e47657454696d650370430196616c756651c56b6c766b00527ac46c766b00c300a063080061006208006c766b00c3616c756651c56b6c766b00527ac46c766b00c351c36c766b00c354c37e616c756652c56b6c766b00527ac46c766b51527ac46c766b00c36c766b51c37e616c756652c56b6c766b00527ac46c766b51527ac46c766b00c36c766b51c37e6101517e616c756651c56b6c766b00527ac411636f6e747261637457686974656c6973746c766b00c37e616c756652c56b6c766b00527ac46c766b51527ac40b7472616465566f6c756d656c766b00c37e6c766b51c37e616c7566', - 'hex', -); - -export const switcheoContract = new Contract({ - script: switcheoContractScript, - parameterList: [ContractParameterType.String, ContractParameterType.Array], - - returnType: ContractParameterType.ByteArray, - name: 'Switcheo Exchange', - codeVersion: '1.0.0', - author: 'Switcheo', - email: 'engineering@switcheo.network', - description: 'Switcheo Exchange', - contractProperties: ContractPropertyState.HasStorageDynamicInvokePayable, -}); - -export const switcheoV3ContractScript = Buffer.from( - '029600c56b6c766b00527ac46c766b51527ac4616168164e656f2e52756e74696d652e47657454726967676572009c6a52527ac46a52c3648d096161e00100482061009c6a5b527ac46a5bc3640c00006a5c527ac4621b1c61682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726a53527ac46a53c36168194e656f2e5472616e73616374696f6e2e476574496e707574736a54527ac46a53c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736a55527ac46a53c361681d4e656f2e5472616e73616374696f6e2e4765745265666572656e6365736a56527ac46a53c36168174e656f2e5472616e73616374696f6e2e47657454797065610280009c6a5d527ac46a5dc364f100616a54c361e001010b5d009c6a5e527ac46a5ec3640c00006a5c527ac4622c1b6a56c36a55c36120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60615272e00103815d009c6a5f527ac46a5fc3640c00006a5c527ac462e61a6a56c36a55c361209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5615272e001033b5d009c6a60527ac46a60c3640c00006a5c527ac462a01a61e0010032206168184e656f2e52756e74696d652e436865636b5769746e657373009c6a0111527ac46a0111c3640c00006a5c527ac462671a516a5c527ac4625e1a6a53c36168174e656f2e5472616e73616374696f6e2e4765745479706561529c6a0112527ac46a0112c364010161616a56c36a0113527ac4006a0114527ac46286006a0113c36a0114c3c36a0115527ac4616a0115c36168184e656f2e4f75747075742e4765745363726970744861736861682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c6a0116527ac46a0116c3640c00006a5c527ac462a619616a0114c351936a0114527ac46a0114c36a0113c3c09f6373ff6a55c3c051907c907c9e632f006a55c300c36168184e656f2e4f75747075742e4765745363726970744861736861e00100ba1e9c009c620400516a0117527ac46a0117c3640c00006a5c527ac4623c19516a5c527ac46233196a53c36168174e656f2e5472616e73616374696f6e2e476574547970656102d1009c009c6a0118527ac46a0118c3640c00006a5c527ac462f9186a53c361e00101cc586a57527ac46a53c361e001011f566a58527ac46a53c361e00101d4566a59527ac46a59c361e00101a0606a5a527ac46a53c36168234e656f2e496e766f636174696f6e5472616e73616374696f6e2e476574536372697074610b00c10877697468647261776101697e61682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173687e9c009c6a0119527ac46a0119c3640c00006a5c527ac4623d186a57c36101509c6a011a527ac46a011ac364e602616a55c300c36168134e656f2e4f75747075742e47657456616c75656a011b527ac46a011bc3640c006a55c3c052a0620400516a5ac3856a011f527ac46a011fc3640c00006a5c527ac462dc176a54c361e001019c59009c6a0120527ac46a0120c3640c00006a5c527ac462bb17006a011c527ac4616a56c36a0121527ac4006a0122527ac462dc006a0121c36a0122c3c36a0123527ac4616a0123c36168184e656f2e4f75747075742e4765745363726970744861736861682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c6a0124527ac46a0124c3646200616a0123c36168154e656f2e4f75747075742e476574417373657449646a59c39c009c6a0125527ac46a0125c3640c00006a5c527ac462fa166a011cc36a0123c36168134e656f2e4f75747075742e47657456616c7565936a011c527ac461616a0122c351936a0122527ac46a0122c36a0121c3c09f631dff6a55c361682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686a59c3615272e001031a576a011d527ac46a011cc36a011dc39c009c6a0126527ac46a0126c3640c00006a5c527ac46255166a56c36a56c3c05194c36168134e656f2e4f75747075742e47657456616c75656a011e527ac46a011cc36a011ec3946a011bc3a06a0127527ac46a0127c3640c00006a5c527ac4620b166a58c36a59c36a011bc3615272e001033e4a009c6a0128527ac46a0128c3640c00006a5c527ac462e11561e00100b21b6168184e656f2e52756e74696d652e436865636b5769746e657373009c6a0129527ac46a0129c3646500616a58c36168184e656f2e52756e74696d652e436865636b5769746e657373009c6a012a527ac46a012ac3640c00006a5c527ac4627a156a58c36a59c36a011bc3615272e00103a258009c6a012b527ac46a012bc3640c00006a5c527ac462501561516a5c527ac46246156a57c36101519c6a012c527ac46a012cc3647d02616a5ac36a012d527ac46a012dc364fc0061616a56c36a012e527ac4006a012f527ac46286006a012ec36a012fc3c36a0130527ac4616a0130c36168184e656f2e4f75747075742e4765745363726970744861736861682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c6a0131527ac46a0131c3640c00006a5c527ac4629614616a012fc351936a012f527ac46a012fc36a012ec3c09f6373ff6a59c361e00101fb58009c6a0132527ac46a0132c3640c00006a5c527ac4625b146a58c36a59c36a53c361e001016153615272e001038948009c6a0133527ac46a0133c3640c00006a5c527ac4622c1461626a01616a54c300c36a0134527ac46a0134c36168124e656f2e496e7075742e476574496e64657863430061e0010079556a0134c36168114e656f2e496e7075742e4765744861736861e001015c5d617c680f4e656f2e53746f726167652e4765746a58c39c009c620400516a0136527ac46a0136c3640c00006a5c527ac462a913516a0137527ac4627b00616a56c36a0137c3c36168184e656f2e4f75747075742e4765745363726970744861736861682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c6a0138527ac46a0138c3640c00006a5c527ac4623413616a0137c351936a0137527ac46a0137c36a56c3c09f6a0139527ac46a0139c36375ff6a55c36a58c36a59c3615272e001039e536a0135527ac46a0135c36a56c300c36168134e656f2e4f75747075742e47657456616c75659c009c6a013a527ac46a013ac3640c00006a5c527ac462c21261516a5c527ac462b812006a5c527ac462af126168164e656f2e52756e74696d652e47657454726967676572609c6a013b527ac46a013bc3641112616a00c30a696e697469616c697a65876a013c527ac46a013cc364c300616114c202200f681f5d3b933c956cfedec18ee635bf5c6168184e656f2e52756e74696d652e436865636b5769746e657373009c6a013d527ac46a013dc364450061244f776e6572207369676e617475726520766572696669636174696f6e206661696c65642161680f4e656f2e52756e74696d652e4c6f6761006a5c527ac462e7116a51c3c0539c009c6a013e527ac46a013ec3640c00006a5c527ac462c9116a51c300c36a51c351c36a51c352c3615272e00103f1196a5c527ac462aa116a00c3086765745374617465876a013f527ac46a013fc364110061e00100a0156a5c527ac46282116a00c3086765744f66666572876a0140527ac46a0140c36416006a51c300c361e001017b176a5c527ac46255116a00c30a67657442616c616e6365876a0141527ac46a0141c3641c006a51c300c36a51c351c3617ce00102de156a5c527ac46220116a00c310676574497357686974656c6973746564876a0142527ac46a0142c36416006a51c300c361e001017b556a5c527ac462eb106a00c30d67657446656541646472657373876a0143527ac46a0143c364110061e0010027166a5c527ac462be106a00c315676574436f6f7264696e61746f7241646472657373876a0144527ac46a0144c364110061e0010029166a5c527ac46289106a00c31d6765745769746864726177436f6f7264696e61746f7241646472657373876a0145527ac46a0145c364110061e001002b166a5c527ac4624c106a00c310676574416e6e6f756e636544656c6179876a0146527ac46a0146c364110061e001004b156a5c527ac4621c106a00c314676574416e6e6f756e6365645769746864726177876a0147527ac46a0147c3641c006a51c300c36a51c351c3617ce0010237176a5c527ac462dd0f6a00c312676574416e6e6f756e63656443616e63656c876a0148527ac46a0148c36416006a51c300c361e001018f176a5c527ac462a60f6a00c3076465706f736974876a0149527ac46a0149c3644100616a51c3c0539c009c6a014a527ac46a014ac3640c00006a5c527ac4626e0f6a51c300c36a51c351c36a51c352c3615272e00103353b6a5c527ac4624f0f6a00c30b6465706f73697446726f6d876a014b527ac46a014bc3644100616a51c3c0539c009c6a014c527ac46a014cc3640c00006a5c527ac462130f6a51c300c36a51c351c36a51c352c3615272e00103a23b6a5c527ac462f40e6a00c3166465706f73697446726f6d4e6f6e5374616e64617264876a014d527ac46a014dc3644100616a51c3c0539c009c6a014e527ac46a014ec3640c00006a5c527ac462ad0e6a51c300c36a51c351c36a51c352c3615272e00103ff3b6a5c527ac4628e0e6a00c30f6f6e546f6b656e5472616e73666572876a014f527ac46a014fc3643001616a51c3c0539c009c6a0150527ac46a0150c3640c00006a5c527ac4624e0e61682b53797374656d2e457865637574696f6e456e67696e652e47657443616c6c696e675363726970744861736861143fbc607c12c28736343224a4b4d8f513a5c27ca89c009c6a0151527ac46a0151c3640c00006a5c527ac462f10d61682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686a51c351c39c009c6a0152527ac46a0152c3640c00006a5c527ac462a30d6a51c300c361143fbc607c12c28736343224a4b4d8f513a5c27ca86a51c352c3615272e00103a73b009c6a0153527ac46a0153c36426001f52656365697665644e455035206f6e5472616e73666572206661696c6564216175f0516a5c527ac462400d6a00c3096d616b654f66666572876a0154527ac46a0154c364b2006161e0010034116101019c009c6a0156527ac46a0156c3640c00006a5c527ac462020d6a51c3c0589c009c6a0157527ac46a0157c3640c00006a5c527ac462e40c6a51c300c36a51c351c36a51c352c36a51c353c36a51c354c36a51c355c36a51c356c36a51c357c36157795179597275517275567952795872755272755579537957727553727554795479567275547275e00108f80f6a0155527ac46a0155c361e00101ba1e6a5c527ac462760c6a00c30966696c6c4f66666572876a0158527ac46a0158c364a2006161e001006a106101019c009c6a0159527ac46a0159c3640c00006a5c527ac462380c6a51c3c0589c009c6a015a527ac46a015ac3640c00006a5c527ac4621a0c6a51c300c36a51c351c36a51c352c36a51c353c36a51c354c36a51c355c36a51c356c36a51c357c36157795179597275517275567952795872755272755579537957727553727554795479567275547275e0010839206a5c527ac462bc0b6a00c30b63616e63656c4f66666572876a015b527ac46a015bc36454006161e00100ae0f61009c6a015c527ac46a015cc3640c00006a5c527ac4627f0b6a51c3c0519c009c6a015d527ac46a015dc3640c00006a5c527ac462610b6a51c300c361e00101da276a5c527ac4624e0b6a00c3087769746864726177876a015e527ac46a015ec36431006161e00100430f61009c6a015f527ac46a015fc3640c00006a5c527ac462140b61e00100fe406a5c527ac462060b6a00c30e616e6e6f756e636543616e63656c876a0160527ac46a0160c36454006161e00100f50e61009c6a0161527ac46a0161c3640c00006a5c527ac462c60a6a51c3c0519c009c6a0162527ac46a0162c3640c00006a5c527ac462a80a6a51c300c361e001011a296a5c527ac462950a6a00c310616e6e6f756e63655769746864726177876a0163527ac46a0163c36460006161e00100820e61009c6a0164527ac46a0164c3640c00006a5c527ac462530a6a51c3c0539c009c6a0165527ac46a0165c3640c00006a5c527ac462350a6a51c300c36a51c351c36a51c352c3615272e00103d23e6a5c527ac462160a6a00c30a6275726e546f6b656e73876a0166527ac46a0166c3647a006161e00100090e6101019c009c6a0167527ac46a0167c3640c00006a5c527ac462d7096a51c3c0549c009c6a0168527ac46a0168c3640c00006a5c527ac462b9096a51c300c36a51c351c36a51c352c36a51c353c3615379517955727551727552795279547275527275e00104ef286a5c527ac46283096a00c30f737765657044757374546f6b656e73876a0169527ac46a0169c3648e006161e00100710d6101019c009c6a016a527ac46a016ac3640c00006a5c527ac4623f096a51c3c0569c009c6a016b527ac46a016bc3640c00006a5c527ac46221096a51c300c36a51c351c36a51c352c36a51c353c36a51c354c36a51c355c361557951795772755172755479527956727552727553795379557275537275e0010624296a5c527ac462d7086a00c31063726561746541746f6d696353776170876a016c527ac46a016cc364a7006161e00100c40c6101019c009c6a016d527ac46a016dc3640c00006a5c527ac46292086a51c3c0599c009c6a016e527ac46a016ec3640c00006a5c527ac46274086a51c300c36a51c351c36a51c352c36a51c353c36a51c354c36a51c355c36a51c356c36a51c357c36a51c358c361587951795a7275517275577952795972755272755679537958727553727555795479577275547275e00109f12a6a5c527ac46211086a00c3116578656375746541746f6d696353776170876a016f527ac46a016fc3645a006161e00100fd0b61009c6a0170527ac46a0170c3640c00006a5c527ac462ce076a51c3c0529c009c6a0171527ac46a0171c3640c00006a5c527ac462b0076a51c300c36a51c351c3617ce00102982d6a5c527ac46297076a00c31063616e63656c41746f6d696353776170876a0172527ac46a0172c36460006161e00100840b61009c6a0173527ac46a0173c3640c00006a5c527ac46255076a51c3c0539c009c6a0174527ac46a0174c3640c00006a5c527ac46237076a51c300c36a51c351c36a51c352c3615272e00103192f6a5c527ac46218076a00c30e617070726f76655370656e646572876a0175527ac46a0175c3645d006161e00100070b6101019c009c6a0176527ac46a0176c3640c00006a5c527ac462d5066a51c3c0529c009c6a0177527ac46a0177c3640c00006a5c527ac462b7066a51c300c36a51c351c3617ce0010296156a5c527ac4629e066a00c30f72657363696e64417070726f76616c876a0178527ac46a0178c3645a006161e001008c0a61009c6a0179527ac46a0179c3640c00006a5c527ac4625d066a51c3c0529c009c6a017a527ac46a017ac3640c00006a5c527ac4623f066a51c300c36a51c351c3617ce001022a166a5c527ac46226066a00c3097370656e6446726f6d876a017b527ac46a017bc364ba006161e001001a0a61009c6a017c527ac46a017cc3640c00006a5c527ac462eb056a51c3c0569c009c6a017d527ac46a017dc3640c00006a5c527ac462cd056a51c300c36a51c351c36a51c352c36a51c353c36a51c354c36a51c355c361682b53797374656d2e457865637574696f6e456e67696e652e47657443616c6c696e675363726970744861736861567951795872755172755579527957727552727554795379567275537275e0010763166a5c527ac46255056114c202200f681f5d3b933c956cfedec18ee635bf5c6168184e656f2e52756e74696d652e436865636b5769746e657373009c6a017e527ac46a017ec364440061234f776e6572207369676e617475726520766572696669636174696f6e206661696c656461680f4e656f2e52756e74696d652e4c6f6761006a5c527ac462d4046a00c30d667265657a6554726164696e67876a017f527ac46a017fc36493006161e00100460a6168184e656f2e52756e74696d652e436865636b5769746e657373009c6a028000527ac46a028000c3640c00006a5c527ac462790461e00100f245057374617465610102615272680f4e656f2e53746f726167652e5075746161610d74726164696e6746726f7a656e51c168124e656f2e52756e74696d652e4e6f7469667961516a5c527ac46225046a00c30f756e667265657a6554726164696e67876a028100527ac46a028100c36494006161e0010093096168184e656f2e52756e74696d652e436865636b5769746e657373009c6a028200527ac46a028200c3640c00006a5c527ac462c60361e001003f45057374617465610101615272680f4e656f2e53746f726167652e5075746161610e74726164696e67526573756d656451c168124e656f2e52756e74696d652e4e6f7469667961516a5c527ac46271036a00c310736574416e6e6f756e636544656c6179876a028300527ac46a028300c3643700616a51c3c0519c009c6a028400527ac46a028400c3640c00006a5c527ac4622c036a51c300c361e001019b0e6a5c527ac46219036a00c315736574436f6f7264696e61746f7241646472657373876a028500527ac46a028500c3643700616a51c3c0519c009c6a028600527ac46a028600c3640c00006a5c527ac462cf026a51c300c361e00101020d6a5c527ac462bc026a00c31d7365745769746864726177436f6f7264696e61746f7241646472657373876a028700527ac46a028700c3643700616a51c3c0519c009c6a028800527ac46a028800c3640c00006a5c527ac4626a026a51c300c361e00101330d6a5c527ac46257026a00c30d73657446656541646472657373876a028900527ac46a028900c3643700616a51c3c0519c009c6a028a00527ac46a028a00c3640c00006a5c527ac46215026a51c300c361e00101bb0b6a5c527ac46202026a00c30e616464546f57686974656c697374876a028b00527ac46a028b00c3643700616a51c3c0519c009c6a028c00527ac46a028c00c3640c00006a5c527ac462bf016a51c300c361e00101cb0d6a5c527ac462ac016a00c31372656d6f766546726f6d57686974656c697374876a028d00527ac46a028d00c3643700616a51c3c0519c009c6a028e00527ac46a028e00c3640c00006a5c527ac46264016a51c300c361e00101200e6a5c527ac46251016a00c30d7365616c57686974656c697374876a028f00527ac46a028f00c36412006161e00100a30e6a5c527ac46221016a00c30a6164645370656e646572876a029000527ac46a029000c3643700616a51c3c0519c009c6a029100527ac46a029100c3640c00006a5c527ac462e2006a51c300c361e00101b20e6a5c527ac462cf006a00c30d72656d6f76655370656e646572876a029200527ac46a029200c3643700616a51c3c0519c009c6a029300527ac46a029300c3640c00006a5c527ac4628d006a51c300c361e00101e70e6a5c527ac4627a00616168164e656f2e52756e74696d652e47657454726967676572519c6a029400527ac46a029400c3640c00516a5c527ac46246006168164e656f2e52756e74696d652e4765745472696767657201119c6a029500527ac46a029500c36412006161e001002e2f6a5c527ac4620c00006a5c527ac46203006a5cc3616c756656c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac4616a00c36a51c36a52c36a53c36a54c3615479517956727551727553795279557275527275e0010573006a55527ac46203006a55c3616c756656c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac4616a00c36a51c36a52c3006a53c3946a54c3615479517956727551727553795279557275527275e0010512006a55527ac46203006a55c3616c756659c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac461566153c66a527a527ac46a56c36a52c3007cc46a56c36a53c3517cc46a56c36a54c3527cc46a56c36a55527ac46a00c36a51c3cb6a57527ac46a57c3641400616a00c36a51c3c36a55c3c86161621500616a00c36a51c351c576006a55c3c4c461616a00c36a58527ac46203006a58c3616c756651c56b61c76a00527ac46203006a00c3616c756660c56b6c766b00527ac461616a00c3cc6a51527ac4006a52527ac462ca016a51c36a52c3c36a53527ac4616a53c361e00101be476a54527ac461e00100cd3f6a54c3617c680f4e656f2e53746f726167652e4765746a55527ac46a55c3c051a06a58527ac46a58c3642a00616a55c36168174e656f2e52756e74696d652e446573657269616c697a656a56527ac461620b0061c76a56527ac4616a00c36a53c3c36a57527ac4616a57c36a59527ac4006a5a527ac462e1006a59c36a5ac3c36a5b527ac4616a56c36a5bc300c3cb009c6a5c527ac46a5cc3640e006a56c36a5bc300c300c4616a56c36a5d527ac46a5bc300c36a5e527ac46a5dc36a5ec36a5dc36a5ec3c36a5bc351c393c4616a56c36a5bc300c3c3009f6a5f527ac46a5fc36420001942616c616e63652077656e7420746f206e65676174697665216175f0616a53c36a5bc300c36a5bc351c36a5bc352c36153795179557275517275527952795472755272750b7472616e7366657272656455c168124e656f2e52756e74696d652e4e6f7469667961616a5ac351936a5a527ac46a5ac36a59c3c09f631aff61e00100653e6a54c36a56c36168154e656f2e52756e74696d652e53657269616c697a65615272680f4e656f2e53746f726167652e50757461616a52c351936a52527ac46a52c36a51c3c09f6331fe616c75665ac56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac46c766b56527ac46c766b57527ac461586159c66a527a527ac46a58c36a00c3011480007cc46a58c36a51c3517cc46a58c36a52c3527cc46a58c36a53c3537cc46a58c36a54c3547cc46a58c36a52c3557cc46a58c36a55c3567cc46a58c36a56c3577cc46a58c36a57c3587cc46a58c36a59527ac46203006a59c3616c756651c56b6161e00100623d057374617465617c680f4e656f2e53746f726167652e4765746a00527ac46203006a00c3616c756653c56b6c766b00527ac4616a00c361e00101f643009c6a51527ac46a51c364050061f061e00100113d6a00c361e00101ee44617c680f4e656f2e53746f726167652e4765746168174e656f2e52756e74696d652e446573657269616c697a656a52527ac46203006a52c3616c756656c56b6c766b00527ac46c766b51527ac4616a51c361e001014e43009c6a53527ac46a53c364050061f06a00c361e0010162ff6a52527ac46a52c36a51c3cb6a54527ac46a54c3641900616a00c361e0010141ff6a51c3c36a55527ac4620d0061006a55527ac46203006a55c3616c756651c56b6161e00100513c0d616e6e6f756e636544656c6179617c680f4e656f2e53746f726167652e4765746a00527ac46203006a00c3616c756651c56b6161e00100173c0a66656541646472657373617c680f4e656f2e53746f726167652e4765746a00527ac46203006a00c3616c756651c56b6161e00100e03b12636f6f7264696e61746f7241646472657373617c680f4e656f2e53746f726167652e4765746a00527ac46203006a00c3616c756651c56b6161e00100a13b1a7769746864726177436f6f7264696e61746f7241646472657373617c680f4e656f2e53746f726167652e4765746a00527ac46203006a00c3616c756656c56b6c766b00527ac4616a00c3c001209c009c6a52527ac46a52c364050061f061e001003d3b6a00c361e00101e942617c680f4e656f2e53746f726167652e4765746a51527ac46a51c3c0009c6a53527ac46a53c3641800546159c66a527a527ac46a54c36a55527ac46228006a51c36168174e656f2e52756e74696d652e446573657269616c697a656a55527ac46203006a55c3616c756656c56b6c766b00527ac4616a00c3c001209c009c6a52527ac46a52c364050061f061e00100a33a6a00c361e001016842617c680f4e656f2e53746f726167652e4765746a51527ac46a51c3c0009c6a53527ac46a53c3641800546159c66a527a527ac46a54c36a55527ac46228006a51c36168174e656f2e52756e74696d652e446573657269616c697a656a55527ac46203006a55c3616c756656c56b6c766b00527ac46c766b51527ac46161e00100183a6a00c36a51c3617ce00102c342617c680f4e656f2e53746f726167652e4765746a52527ac46a52c3c0009c6a53527ac46a53c3641800546152c66a527a527ac46a54c36a55527ac46228006a52c36168174e656f2e52756e74696d652e446573657269616c697a656a55527ac46203006a55c3616c756654c56b6c766b00527ac46161e0010090396a00c361e001011e42617c680f4e656f2e53746f726167652e4765746a51527ac46a51c3c0009c6a52527ac46a52c3640c004f6a53527ac4620e006a51c36a53527ac46203006a53c3616c756659c56b6c766b00527ac46c766b51527ac46c766b52527ac46161e00100bbfb61009c009c6a53527ac46a53c3640c00006a54527ac46236016a00c361e001013401009c6a55527ac46a55c3642000194661696c656420746f207365742066656520616464726573736175f06a51c361e001018e01009c6a56527ac46a56c36424001d4661696c656420746f207365742074686520636f6f7264696e61746f726175f06a52c361e00101ed01009c6a57527ac46a57c3642d00254661696c656420746f2073657420746865207769746864726177436f6f7264696e61746f726175f06103803a0961e001015202009c6a58527ac46a58c36423001c4661696c656420746f20616e6e6f756e63656d656e742064656c61796175f061e001002438057374617465610101615272680f4e656f2e53746f726167652e5075746161610b696e697469616c697a656451c168124e656f2e52756e74696d652e4e6f7469667961516a54527ac46203006a54c3616c756653c56b6c766b00527ac4616a00c361e001018d3e009c6a51527ac46a51c3640c00006a52527ac4625f0061e00100a1370a666565416464726573736a00c3615272680f4e656f2e53746f726167652e50757461616a00c3610d6665654164647265737353657452c168124e656f2e52756e74696d652e4e6f7469667961516a52527ac46203006a52c3616c756653c56b6c766b00527ac4616a00c361e00101003e009c6a51527ac46a51c3640c00006a52527ac462680061e00100143712636f6f7264696e61746f72416464726573736a00c3615272680f4e656f2e53746f726167652e50757461616a00c3610e636f6f7264696e61746f7253657452c168124e656f2e52756e74696d652e4e6f7469667961516a52527ac46203006a52c3616c756653c56b6c766b00527ac4616a00c361e001016a3d009c6a51527ac46a51c3640c00006a52527ac462780061e001007e361a7769746864726177436f6f7264696e61746f72416464726573736a00c3615272680f4e656f2e53746f726167652e50757461616a00c361167769746864726177436f6f7264696e61746f7253657452c168124e656f2e52756e74696d652e4e6f7469667961516a52527ac46203006a52c3616c756653c56b6c766b00527ac4616a00c3009f630f006a00c36103803a09a0620400516a51527ac46a51c3640c00006a52527ac462650061e00100ce350d616e6e6f756e636544656c61796a00c3615272680f4e656f2e53746f726167652e50757461616a00c36110616e6e6f756e636544656c617953657452c168124e656f2e52756e74696d652e4e6f7469667961516a52527ac46203006a52c3616c756655c56b6c766b00527ac4616a00c361e00101b23b009c6a52527ac46a52c3640c00006a53527ac462820061e00100bb386a54527ac46a54c3640c00006a53527ac46268006a00c361e001013e3d6a51527ac461e0010013356a51c3610101615272680f4e656f2e53746f726167652e50757461616a00c361106164646564546f57686974656c69737452c168124e656f2e52756e74696d652e4e6f7469667961516a53527ac46203006a53c3616c756655c56b6c766b00527ac4616a00c361e00101023b009c6a52527ac46a52c3640c00006a53527ac462850061e001000b386a54527ac46a54c3640c00006a53527ac4626b006a00c361e001018e3c6a51527ac461e0010063346a51c3617c68124e656f2e53746f726167652e44656c65746561616a00c3611472656d6f76656446726f6d57686974656c69737452c168124e656f2e52756e74696d652e4e6f7469667961516a53527ac46203006a53c3616c756651c56b6161e00100fe3361e001003b3c610101615272680f4e656f2e53746f726167652e5075746161610f77686974656c6973745365616c656451c168124e656f2e52756e74696d652e4e6f7469667961516a00527ac46203006a00c3616c756653c56b6c766b00527ac4616a00c361e00101633a009c6a51527ac46a51c3640c00006a52527ac4625c0061e0010077336a00c361e00101543c610101615272680f4e656f2e53746f726167652e50757461616a00c3610c7370656e646572416464656452c168124e656f2e52756e74696d652e4e6f7469667961516a52527ac46203006a52c3616c756653c56b6c766b00527ac4616a00c361e00101d939009c6a51527ac46a51c3640c00006a52527ac4625d0061e00100ed326a00c361e00101ca3b617c68124e656f2e53746f726167652e44656c65746561616a00c3610e7370656e64657252656d6f76656452c168124e656f2e52756e74696d652e4e6f7469667961516a52527ac46203006a52c3616c756656c56b6c766b00527ac46c766b51527ac4616a51c361e001014739009c6a52527ac46a52c3640c00006a53527ac462d7006a00c36168184e656f2e52756e74696d652e436865636b5769746e657373009c6a54527ac46a54c3640c00006a53527ac462a30061e0010027326a51c361e00101043b617c680f4e656f2e53746f726167652e4765746101019c009c6a55527ac46a55c3640c00006a53527ac462670061e00100eb316a00c36a51c3617ce00102ea3a610101615272680f4e656f2e53746f726167652e50757461616a00c36a51c3617c0f7370656e646572417070726f76656453c168124e656f2e52756e74696d652e4e6f7469667961516a53527ac46203006a53c3616c756656c56b6c766b00527ac46c766b51527ac4616a51c361e001013b38009c6a52527ac46a52c3640c00006a53527ac462d5006a00c36168184e656f2e52756e74696d652e436865636b5769746e657373009c6a54527ac46a54c3640c00006a53527ac462a10061e001001b316a51c361e00101f839617c680f4e656f2e53746f726167652e4765746101019c6a55527ac46a55c3640c00006a53527ac462670061e00100e1306a00c36a51c3617ce00102e039617c68124e656f2e53746f726167652e44656c65746561616a00c36a51c3617c107370656e64657252657363696e64656453c168124e656f2e52756e74696d652e4e6f7469667961516a53527ac46203006a53c3616c75665cc56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac46c766b56527ac4616a00c361e001010e376411006a51c361e001010237009c620400516a58527ac46a58c3640c00006a59527ac462ce006a52c3009f6a5a527ac46a5ac3640c00006a59527ac462b50061e00100f92f6a00c36a56c3617ce00102f838617c680f4e656f2e53746f726167652e4765746101019c009c6a5b527ac46a5bc3640c00006a59527ac462750061e001009cef6a57527ac46a57c36a00c36a53c36a52c36a54c3615479517956727551727553795279557275527275e0010572ee756a57c36a51c36a53c36a52c36a55c3615479517956727551727553795279557275527275e00105e9ed756a57c361e000014eef61516a59527ac46203006a59c3616c75665cc56b6c766b00527ac4616a00c300c361e00101e532009c6a54527ac46a54c3640c00006a55527ac46209026a00c361e0010102366a51527ac461e00100062f6a51c361e00101b236617c680f4e656f2e53746f726167652e47657461009c009c6a56527ac46a56c3640c00006a55527ac462c0016a00c352c300a0640f006a00c354c300a0009c620400516a57527ac46a57c3640c00006a55527ac46295016a00c351c36a00c353c39c6a58527ac46a58c3640c00006a55527ac46276016a00c351c361e0010119356421006a00c353c361e001010b356413006a00c356c361e00101fd34009c620400516a59527ac46a59c3640c00006a55527ac46235016a00c357c3009f6a5a527ac46a5ac3640c00006a55527ac4621a0161e0010008ee6a52527ac46a52c36a00c300c36a00c351c36a00c352c3610102615479517956727551727553795279557275527275e00105d8ec756a00c356c36a00c353c39c009c6a53527ac46a53c3640d006a00c357c300a0620400006a5b527ac46a5bc3643500616a52c36a00c300c36a00c356c36a00c357c3610110615479517956727551727553795279557275527275e0010579ec75616a52c361e000017eed616a51c36a00c3617ce00002ed1661616a00c300c36a51c36a00c351c36a00c352c36a00c353c36a00c354c361557951795772755172755479527956727552727553795379557275537275076372656174656457c168124e656f2e52756e74696d652e4e6f7469667961516a55527ac46203006a55c3616c75660124c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac46c766b56527ac46c766b57527ac4616a00c361e001017c30009c6a0111527ac46a0111c3640d00006a0112527ac462ab076a53c361e001014233009c6a0113527ac46a0113c3640d00006a0112527ac46289076a54c3009f6a0114527ac46a0114c3640d00006a0112527ac4626d076a56c3009f6a0115527ac46a0115c3640d00006a0112527ac46251076a51c361e00101eaf06a58527ac46a58c300c361009c6a0116527ac46a0116c3645e0061616a00c36a51c36a52c36a53c36a54c361012161557951795772755172755479527956727552727553795379557275537275066661696c656457c168124e656f2e52756e74696d652e4e6f7469667961006a0112527ac462d3066a00c36a58c300c39c6a0117527ac46a0117c3645e0061616a00c36a51c36a52c36a53c36a54c361012361557951795772755172755479527956727552727553795379557275537275066661696c656457c168124e656f2e52756e74696d652e4e6f7469667961006a0112527ac46262066a52c3519f6a0118527ac46a0118c3645e0061616a00c36a51c36a52c36a53c36a54c361012261557951795772755172755479527956727552727553795379557275537275066661696c656457c168124e656f2e52756e74696d652e4e6f7469667961006a0112527ac462f5056a52c36a58c355c3a06a0119527ac46a0119c3645e0061616a00c36a51c36a52c36a53c36a54c361012461557951795772755172755479527956727552727553795379557275537275066661696c656457c168124e656f2e52756e74696d652e4e6f7469667961006a0112527ac46284056a52c36a58c354c3956a58c352c3966a59527ac46a59c3519f6a011a527ac46a011ac3645e0061616a00c36a51c36a52c36a53c36a54c361012561557951795772755172755479527956727552727553795379557275537275066661696c656457c168124e656f2e52756e74696d652e4e6f7469667961006a0112527ac462030561e00100002a6a00c361e00101dd31617c680f4e656f2e53746f726167652e4765746168174e656f2e52756e74696d652e446573657269616c697a656a5a527ac46a5ac36a58c353c3cb009c6a011b527ac46a011bc3645e0061616a00c36a51c36a52c36a53c36a54c361012661557951795772755172755479527956727552727553795379557275537275066661696c656457c168124e656f2e52756e74696d652e4e6f7469667961006a0112527ac4624f046a5ac36a58c353c3c36a5b527ac46a5bc36a59c39f6a011c527ac46a011cc3645e0061616a00c36a51c36a52c36a53c36a54c361012661557951795772755172755479527956727552727553795379557275537275066661696c656457c168124e656f2e52756e74696d652e4e6f7469667961006a0112527ac462d2036a53c36a58c351c39c009c6a5c527ac46a5cc36423006a54c300a0641b006a5ac36a53c3cb6411006a5ac36a53c3c36a54c39f620400006a011d527ac46a011dc3645e0061616a00c36a51c36a52c36a53c36a54c361012761557951795772755172755479527956727552727553795379557275537275066661696c656457c168124e656f2e52756e74696d652e4e6f7469667961006a0112527ac46233036a58c357c36a56c39f6a011e527ac46a011ec3645e0061616a00c36a51c36a52c36a53c36a54c361012861557951795772755172755479527956727552727553795379557275537275066661696c656457c168124e656f2e52756e74696d652e4e6f7469667961006a0112527ac462c2026a58c356c36a58c353c39c009c6a5d527ac461e0010090e76a5e527ac46a5ec36a00c36a58c353c36a59c3610103615479517956727551727553795279557275527275e0010564e6756a5dc3630d006a59c36a56c3946206006a59c36a5f527ac46a5ec36a58c300c36a58c353c36a5fc3610106615479517956727551727553795279557275527275e00105bfe5756a5cc3630d006a52c36a54c3946206006a52c36a60527ac46a5ec36a00c36a58c351c36a60c3610105615479517956727551727553795279557275527275e001057be5756a54c300a06a011f527ac46a011fc364af00616a5cc36a0120527ac46a0120c3642f00616a5ec36a00c36a53c36a54c3610104615479517956727551727553795279557275527275e001058ce575616a55c36a0121527ac46a0121c364320061616a00c36a53c36a54c3615272056275726e7454c168124e656f2e52756e74696d652e4e6f746966796161623200616a5ec361e001003cea6a53c36a54c3610107615479517956727551727553795279557275527275e00105bfe47561616a56c300a06a0122527ac46a0122c3648600616a58c36a58c357c36a56c394577cc46a57c36a0123527ac46a0123c364340061616a00c36a58c356c36a56c3615272056275726e7454c168124e656f2e52756e74696d652e4e6f746966796161623400616a5ec361e00100a9e96a58c356c36a56c3610111615479517956727551727553795279557275527275e001052ae47561616a5ec361e000018de5616a58c36a58c355c36a52c394557cc46a51c36a58c3617ce00002ed0e61616a00c36a51c36a59c36a58c351c36a58c352c36a58c353c36a58c354c36a52c361577951795972755172755679527958727552727555795379577275537275547954795672755472750666696c6c656459c168124e656f2e52756e74696d652e4e6f7469667961516a0112527ac46203006a0112c3616c75665dc56b6c766b00527ac4616a00c361e0010189e96a51527ac46a51c300c361009c6a57527ac46a57c3640c00006a58527ac462c0016a00c361e0010145276a52527ac461e00100cee86168184e656f2e52756e74696d652e436865636b5769746e6573736a53527ac46a53c36a52c385009c6a59527ac46a59c3640c00006a58527ac4626f016a51c300c36168184e656f2e52756e74696d652e436865636b5769746e65737363120061e001006f246a53c384009c620400006a5a527ac46a5ac3640c00006a58527ac462280161e001000ee46a54527ac46a54c36a51c300c36a51c351c36a51c355c3610108615479517956727551727553795279557275527275e001057fe2756a51c356c36a51c353c39c009c6a55527ac46a55c3640d006a51c357c300a0620400006a5b527ac46a5bc3643500616a54c36a51c300c36a51c356c36a51c357c361011a615479517956727551727553795279557275527275e0010520e275616a54c361e0000184e3616a00c361e00001ad0d616a00c361e00101102c6a56527ac46a56c3c000a06a5c527ac46a5cc36425006161e001005c236a56c3617c68124e656f2e53746f726167652e44656c6574656161616a51c300c36a00c3617c0963616e63656c6c656453c168124e656f2e52756e74696d652e4e6f7469667961516a58527ac46203006a58c3616c756655c56b6c766b00527ac4616a00c361e0010190e76a51527ac46a51c300c361009c6a52527ac46a52c3640c00006a53527ac462ae006a51c300c36168184e656f2e52756e74696d652e436865636b5769746e657373009c6a54527ac46a54c3640c00006a53527ac462780061e0010094226a00c361e00101222b6168134e656f2e52756e74696d652e47657454696d65615272680f4e656f2e53746f726167652e50757461616a51c300c36a00c3617c0f63616e63656c416e6e6f756e63656453c168124e656f2e52756e74696d652e4e6f7469667961516a53527ac46203006a53c3616c756658c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac4616a00c361e00101aa25009c6a55527ac46a55c3640c00006a56527ac4629e006a51c361e001017328640b006a52c3519f620400516a57527ac46a57c3640c00006a56527ac462750061e0010093e16a54527ac46a54c36a00c36a51c36a52c36a53c3615479517956727551727553795279557275527275e0010569e0756a54c361e000016fe161616a00c36a51c36a52c3615272056275726e7454c168124e656f2e52756e74696d652e4e6f7469667961516a56527ac46203006a56c3616c75660114c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac4616a00c361e00101ba24009c6a57527ac46a57c3640c00006a58527ac46241026a51c36168184e656f2e52756e74696d652e436865636b5769746e657373009c6a59527ac46a59c3640c00006a58527ac4620d026a00c361e001018227641d006a51c361e0010176276411006a54c361e001013727009c620400516a5a527ac46a5ac3640c00006a58527ac462d2016a52c3c06a53c3c09c009c6a5b527ac46a5bc3640c00006a58527ac462b30161e001003ee06a56527ac4006a5c527ac4620f01616a52c36a5cc3c36a5d527ac46a53c36a5cc3c36a5e527ac46a5ec3519f6a5f527ac46a5fc364050061f06a5dc361e00101b626009c6a60527ac46a60c3642900224d75737420626520612073797374656d206173736574206f72206120746f6b656e216175f06a5dc36a54c39c6a0111527ac46a0111c36435002e4475737420746f6b656e206d757374206e6f742062652073616d6520617320636f6d62696e656420746f6b656e216175f06a56c36a00c36a5dc36a5ec3610116615479517956727551727553795279557275527275e001055ede756a56c36a51c36a5dc36a5ec3610117615479517956727551727553795279557275527275e00105d5dd75616a5cc351936a5c527ac46a5cc36a52c3c09f6a0112527ac46a0112c363e2fe6a55c3519f6a0113527ac46a0113c364050061f06a56c36a51c36a54c36a55c3610118615479517956727551727553795279557275527275e00105d6dd756a56c36a00c36a54c36a55c3610119615479517956727551727553795279557275527275e001054ddd756a56c361e00001b2de61516a58527ac46203006a58c3616c75660115c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac46c766b56527ac46c766b57527ac46c766b58527ac4616a00c361e001012d256437006a51c361e001012125642b006a54c3c00120907c907c9e631d006a52c361e00101d4246411006a56c361e00101c824009c620400516a5d527ac46a5dc3640c00006a5e527ac46284026a53c3519f6328006a57c3009f6320006a55c36168134e656f2e52756e74696d652e47657454696d659f620400516a5f527ac46a5fc3640c00006a5e527ac46242026a00c361e001017b21009c6a60527ac46a60c3640c00006a5e527ac46223026a54c361e00101e0e26a59527ac46a59c300c3c000a06a0111527ac46a0111c3640c00006a5e527ac462f7016a56c36a52c39c009c6a5a527ac46a5ac3630d006a57c36a53c3a0620400006a0112527ac46a0112c3642b00612346656520616d6f756e74206d6f7265207468616e206c6f636b696e6720616d6f756e746175f061e001000ddd6a5b527ac46a5bc36a00c36a52c36a53c3610130615479517956727551727553795279557275527275e00105e3db756a5ac3640b006a57c300a0620400006a0113527ac46a0113c3642f00616a5bc36a00c36a56c36a57c3610132615479517956727551727553795279557275527275e001059cdb756101146159c66a527a527ac46a0114c36a00c3007cc46a0114c36a51c3517cc46a0114c36a52c3527cc46a0114c36a53c3537cc46a0114c36a55c3547cc46a0114c36a56c3557cc46a0114c36a57c3567cc46a0114c36a58c3577cc46a0114c351587cc46a0114c36a5c527ac46a5bc361e0000135dc6161e00100371c6a54c361e00101fc236a5cc36168154e656f2e52756e74696d652e53657269616c697a65615272680f4e656f2e53746f726167652e50757461616a00c36a51c36a52c36a53c36a54c36a55c36a56c36a57c361577951795972755172755679527958727552727555795379577275537275547954795672755472750b737761704372656174656459c168124e656f2e52756e74696d652e4e6f7469667961516a5e527ac46203006a5ec3616c75665cc56b6c766b00527ac46c766b51527ac4616a00c361e00101a7e06a52527ac46a52c300c3c0640d006a52c358c3009c620400516a56527ac46a56c3640c00006a57527ac462b4016a51c3aa61e0010170246a00c39c009c6a58527ac46a58c3640c00006a57527ac462900161e00100fada6a53527ac46a52c355c36a52c352c39c009c6a54527ac46a54c36311006a52c353c36a52c356c3946208006a52c353c36a55527ac46a53c36a52c351c36a52c352c36a55c3610135615479517956727551727553795279557275527275e001053dd9756a52c356c300a06a59527ac46a59c3649300616a52c357c36a5a527ac46a5ac3644e00616a54c3630b006a52c351c36208006a52c300c36a5b527ac4616a5bc36a52c355c36a52c356c3615272056275726e7454c168124e656f2e52756e74696d652e4e6f746966796161623600616a53c361e001001ede6a52c355c36a52c356c3610137615479517956727551727553795279557275527275e001059dd87561616a52c300587cc46a53c361e00001f9d96161e00100fb196a00c361e00101c0216a52c36168154e656f2e52756e74696d652e53657269616c697a65615272680f4e656f2e53746f726167652e50757461616a00c3610c73776170457865637574656452c168124e656f2e52756e74696d652e4e6f7469667961516a57527ac46203006a57c3616c75660113c56b6c766b00527ac46c766b51527ac46c766b52527ac4616a00c361e001019fde6a53527ac46a53c300c3c0640d006a53c358c3009c620400516a57527ac46a57c3640c00006a58527ac462a6026168134e656f2e52756e74696d652e47657454696d656a53c354c39f6a59527ac46a59c3640c00006a58527ac46276026a53c356c36a51c39f6a5a527ac46a5ac3640c00006a58527ac46259026a51c3009f6a5b527ac46a5bc3640c00006a58527ac46240026a53c355c36a53c352c39c009c6a54527ac46a51c36a55527ac461e00100ccdc6168184e656f2e52756e74696d652e436865636b5769746e657373009c6a5c527ac46a5cc3640f00616a53c356c36a55527ac46161e001005cd86a56527ac46a54c36a5d527ac46a5dc3648600616a56c36a53c300c36a53c352c36a53c353c3610138615479517956727551727553795279557275527275e00105bed6756a53c356c36a55c3946a5e527ac46a5ec300a06a5f527ac46a5fc3643300616a56c36a53c300c36a53c355c36a5ec361013d615479517956727551727553795279557275527275e0010571d6756161624100616a53c353c36a55c3946a60527ac46a56c36a53c300c36a53c352c36a60c3610138615479517956727551727553795279557275527275e001052fd675616a55c300a06a0111527ac46a0111c3647900616a52c36a0112527ac46a0112c364360061616a53c300c36a53c355c36a55c3615272056275726e7454c168124e656f2e52756e74696d652e4e6f746966796161623400616a56c361e0010027db6a53c355c36a55c361013b615479517956727551727553795279557275527275e00105a8d57561616a53c300587cc46a56c361e0000104d76161e0010006176a00c361e00101cb1e6a53c36168154e656f2e52756e74696d652e53657269616c697a65615272680f4e656f2e53746f726167652e50757461616a00c36a55c3617c0d7377617043616e63656c6c656453c168124e656f2e52756e74696d652e4e6f7469667961516a58527ac46203006a58c3616c756655c56b6c766b00527ac46c766b51527ac4616a51c355c3009c6a52527ac46a52c3641200616a00c361e000018b0061616282006a51c355c3009f6a53527ac46a53c3642700611f496e76616c6964206f6666657220617661696c61626c6520616d6f756e74216175f0616a51c36168154e656f2e52756e74696d652e53657269616c697a656a54527ac461e00100ff156a00c361e00101ab1d6a54c3615272680f4e656f2e53746f726167652e5075746161616c756651c56b6c766b00527ac46161e00100c8156a00c361e00101741d617c68124e656f2e53746f726167652e44656c65746561616c756656c56b6c766b00527ac46c766b51527ac46c766b52527ac4616a51c361e00101dd1b6a53527ac46a53c3648800616a00c36a51c36a52c3615272e001031202009c6a54527ac46a54c3640c00006a55527ac4626f006a00c361682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686a51c36a52c3615379517955727551727552795279547275527275e00004781961516a55527ac46212006161e0010086026a55527ac46203006a55c3616c756656c56b6c766b00527ac46c766b51527ac46c766b52527ac4616a51c361e00101151b009c6a53527ac46a53c3640c00006a54527ac46287006a00c36a51c36a52c3615272e001034001009c6a55527ac46a55c3640c00006a54527ac46260006a00c361682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686a51c36a52c3615379517955727551727552795279547275527275e00004321961516a54527ac46203006a54c3616c756656c56b6c766b00527ac46c766b51527ac46c766b52527ac4616a51c361e00101521a009c6a53527ac46a53c3640c00006a54527ac46287006a00c36a51c36a52c3615272e001037d00009c6a55527ac46a55c3640c00006a54527ac46260006a00c361682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686a51c36a52c3615379517955727551727552795279547275527275e00004321961516a54527ac46203006a54c3616c756658c56b6c766b00527ac46c766b51527ac46c766b52527ac4616a00c361e00101e916009c6a54527ac46a54c3640c00006a55527ac462b20061e00100afd56101019c009c6a56527ac46a56c3640c00006a55527ac46292006a52c3519f6a57527ac46a57c3640c00006a55527ac462790061e00100c2d26a53527ac46a53c36a00c36a51c36a52c3610101615479517956727551727553795279557275527275e0010539d1756a53c361e000019ed261616a00c36a51c36a52c3615272096465706f736974656454c168124e656f2e52756e74696d652e4e6f7469667961516a55527ac46203006a55c3616c7566011ac56b6161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726a00527ac46a00c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736a51527ac46a00c361681d4e656f2e5472616e73616374696f6e2e4765745265666572656e6365736a52527ac46a00c361e001013d1a6a53527ac461e00100d1116a53c3617c680f4e656f2e53746f726167652e476574c000a06a5a527ac46a5ac3640c00006a5b527ac462630461e00100b7d56a54527ac461e00100ebd56a55527ac4616a52c36a5c527ac4006a5d527ac462ec006a5cc36a5dc3c36a5e527ac4616a5ec36168184e656f2e4f75747075742e4765745363726970744861736861682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c6a5f527ac46a5fc3640c00006a5b527ac462cb036a5ec36168184e656f2e4f75747075742e476574536372697074486173686a54c39c6a60527ac46a60c3640c00006a5b527ac46295036a5ec36168184e656f2e4f75747075742e476574536372697074486173686a55c39c6a0111527ac46a0111c3640c00006a5b527ac4625d03616a5dc351936a5d527ac46a5dc36a5cc3c09f630fff006a56527ac4006a57527ac4616a51c36a0112527ac4006a0113527ac46264016a0112c36a0113c3c36a0114527ac4616a0114c36168184e656f2e4f75747075742e4765745363726970744861736861682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c6a0115527ac46a0115c364ea00616a0114c36168154e656f2e4f75747075742e476574417373657449646120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c609c6a0116527ac46a0116c3642b00616a56c36a0114c36168134e656f2e4f75747075742e47657456616c7565936a56527ac4616274006a0114c36168154e656f2e4f75747075742e4765744173736574496461209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c6a0117527ac46a0117c3642800616a57c36a0114c36168134e656f2e4f75747075742e47657456616c7565936a57527ac46161616a0113c351936a0113527ac46a0113c36a0112c3c09f6395fe61e00100d7ce6a58527ac46a52c300c36168184e656f2e4f75747075742e476574536372697074486173686a59527ac46a56c300a06a0118527ac46a0118c3649b00616a58c36a59c36120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c606a56c3610101615479517956727551727553795279557275527275e00105f7cc75616a59c36120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c606a56c3615272096465706f736974656454c168124e656f2e52756e74696d652e4e6f7469667961616a57c300a06a0119527ac46a0119c3649b00616a58c36a59c361209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc56a57c3610101615479517956727551727553795279557275527275e001054dcc75616a59c361209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc56a57c3615272096465706f736974656454c168124e656f2e52756e74696d652e4e6f7469667961616a58c361e0000164cd6161e00100660d6a53c351615272680f4e656f2e53746f726167652e50757461516a5b527ac46203006a5bc3616c756657c56b6c766b00527ac46c766b51527ac46c766b52527ac4616a52c3519f6a54527ac46a54c3640c00006a55527ac46239006a00c36a51c3617ce0010235d06a53527ac46a53c36a52c39f6a56527ac46a56c3640c00006a55527ac4620c00516a55527ac46203006a55c3616c756659c56b6c766b00527ac46c766b51527ac46c766b52527ac4616a00c36168184e656f2e52756e74696d652e436865636b5769746e657373009c6a55527ac46a55c3640c00006a56527ac462eb006a00c36a51c36a52c3615272e0010336ff009c6a57527ac46a57c3640c00006a56527ac462c400586152c66a527a527ac46a58c36168134e656f2e52756e74696d652e47657454696d65007cc46a58c36a52c3517cc46a58c36a53527ac46a00c36a51c3617ce00102ce146a54527ac461e001000b0c6a54c36a53c36168154e656f2e52756e74696d652e53657269616c697a65615272680f4e656f2e53746f726167652e50757461616a00c36a51c36a52c3615272117769746864726177416e6e6f756e63656454c168124e656f2e52756e74696d652e4e6f7469667961516a56527ac46203006a56c3616c7566011cc56b6161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726a00527ac46a00c361e00101b0096a51527ac46a00c361e0010103076a52527ac46a00c361e00101b8076a53527ac46a53c361e0010184116a54527ac46a51c36101509c6a55527ac46a55c36438026161682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686168184e656f2e52756e74696d652e436865636b5769746e657373009c6a59527ac46a59c3640c00006a5a527ac46267066a00c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736a56527ac46a56c300c36168134e656f2e4f75747075742e47657456616c75656a57527ac46a52c36a53c36a57c3615272e0010320fd009c6a5b527ac46a5bc36439006118566572696679207769746864726177616c206661696c656461680f4e656f2e52756e74696d652e4c6f6761006a5a527ac462ce0561e0010069ce6168184e656f2e52756e74696d652e436865636b5769746e657373009c6a5c527ac46a5cc3645600616a52c36a53c36a57c3615272e00103920b009c6a5d527ac46a5dc3640c00006a5a527ac462780561e00100bb096a52c36a53c3617ce001026612617c68124e656f2e53746f726167652e44656c657465616161e0010073c96a58527ac46a58c36a52c36a53c36a57c3610109615479517956727551727553795279557275527275e0010549c8756a58c361e000014fc96161e0010051096a00c36168174e656f2e5472616e73616374696f6e2e4765744861736861e001012f116a52c3615272680f4e656f2e53746f726167652e50757461616a52c36a53c36a57c36152720b7769746864726177696e6754c168124e656f2e52756e74696d652e4e6f7469667961516a5a527ac46294046a51c36101519c6a5e527ac46a5ec3647904616a54c36a5f527ac46a5fc364fe02616a00c361e0010148066a60527ac46a52c36a53c36a60c3615272e0010362fb009c6a0112527ac46a0112c3640c00006a5a527ac4623b046a53c361e00101840b6a0113527ac46a0113c3646b006161682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686168184e656f2e52756e74696d652e436865636b5769746e657373009c6a0114527ac46a0114c3640c00006a5a527ac462c103616266006161682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686168184e656f2e52756e74696d652e436865636b5769746e6573736a0115527ac46a0115c3640c00006a5a527ac4625b036161e00100f5cb6168184e656f2e52756e74696d652e436865636b5769746e657373009c6a0116527ac46a0116c3648e00616a52c36168184e656f2e52756e74696d652e436865636b5769746e657373009c6a0117527ac46a0117c3640c00006a5a527ac462f3026a52c36a53c36a60c3615272e00103e608009c6a0118527ac46a0118c3640c00006a5a527ac462ca0261e001000d076a52c36a53c3617ce00102b80f617c68124e656f2e53746f726167652e44656c657465616161e00100c5c66a0111527ac46a0111c36a52c36a53c36a60c3610109615479517956727551727553795279557275527275e0010599c57561682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686a52c36a53c36a60c3615379517955727551727552795279547275527275e00004da0a616a0111c361e000014ac661616a52c36a53c36a60c36152720b7769746864726177696e6754c168124e656f2e52756e74696d652e4e6f7469667961616a52c36a53c36a60c36a00c36168174e656f2e5472616e73616374696f6e2e476574486173686153795179557275517275527952795472755272750977697468647261776e55c168124e656f2e52756e74696d652e4e6f7469667961616266016161682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686168184e656f2e52756e74696d652e436865636b5769746e657373009c6a011b527ac46a011bc3640c00006a5a527ac46214016a00c36168194e656f2e5472616e73616374696f6e2e476574496e707574736a0119527ac46a00c361681d4e656f2e5472616e73616374696f6e2e4765745265666572656e6365736a011a527ac461e0010009056a0119c300c36168114e656f2e496e7075742e4765744861736861e00101ea0c617c68124e656f2e53746f726167652e44656c65746561616a52c36a53c36a011ac300c36168134e656f2e4f75747075742e47657456616c75656a0119c300c36168114e656f2e496e7075742e476574486173686153795179557275517275527952795472755272750977697468647261776e55c168124e656f2e52756e74696d652e4e6f746966796161516a5a527ac4620c00006a5a527ac46203006a5ac3616c756657c56b6c766b00527ac4616a00c361681d4e656f2e5472616e73616374696f6e2e476574417474726962757465736a51527ac4616a51c36a52527ac4006a53527ac4626d006a52c36a53c3c36a54527ac4616a54c36168164e656f2e4174747269627574652e47657455736167656102a4009c6a55527ac46a55c36429006a54c36168154e656f2e4174747269627574652e476574446174610114806a56527ac4621b00616a53c351936a53527ac46a53c36a52c3c09f638eff61f06a56c3616c756658c56b6c766b00527ac4616a00c361681d4e656f2e5472616e73616374696f6e2e476574417474726962757465736a51527ac4616a51c36a52527ac4006a53527ac462bf006a52c36a53c3c36a54527ac4616a54c36168164e656f2e4174747269627574652e47657455736167656102a2009c6a55527ac46a55c36429006a54c36168154e656f2e4174747269627574652e476574446174610114806a56527ac4626d006a54c36168164e656f2e4174747269627574652e47657455736167656102a3009c6a57527ac46a57c36429006a54c36168154e656f2e4174747269627574652e476574446174610120806a56527ac4621b00616a53c351936a53527ac46a53c36a52c3c09f633cff61f06a56c3616c756657c56b6c766b00527ac4616a00c361681d4e656f2e5472616e73616374696f6e2e476574417474726962757465736a51527ac4616a51c36a52527ac4006a53527ac46271006a52c36a53c3c36a54527ac4616a54c36168164e656f2e4174747269627574652e47657455736167656102a5009c6a55527ac46a55c3642d006a54c36168154e656f2e4174747269627574652e476574446174610120806101007e6a56527ac4621b00616a53c351936a53527ac46a53c36a52c3c09f638aff61f06a56c3616c756657c56b6c766b00527ac4616a00c361681d4e656f2e5472616e73616374696f6e2e476574417474726962757465736a51527ac4616a51c36a52527ac4006a53527ac4626c006a52c36a53c3c36a54527ac4616a54c36168164e656f2e4174747269627574652e47657455736167656102a1009c6a55527ac46a55c36428006a54c36168154e656f2e4174747269627574652e4765744461746151806a56527ac4621b00616a53c351936a53527ac46a53c36a52c3c09f638fff61f06a56c3616c756659c56b6c766b00527ac46c766b51527ac46c766b52527ac461006a53527ac4616a00c36a54527ac4006a55527ac46296006a54c36a55c3c36a56527ac4616a56c36168184e656f2e4f75747075742e476574536372697074486173686a51c3907c907c9e6325006a56c36168154e656f2e4f75747075742e476574417373657449646a52c39c620400006a57527ac46a57c3642700616a53c36a56c36168134e656f2e4f75747075742e47657456616c7565936a53527ac461616a55c351936a55527ac46a55c36a54c3c09f6365ff6a53c36a58527ac46203006a58c3616c756600c56b6168164e656f2e53746f726167652e476574436f6e74657874616c756600c56b61e00100daff057374617465617c680f4e656f2e53746f726167652e4765746101029c616c756656c56b6c766b00527ac461616a00c36a51527ac4006a52527ac46287006a51c36a52c3c36a53527ac4616a53c36168124e656f2e496e7075742e476574496e646578633f0061e001006eff6a53c36168114e656f2e496e7075742e4765744861736861e001015207617c680f4e656f2e53746f726167652e476574c000a0620400006a54527ac46a54c3640c00006a55527ac4622200616a52c351936a52527ac46a52c36a51c3c09f6374ff516a55527ac46203006a55c3616c756656c56b6c766b00527ac46c766b51527ac46c766b52527ac4616a00c361682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686a52c3615272e00103c5fd6a53527ac46a51c361682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686a52c3615272e0010382fd6a54527ac46a53c36a54c39c6a55527ac46203006a55c3616c756658c56b6c766b00527ac46c766b51527ac46c766b52527ac46161e0010029fe6a00c36a51c3617ce00102d406617c680f4e656f2e53746f726167652e4765746a53527ac46a53c3c0009c6a56527ac46a56c3640c00006a57527ac46268006a53c36168174e656f2e52756e74696d652e446573657269616c697a656a54527ac461e001006ac16a55527ac46a54c300c36a55c3936168134e656f2e52756e74696d652e47657454696d659f640f006a54c351c36a52c39c620400006a57527ac46203006a57c3616c756655c56b6c766b00527ac46161e001006dfd6a00c361e00101fb05617c680f4e656f2e53746f726167652e4765746a51527ac46a51c3c0009c6a53527ac46a53c3640c00006a54527ac462340061e00100d4c06a52527ac46a51c36a52c3936168134e656f2e52756e74696d652e47657454696d659f6a54527ac46203006a54c3616c756654c56b6c766b00527ac4616a00c361e001014103009c6a51527ac46a51c3640c00006a52527ac46249006a00c3009c6a53527ac46a53c3640c00006a52527ac462300061e00100b1fc6a00c361e00101c804617c680f4e656f2e53746f726167652e476574c000a06a52527ac46203006a52c3616c756651c56b6161e0010079fc61e00100b604617c680f4e656f2e53746f726167652e476574c000a06a00527ac46203006a00c3616c756657c56b6c766b00527ac46161e0010056c06a51527ac46a00c36168184e656f2e52756e74696d652e436865636b5769746e657373009c6a52527ac46a52c3640c00006a53527ac46279006a51c36168184e656f2e52756e74696d652e436865636b5769746e657373009c6a54527ac46a54c3640c00006a53527ac46245006a00c36a51c39c6a55527ac46a55c3640c00006a53527ac4622a006a00c361e0010004c09c6a56527ac46a56c3640c00006a53527ac4620c00516a53527ac46203006a53c3616c756657c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46153c576006a00c3c476516a51c3c476526a53c3c46a54527ac46a52c36a55527ac46a55c3087472616e736665726a54c3617c527ae20102009c6a56527ac46a56c3642700204661696c656420746f207472616e73666572204e45502d3520746f6b656e73216175f0616c756657c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46154c5760061682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e6753637269707448617368c476516a00c3c476526a51c3c476536a53c3c46a54527ac46a52c36a55527ac46a55c30c7472616e7366657246726f6d6a54c3617c527ae20102009c6a56527ac46a56c3642700204661696c656420746f207472616e73666572204e45502d3520746f6b656e73216175f0616c756657c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46153c576006a00c3c476516a51c3c476526a53c3c46a54527ac46a52c36a55527ac46a55c30c7472616e7366657246726f6d6a54c3617c527ae20102009c6a56527ac46a56c3642700204661696c656420746f207472616e73666572204e45502d3520746f6b656e73216175f0616c756652c56b6c766b00527ac4616a00c3c001149c6a51527ac46203006a51c3616c756652c56b6c766b00527ac4616a00c3c001209c6a51527ac46203006a51c3616c756652c56b6c766b00527ac4616a00c361e00101adff630f006a00c361e00101c2ff620400516a51527ac46203006a51c3616c756652c56b6c766b00527ac4616a00c3c001149c6a51527ac46203006a51c3616c756656c56b6c766b00527ac4616a00c352c36a51527ac46a00c354c36a52527ac46a51c3c00120a0630d006a52c3c00120a0620400516a54527ac46a54c364050061f06a00c300c36a00c351c37e6a00c353c37e6a51c3612000000000000000000000000000000000000000000000000000000000000000007e0120807e6a52c3612000000000000000000000000000000000000000000000000000000000000000007e0120807e6a00c358c37e6a53527ac46a53c3aa6a55527ac46203006a55c3616c756651c56b6c766b00527ac4066f66666572736a00c37e616c756651c56b6c766b00527ac40573776170736a00c37e616c756651c56b6c766b00527ac40862616c616e6365736a00c37e616c756651c56b6c766b00527ac40c77697468647261775554584f6a00c37e616c756651c56b6c766b00527ac4106f6c644e45503557686974656c6973746a00c37e616c756600c56b166f6c644e45503557686974656c6973745365616c6564616c756651c56b6c766b00527ac4096465706f73697465646a00c36168174e656f2e5472616e73616374696f6e2e476574486173687e616c756651c56b6c766b00527ac40e63616e63656c416e6e6f756e63656a00c37e616c756652c56b6c766b00527ac46c766b51527ac4107769746864726177416e6e6f756e63656a00c37e6a51c37e616c756651c56b6c766b00527ac41377686974656c69737465645370656e646572736a00c37e616c756652c56b6c766b00527ac46c766b51527ac40f617070726f76655370656e646572736a00c37e6a51c37e616c756655c56b6c766b00527ac4006a51527ac46270006a00c3c06a51c39451946a52527ac46a00c36a51c3517f6a53527ac46a00c36a52c3517f6a54527ac46a00c36a51c36a54c352795279807c7e7b7b78c08c7c94817e6a007bc46a00c36a52c36a53c352795279807c7e7b7b78c08c7c94817e6a007bc46a51c351936a51527ac46a51c36a00c3c052969f6389ff6a00c3616c7566', - 'hex', -); - -export const switcheoV3Contract = new Contract({ - script: switcheoV3ContractScript, - parameterList: [ContractParameterType.String, ContractParameterType.Array], - - returnType: ContractParameterType.ByteArray, - name: 'Switcheo Exchange', - codeVersion: '3.1', - author: 'Switcheo', - email: 'engineering@switcheo.network', - description: 'Switcheo Exchange V3.1', - contractProperties: ContractPropertyState.HasStorageDynamicInvokePayable, -}); - -export const switcheoTokenV2ContractScript = Buffer.from( - '5fc56b6c766b00527ac46c766b51527ac4616168164e656f2e52756e74696d652e47657454726967676572009c6c766b52527ac46c766b52c3643f0061611446fca70ca7f0526d6955f915ce07cbe326fbadd06168184e656f2e52756e74696d652e436865636b5769746e6573736c766b53527ac462de016168164e656f2e52756e74696d652e47657454726967676572609c6c766b54527ac46c766b54c364a901616c766b00c30b746f74616c537570706c79876c766b55527ac46c766b55c36411006165fc026c766b53527ac46284016c766b00c3046e616d65876c766b56527ac46c766b56c364110061656f016c766b53527ac4625c016c766b00c30673796d626f6c876c766b57527ac46c766b57c3641100616555016c766b53527ac46232016c766b00c308646563696d616c73876c766b58527ac46c766b58c3641100616535016c766b53527ac46206016c766b00c3066465706c6f79876c766b59527ac46c766b59c3641100616513016c766b53527ac462dc006c766b00c30962616c616e63654f66876c766b5a527ac46c766b5ac3644900616c766b51c3c0519c009c6c766b5c527ac46c766b5cc3640e00006c766b53527ac46298006c766b51c300c36c766b5b527ac46c766b5bc361653e026c766b53527ac46277006c766b00c3087472616e73666572876c766b5d527ac46c766b5dc3644d00616c766b51c3c0539c009c6c766b5e527ac46c766b5ec3640e00006c766b53527ac46234006c766b51c300c36c766b51c351c36c766b51c352c36152726525026c766b53527ac4620f0061006c766b53527ac46203006c766b53c3616c756600c56b08537769746368656f616c756600c56b0453575448616c756600c56b58616c756652c56b616168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c79617c680f4e656f2e53746f726167652e476574c000a06c766b00527ac46c766b00c3640e00006c766b51527ac462e2006168164e656f2e53746f726167652e476574436f6e74657874611446fca70ca7f0526d6955f915ce07cbe326fbadd00800008a5d78456301615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c790800008a5d78456301615272680f4e656f2e53746f726167652e507574616100611446fca70ca7f0526d6955f915ce07cbe326fbadd00800008a5d78456301615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667961516c766b51527ac46203006c766b51c3616c756651c56b616168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c79617c680f4e656f2e53746f726167652e4765746c766b00527ac46203006c766b00c3616c756652c56b6c766b00527ac4616168164e656f2e53746f726167652e476574436f6e746578746c766b00c3617c680f4e656f2e53746f726167652e4765746c766b51527ac46203006c766b51c3616c75665bc56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b52c300a16c766b55527ac46c766b55c3640e00006c766b56527ac46205026c766b00c36168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b57527ac46c766b57c3640e00006c766b56527ac462c9016c766b00c36c766b51c39c6c766b58527ac46c766b58c3640e00516c766b56527ac462a4016168164e656f2e53746f726167652e476574436f6e746578746c766b00c3617c680f4e656f2e53746f726167652e4765746c766b53527ac46c766b53c36c766b52c39f6c766b59527ac46c766b59c3640e00006c766b56527ac46247016c766b53c36c766b52c39c6c766b5a527ac46c766b5ac3643b006168164e656f2e53746f726167652e476574436f6e746578746c766b00c3617c68124e656f2e53746f726167652e44656c657465616241006168164e656f2e53746f726167652e476574436f6e746578746c766b00c36c766b53c36c766b52c394615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e746578746c766b51c3617c680f4e656f2e53746f726167652e4765746c766b54527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b51c36c766b54c36c766b52c393615272680f4e656f2e53746f726167652e50757461616c766b00c36c766b51c36c766b52c3615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667961516c766b56527ac46203006c766b56c3616c7566', - 'hex', -); - -export const switcheoV2TokenContract = new Contract({ - script: switcheoTokenV2ContractScript, - parameterList: [ContractParameterType.String, ContractParameterType.Array], - - returnType: ContractParameterType.ByteArray, - name: 'Switcheo Token', - codeVersion: '2.0.0', - author: 'Switcheo', - email: 'engineering@switcheo.network', - description: 'Switcheo Token', - contractProperties: ContractPropertyState.HasStorageDynamicInvokePayable, -}); - -export const nosTokenScript = Buffer.from( - '011cc56b6c766b00527ac46c766b51527ac4616168164e656f2e52756e74696d652e47657454726967676572609c6c766b52527ac46c766b52c3642704616165162d6396006c766b00c30561646d696e87916482006c766b51c300c311496e6974536d617274436f6e747261637487916464006c766b00c30a416464416464726573738791644f006c766b00c30d5265766f6b654164647265737387916437006c766b00c30e47657447726f75704e756d6265728791641e006c766b00c31063726f776473616c655f737461747573879162040000620400006c766b53527ac46c766b53c3644100611e536d61727420436f6e7472616374206e6f7420496e697469616c6973656461680f4e656f2e52756e74696d652e4c6f6761006c766b54527ac462b7036c766b00c30561646d696e87640a0061655d2b620400006c766b55527ac46c766b55c3649900616c766b51c300c36c766b56527ac4616165c3046c766b57527ac4006c766b58527ac46259006c766b57c36c766b58c3c36c766b59527ac4616c766b59c36c766b56c3876c766b5a527ac46c766b5ac3641d00616c766b56c36c766b51c3617c6569056c766b54527ac4622403616c766b58c351936c766b58527ac46c766b58c36c766b57c3c09f639eff006c766b54527ac462fb0261616555346c766b5b527ac4006c766b5c527ac462c6006c766b5bc36c766b5cc3c36c766b5d527ac4616c766b5dc36c766b00c3876c766b5e527ac46c766b5ec3648a00616c766b00c36c766b51c361682b53797374656d2e457865637574696f6e456e67696e652e47657443616c6c696e675363726970744861736861682953797374656d2e457865637574696f6e456e67696e652e476574456e74727953637269707448617368615379517955727551727552795279547275527275653c346c766b54527ac4623002616c766b5cc351936c766b5c527ac46c766b5cc36c766b5bc3c09f6331ff616165d12a6c766b5f527ac4006c766b60527ac4625d006c766b5fc36c766b60c3c36c766b0111527ac4616c766b0111c36c766b00c3876c766b0112527ac46c766b0112c3641d00616c766b00c36c766b51c3617c652f2b6c766b54527ac462b001616c766b60c351936c766b60527ac46c766b60c36c766b5fc3c09f639aff616165d3166c766b0113527ac4006c766b0114527ac46261006c766b0113c36c766b0114c3c36c766b0115527ac4616c766b0115c36c766b00c3876c766b0116527ac46c766b0116c3641d00616c766b00c36c766b51c3617c65f3166c766b54527ac4622c01616c766b0114c351936c766b0114527ac46c766b0114c36c766b0113c3c09f6394ff6c766b00c30d4d696e74546f6b656e73457468876c766b0117527ac46c766b0117c3646800616114d806bccf0a39d18cb0c1809548de048587f84f2e616507296411006c766b51c353617c651e23620400006c766b0118527ac46c766b0118c3642900616c766b51c300c36c766b51c351c36c766b51c352c361527265080f6c766b54527ac462810061616271006168164e656f2e52756e74696d652e47657454726967676572009c6c766b0119527ac46c766b0119c364450061616504286c766b011b527ac46c766b011bc3640f0061516c766b54527ac4622e006165a3196c766b011a527ac46c766b011ac361651c456c766b54527ac4620e00006c766b54527ac46203006c766b54c3616c756600c56b036e4f53616c756600c56b034e4f53616c756600c56b03a06701616c756600c56b51616c756600c56b02a800616c756600c56b00616c756600c56b0141616c756600c56b51616c756600c56b0800008a5d78456301616c756600c56b021208616c756600c56b52c57600048033e101c47651048066a000c4616c756600c56b51c5760003f86178c4616c756600c56b51c5760003f86178c4616c756600c56b0119616c756600c56b024842616c756600c56b02a06b616c756600c56b0370b600616c756600c56b61654bff616c756600c56b04a04ad75b616c756600c56b041031db5b616c756600c56b04203fdb5b616c756600c56b04a079e45b616c756600c56b044094cb0f616c756600c56b0480969800616c756600c56b137b224e45502d35222c20224e45502d3130227d616c756600c56b51616c756600c56b59c576001b416c6c6f636174655072697661746553616c655075726368617365c47651194c6f636b5072697661746553616c65416c6c6f636174696f6ec476520f436f6e74726163744d696772617465c476531e456e61626c655472616e7366657246726f6d57686974656c697374696e67c4765411496e6974536d617274436f6e7472616374c476551255706461746541646d696e41646472657373c476561857686974656c6973745472616e7366657246726f6d416464c476571b57686974656c6973745472616e7366657246726f6d52656d6f7665c4765811436c61696d556e736f6c64546f6b656e73c4616c75665fc56b6c766b00527ac46c766b51527ac4616c766b00c31b57686974656c6973745472616e7366657246726f6d52656d6f7665876c766b52527ac46c766b52c3644100616c766b51c352617c65db1f009c6c766b53527ac46c766b53c3640f0061006c766b54527ac462da026c766b51c351c36165ef0a6c766b54527ac462c5026c766b00c31857686974656c6973745472616e7366657246726f6d416464876c766b55527ac46c766b55c3644100616c766b51c352617c656f1f009c6c766b56527ac46c766b56c3640f0061006c766b54527ac4626e026c766b51c351c36165a8096c766b54527ac46259026c766b00c31e456e61626c655472616e7366657246726f6d57686974656c697374696e67876c766b57527ac46c766b57c3643c00616c766b51c352617c65fd1e009c6c766b58527ac46c766b58c3640f0061006c766b54527ac462fc016c766b51c351c36165d60875616259006c766b00c311436c61696d556e736f6c64546f6b656e73876c766b59527ac46c766b59c3643200616c766b51c351617c659d1e009c6c766b5a527ac46c766b5ac3640f0061006c766b54527ac4629c016165334d75616c766b00c36c766b5b527ac46c766b5bc31b416c6c6f636174655072697661746553616c655075726368617365876379006c766b5bc30f436f6e74726163744d6967726174658763ad006c766b5bc311496e6974536d617274436f6e74726163748763cd006c766b5bc3194c6f636b5072697661746553616c65416c6c6f636174696f6e8763b8006c766b5bc31255706461746541646d696e416464726573738763aa0062e4006c766b51c354617c65c81d009c6c766b5c527ac46c766b5cc3640f0061006c766b54527ac462c7006c766b51c351c36c766b51c352c36c766b51c353c361527265b5006c766b54527ac462a2006c766b51c35a617c657b1d009c6c766b5d527ac46c766b5dc3640f0061006c766b54527ac4627a006c766b51c3616574046c766b54527ac4626700616504056c766b54527ac46259006165b8036c766b54527ac4624b006c766b51c352617c65241d009c6c766b5e527ac46c766b5ec3640f0061006c766b54527ac46223006c766b51c351c3616581066c766b54527ac4620e00006c766b54527ac46203006c766b54c3616c75665bc56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b52c30400e1f505956a52527ac46168164e656f2e53746f726167652e476574436f6e746578746165233e617c680f4e656f2e53746f726167652e47657400a06c766b53527ac46c766b53c36c766b56527ac46c766b56c3646a006151c576003f416c6c6f636174655072697661746553616c6550757263686173652829207072697661746553616c654c6f636b65642c2063616e277420616c6c6f63617465c46168124e656f2e52756e74696d652e4e6f7469667961006c766b57527ac46277026c766b51c309696e63656e746976658791642b006c766b51c30b7072697661746553616c6587916415006c766b51c307636f6d70616e798791620400006c766b58527ac46c766b58c3640f0061006c766b57527ac4621f0261654efa0400e1f505956c766b54527ac46168164e656f2e53746f726167652e476574436f6e746578746165293d617c680f4e656f2e53746f726167652e4765746c766b55527ac46c766b55c36c766b52c3936c766b54c3a06c766b59527ac46c766b59c3646c006151c5760041416c6c6f636174655072697661746553616c65507572636861736528292070757263686173652077696c6c20657863656564206d617820616c6c6f636174696f6ec46168124e656f2e52756e74696d652e4e6f7469667961006c766b57527ac4624e016c766b00c36c766b51c36c766b52c3615272657e44009c6c766b5a527ac46c766b5ac3644f006151c576002453657456657374696e67506572696f64466f72416464726573732829206661696c65642ec46168124e656f2e52756e74696d652e4e6f7469667961006c766b57527ac462dc006168164e656f2e53746f726167652e476574436f6e746578746165f73b6c766b55c36c766b52c393615272680f4e656f2e53746f726167652e5075746161006c766b00c36c766b52c3615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f746966796154c576002e416c6c6f636174655072697661746553616c655075726368617365282920746f6b656e7320616c6c6f6361746564c476516c766b00c3c476526c766b52c3c476536c766b51c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b57527ac46203006c766b57c3616c756651c56b613e4c6f636b5072697661746553616c65416c6c6f636174696f6e282920667572746865722070726573616c6520616c6c6f636174696f6e73206c6f636b656461680f4e656f2e52756e74696d652e4c6f67616168164e656f2e53746f726167652e476574436f6e7465787461659c3a61656a0f615272680f4e656f2e53746f726167652e50757461516c766b00527ac46203006c766b00c3616c756652c56b6c766b00527ac4616c766b00c351c36c766b00c352c36c766b00c353c36c766b00c354c36c766b00c355c36c766b00c356c36c766b00c357c36c766b00c358c36c766b00c359c361587951795a727551727557795279597275527275567953795872755372755579547957727554727568144e656f2e436f6e74726163742e4d69677261746575516c766b51527ac46203006c766b51c3616c756656c56b616165571e6c766b54527ac46c766b54c36453006130496e6974536d617274436f6e7472616374282920636f6e747261637420616c726561647920696e697469616c6973656461680f4e656f2e52756e74696d652e4c6f6761006c766b55527ac4625b016165380e6c766b00527ac46168164e656f2e53746f726167652e476574436f6e74657874616551386c766b00c3615272680f4e656f2e53746f726167652e5075746161654ef60400e1f505956c766b51527ac46114a34ef9ba9549f2a5ffae1966ea8fbdde47839f206c766b51c3617c65c1196161006114a34ef9ba9549f2a5ffae1966ea8fbdde47839f206c766b51c3615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f74696679616165d0f50400e1f505956c766b52527ac46c766b51c36c766b52c3936c766b53527ac46c766b53c36165ad1b616114ac5dcfb1298d08af13dd5aeee94336cc2fe83e3961656900756165bbf56165dc007534496e6974536d617274436f6e7472616374282920636f6e747261637420696e697469616c69736174696f6e20636f6d706c65746561680f4e656f2e52756e74696d652e4c6f6761516c766b55527ac46203006c766b55c3616c756653c56b6c766b00527ac4616c766b00c3c001149c009c6c766b51527ac46c766b51c3640f0061006c766b52527ac46245006168164e656f2e53746f726167652e476574436f6e7465787461659c366c766b00c3615272680f4e656f2e53746f726167652e50757461516c766b52527ac46203006c766b52c3616c756652c56b6c766b00527ac4616168164e656f2e53746f726167652e476574436f6e74657874616536386c766b00c363080001306205000131615272680f4e656f2e53746f726167652e50757461516c766b51527ac46203006c766b51c3616c756654c56b6c766b00527ac4616c766b00c3c001149c009c6c766b52527ac46c766b52c3640f0061006c766b53527ac462a4006168164e656f2e53746f726167652e476574436f6e7465787461658d37617c6591456c766b51527ac46c766b51c36c766b00c3013161527265a2456152c576003657686974656c6973745472616e7366657246726f6d416464282920616464656420636f6e747261637420746f2077686974656c697374c476516c766b00c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b53527ac46203006c766b53c3616c756654c56b6c766b00527ac4616c766b00c3c001149c009c6c766b52527ac46c766b52c3640f0061006c766b53527ac462a8006168164e656f2e53746f726167652e476574436f6e746578746165b236617c65b6446c766b51527ac46c766b51c36c766b00c3617c6522456152c576003d57686974656c6973745472616e7366657246726f6d52656d6f766528292072656d6f76656420636f6e74726163742066726f6d2077686974656c697374c476516c766b00c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b53527ac46203006c766b53c3616c75660114c56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b52c36c766b00c36c766b51c36152726568106c766b53527ac46c766b53c300c36c766b54527ac46c766b53c351c36c766b55527ac46c766b53c352c36c766b56527ac46c766b53c355c36c766b57527ac46c766b53c356c36c766b58527ac46c766b53c357c36c766b59527ac46c766b53c358c30400e1f505956c766b5a527ac46c766b53c359c36c766b5b527ac46c766b53c361655a03009c6c766b60527ac46c766b60c364870061616c766b00c36c766b52c3617c09726566756e6445746853c168124e656f2e52756e74696d652e4e6f746966796152c57600294d696e74546f6b656e7345746828292043616e557365725061727469636970617465206661696c6564c4765100c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0111527ac462bb026165f708616533f19f009c6c766b0112527ac46c766b0112c3648b0061616c766b00c36c766b52c3617c09726566756e6445746853c168124e656f2e52756e74696d652e4e6f746966796152c576002d4d696e74546f6b656e734574682829206661696c65642e20546f6b656e2053616c6520697320636c6f7365642ec4765100c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0111527ac46217026168164e656f2e53746f726167652e476574436f6e7465787461654933617c680f4e656f2e53746f726167652e4765746c766b5c527ac46c766b5cc36c766b54c36168174e656f2e5472616e73616374696f6e2e476574486173689c6c766b0113527ac46c766b0113c3647e006152c57600304d696e74546f6b656e734574682829206e6f742070726f63657373696e67206475706c69636174652074782e48617368c476516c766b54c36168174e656f2e5472616e73616374696f6e2e47657448617368c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0111527ac4622f016165cc286c766b5d527ac46168164e656f2e53746f726167652e476574436f6e74657874616556326c766b54c36168174e656f2e5472616e73616374696f6e2e47657448617368615272680f4e656f2e53746f726167652e5075746152c576001b4d696e74546f6b656e734574682829207265636569766564455448c476516c766b52c3c46168124e656f2e52756e74696d652e4e6f74696679616c766b55c36165583d6c766b5e527ac46c766b55c3616524276c766b5ac3936c766b5ec3936c766b5f527ac46c766b55c36c766b5fc3617c659112616c766b55c36c766b5bc3617c654811616c766b5ac36165d0146161006c766b55c36c766b5ac3615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667961516c766b0111527ac46203006c766b0111c3616c756660c56b6c766b00527ac4616c766b00c300c36c766b51527ac46c766b00c351c36c766b52527ac46c766b00c352c36c766b53527ac46c766b00c353c36c766b54527ac46c766b00c354c36c766b55527ac46c766b00c355c36c766b56527ac46c766b00c356c36c766b57527ac46c766b00c357c36c766b58527ac46c766b00c358c36c766b59527ac46c766b00c359c36c766b5a527ac46c766b56c300a16c766b5b527ac46c766b5bc36461006152c576002e43616e55736572506172746963697061746528292073656e646572206973206e6f742077686974656c6973746564c476516c766b52c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b5c527ac462ac016c766b56c361659a1c009c6c766b5d527ac46c766b5dc36465006152c576003243616e55736572506172746963697061746528292073656e6465722063616e6e6f7420706172746963697061746520796574c476516c766b52c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b5c527ac46230016c766b57c300a16c766b5e527ac46c766b5ec36468006152c576003543616e55736572506172746963697061746528292063726f776473616c65417661696c61626c65416d6f756e74206973203c3d2030c476516c766b57c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b5c527ac462b5006c766b5ac36c766b58c3a06c766b5f527ac46c766b5fc36490006154c576004c4c43616e55736572506172746963697061746528292073656e6465727320707572636861736520696e204554482077696c6c20657863656564206d6178436f6e747269627574696f6e20636170c476516c766b52c3c476526c766b5ac3c476536c766b58c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b5c527ac4620e00516c766b5c527ac46203006c766b5cc3616c756600c56b54c576001642616c616e63654f6656657374656441646472657373c476511d49735072697661746553616c65416c6c6f636174696f6e4c6f636b6564c4765212737570706f727465645374616e6461726473c476531942616c616e63654f6653616c65436f6e747269627574696f6ec4616c756656c56b6c766b00527ac46c766b51527ac4616c766b00c36c766b52527ac46c766b52c31642616c616e63654f665665737465644164647265737387636c006c766b52c31d49735072697661746553616c65416c6c6f636174696f6e4c6f636b6564876382006c766b52c312737570706f727465645374616e64617264738763a0006c766b52c31942616c616e63654f6653616c65436f6e747269627574696f6e87638b0062c5006c766b51c351617c65f60b009c6c766b53527ac46c766b53c3640f0061006c766b54527ac462a8006c766b51c300c361656a016c766b54527ac46293006168164e656f2e53746f726167652e476574436f6e746578746165322d617c680f4e656f2e53746f726167652e4765746c766b54527ac4625900616547ea6c766b54527ac4624b006c766b51c351617c65710b009c6c766b55527ac46c766b55c3640f0061006c766b54527ac46223006c766b51c300c3616521006c766b54527ac4620e00006c766b54527ac46203006c766b54c3616c756654c56b6c766b00527ac4616c766b00c3c001149c009c6c766b52527ac46c766b52c3645700613442616c616e63654f6653616c65436f6e747269627574696f6e282920696e76616c6964206164647265737320737570706c69656461680f4e656f2e52756e74696d652e4c6f6761006c766b53527ac46245006168164e656f2e53746f726167652e476574436f6e746578746165472b617c65d23a6c766b51527ac46c766b51c36c766b00c3617c658c3b6c766b53527ac46203006c766b53c3616c756654c56b6c766b00527ac4616c766b00c3c001149c009c6c766b52527ac46c766b52c3645400613142616c616e63654f6656657374656441646472657373282920696e76616c6964206164647265737320737570706c69656461680f4e656f2e52756e74696d652e4c6f6761006c766b53527ac46245006168164e656f2e53746f726167652e476574436f6e746578746165d72b617c65113a6c766b51527ac46c766b51c36c766b00c3617c65cb3a6c766b53527ac46203006c766b53c3616c756652c56b616168184e656f2e426c6f636b636861696e2e4765744865696768746168184e656f2e426c6f636b636861696e2e4765744865616465726c766b00527ac46c766b00c36168174e656f2e4865616465722e47657454696d657374616d706c766b51527ac46203006c766b51c3616c756651c56b616168164e656f2e53746f726167652e476574436f6e746578746165ac29617c680f4e656f2e53746f726167652e4765746c766b00527ac46203006c766b00c3616c75660122c56b6161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b00527ac46c766b00c361681d4e656f2e5472616e73616374696f6e2e4765745265666572656e6365736c766b51527ac46c766b51c300c36c766b52527ac46c766b00c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736c766b53527ac46c766b52c36168184e656f2e4f75747075742e476574536372697074486173686c766b54527ac461682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686c766b55527ac4006c766b56527ac4006c766b57527ac4616c766b51c36c766b60527ac4006c766b0111527ac46264006c766b60c36c766b0111c3c36c766b0112527ac4616c766b0112c36168184e656f2e4f75747075742e476574536372697074486173686c766b55c39c6c766b0113527ac46c766b0113c36406006161f0616c766b0111c351936c766b0111527ac46c766b0111c36c766b60c3c09f6392ff616c766b53c36c766b0114527ac4006c766b0115527ac462c5016c766b0114c36c766b0115c3c36c766b0116527ac4616c766b0116c36168184e656f2e4f75747075742e476574536372697074486173686c766b55c39c6c766b0117527ac46c766b0117c3646601616c766b0116c36168134e656f2e4f75747075742e47657456616c75656c766b0118527ac453c576002a4765745472616e73616374696f6e446174612829205265636569766564204465706f7369742074797065c476516c766b55c3c476526c766b52c36168154e656f2e4f75747075742e47657441737365744964c46168124e656f2e52756e74696d652e4e6f74696679616c766b52c36168154e656f2e4f75747075742e4765744173736574496461209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c6c766b0119527ac46c766b0119c3641b00616c766b56c36c766b0118c3936c766b56527ac4616269006c766b52c36168154e656f2e4f75747075742e476574417373657449646120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c609c6c766b011a527ac46c766b011ac3641800616c766b57c36c766b0118c3936c766b57527ac46161616c766b0115c351936c766b0115527ac46c766b0115c36c766b0114c3c09f6330fe6c766b54c36165b9126c766b58527ac461659f196c766b59527ac46c766b58c36165a9100400e1f505956c766b5a527ac4006c766b5b527ac4006c766b5c527ac4006c766b5d527ac46c766b59c36c766b5e527ac46165dbe2640d006c766b56c300a0620400006c766b011b527ac46c766b011bc3647e00616c766b56c36165bae2956c766b011c527ac46c766b011cc36c766b5ec3a06c766b011d527ac46c766b011dc3642c00616c766b011cc36c766b5ec394616583e2966c766b5c527ac46c766b5ec36c766b5b527ac461621200616c766b011cc36c766b5b527ac4616c766b5ec36c766b5bc3946c766b5e527ac46161654fe2640d006c766b57c300a0620400006c766b011e527ac46c766b011ec3647800616c766b57c361652ee2956c766b011f527ac46c766b011fc36c766b5ec3a06c766b0120527ac46c766b0120c3643200616c766b011fc36c766b5ec3946165f7e1966c766b5d527ac46c766b5bc36c766b5ec3936c766b5b527ac461621800616c766b5bc36c766b011fc3936c766b5b527ac461616c766b54c36165b0f86c766b5bc3936c766b5f527ac45cc576006c766b00c3c476516c766b54c3c476526c766b55c3c476536c766b56c3c476546c766b57c3c476556c766b58c3c476566c766b59c3c476576c766b5ac3c476586c766b5bc3c476596c766b5cc3c4765a6c766b5dc3c4765b6c766b5fc3c46c766b0121527ac46203006c766b0121c3616c75665ec56b6c766b00527ac46c766b51527ac46c766b52527ac46161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b53527ac46c766b52c36c766b54527ac46c766b52c36c766b55527ac452c57600314765744574685472616e73616374696f6e44617461282920526563656976656420455448204465706f7369742074797065c476516c766b55c3c46168124e656f2e52756e74696d652e4e6f74696679616c766b54c36165e80f6c766b56527ac46165ce166c766b57527ac46c766b56c36165d80d0400e1f505956c766b58527ac4006c766b59527ac4616549e06412006c766b00c3616545e09f009c620400006c766b5b527ac46c766b5bc3642c00616c766b00c3616535e09508000064a7b3b6e00d966c766b5c527ac46c766b5cc36c766b59527ac4616c766b54c36165e2f66c766b59c30400e1f50595936c766b5a527ac45ac576006c766b53c3c476516c766b54c3c476526c766b55c3c476536c766b51c3c476546c766b00c3c476556c766b56c3c476566c766b57c3c476576c766b58c3c476586c766b59c3c476596c766b5ac3c46c766b5d527ac46203006c766b5dc3616c756655c56b6c766b00527ac4616165de006c766b51527ac46c766b51c364bb00616168164e656f2e53746f726167652e476574436f6e7465787461658f23617c6593316c766b52527ac46c766b52c36c766b00c3617c654d320131876c766b53527ac453c576003a4973436f6e747261637457686974656c69737465645472616e7366657246726f6d282920616464726573732c20697357686974654c6973746564c476516c766b00c3c476526c766b53c3c46168124e656f2e52756e74696d652e4e6f74696679616c766b53c36c766b54527ac4620e00516c766b54527ac46203006c766b54c3616c756652c56b616168164e656f2e53746f726167652e476574436f6e746578746165e322617c680f4e656f2e53746f726167652e4765740131876c766b00527ac452c576002b49735472616e7366657246726f6d57686974656c697374696e67456e61626c6564206973456e61626c6564c476516c766b00c3c46168124e656f2e52756e74696d652e4e6f74696679616c766b00c36c766b51527ac46203006c766b51c3616c756653c56b6c766b00527ac46c766b51527ac4616c766b00c3c06c766b51c39c6c766b52527ac46203006c766b52c3616c756655c56b6c766b00527ac46c766b51527ac4616c766b00c3c001289c009c6c766b53527ac46c766b53c36452006137536574416c6c6f77616e6365416d6f756e74282920696e76616c6964207472616e73666572417070726f76616c4b65792e4c656e67746861680f4e656f2e52756e74696d652e4c6f6761626f006168164e656f2e53746f726167652e476574436f6e7465787461651d21617c65772f6c766b52527ac46c766b51c3009c6c766b54527ac46c766b54c3641800616c766b52c36c766b00c3617c65cc2f6161621b00616c766b52c36c766b00c36c766b51c3615272654a306161616c756655c56b6c766b00527ac46c766b51527ac4616c766b00c3c001149c009c6c766b53527ac46c766b53c3644e00613353657442616c616e63654f6653616c65436f6e747269627574696f6e282920616464726573732e6c656e67746820213d20323061680f4e656f2e52756e74696d652e4c6f676162c1006168164e656f2e53746f726167652e476574436f6e746578746165051f617c65902e6c766b52527ac46c766b51c300a16c766b54527ac46c766b54c3641800616c766b52c36c766b00c3617c65e52e6161626d006152c576002e53657442616c616e63654f6653616c65436f6e747269627574696f6e28292073657474696e672062616c616e6365c476516c766b51c3c46168124e656f2e52756e74696d652e4e6f74696679616c766b52c36c766b00c36c766b51c361527265112f6161616c756655c56b6c766b00527ac46c766b51527ac4616c766b00c3c001149c009c6c766b53527ac46c766b53c3643e00612353657442616c616e63654f66282920616464726573732e6c656e67746820213d20323061680f4e656f2e52756e74696d652e4c6f676162b1006168164e656f2e53746f726167652e476574436f6e746578746165ae1d617c65672d6c766b52527ac46c766b51c300a16c766b54527ac46c766b54c3641800616c766b52c36c766b00c3617c65bc2d6161625d006152c576001e53657442616c616e63654f6628292073657474696e672062616c616e6365c476516c766b51c3c46168124e656f2e52756e74696d652e4e6f74696679616c766b52c36c766b00c36c766b51c361527265f82d6161616c756656c56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b00c3c001149c009c6c766b54527ac46c766b54c3644a00612f53657442616c616e63654f66566573746564416d6f756e74282920616464726573732e6c656e67746820213d20323061680f4e656f2e52756e74696d652e4c6f676162c5006168164e656f2e53746f726167652e476574436f6e746578746165011e617c653b2c6c766b53527ac46c766b51c300a16c766b55527ac46c766b55c3641800616c766b53c36c766b00c3617c65902c61616271006153c576002a53657442616c616e63654f66566573746564416d6f756e7428292073657474696e672062616c616e6365c476516c766b51c3c476526c766b52c3c46168124e656f2e52756e74696d652e4e6f74696679616c766b53c36c766b00c36c766b51c361527265b82c6161616c756652c56b6c766b00527ac461616504136c766b51527ac452c5760028536574546f74616c537570706c7928292073657474696e67206e657720746f74616c537570706c79c476516c766b00c36c766b51c393c46168124e656f2e52756e74696d652e4e6f74696679616168164e656f2e53746f726167652e476574436f6e7465787461659b1c6c766b51c36c766b00c393615272680f4e656f2e53746f726167652e50757461616c756652c56b616165bd006c766b00527ac46c766b00c3644200616168164e656f2e53746f726167652e476574436f6e746578746165e31a617c680f4e656f2e53746f726167652e47657461653b006c766b51527ac4622800616114ac5dcfb1298d08af13dd5aeee94336cc2fe83e39616516006c766b51527ac46203006c766b51c3616c756652c56b6c766b00527ac4616c766b00c36168184e656f2e52756e74696d652e436865636b5769746e6573736c766b51527ac46203006c766b51c3616c756651c56b616168164e656f2e53746f726167652e476574436f6e746578746165631a617c680f4e656f2e53746f726167652e47657400a06c766b00527ac46203006c766b00c3616c756600c56b58c576000a41646441646472657373c476511063726f776473616c655f737461747573c476520e476574426c6f636b486569676874c476531747657447726f75704d6178436f6e747269627574696f6ec476540e47657447726f75704e756d626572c476551247657447726f7570556e6c6f636b54696d65c476561c47726f757050617274696369706174696f6e4973556e6c6f636b6564c476570d5265766f6b6541646472657373c4616c75665fc56b6c766b00527ac46c766b51527ac4616c766b00c31063726f776473616c655f737461747573876c766b52527ac46c766b52c3644100616c766b51c351617c65acf8009c6c766b53527ac46c766b53c3640f0061006c766b54527ac462b2026c766b51c300c361658a036c766b54527ac4629d026c766b00c30e47657447726f75704e756d626572876c766b55527ac46c766b55c3644100616c766b51c351617c654af8009c6c766b56527ac46c766b56c3640f0061006c766b54527ac46250026c766b51c300c3616578056c766b54527ac4623b026c766b00c31c47726f757050617274696369706174696f6e4973556e6c6f636b6564876c766b57527ac46c766b57c3644100616c766b51c351617c65daf7009c6c766b58527ac46c766b58c3640f0061006c766b54527ac462e0016c766b51c300c3616584056c766b54527ac462cb016c766b00c30e476574426c6f636b486569676874876c766b59527ac46c766b59c3642900616168184e656f2e426c6f636b636861696e2e4765744865696768746c766b54527ac46281016c766b00c36c766b5a527ac46c766b5ac30a4164644164647265737387635a006c766b5ac31747657447726f75704d6178436f6e747269627574696f6e87637e006c766b5ac31247657447726f7570556e6c6f636b54696d6587639f006c766b5ac30d5265766f6b65416464726573738763c50062ff006c766b51c352617c65dcf6009c6c766b5b527ac46c766b5bc3640f0061006c766b54527ac462e2006c766b51c300c36c766b51c351c3617c65d8006c766b54527ac462c5006c766b51c351617c6597f6009c6c766b5c527ac46c766b5cc3640f0061006c766b54527ac4629d006c766b51c300c36165d0016c766b54527ac46288006c766b51c351617c655af6009c6c766b5d527ac46c766b5dc3640f0061006c766b54527ac46260006c766b51c300c36165fc026c766b54527ac4624b006c766b51c351617c651df6009c6c766b5e527ac46c766b5ec3640f0061006c766b54527ac46223006c766b51c300c3616537046c766b54527ac4620e00006c766b54527ac46203006c766b54c3616c756656c56b6c766b00527ac46c766b51527ac4616c766b00c3c00114907c907c9e6317006c766b51c300a1630d006c766b51c354a0620400516c766b52527ac46c766b52c364100061006c766b53527ac462820061149543778cf1077e3310a8cdede1a140754465b6c5616546fb6c766b54527ac46c766b54c3644e00616168164e656f2e53746f726167652e476574436f6e7465787461657216617c657b256c766b55527ac46c766b55c36c766b00c36c766b51c3615272657a2661516c766b53527ac4620e00006c766b53527ac46203006c766b53c3616c756654c56b6c766b00527ac4616c766b00c3c001149c009c6c766b52527ac46c766b52c3640f0061006c766b53527ac46224006c766b00c3616519026c766b51527ac46c766b51c300a06c766b53527ac46203006c766b53c3616c75665cc56b6c766b00527ac461006c766b51527ac46165e8ea6c766b52527ac461653dd26c766b53527ac4616512d36c766b54527ac46c766b52c36165ded2907c907c9f6312006c766b52c36165d9d2a0009c620400006c766b55527ac46c766b55c3649d00616c766b00c3519c6c766b56527ac46c766b56c364130061616590d26c766b51527ac4616272006c766b00c3529c6c766b57527ac46c766b57c36413006161655fd26c766b51527ac461624c006c766b00c3539c6c766b58527ac46c766b58c36413006161652fd26c766b51527ac4616226006c766b00c3549c6c766b59527ac46c766b59c3641000616165ffd16c766b51527ac461616256006c766b00c300a0642e006c766b00c354a16424006c766b52c3616518d2907c907c9f6313006c766b52c36c766b54c3a0009c620400006c766b5a527ac46c766b5ac3641100616c766b53c36c766b51527ac4616c766b51c36c766b5b527ac46203006c766b5bc3616c756655c56b6c766b00527ac461006c766b51527ac46c766b00c300a1630d006c766b00c354a0620400516c766b52527ac46c766b52c3640f0061006c766b53527ac46243006c766b00c300a0640d006c766b00c354a1620400006c766b54527ac46c766b54c364100061616546d16c766b51527ac4616c766b51c36c766b53527ac46203006c766b53c3616c756654c56b6c766b00527ac4616c766b00c3c001149c009c6c766b52527ac46c766b52c3640f0061006c766b53527ac46245006168164e656f2e53746f726167652e476574436f6e7465787461659313617c659c226c766b51527ac46c766b51c36c766b00c3617c6556236c766b53527ac46203006c766b53c3616c756654c56b6c766b00527ac4616c766b00c300a0009c6c766b52527ac46c766b52c3640f0061006c766b53527ac4623b006c766b00c36165c3fe6c766b51527ac46c766b51c300907c907ca16312006c766b51c3616538e8a0009c620400006c766b53527ac46203006c766b53c3616c756655c56b6c766b00527ac4616c766b00c3c001149c009c6c766b51527ac46c766b51c364100061006c766b52527ac4627c0061149543778cf1077e3310a8cdede1a140754465b6c5616551f76c766b53527ac46c766b53c3644800616168164e656f2e53746f726167652e476574436f6e7465787461657d12617c6586216c766b54527ac46c766b54c36c766b00c3617c65f22161516c766b52527ac4620e00006c766b52527ac46203006c766b52c3616c756600c56b58616c756600c56b5bc57600046e616d65c476510673796d626f6cc4765208646563696d616c73c476530b746f74616c537570706c79c476540962616c616e63654f66c47655087472616e73666572c476560c7472616e7366657246726f6dc4765707617070726f7665c4765809616c6c6f77616e6365c476591a63726f776473616c655f617661696c61626c655f616d6f756e74c4765a0a6d696e74546f6b656e73c4616c75660115c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac4616c766b00c3046e616d65876c766b54527ac46c766b54c3641200616165cacd6c766b55527ac4627a036c766b00c30673796d626f6c876c766b56527ac46c766b56c3641200616165aacd6c766b55527ac4624f036c766b00c308646563696d616c73876c766b57527ac46c766b57c3641200616165c0fe6c766b55527ac46222036c766b00c30b746f74616c537570706c79876c766b58527ac46c766b58c364120061616559076c766b55527ac462f2026c766b00c30962616c616e63654f66876c766b59527ac46c766b59c3644100616c766b51c351617c6566ef009c6c766b5a527ac46c766b5ac3640f0061006c766b55527ac462aa026c766b51c300c3616504066c766b55527ac46295026c766b00c3087472616e73666572876c766b5b527ac46c766b5bc3646d00616c766b51c353617c650aef009c6c766b5c527ac46c766b5cc3640f0061006c766b55527ac4624e026c766b51c300c36c766b51c351c36c766b51c352c36c766b52c36c766b53c361547951795672755172755379527955727552727565bb066c766b55527ac4620d026c766b00c30c7472616e7366657246726f6d876c766b5d527ac46c766b5dc3647e00616c766b51c354617c657eee009c6c766b5e527ac46c766b5ec3640f0061006c766b55527ac462c2016c766b51c300c36c766b51c351c36c766b51c352c36c766b51c353c36c766b52c36c766b53c36155795179577275517275547952795672755272755379537955727553727565f7096c766b55527ac46270016c766b00c307617070726f7665876c766b5f527ac46c766b5fc3646d00616c766b51c353617c65e6ed009c6c766b60527ac46c766b60c3640f0061006c766b55527ac4622a016c766b51c300c36c766b51c351c36c766b51c352c36c766b52c36c766b53c3615479517956727551727553795279557275527275650a026c766b55527ac462e9006c766b00c309616c6c6f77616e6365876c766b0111527ac46c766b0111c3644b00616c766b51c352617c655bed009c6c766b0112527ac46c766b0112c3640f0061006c766b55527ac4629d006c766b51c300c36c766b51c351c3617c6593006c766b55527ac46280006c766b00c31a63726f776473616c655f617661696c61626c655f616d6f756e74876c766b0113527ac46c766b0113c36412006161652f016c766b55527ac4623f006c766b00c30a6d696e74546f6b656e73876c766b0114527ac46c766b0114c36412006161655e126c766b55527ac4620e00006c766b55527ac46203006c766b55c3616c756655c56b6c766b00527ac46c766b51527ac4616c766b00c3c00114907c907c9e6311006c766b51c3c001149c009c620400516c766b53527ac46c766b53c3644f00612c416c6c6f77616e6365282920696e76616c69642066726f6d7c746f206164647265737320737570706c69656461680f4e656f2e52756e74696d652e4c6f6761006c766b54527ac4624b006168164e656f2e53746f726167652e476574436f6e746578746165d30d617c652d1c6c766b52527ac46c766b52c36c766b00c36c766b51c37e617c65e11c6c766b54527ac46203006c766b54c3616c756652c56b610800c013230d3a850061656903946c766b00527ac46c766b00c36c766b51527ac46203006c766b51c3616c75665cc56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac4616c766b53c36c766b54c39c6311006c766b53c36165bee9009c620400006c766b56527ac46c766b56c3640f00616c766b53c36a00527ac4616c766b52c3009f6311006c766b00c36c766b51c39c620400516c766b57527ac46c766b57c3645000612d417070726f7665282920696e76616c6964207472616e7366657220616d6f756e74206f722066726f6d3d3d746f61680f4e656f2e52756e74696d652e4c6f6761006c766b58527ac46274016c766b00c3c00114907c907c9e6311006c766b51c3c001149c009c620400516c766b59527ac46c766b59c36449006126417070726f766528292028746f7c6f726967696e61746f72292e4c656e67746820213d20323061680f4e656f2e52756e74696d652e4c6f6761006c766b58527ac46200016c766b00c36168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b5a527ac46c766b5ac3644000611d417070726f7665282920436865636b5769746e657373206661696c656461680f4e656f2e52756e74696d652e4c6f6761006c766b58527ac46292006c766b00c3616592006c766b55527ac46c766b55c36c766b52c39f6c766b5b527ac46c766b5bc36447006124417070726f766528292066726f6d42616c616e6365203c20617070726f766556616c756561680f4e656f2e52756e74696d652e4c6f6761006c766b58527ac46224006c766b00c36c766b51c37e6c766b52c3617c6583e961516c766b58527ac46203006c766b58c3616c756657c56b6c766b00527ac4616c766b00c3c001149c009c6c766b54527ac46c766b54c3644700612442616c616e63654f66282920696e76616c6964206164647265737320737570706c69656461680f4e656f2e52756e74696d652e4c6f6761006c766b55527ac46289006168164e656f2e53746f726167652e476574436f6e7465787461653b09617c65f4186c766b51527ac46c766b00c361658c156c766b52527ac46c766b51c36c766b00c3617c659e196c766b52c3946c766b53527ac46c766b53c3009f6c766b56527ac46c766b56c3640d0061006c766b53527ac4616c766b53c3007e6c766b55527ac46203006c766b55c3616c756651c56b616168164e656f2e53746f726167652e476574436f6e746578746165ef09617c680f4e656f2e53746f726167652e4765746c766b00527ac46203006c766b00c3616c75660112c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46161652fde61656bc69f6c766b5a527ac46c766b5ac364560061335472616e736665722829206e6f7420617661696c61626c65206265666f7265205075626c696353616c65456e6454696d65282961680f4e656f2e52756e74696d652e4c6f6761006c766b5b527ac46240036c766b53c36c766b54c39c6311006c766b53c36165c5e5009c620400006c766b5c527ac46c766b5cc3640f00616c766b53c36a00527ac4616c766b00c3c00114907c907c9e6311006c766b51c3c001149c009c620400516c766b5d527ac46c766b5dc364440061215472616e736665722829202866726f6d7c746f292e4c656e67746820213d20323061680f4e656f2e52756e74696d652e4c6f6761006c766b5b527ac46299026c766b52c3009f6c766b5e527ac46c766b5ec3644900612f5472616e73666572282920696e76616c6964207472616e7366657220616d6f756e74206d757374206265203e3d203061680f4e656f2e52756e74696d652e4c6f676161f06c766b00c3616525fd6c766b55527ac46c766b55c36c766b52c39f6c766b5f527ac46c766b5fc364490061265472616e7366657228292066726f6d42616c616e6365203c207472616e7366657256616c756561680f4e656f2e52756e74696d652e4c6f6761006c766b5b527ac462cd016c766b52c3009c6311006c766b00c36c766b51c39c620400516c766b60527ac46c766b60c3648200612c5472616e73666572282920656d707479207472616e7366657220616d6f756e74206f722066726f6d3d3d746f61680f4e656f2e52756e74696d652e4c6f6761616c766b00c36c766b51c36c766b52c3615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667961516c766b5b527ac46226016c766b00c36168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b0111527ac46c766b0111c3644100611e5472616e73666572282920436865636b5769746e657373206661696c656461680f4e656f2e52756e74696d652e4c6f6761006c766b5b527ac462b5006c766b51c361659dfb6c766b56527ac46c766b51c36165b1116c766b57527ac46c766b00c36165a1116c766b58527ac46c766b55c36c766b52c3946c766b59527ac46c766b00c36c766b59c36c766b58c393617c65dee6616c766b51c36c766b56c36c766b57c3936c766b52c393617c65c2e661616c766b00c36c766b51c36c766b52c3615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667961516c766b5b527ac46203006c766b5bc3616c75660114c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac46161654fda61658bc29f6c766b5c527ac46c766b5cc3645a0061375472616e7366657246726f6d2829206e6f7420617661696c61626c65206265666f7265205075626c696353616c65456e6454696d65282961680f4e656f2e52756e74696d652e4c6f6761006c766b5d527ac462ea036c766b54c36c766b55c39c6311006c766b54c36165e1e1009c620400006c766b5e527ac46c766b5ec3640f00616c766b54c36a00527ac4616c766b00c3c00114907c907c9e6321006c766b51c3c00114907c907c9e6311006c766b52c3c001149c009c620400516c766b5f527ac46c766b5fc364530061305472616e7366657246726f6d282920286f726967696e61746f727c66726f6d7c746f292e4c656e67746820213d20323061680f4e656f2e52756e74696d652e4c6f6761006c766b5d527ac46224036c766b53c3009f6c766b60527ac46c766b60c3644d0061335472616e7366657246726f6d282920696e76616c6964207472616e7366657220616d6f756e74206d757374206265203e3d203061680f4e656f2e52756e74696d652e4c6f676161f06c766b51c36c766b52c3617c65bcf56c766b56527ac46c766b51c3616508f96c766b57527ac46c766b56c36c766b53c39f6311006c766b57c36c766b53c39f620400516c766b0111527ac46c766b0111c36480006154c576003d5472616e7366657246726f6d28292028617574686f7269736564416d6f756e747c66726f6d42616c616e636529203c207472616e7366657256616c7565c476516c766b56c3c476526c766b57c3c476536c766b53c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b5d527ac462f3016c766b53c3009c6311006c766b51c36c766b52c39c620400516c766b0112527ac46c766b0112c364860061305472616e7366657246726f6d282920656d707479207472616e7366657220616d6f756e74206f722066726f6d3d3d746f61680f4e656f2e52756e74696d652e4c6f6761616c766b51c36c766b52c36c766b53c3615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667961516c766b5d527ac46246016c766b00c36168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b0113527ac46c766b0113c364450061225472616e7366657246726f6d282920436865636b5769746e657373206661696c656461680f4e656f2e52756e74696d652e4c6f6761006c766b5d527ac462d1006c766b52c361652bf76c766b58527ac46c766b52c361653f0d6c766b59527ac46c766b51c361652f0d6c766b5a527ac46c766b57c36c766b53c3946c766b5b527ac46c766b51c36c766b5bc36c766b5ac393617c656ce2616c766b52c36c766b58c36c766b59c3936c766b53c393617c6550e2616c766b51c36c766b00c37e6c766b56c36c766b53c394617c6510e061616c766b51c36c766b52c36c766b53c3615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667961516c766b5d527ac46203006c766b5dc3616c756600c56b10436f6e747261637441646d696e4b6579616c756600c56b0e42616c616e63655072656669785f616c756600c56b10436f6e7472616374496e697454696d65616c756600c56b1a436f6e747269627574696f6e42616c616e63655072656669785f616c756600c56b18466f756e646572546f6b656e556e6c6f636b526f756e645f616c756600c56b1e47726f7570436f6e747269627574696f6e416d6f756e745072656669785f616c756600c56b1247726f7570556e6c6f636b5072656669785f616c756600c56b144b594357686974656c697374417070726f766564616c756600c56b146c6173744d696e74546f6b656e73545848617368616c756600c56b176c6173744d696e74546f6b656e73545848617368457468616c756600c56b1b5072697661746553616c65416c6c6f636174696f6e4c6f636b6564616c756600c56b1550726573616c65416c6c6f636174656456616c7565616c756600c56b10546f6b656e546f74616c537570706c79616c756600c56b185472616e73666572416c6c6f77616e63655072656669785f616c756600c56b1456657374656442616c616e63655072656669785f616c756600c56b12566573746564546f6b656e5072656669785f616c756600c56b1b57686974654c69737465645472616e7366657246726f6d4c697374616c756600c56b2357686974654c6973745472616e7366657246726f6d53657474696e67436865636b6564616c756600c56b13556e736f6c64546f6b656e73436c61696d6564616c75660112c56b6c766b00527ac4616c766b00c300c36c766b51527ac46c766b00c351c36c766b52527ac46c766b00c352c36c766b53527ac46c766b00c353c36c766b54527ac46c766b00c354c36c766b55527ac46c766b00c355c36c766b56527ac46c766b00c356c36c766b57527ac46c766b00c357c36c766b58527ac46c766b00c358c36c766b59527ac46c766b00c359c36c766b5a527ac46c766b00c35ac36c766b5b527ac46c766b00c35bc36c766b5c527ac46c766b56c300a16c766b5d527ac46c766b5dc36461006152c576002e43616e55736572506172746963697061746528292073656e646572206973206e6f742077686974656c6973746564c476516c766b52c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b5e527ac462d7016c766b56c3616502ea009c6c766b5f527ac46c766b5fc36465006152c576003243616e55736572506172746963697061746528292073656e6465722063616e6e6f7420706172746963697061746520796574c476516c766b52c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b5e527ac4625b016c766b57c300a16c766b60527ac46c766b60c36468006152c576003543616e55736572506172746963697061746528292063726f776473616c65417661696c61626c65416d6f756e74206973203c3d2030c476516c766b57c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b5e527ac462e0006c766b5cc36c766b58c3a06c766b0111527ac46c766b0111c364b9006154c576004543616e55736572506172746963697061746528292073656e646572732070757263686173652077696c6c20657863656564206d6178436f6e747269627574696f6e20636170c476516c766b52c3c476526c766b5cc3c476536c766b58c3c46168124e656f2e52756e74696d652e4e6f7469667961616c766b52c36c766b54c36c766b55c361527206726566756e6454c168124e656f2e52756e74696d652e4e6f7469667961006c766b5e527ac4620e00516c766b5e527ac46203006c766b5ec3616c75660115c56b6161656ad16c766b00527ac46c766b00c300c36c766b51527ac46c766b00c351c36c766b52527ac46c766b00c352c36c766b53527ac46c766b00c353c36c766b54527ac46c766b00c354c36c766b55527ac46c766b00c355c36c766b56527ac46c766b00c356c36c766b57527ac46c766b00c357c36c766b58527ac46c766b00c358c36c766b59527ac46c766b00c359c36c766b5a527ac46c766b00c35ac36c766b5b527ac46c766b00c35bc36c766b5c527ac46165fdcf616539b89f009c6c766b60527ac46c766b60c3645a006152c576002a4d696e74546f6b656e732829206661696c65642e20546f6b656e2053616c6520697320636c6f7365642ec4765100c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0111527ac462e4026c766b00c36165ccfb009c6c766b0112527ac46c766b0112c36456006152c57600264d696e74546f6b656e7328292043616e557365725061727469636970617465206661696c6564c4765100c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0111527ac46275026168164e656f2e53746f726167652e476574436f6e746578746165f7f9617c680f4e656f2e53746f726167652e4765746c766b5d527ac46c766b5dc36c766b51c36168174e656f2e5472616e73616374696f6e2e476574486173689c6c766b0113527ac46c766b0113c3647b006152c576002d4d696e74546f6b656e732829206e6f742070726f63657373696e67206475706c69636174652074782e48617368c476516c766b51c36168174e656f2e5472616e73616374696f6e2e47657448617368c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0111527ac46290016168164e656f2e53746f726167652e476574436f6e74657874616512f96c766b51c36168174e656f2e5472616e73616374696f6e2e47657448617368615272680f4e656f2e53746f726167652e5075746153c57600264d696e74546f6b656e7328292072656365697665644e454f202f207265636569766564474153c476516c766b54c3c476526c766b55c3c46168124e656f2e52756e74696d652e4e6f74696679616c766b5ac300a0630d006c766b5bc300a0620400516c766b0114527ac46c766b0114c364360061616c766b52c36c766b5ac36c766b5bc361527206726566756e6454c168124e656f2e52756e74696d652e4e6f7469667961616c766b52c36165c4036c766b5e527ac46c766b52c3616590ed6c766b59c3936c766b5ec3936c766b5f527ac46c766b52c36c766b5fc3617c65fdd8616c766b52c36c766b5cc3617c65b4d7616c766b59c361653cdb6161006c766b52c36c766b59c3615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667961516c766b0111527ac46203006c766b0111c3616c75660113c56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b51c309696e63656e746976658791642b006c766b51c30b7072697661746553616c6587916415006c766b51c307636f6d70616e798791620400006c766b5d527ac46c766b5dc3640f0061006c766b5e527ac462b7026c766b00c3c001149c009c6c766b5f527ac46c766b5fc3640f0061006c766b5e527ac4629102006c766b53527ac4616574cc6c766b54527ac46165f6cb6c766b55527ac46168164e656f2e53746f726167652e476574436f6e74657874616594f7617c65b2056c766b56527ac4006c766b57527ac4006c766b58527ac400c56c766b59527ac46c766b51c309696e63656e74697665876c766b60527ac46c766b60c364350061616539b36c766b59527ac46c766b59c300c36c766b54c3936c766b57527ac46c766b59c351c36c766b58527ac461629e006c766b51c30b7072697661746553616c65876c766b0111527ac46c766b0111c3642d00616165fdb26c766b59527ac46c766b54c36c766b57527ac46c766b59c300c36c766b58527ac4616251006c766b51c307636f6d70616e79876c766b0112527ac46c766b0112c3643200616165c4b26c766b59527ac46c766b59c300c36c766b54c3936c766b57527ac46c766b59c300c36c766b58527ac46154c56c766b5a527ac46c766b5ac3006c766b57c3c46c766b5ac3516c766b57c36c766b58c393c46c766b5ac3526c766b57c36c766b58c3529593c46c766b5ac3536c766b57c36c766b58c3539593c46c766b52c3616552b2950164966c766b5b527ac458c576006c766b5ac300c3c476516c766b5bc3c476526c766b5ac351c3c476536c766b5bc3c476546c766b5ac352c3c476556c766b5bc3c476566c766b5ac353c3c476576c766b5bc3c46c766b5c527ac46c766b56c36c766b00c36c766b5cc36168154e656f2e52756e74696d652e53657269616c697a65615272653805616c766b00c36c766b52c3617c65c8d5616c766b00c36c766b52c36c766b51c361527265cbd66161006c766b00c36c766b52c3615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667961516c766b5e527ac46203006c766b5ec3616c75665dc56b6c766b00527ac461006c766b51527ac46c766b00c3c001149c009c6c766b54527ac46c766b54c3641300616c766b51c36c766b55527ac462ea006c766b00c36165ea006c766b52527ac4616525c96c766b53527ac46c766b52c3c000a06c766b56527ac46c766b56c364a90061006c766b57527ac4628100616c766b57c351936c766b58527ac46c766b52c36c766b57c3c36c766b59527ac46c766b52c36c766b58c3c36c766b5a527ac46c766b53c36c766b59c39f6c766b5b527ac46c766b5bc3641700616c766b51c36c766b5ac3936c766b51527ac4616c766b57c351936c766b57527ac4616c766b57c351936c766b57527ac46c766b57c36c766b52c3c09f6c766b5c527ac46c766b5cc3636aff616c766b51c36c766b55527ac46203006c766b55c3616c756655c56b6c766b00527ac4616168164e656f2e53746f726167652e476574436f6e746578746165e3f3617c6501026c766b51527ac46c766b51c36c766b00c3617c65bb026c766b52527ac46c766b52c3c000a06c766b53527ac46c766b53c3642d00616c766b52c36168174e656f2e52756e74696d652e446573657269616c697a656c766b54527ac4620f0000c56c766b54527ac46203006c766b54c3616c756655c56b616168164e656f2e53746f726167652e476574436f6e746578746165b2f3617c680f4e656f2e53746f726167652e4765740131876c766b00527ac4616567c76165a3af907c907c9f6312006c766b00c3630a00616549d6620400006c766b51527ac46c766b51c3640d01616114f95521a947a193cd66d67b8af15d3501b870ac016c766b52527ac4616504e56c766b53527ac46c766b52c307636f6d70616e796c766b53c36152726559fa756c766b53c3616542d5616168164e656f2e53746f726167652e476574436f6e746578746165fdf20131615272680f4e656f2e53746f726167652e5075746161006c766b52c36c766b53c3615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f746966796153c5760024436c61696d556e736f6c64546f6b656e73282920746f6b656e7320616c6c6f6361746564c476516c766b52c3c476526c766b53c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b54527ac4620e00006c766b54527ac46203006c766b54c3616c756652c56b6c766b00527ac46c766b51527ac46152c5766c766b00c3007cc4766c766b51c3517cc4616c756654c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b00c351c301007e6c766b51c37e6c766b53527ac46c766b00c300c36c766b53c36c766b52c3615272680f4e656f2e53746f726167652e507574616c756653c56b6c766b00527ac46c766b51527ac46c766b00c351c301007e6c766b51c37e6c766b52527ac46c766b00c300c36c766b52c3617c68124e656f2e53746f726167652e44656c657465616c756653c56b6c766b00527ac46c766b51527ac46c766b00c351c301007e6c766b51c37e6c766b52527ac46c766b00c300c36c766b52c3617c680f4e656f2e53746f726167652e476574616c756654c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b00c351c301007e6c766b51c37e6c766b53527ac46c766b00c300c36c766b53c36c766b52c3615272680f4e656f2e53746f726167652e507574616c756654c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b00c351c301007e6c766b51c37e6c766b53527ac46c766b00c300c36c766b53c36c766b52c3615272680f4e656f2e53746f726167652e507574616c7566', - 'hex', -); - -export const nosTokenContract = new Contract({ - script: nosTokenScript, - parameterList: [ContractParameterType.String, ContractParameterType.Array], - - returnType: ContractParameterType.ByteArray, - name: 'nOS Token', - codeVersion: '1.0', - author: 'nOS Limited', - email: 'contact@nos.io', - description: 'nOS Token NEP-5 Smart Contract - https://nos.io', - contractProperties: ContractPropertyState.HasStorageDynamicInvokePayable, -}); - -export const narrativeTokenScript = Buffer.from( - '013dc56b6c766b00527ac46c766b51527ac46168164e656f2e52756e74696d652e47657454726967676572616c766b52527ac46159c66b0f4e617272617469766520546f6b656e6c766b00527ac4034e52566c766b51527ac4586c766b52527ac414f08ab37aa888a44a8abab51bb292727b093bb1df6c766b53527ac4056f776e65726c766b54527ac4096e65775f6f776e65726c766b55527ac40b73616c655f7061757365646c766b56527ac40e696e5f63697263756c6174696f6e6c766b57527ac4070080e03779c3116c766b58527ac46c6c766b53527ac46c766b52c36165883a9c6457026151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b54527ac46c766b54c36c766b53c354c37c6165a5396c766b55527ac46c766b55c3642c006c766b55c36168184e656f2e52756e74696d652e436865636b5769746e6573736164370051666232006c766b53c353c36168184e656f2e52756e74696d652e436865636b5769746e65737361640c0062030051616c75666165dc346c766b56527ac4610119c66b066b79635f6f6b6c766b00527ac4077072655f656e646c766b51527ac40272316c766b52527ac40500b864d9456c766b53527ac40500902f50096c766b54527ac40500205fa0126c766b55527ac4070040f09bbce1086c766b56527ac402ad0e6c766b57527ac4097075625f73746172746c766b58527ac40272326c766b59527ac40500ac23fc066c766b5a527ac40500add5c0076c766b5b527ac40272336c766b5c527ac40500e87648176c766b5d527ac40500db8b55076c766b5e527ac40500ac23fc066c766b5f527ac40410e1b35a6c766b60527ac403f01e026c766b0111527ac40700008d49fd1a076c766b0112527ac40b7465616d5f746f6b656e736c766b0113527ac40480ad2a5c6c766b0114527ac407008053ee7ba80a6c766b0115527ac40e636f6d70616e795f746f6b656e736c766b0116527ac40700608fc692a3226c766b0117527ac40c726577617264735f66756e646c766b0118527ac46c6c766b57527ac46203006c766b57c36c766b53c36c766b56c36c766b54c35154795179567275517275537952795572755272756165a31900a0616c75666c766b52c361651b389c648e056c766b00c3009e6484056100c66b6c6c766b58527ac461006c766b5d527ac46c766b58c361654b316c766b5e527ac46c766b58c361653b3161c06c766b5c527ac4616c766b5dc36c766b5cc39f6461006c766b5ec36c766b5dc3c36c766b59527ac46c766b5dc351936c766b5d527ac46c766b00c36c766b59c39c64c6ff6c766b58c36c766b00c36c766b51c36c766b53c3537951795572755172755279527954727552727561655a2d666296ff616c766b00c3066465706c6f799c6413006203006c766b53c36165ea09616c75666c766b00c30b63697263756c6174696f6e9c6447006151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b54527ac46203006c766b53c36c766b54c37c6165f430616c7566610119c66b066b79635f6f6b6c766b00527ac4077072655f656e646c766b51527ac40272316c766b52527ac40500b864d9456c766b53527ac40500902f50096c766b54527ac40500205fa0126c766b55527ac4070040f09bbce1086c766b56527ac402ad0e6c766b57527ac4097075625f73746172746c766b58527ac40272326c766b59527ac40500ac23fc066c766b5a527ac40500add5c0076c766b5b527ac40272336c766b5c527ac40500e87648176c766b5d527ac40500db8b55076c766b5e527ac40500ac23fc066c766b5f527ac40410e1b35a6c766b60527ac403f01e026c766b0111527ac40700008d49fd1a076c766b0112527ac40b7465616d5f746f6b656e736c766b0113527ac40480ad2a5c6c766b0114527ac407008053ee7ba80a6c766b0115527ac40e636f6d70616e795f746f6b656e736c766b0116527ac40700608fc692a3226c766b0117527ac40c726577617264735f66756e646c766b0118527ac46c6c766b5a527ac46c766b00c30a6d696e74546f6b656e739c6419006203006c766b5ac36c766b53c37c6165e017616c75666c766b00c31263726f776473616c655f72656769737465729c641f006203006c766b5ac36c766b51c36c766b53c352726165501b616c75666c766b00c31463726f776473616c655f646572656769737465729c641f006203006c766b5ac36c766b51c36c766b53c352726165c819616c75666c766b00c31063726f776473616c655f7374617475739c6419006203006c766b5ac36c766b51c37c61651f19616c75666c766b00c31363726f776473616c655f617661696c61626c659c6413006203006c766b53c36165172f616c75666c766b00c3147472616e736665725f7465616d5f746f6b656e739c641f006203006c766b5ac36c766b53c36c766b51c352726165610d616c75666c766b00c3177472616e736665725f636f6d70616e795f746f6b656e739c641f006203006c766b5ac36c766b53c36c766b51c352726165150a616c75666c766b00c3136d696e745f726577617264735f746f6b656e739c641f006203006c766b5ac36c766b53c36c766b51c3527261655107616c75666c766b00c30c6368616e67655f6f776e65729c6427006c766b51c300c36c766b5b527ac46203006c766b53c36c766b5bc37c61652805616c75666c766b00c30c6163636570745f6f776e65729c6413006203006c766b53c361658602616c75666c766b00c31363616e63656c5f6368616e67655f6f776e65729c6413006203006c766b53c361658903616c75666c766b00c30c656e645f7072655f73616c659c6419006203006c766b5ac36c766b53c37c61659f1c616c75666c766b00c31173746172745f7075626c69635f73616c659c6419006203006c766b5ac36c766b53c37c6165db1a616c75666c766b00c30a70617573655f73616c659c6413006203006c766b53c361651201616c75666c766b00c30b726573756d655f73616c659c6413006203006c766b53c361652800616c756662030011756e6b6e6f776e206f7065726174696f6e616c756662030000616c756658c56b6c766b00527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b51527ac46c766b51c36c766b00c354c37c6165a7316c766b52527ac46c766b52c36168184e656f2e52756e74696d652e436865636b5769746e65737361633b001c4d757374206265206f776e657220746f20726573756d652073616c6561680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b00c356c37c6165b1307562030051616c756658c56b6c766b00527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b51527ac46c766b51c36c766b00c354c37c6165e2306c766b52527ac46c766b52c36168184e656f2e52756e74696d652e436865636b5769746e65737361633a001b4d757374206265206f776e657220746f2070617573652073616c6561680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b00c356c3515272616527307562030051616c75665cc56b6c766b00527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b51527ac46c766b51c36c766b00c355c37c61651c306c766b52527ac46c766b52c36349002a4d7573742063616c6c206368616e67655f6f776e6572206265666f7265206163636570745f6f776e657261680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b52c36168184e656f2e52756e74696d652e436865636b5769746e65737361634000214d757374206265206e65775f6f776e657220746f20616363657074206f776e657261680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b00c354c36c766b52c352726165092f756c766b51c36c766b00c355c37c6165bb2e7562030051616c75665cc56b6c766b00527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b51527ac46c766b51c36c766b00c355c37c6165ec2e6c766b52527ac46c766b52c36362004343616e27742063616e63656c5f6368616e67655f6f776e657220756e6c65737320616e206f776e6572206368616e676520697320616c72656164792070656e64696e6761680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b00c354c37c61656d2e6c766b53527ac46c766b53c36168184e656f2e52756e74696d652e436865636b5769746e65737361634300244d757374206265206f776e657220746f2063616e63656c206368616e67655f6f776e657261680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b00c355c37c61656f2d7562030051616c75665cc56b6c766b00527ac46c766b51527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b52527ac46c766b52c36c766b00c354c37c6165992d6c766b53527ac46c766b53c3634000214d757374206465706c6f79206265666f7265206368616e67696e67206f776e657261680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b53c36168184e656f2e52756e74696d652e436865636b5769746e65737361633c001d4d757374206265206f776e657220746f206368616e6765206f776e657261680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b52c36c766b00c355c36c766b51c352726165932c7562030051616c756659c56b6c766b00527ac46c766b00c353c36168184e656f2e52756e74696d652e436865636b5769746e65737361634000204d757374206265206f726967696e616c5f6f776e657220746f206465706c6f7961680f4e656f2e52756e74696d652e4c6f676162030000616c75666151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b51527ac46c766b51c36c766b00c354c37c6165262c640b0062030000616c75666c766b51c36c766b00c354c36c766b00c353c352726165bc2b7562030051616c75660122c56b6c766b00527ac46c766b51527ac46c766b52527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b53527ac46c766b53c36c766b51c354c37c6165a22b6c766b54527ac46c766b54c36168184e656f2e52756e74696d652e436865636b5769746e65737361630b0062030000616c75666c766b52c361c0529e640b0062030000616c75666c766b52c300c36c766b55527ac46c766b52c351c36c766b56527ac46c766b55c361c001149e640b0062030000616c75666c766b56c300a1640c0062030000616c7566616542166c766b57527ac46c766b57c36c766b00c360c39f6449002a63616e2774206d696e745f726577617264735f746f6b656e73206265666f72652073616c6520656e647361680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b53c36c766b00c30118c37c6165a52a6c766b58527ac46c766b58c36c766b56c3936c766b58527ac46c766b58c36c766b00c30117c3a06445002663616e277420657863656564206d696e745f726577617264735f746f6b656e73206c696d697461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b53c36c766b00c30118c36c766b58c352726165db29756165bd256c766b59527ac46c766b59c353c36c766b5a527ac46c766b55c36c766b5b527ac46c766b53c36c766b5bc37c6165ec296c766b5c527ac46c766b56c36c766b5cc3936c766b5d527ac46c766b53c36c766b5bc36c766b5dc3527261657829756c766b51c36c766b56c36c766b53c3527261656624756c766b5ac36c766b5bc36c766b56c3527261087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667962030051616c75660128c56b6c766b00527ac46c766b51527ac46c766b52527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b53527ac46c766b53c36c766b51c354c37c616517296c766b54527ac46c766b54c36168184e656f2e52756e74696d652e436865636b5769746e65737361630b0062030000616c75666c766b52c361c0529e640b0062030000616c75666c766b52c300c36c766b55527ac46c766b52c351c36c766b56527ac46c766b55c361c001149e640b0062030000616c75666c766b56c300a1640c0062030000616c75666165b7136c766b57527ac4048033e1016c766b58527ac46c766b57c36c766b00c360c39f644d002e63616e2774207472616e736665725f636f6d70616e795f746f6b656e73206265666f72652073616c6520656e647361680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b57c36c766b00c360c36c766b58c3939f6419006c766b00c30115c355955a966c766b59527ac46242006c766b57c36c766b00c360c3526c766b58c395939f641b006c766b00c30115c3014b950164966c766b59527ac46212006c766b00c30115c36c766b59527ac46c766b53c36c766b00c30116c37c61659f276c766b5a527ac46c766b5ac36c766b56c3936c766b5a527ac46c766b5ac36c766b59c3a06451003263616e277420657863656564207472616e736665725f636f6d70616e795f746f6b656e732076657374696e67206c696d697461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b53c36c766b00c30116c36c766b5ac352726165cc26756165ae226c766b5b527ac46c766b5bc353c36c766b5c527ac46c766b55c36c766b5d527ac46c766b53c36c766b5dc37c6165dd266c766b5e527ac46c766b56c36c766b5ec3936c766b5f527ac46c766b53c36c766b5dc36c766b5fc3527261656926756c766b51c36c766b56c36c766b53c3527261655721756c766b5cc36c766b5dc36c766b56c3527261087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667962030051616c7566012ac56b6c766b00527ac46c766b51527ac46c766b52527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b53527ac46c766b53c36c766b51c354c37c616508266c766b54527ac46c766b54c36168184e656f2e52756e74696d652e436865636b5769746e65737361630b0062030000616c75666c766b52c361c0529e640b0062030000616c75666c766b52c300c36c766b55527ac46c766b52c351c36c766b56527ac46c766b55c361c001149e640b0062030000616c75666c766b56c300a1640c0062030000616c75666165a8106c766b57527ac46c766b57c36c766b00c30114c39f644d002e63616e2774207472616e736665725f7465616d5f746f6b656e73206265666f72652076657374696e67206461746561680f4e656f2e52756e74696d652e4c6f676162030000616c7566048033e1016c766b58527ac46c766b57c36c766b00c30114c36c766b58c3939f6419006c766b00c30112c353955a966c766b59527ac46270006c766b57c36c766b00c30114c3526c766b58c395939f6419006c766b00c30112c356955a966c766b59527ac46241006c766b57c36c766b00c30114c3536c766b58c395939f6419006c766b00c30112c358955a966c766b59527ac46212006c766b00c30112c36c766b59527ac46c766b53c36c766b00c30113c37c616560246c766b5a527ac46c766b5ac36c766b56c3936c766b5a527ac46c766b5ac36c766b59c3a0644e002f63616e277420657863656564207472616e736665725f7465616d5f746f6b656e732076657374696e67206c696d697461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b53c36c766b00c30113c36c766b5ac3527261659023756165721f6c766b5b527ac46c766b5bc353c36c766b5c527ac46c766b55c36c766b5d527ac46c766b53c36c766b5dc37c6165a1236c766b5e527ac46c766b56c36c766b5ec3936c766b5f527ac46c766b53c36c766b5dc36c766b5fc3527261652d23756c766b51c36c766b56c36c766b53c3527261651b1e756c766b5cc36c766b5dc36c766b56c3527261087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667962030051616c75665bc56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac46c766b55c36c766b53c37c6165e7226c766b56527ac46c766b54c36c766b56c3936c766b57527ac46c766b55c36c766b53c36c766b57c3527261657322756c766b51c36c766b54c36c766b55c352726165611d756203006c766b52c36c766b53c36c766b54c3527261087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667900616c75660137c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46168184e656f2e426c6f636b636861696e2e476574486569676874616c766b55527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b56527ac46c766b51c358c36c766b57527ac46c766b56c36c766b00c351c37c6165d3216c766b58527ac46c766b56c36c766b00c358c37c6165bb216c766b59527ac46c766b58c3638b006c766b52c36c766b00c355c39f64400021696e73756666696369656e742070726573616c6520636f6e747269627574696f6e61680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b00c356c36c766b57527ac46c766b00c352c36c766b5a527ac46c766b00c353c36c766b5b527ac46c766b00c354c36c766b5c527ac46232016c766b59c36342002370726573616c65206f7665722c206d61696e2073616c65206e6f74207374617274656461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b55c36c766b59c36c766b00c30111c393a0642e000f63726f776473616c6520656e64656461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b55c36c766b59c3526c766b00c357c39593a0642400006c766b5a527ac44f6c766b5b527ac46c766b00c35fc36c766b5c527ac46270006c766b55c36c766b59c36c766b00c357c393a06430006c766b00c35cc36c766b5a527ac46c766b00c35dc36c766b5b527ac46c766b00c35ec36c766b5c527ac4622d006c766b00c359c36c766b5a527ac46c766b00c35ac36c766b5b527ac46c766b00c35bc36c766b5c527ac46c766b52c30400e1f505966c766b5cc3956c766b5d527ac46c766b56c36c766b51c357c37c6165cc1f6c766b5e527ac46c766b5ec36c766b5dc3936c766b5f527ac46c766b5fc36c766b57c3a064450026707572636861736520776f756c642065786365656420746f6b656e2073616c65206c696d697461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b5bc300a1640f006203006c766b5dc3616c75666c766b52c36c766b5bc3a164bb006c766b5ac36c766b53c3617e6c766b60527ac46c766b56c36c766b60c37c61651d1f6c766b0111527ac46c766b0111c36c766b52c3936c766b0111527ac46c766b0111c36c766b5bc3a1642e006c766b54c3631a006c766b56c36c766b60c36c766b0111c3527261658e1e756203006c766b5dc3616c756624636f6e747269627574696f6e206c696d697420657863656564656420696e20726f756e6461680f4e656f2e52756e74696d652e4c6f676162030000616c75661a746f6f206d75636820666f72206c696d6974656420726f756e6461680f4e656f2e52756e74696d652e4c6f676162030000616c756658c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b51c361c001149c6432006c766b00c300c36c766b51c3617e6c766b53527ac46c766b52c36c766b53c37c6165081e640b0062030051616c756662030000616c756660c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b53c36c766b51c356c37c6165be1d640b0062030000616c75666c766b52c300c3009c642e000f6e6f206e656f20617474616368656461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b00c36c766b52c352c36c766b53c35272616517ff6c766b55527ac46c766b55c3632f00106e6f74204b594320617070726f76656461680f4e656f2e52756e74696d652e4c6f676162030000616c7566006c766b56527ac46c766b00c36c766b51c36c766b52c300c36c766b52c352c36c766b54c35479517956727551727553795279557275527275616587fa616c75665dc56b6c766b00527ac46c766b51527ac4616575186c766b52527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b53527ac46c766b00c36c766b51c36c766b52c36c766b53c3005479517956727551727553795279557275527275616581fe6c766b54527ac46c766b54c300a164d7001543616e6e6f742065786368616e67652076616c756561680f4e656f2e52756e74696d652e4c6f67616c766b52c300c300a06430006c766b52c352c36c766b52c300c37c6106726566756e6453c168124e656f2e52756e74696d652e4e6f7469667962030000616c75666c766b00c36165cff86c766b51c36c766b52c353c36c766b52c352c36c766b54c36c766b53c36c766b00c36c766b51c36c766b52c353c36c766b52c352c36c766b54c36c766b53c355795179577275517275547952795672755272755379537955727553727561656ef86c766b00c36c766b51c36c766b52c353c36c766b52c352c36c766b54c36c766b53c355795179577275517275547952795672755272755379537955727553727561652af8756c766b52c352c36c766b52c300c36c766b54c35272610c636f6e747269627574696f6e54c168124e656f2e52756e74696d652e4e6f7469667962030051616c756657c56b6c766b00527ac46c766b51527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b52527ac46c766b51c361c000a0642a006c766b51c300c36c766b53527ac46c766b00c36c766b53c36c766b52c3527261654dfc616c756662030000616c75665fc56b6c766b00527ac46c766b51527ac46c766b52527ac4006c766b53527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b54527ac46c766b54c36c766b52c354c37c6165311a6c766b55527ac46c766b55c36168184e656f2e52756e74696d652e436865636b5769746e6573736164bc0061006c766b59527ac46c766b51c361c06c766b58527ac4616c766b59c36c766b58c39f6495006c766b51c36c766b59c3c36c766b56527ac46c766b59c351936c766b59527ac46c766b56c361c001149c64c7ff6c766b00c300c36c766b56c3617e6c766b57527ac46c766b54c36c766b57c37c61650d19756c766b56c361126b79635f6465726567697374726174696f6e52c168124e656f2e52756e74696d652e4e6f746966796c766b53c351936c766b53527ac46262ff616203006c766b53c3616c75660117c56b6c766b00527ac46c766b51527ac46c766b52527ac4006c766b53527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b54527ac46c766b54c36c766b52c354c37c6165e2186c766b55527ac46c766b55c36168184e656f2e52756e74696d652e436865636b5769746e6573736164290161006c766b5e527ac46c766b51c361c06c766b5d527ac4616c766b5ec36c766b5dc39f6402016c766b51c36c766b5ec3c36c766b56527ac46c766b5ec351936c766b5e527ac46c766b56c361c06c766b57527ac46c766b57c3011497009e64060062b6ff6c766b57c30114966c766b58527ac4006c766b59527ac4616c766b59c36c766b58c39f649a006c766b59c30114956c766b5a527ac46c766b56c36c766b5ac30114617f6c766b5b527ac46c766b00c300c36c766b5bc3617e6c766b5c527ac46c766b54c36c766b5cc351527261659d17756c766b5bc361106b79635f726567697374726174696f6e52c168124e656f2e52756e74696d652e4e6f746966796c766b53c351936c766b53527ac46c766b59c351936c766b59527ac4625eff6162f5fe616203006c766b53c3616c75660111c56b6c766b00527ac46c766b51527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b52527ac46c766b52c36c766b51c354c37c616535176c766b53527ac46c766b53c36168184e656f2e52756e74696d652e436865636b5769746e65737361630b0062030000616c75666c766b52c36c766b00c351c37c6165f1166c766b54527ac46c766b54c36353003463616e277420737461727420746865207075626c69632073616c6520756e74696c207072652d73616c652068617320656e64656461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b52c36c766b00c358c37c616581166c766b55527ac46c766b55c36441002163616e277420737461727420746865207075626c69632073616c6520747769636561680f4e656f2e52756e74696d652e4c6f676162030000616c75666168184e656f2e426c6f636b636861696e2e476574486569676874616c766b56527ac46c766b52c36c766b00c358c36c766b56c352726165b5157562030051616c75665dc56b6c766b00527ac46c766b51527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b52527ac46c766b52c36c766b51c354c37c6165a3156c766b53527ac46c766b53c36168184e656f2e52756e74696d652e436865636b5769746e65737361630b0062030000616c75666c766b52c36c766b00c351c37c61655f156c766b54527ac46c766b54c3643c001c63616e277420656e6420746865207072652d73616c6520747769636561680f4e656f2e52756e74696d652e4c6f676162030000616c75666168184e656f2e426c6f636b636861696e2e476574486569676874616c766b55527ac46c766b52c36c766b00c351c36c766b55c35272616598147562030051616c756653c56b6168184e656f2e426c6f636b636861696e2e476574486569676874616c766b00527ac46c766b00c36168184e656f2e426c6f636b636861696e2e476574486561646572616c766b51527ac46203006c766b51c36168174e656f2e4865616465722e47657454696d657374616d7061616c756654c56b6c766b00527ac46c766b51527ac46c766b52527ac462030000616c756652c56b6c766b00527ac462030000616c756651c56b62030000616c756652c56b6c766b00527ac46203006c766b00c361681e4e656f2e436f6e74726163742e47657453746f72616765436f6e7465787461616c756652c56b6c766b00527ac462030000616c756659c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac46c766b56527ac46c766b57527ac462030000616c756659c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac46c766b56527ac46c766b57527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac46203006c766b00c36168134e656f2e41737365742e47657449737375657261616c756653c56b6c766b00527ac46c766b51527ac462030000616c756658c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac46c766b56527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac46203006c766b00c36168144e656f2e4163636f756e742e476574566f74657361616c756653c56b6c766b00527ac46c766b51527ac462030000616c756653c56b6c766b00527ac46c766b51527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac46203006c766b00c361681b4e656f2e4865616465722e4765744e657874436f6e73656e73757361616c756653c56b6c766b00527ac46c766b51527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac46203006c766b00c361681b4e656f2e4865616465722e4765744e657874436f6e73656e73757361616c756652c56b6c766b00527ac46203006c766b00c36168124e656f2e4865616465722e4765744861736861616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756659c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b52c36c766b53c3617e6c766b54527ac46c766b54c361c001289e640b0062030000616c75666c766b51c36c766b54c37c6165860f6c766b55527ac46203006c766b55c3616c75660116c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b52c36168184e656f2e52756e74696d652e436865636b5769746e6573736163330014496e636f7272656374207065726d697373696f6e61680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b54c3009f642e000f4e6567617469766520616d6f756e7461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b52c37c6165b40e6c766b55527ac46c766b55c36c766b54c3a26496006c766b52c36c766b53c3617e6c766b56527ac46c766b56c361c001289e640b0062030000616c75666c766b54c3009c6416006c766b51c36c766b56c37c6165dc0d756219006c766b51c36c766b56c36c766b54c352726165ff0d756c766b52c36c766b53c36c766b54c352726107617070726f766554c168124e656f2e52756e74696d652e4e6f7469667962030051616c756662030000616c75660120c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b54c300a1640b0062030000616c75666c766b52c36c766b53c3617e6c766b55527ac46c766b55c361c001289e640b0062030000616c75666c766b51c36c766b55c37c6165940d6c766b56527ac46c766b56c36c766b54c39f643a001b496e73756666696369656e742066756e647320617070726f76656461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b52c37c6165390d6c766b57527ac46c766b57c36c766b54c39f64420023496e73756666696369656e7420746f6b656e7320696e2066726f6d2062616c616e636561680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b53c37c6165d60c6c766b58527ac46c766b57c36c766b54c3946c766b59527ac46c766b58c36c766b54c3936c766b5a527ac46c766b51c36c766b53c36c766b5ac352726165500c756c766b51c36c766b52c36c766b59c3527261653a0c75117472616e7366657220636f6d706c65746561680f4e656f2e52756e74696d652e4c6f67616c766b56c36c766b54c3946c766b5b527ac46c766b5bc3009c643e001472656d6f76696e6720616c6c2062616c616e636561680f4e656f2e52756e74696d652e4c6f67616c766b51c36c766b55c37c6165850b75625000237570646174696e6720616c6c6f77616e636520746f206e657720616c6c6f77616e636561680f4e656f2e52756e74696d652e4c6f67616c766b51c36c766b55c36c766b5bc352726165710b756c766b52c36c766b53c36c766b54c3527261087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667962030051616c7566011cc56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b54c300a1640b0062030000616c75666c766b53c361c001149e640b0062030000616c75666c766b52c36168184e656f2e52756e74696d652e436865636b5769746e657373616450016c766b52c36c766b53c39c643000117472616e7366657220746f2073656c662161680f4e656f2e52756e74696d652e4c6f676162030051616c75666c766b51c36c766b52c37c6165c10a6c766b55527ac46c766b55c36c766b54c39f64310012696e73756666696369656e742066756e647361680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b55c36c766b54c39c6416006c766b51c36c766b52c37c6165df0975622b006c766b55c36c766b54c3946c766b56527ac46c766b51c36c766b52c36c766b56c352726165f009756c766b51c36c766b53c37c6165260a6c766b57527ac46c766b57c36c766b54c3936c766b58527ac46c766b51c36c766b53c36c766b58c352726165b209756c766b52c36c766b53c36c766b54c3527261087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667962030051616c75662166726f6d2061646472657373206973206e6f74207468652074782073656e64657261680f4e656f2e52756e74696d652e4c6f676162030000616c75660131c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b51c3046e616d659c6411006203006c766b53c300c3616c75666c766b51c308646563696d616c739c6411006203006c766b53c352c3616c75666c766b51c30673796d626f6c9c6412006203006c766b53c351c3616c75666151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b54527ac414496e636f727265637420417267204c656e6774686c766b55527ac46c766b51c30b746f74616c537570706c799c6419006203006c766b53c36c766b54c37c61652c03616c75666c766b51c30962616c616e63654f669c6454006c766b52c361c0519c643c006c766b52c300c36c766b56527ac46c766b56c361c001149e640b0062030000616c75666203006c766b54c36c766b56c37c61653f08616c75666203006c766b55c3616c75666c766b51c3087472616e736665729c647a006c766b52c361c0539c6462006c766b52c300c36c766b57527ac46c766b52c351c36c766b58527ac46c766b52c352c36c766b59527ac46c766b00c36c766b54c36c766b57c36c766b58c36c766b59c3547951795672755172755379527955727552727561653cfc616c75666203006c766b55c3616c75666c766b51c30c7472616e7366657246726f6d9c647a006c766b52c361c0539c6462006c766b52c300c36c766b57527ac46c766b52c351c36c766b58527ac46c766b52c352c36c766b59527ac46c766b00c36c766b54c36c766b57c36c766b58c36c766b59c35479517956727551727553795279557275527275616528f9616c75666203006c766b55c3616c75666c766b51c307617070726f76659c647a006c766b52c361c0539c6462006c766b52c300c36c766b5a527ac46c766b52c351c36c766b5b527ac46c766b52c352c36c766b59527ac46c766b00c36c766b54c36c766b5ac36c766b5bc36c766b59c35479517956727551727553795279557275527275616531f7616c75666203006c766b55c3616c75666c766b51c309616c6c6f77616e63659c6467006c766b52c361c0529c644f006c766b52c300c36c766b5a527ac46c766b52c351c36c766b5b527ac46c766b00c36c766b54c36c766b5ac36c766b5bc35379517955727551727552795279547275527275616551f6616c75666203006c766b55c3616c756662030000616c756653c56b6c766b00527ac409616c6c6f77616e636507617070726f76650c7472616e7366657246726f6d087472616e736665720962616c616e63654f660b746f74616c537570706c7908646563696d616c730673796d626f6c046e616d6559c16c766b51527ac46203006c766b51c3616c756653c56b6c766b00527ac46c766b51527ac462030000616c756653c56b6c766b00527ac46c766b51527ac462030000616c756653c56b6c766b00527ac46c766b51527ac46203006c766b51c36c766b00c357c37c61654905616c756656c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b52c36c766b00c357c37c61651c056c766b53527ac46c766b53c36c766b51c3936c766b53527ac46203006c766b52c36c766b00c357c36c766b53c352726165a3047500616c756657c56b6c766b00527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b51527ac46c766b51c36c766b00c357c37c61659b046c766b52527ac46c766b00c358c36c766b52c3946c766b53527ac46c766b53c3009f640b0062030000616c75666203006c766b53c3616c75660112c56b6156c66b006c766b00527ac4006c766b51527ac4006c766b52527ac4006c766b53527ac4209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc56c766b54527ac420e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c606c766b55527ac46c6c766b00527ac461682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e6572616c766b51527ac46c766b51c361681d4e656f2e5472616e73616374696f6e2e4765745265666572656e636573616c766b52527ac461682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e6753637269707448617368616c766b00c3537bc46c766b52c361c000a064f2016c766b52c300c36c766b53527ac46c766b53c36168184e656f2e4f75747075742e47657453637269707448617368616c766b00c3527bc4006c766b54527ac4006c766b55527ac461006c766b58527ac46c766b51c361681a4e656f2e5472616e73616374696f6e2e4765744f757470757473616c766b59527ac46c766b51c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736161c06c766b57527ac4616c766b58c36c766b57c39f6422016c766b59c36c766b58c3c36c766b56527ac46c766b58c351936c766b58527ac46c766b56c36168184e656f2e4f75747075742e47657453637269707448617368616c766b00c353c39c6455006c766b56c36168154e656f2e4f75747075742e47657441737365744964616c766b00c354c39c642c006c766b54c36c766b56c36168134e656f2e4f75747075742e47657456616c756561936c766b54527ac46c766b56c36168184e656f2e4f75747075742e47657453637269707448617368616c766b00c353c39c642aff6c766b56c36168154e656f2e4f75747075742e47657441737365744964616c766b00c355c39c6401ff6c766b55c36c766b56c36168134e656f2e4f75747075742e47657456616c756561936c766b55527ac462d5fe616c766b54c36c766b00c3007bc46c766b55c36c766b00c3517bc46203006c766b00c3616c756652c56b6c766b00527ac46203006c766b00c36168184e656f2e4f75747075742e4765745363726970744861736861616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac46203006c766b00c361659fef616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756651c56b62030000616c756651c56b62030000616c756653c56b6c766b00527ac46c766b51527ac46203006c766b00c300c36c766b51c37c6168124e656f2e53746f726167652e44656c6574656100616c756654c56b6c766b00527ac46c766b51527ac46c766b52527ac46203006c766b00c300c36c766b51c36c766b52c3527261680f4e656f2e53746f726167652e5075746100616c756653c56b6c766b00527ac46c766b51527ac46203006c766b00c300c36c766b51c37c61680f4e656f2e53746f726167652e47657461616c756653c56b6c766b00527ac46c766b51527ac462030000616c756654c56b6c766b00527ac46c766b51527ac46c766b52527ac462030000616c756653c56b6c766b00527ac46c766b51527ac462030000616c756651c56b62030000616c756651c56b6203000110616c756651c56b6203000100616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756651c56b62030000616c7566', - 'hex', -); - -export const narrativeTokenContract = new Contract({ - script: narrativeTokenScript, - parameterList: [ContractParameterType.String, ContractParameterType.Array], - - returnType: ContractParameterType.ByteArray, - name: 'Narrative Token', - codeVersion: '1.0.0', - author: 'Narrative Limited', - email: 'support@narrative.network', - description: 'Token for the Narrative Network', - contractProperties: ContractPropertyState.HasStorageDynamicInvokePayable, -}); - -export const wowbitTokenContractScript = Buffer.from( - '6504006665150051a1640c00652600652a00620600654f006668164e656f2e52756e74696d652e476574547269676765726665dc01650502667682764c01149c640a007565ff01621c004c01219c640700ac6211007452a26409006503026204007500667665fc019c640a007565fc01629d01766546029c640a0075654a02628e017665ba029c640700756282017665bb029c640c0065c80165b7026271017665b8029c640c0065b70165b6026260017665b4029c640a007565b60262510176653b039c640a0075653e0362420176654a039c640c00658801654a03623101766545039c640a0075654803622201766548039c640a0075654803621301766548039c640a007565490362040176655d039c640a007565600362f500766560039c640a007565600362e60076656c039c640a0075656d0362d70076656d039c640a0075656d0362c800766579039c640a007565790362b900766579039c640a007565790362aa00766585039c640a0075658503629b00766585039c640a0075658503628c00766591039c640a0075659203627d00766592039c640a0075659203626e0076659e039c640a0075659f03625f0076659f039c640a0075659f036250007665ab039c640a007565b1036241007665e6039c640a007565ea036232007665f8039c640a007565ff036223007665ff039c640a0075650304621400766513049c640a0075651504620500750066682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726665020400c3651d046668184e656f2e52756e74696d652e436865636b5769746e65737366757566066465706c6f7966650e0465d7ff6307000062460065ebff65140464070000623900651104651804651f04652304652704652b046532040065380476653b0465d703653f04653f047b6543045165b3ff6545045165480451660a6d696e74546f6b656e7366653e0465ac019f64070000626b0065300465c901a064070000625d00655d016456006552ff91640800750062470065260465d30195656e0465f60195937665b40465c704a16414007665a90465c4046525ff65c90451621c007565fa0365c9046514ff65c804653d0465d5046508ff65bc0462040000660b746f74616c537570706c7966046e616d656606576f77626974660673796d626f6c660357574266087472616e736665726665d00064870076c0539e64080075006278007600c37c7651c37c52c37600a1640a0065780400626100527965a9fe645500656e04653f039c640a00655f04516241007b5279651a0478652a039f640d00654a04659cfe00622900947691640c00755279653f046208005379650b0376527965ee0393527965ff027c7b650203516207006517040062040000660962616c616e63654f666676c0651104640b0000c365be0362050075006608646563696d616c73665866096d7942616c616e6365666502fc659b0366066163746976656665f8ff654b02660373657465edff7e6665280265f1fd64140076c051a264080000c36205007500659702660973616c6553746172746665f5ff6515026665a00365ebff7e6676c0659303640b0000c36593036205007500660773616c65456e646665f7ff65ea016665750365edff7e6676c0656803640b0000c3657c036205007500666587036527037e6665f8ff65c00166654b0365eeff7e66659e016567fd640b0000c36570036204007566655d036515037e6665f8ff6596016665210365eeff7e66657401653dfd640b0000c3654d036204007566036d696e6548037e6665f7ff656b016665f60265edff7e666549016512fd640b0000c36539036204007566036d6178651d037e6665f7ff6540016665cb0265edff7e66651e0165e7fc640b0000c36518036204007566651a030872656769737465727e6665fd0065c6fc64350076c07665930264260000655501a163180065fe02766c6a7c6bc3517c65f60265fb028b62e7ff65b5fc62070065affc0075006665d002067374617475737e6676c0655502640b0000c365d4026207007565d5026665af0209617661696c61626c657e6665d20165e501660a6765745f726566756e646676c052a26410007600c37c51c37c65a80262050075006608726566756e64656466655d006526fc641a0076c052a1640f007600c37c51c3658902620400756204007566681d4e656f2e5472616e73616374696f6e2e4765745265666572656e6365736668184e656f2e4f75747075742e4765745363726970744861736866140c3d1f1df081e3c674cb07d5bb19a7592dcf7f9166653602654c02664c0440fba55a658701664c04e4fca55a659101664c016465a901664c011965a901664c01c865b901664c048096980065b901664c04c7353a42650b0066651d0265b9ff6665230265130265180066787866651e027e650d00666578fc54c1651a026665cd0165280266653afd65f6ff6668134e656f2e52756e74696d652e47657454696d656665f4fa65160276c065f700643f000078c00065b6ffa1632d00655f01786c6a7c6bc37665130264150076651402640a006516029362040075620400756547018b62d2ff6501fb7762070065fafa006665a5fa65c70176c065a800643f000078c0006567ffa1632d00651001786c6a7c6bc37665c4016415007665e301640a0065c70193620400756204007565f8008b62d2ff65b2fa7762070065abfa00661461c6d851faa9cd5328939a89063864c20d3721c4666535017e65bbfe667665f7ff7b947c6508ff667665ecff7b937c65fdfe66036e656f6665f1fe65bb006b7b6c937c7b65e5fe657e016603676173666555fa75667b7b6665f2007e6573016600a06603736574666556fe651ffa640c006540fc65c9fe62040075666542fe650bfa640c006559fc65b5fe620400756609746f6b656e7350657266656efc659ffe666591fc6598fe660e5075726368617365416d6f756e746665890065a1fc657efe66657f0065c2fc6574fe660a63726f776473616c655f666b6b6665fa007e655dfe666c6c6665ef007e65e9fd66658af765f5ff6665eb007b7e7e65d8fd6665e1007c7e7e65c9006668164e656f2e53746f726167652e476574436f6e7465787466680f4e656f2e53746f726167652e476574660b746f74616c537570706c79664c0400e1f50595660762616c616e63656668124e656f2e52756e74696d652e4e6f7469667966680f4e656f2e53746f726167652e50757466681a4e656f2e5472616e73616374696f6e2e4765744f75747075747366650cfd654f009c66657a00658f009c6668134e656f2e4f75747075742e47657456616c756566655c006593009c66651c007c7e7e6572fd66653bff65a300660977686974656c6973746606726566756e6466682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686668154e656f2e4f75747075742e4765744173736574496466209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc56620e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c606668124e656f2e53746f726167652e44656c65746566', - 'hex', -); - -export const wowbitTokenContract = new Contract({ - script: wowbitTokenContractScript, - parameterList: [ContractParameterType.String, ContractParameterType.Array], - - returnType: ContractParameterType.ByteArray, - name: 'Narrative Token', - codeVersion: '1.0.0', - author: 'vido', - email: '', - description: 'Wowbit token', - contractProperties: ContractPropertyState.HasStorageDynamicInvokePayable, -}); - -export const rpxTokenContractScript = Buffer.from( - '011fc56b6c766b00527ac46c766b51527ac4616168164e656f2e52756e74696d652e47657454726967676572009c6c766b52527ac46c766b52c3643e0061146109d7f250400e09410cc8efebfa7675b0a844726168184e656f2e52756e74696d652e436865636b5769746e6573736c766b53527ac46247046168164e656f2e52756e74696d652e47657454726967676572609c6c766b54527ac46c766b54c3641204616c766b00c3066465706c6f79876c766b55527ac46c766b55c364110061653d046c766b53527ac462f2036c766b00c30a6d696e74546f6b656e73876c766b56527ac46c766b56c36411006165f8066c766b53527ac462c4036c766b00c30b746f74616c537570706c79876c766b57527ac46c766b57c364110061651e0b6c766b53527ac46295036c766b00c3046e616d65876c766b58527ac46c766b58c3641100616580036c766b53527ac4626d036c766b00c30673796d626f6c876c766b59527ac46c766b59c364110061656d036c766b53527ac46243036c766b00c308646563696d616c73876c766b5a527ac46c766b5ac364110061654c036c766b53527ac46217036c766b00c3087472616e73666572876c766b5b527ac46c766b5bc3647100616c766b51c3c0539c009c6c766b5f527ac46c766b5fc3640e00006c766b53527ac462d4026c766b51c300c36c766b5c527ac46c766b51c351c36c766b5d527ac46c766b51c352c36c766b5e527ac46c766b5cc36c766b5dc36c766b5ec361527265630a6c766b53527ac4628b026c766b00c30962616c616e63654f66876c766b60527ac46c766b60c3644d00616c766b51c3c0519c009c6c766b0112527ac46c766b0112c3640e00006c766b53527ac46245026c766b51c300c36c766b0111527ac46c766b0111c36165190c6c766b53527ac46222026c766b00c309696e666c6174696f6e876c766b0113527ac46c766b0113c36411006165390c6c766b53527ac462f3016c766b00c30d696e666c6174696f6e52617465876c766b0114527ac46c766b0114c3644d00616c766b51c3c0519c009c6c766b0116527ac46c766b0116c3640e00006c766b53527ac462a7016c766b51c300c36c766b0115527ac46c766b0115c36165740f6c766b53527ac46284016c766b00c312696e666c6174696f6e537461727454696d65876c766b0117527ac46c766b0117c3644d00616c766b51c3c0519c009c6c766b0119527ac46c766b0119c3640e00006c766b53527ac46233016c766b51c300c36c766b0118527ac46c766b0118c36165fd0f6c766b53527ac46210016c766b00c3127175657279496e666c6174696f6e52617465876c766b011a527ac46c766b011ac36411006165740f6c766b53527ac462d8006c766b00c3177175657279496e666c6174696f6e537461727454696d65876c766b011b527ac46c766b011bc36411006165a0106c766b53527ac4629b006c766b00c30d746f74616c53616c65734e656f876c766b011c527ac46c766b011cc36411006165a5006c766b53527ac46268006c766b00c30873616c65734e656f876c766b011d527ac46c766b011dc3641100616595106c766b53527ac4623a006c766b00c305696e6e6572876c766b011e527ac46c766b011ec36411006165b6106c766b53527ac4620f0061006c766b53527ac46203006c766b53c3616c756600c56b0f5265642050756c736520546f6b656e616c756600c56b03525058616c756600c56b58616c756600c56b0600d4be4ae924616c756654c56b61146109d7f250400e09410cc8efebfa7675b0a844726168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b51527ac46c766b51c3640e00006c766b52527ac46293026168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c79617c680f4e656f2e53746f726167652e4765746c766b00527ac46c766b00c3c000a06c766b53527ac46c766b53c3640e00006c766b52527ac46232026168164e656f2e53746f726167652e476574436f6e746578741485104d0b1bc285289b17717a6facaa2cbd1712b3070060b7c6c5fe11615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e7465787414130b891dc5341bcef93c077fc7ec5624ee8776f80700f87f24795120615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e746578741445bcb590e3e0fb0010d7bfde6f7cd39382fd86e90700c0b6403b6f0c615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c79070018ee2b7abf3e615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e746578740873616c65734e656f060041ad29410b615272680f4e656f2e53746f726167652e50757461001485104d0b1bc285289b17717a6facaa2cbd1712b3070060b7c6c5fe11615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f74696679610014130b891dc5341bcef93c077fc7ec5624ee8776f80700f87f24795120615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667961001445bcb590e3e0fb0010d7bfde6f7cd39382fd86e90700c0b6403b6f0c615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667961516c766b52527ac46203006c766b52c3616c75660114c56b6161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b00527ac46c766b00c361681d4e656f2e5472616e73616374696f6e2e4765745265666572656e63657300c36c766b51527ac46c766b51c36168154e656f2e4f75747075742e47657441737365744964209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c009c6c766b5c527ac46c766b5cc3640e00006c766b5d527ac4628e036c766b51c36168184e656f2e4f75747075742e476574536372697074486173686c766b52527ac46c766b00c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736c766b53527ac461682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686c766b54527ac4006c766b55527ac4616c766b53c36c766b5e527ac4006c766b5f527ac46286006c766b5ec36c766b5fc3c36c766b60527ac4616c766b60c36168184e656f2e4f75747075742e476574536372697074486173686c766b54c39c6c766b0111527ac46c766b0111c3642d00616c766b55c36c766b60c36168134e656f2e4f75747075742e47657456616c7565936c766b55527ac461616c766b5fc351936c766b5f527ac46c766b5fc36c766b5ec3c09f6371ff6168184e656f2e426c6f636b636861696e2e4765744865696768746168184e656f2e426c6f636b636861696e2e4765744865616465726168174e656f2e4865616465722e47657454696d657374616d706c766b56527ac46c766b56c3045021da59946c766b57527ac46c766b57c36165b00d6c766b58527ac46c766b58c3009c6c766b0112527ac46c766b0112c3643900616c766b52c36c766b55c3617c06726566756e6453c168124e656f2e52756e74696d652e4e6f7469667961006c766b5d527ac4628e016c766b57c36c766b52c36c766b55c361527265300e6c766b55527ac46c766b55c3009c6c766b0113527ac46c766b0113c3640f0061006c766b5d527ac4624e016c766b55c30400e1f505966c766b58c3956c766b59527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b52c3617c680f4e656f2e53746f726167652e4765746c766b5a527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b52c36c766b59c36c766b5ac393615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c79617c680f4e656f2e53746f726167652e4765746c766b5b527ac46168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c796c766b59c36c766b5bc393615272680f4e656f2e53746f726167652e50757461006c766b52c36c766b59c3615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667961516c766b5d527ac46203006c766b5dc3616c756651c56b616168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c79617c680f4e656f2e53746f726167652e4765746c766b00527ac46203006c766b00c3616c75665ac56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b52c300a16c766b55527ac46c766b55c3640e00006c766b56527ac462df016c766b00c36168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b57527ac46c766b57c3640e00006c766b56527ac462a3016168164e656f2e53746f726167652e476574436f6e746578746c766b00c3617c680f4e656f2e53746f726167652e4765746c766b53527ac46c766b53c36c766b52c39f6c766b58527ac46c766b58c3640e00006c766b56527ac46246016c766b53c36c766b52c39c6c766b59527ac46c766b59c3643b006168164e656f2e53746f726167652e476574436f6e746578746c766b00c3617c68124e656f2e53746f726167652e44656c657465616241006168164e656f2e53746f726167652e476574436f6e746578746c766b00c36c766b53c36c766b52c394615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e746578746c766b51c3617c680f4e656f2e53746f726167652e4765746c766b54527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b51c36c766b54c36c766b52c393615272680f4e656f2e53746f726167652e507574616c766b00c36c766b51c36c766b52c3615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667961516c766b56527ac46203006c766b56c3616c756652c56b6c766b00527ac4616168164e656f2e53746f726167652e476574436f6e746578746c766b00c3617c680f4e656f2e53746f726167652e4765746c766b51527ac46203006c766b51c3616c75665fc56b616168164e656f2e53746f726167652e476574436f6e746578740d696e666c6174696f6e52617465617c680f4e656f2e53746f726167652e4765746c766b00527ac46c766b00c3009c6c766b59527ac46c766b59c3640e00006c766b5a527ac4623e036168164e656f2e53746f726167652e476574436f6e7465787412696e666c6174696f6e537461727454696d65617c680f4e656f2e53746f726167652e4765746c766b51527ac46c766b51c3009c6c766b5b527ac46c766b5bc3640e00006c766b5a527ac462d7026168184e656f2e426c6f636b636861696e2e4765744865696768746168184e656f2e426c6f636b636861696e2e4765744865616465726168174e656f2e4865616465722e47657454696d657374616d706c766b52527ac46c766b52c36c766b51c3946c766b53527ac46c766b53c3009f6c766b5c527ac46c766b5cc3640e00006c766b5a527ac4624d026168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c79617c680f4e656f2e53746f726167652e4765746c766b54527ac46c766b53c3038051019651936c766b55527ac4006c766b56527ac4006c766b57527ac4006c766b5d527ac4625100616c766b54c36c766b00c395060010a5d4e800966c766b56527ac46c766b57c36c766b56c3936c766b57527ac46c766b54c36c766b56c3936c766b54527ac4616c766b5dc351936c766b5d527ac46c766b5dc36c766b55c39f6c766b5e527ac46c766b5ec3639bff6168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c796c766b54c3615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e7465787412696e666c6174696f6e537461727454696d656c766b51c36c766b55c3038051019593615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e74657874149d50ddee02df50e0d48d1dcae2c143523d2280ac617c680f4e656f2e53746f726167652e4765746c766b58527ac46168164e656f2e53746f726167652e476574436f6e74657874149d50ddee02df50e0d48d1dcae2c143523d2280ac6c766b58c36c766b57c393615272680f4e656f2e53746f726167652e5075746100149d50ddee02df50e0d48d1dcae2c143523d2280ac6c766b58c36c766b57c393615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667961516c766b5a527ac46203006c766b5ac3616c756653c56b6c766b00527ac461149d50ddee02df50e0d48d1dcae2c143523d2280ac6168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b51527ac46c766b51c3640e00006c766b52527ac4624f006168164e656f2e53746f726167652e476574436f6e746578740d696e666c6174696f6e526174656c766b00c3615272680f4e656f2e53746f726167652e50757461516c766b52527ac46203006c766b52c3616c756651c56b616168164e656f2e53746f726167652e476574436f6e746578740d696e666c6174696f6e52617465617c680f4e656f2e53746f726167652e4765746c766b00527ac46203006c766b00c3616c756655c56b6c766b00527ac461149d50ddee02df50e0d48d1dcae2c143523d2280ac6168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b52527ac46c766b52c3640e00006c766b53527ac462bb006168164e656f2e53746f726167652e476574436f6e7465787412696e666c6174696f6e537461727454696d65617c680f4e656f2e53746f726167652e4765746c766b51527ac46c766b51c3009e6c766b54527ac46c766b54c3640e00006c766b53527ac46254006168164e656f2e53746f726167652e476574436f6e7465787412696e666c6174696f6e537461727454696d656c766b00c3615272680f4e656f2e53746f726167652e50757461516c766b53527ac46203006c766b53c3616c756651c56b616168164e656f2e53746f726167652e476574436f6e7465787412696e666c6174696f6e537461727454696d65617c680f4e656f2e53746f726167652e4765746c766b00527ac46203006c766b00c3616c756651c56b616168164e656f2e53746f726167652e476574436f6e746578740873616c65734e656f617c680f4e656f2e53746f726167652e4765746c766b00527ac46203006c766b00c3616c756659c56b611480a4d929aa03042c4bfb538bcfcfd0bdd62d66ac6168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b56527ac46c766b56c3640e00006c766b57527ac46250026168164e656f2e53746f726167652e476574436f6e746578740a696e6e65725f666c6167617c680f4e656f2e53746f726167652e4765746c766b00527ac46c766b00c3009e6c766b58527ac46c766b58c3640e00006c766b57527ac462f1016168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c79617c680f4e656f2e53746f726167652e4765746c766b51527ac46c766b51c30164950128966c766b52527ac46168164e656f2e53746f726167652e476574436f6e746578740a696e6e65725f666c61670131615272680f4e656f2e53746f726167652e507574616c766b51c36c766b53527ac46c766b52c35f950164966c766b54527ac46c766b52c355950164966c766b55527ac46168164e656f2e53746f726167652e476574436f6e746578741480a4d929aa03042c4bfb538bcfcfd0bdd62d66ac6c766b53c3615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e7465787414950efd679770e40e89a8e150cd37bf44139e40c46c766b54c3615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e74657874142397d5baa3da107e77236dc42b4e2e30483e0b916c766b55c3615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c796c766b51c36c766b53c3936c766b54c3936c766b55c393615272680f4e656f2e53746f726167652e50757461516c766b57527ac46203006c766b57c3616c756657c56b6c766b00527ac4616c766b00c3009f6c766b51527ac46c766b51c3640f0061006c766b52527ac462b7006c766b00c3038051019f6c766b53527ac46c766b53c3641400610500949a441e6c766b52527ac4628d006c766b00c30380f4039f6c766b54527ac46c766b54c3641400610500b08ef01b6c766b52527ac46263006c766b00c303803a099f6c766b55527ac46c766b55c3641400610500cc829c196c766b52527ac46239006c766b00c3030075129f6c766b56527ac46c766b56c3641400610500e87648176c766b52527ac4620f0061006c766b52527ac46203006c766b52c3616c75665fc56b6c766b00527ac46c766b51527ac46c766b52527ac4610a4d494e545f434f554e546c766b51c37e6c766b53527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b53c3617c680f4e656f2e53746f726167652e4765746c766b54527ac46c766b00c302100ea0009c6c766b57527ac46c766b57c364e100616c766b54c300a06c766b58527ac46c766b58c3643900616c766b51c36c766b52c3617c06726566756e6453c168124e656f2e52756e74696d652e4e6f7469667961006c766b59527ac462db026c766b52c30500bbeea000a06c766b5a527ac46c766b5ac3644100616c766b51c36c766b52c30500bbeea00094617c06726566756e6453c168124e656f2e52756e74696d652e4e6f74696679610500bbeea0006a52527ac4616168164e656f2e53746f726167652e476574436f6e746578746c766b53c351615272680f4e656f2e53746f726167652e507574616162de00616c766b54c351a06c766b5b527ac46c766b5bc3643900616c766b51c36c766b52c3617c06726566756e6453c168124e656f2e52756e74696d652e4e6f7469667961006c766b59527ac462fd016c766b52c30500488c7a1fa06c766b5c527ac46c766b5cc3644100616c766b51c36c766b52c30500488c7a1f94617c06726566756e6453c168124e656f2e52756e74696d652e4e6f74696679610500488c7a1f6a52527ac4616168164e656f2e53746f726167652e476574436f6e746578746c766b53c352615272680f4e656f2e53746f726167652e50757461616168164e656f2e53746f726167652e476574436f6e746578740873616c65734e656f617c680f4e656f2e53746f726167652e4765746c766b55527ac40600d4be4ae9246c766b55c3946c766b56527ac40600d4be4ae9246c766b55c3a16c766b5d527ac46c766b5dc3643900616c766b51c36c766b52c3617c06726566756e6453c168124e656f2e52756e74696d652e4e6f7469667961006c766b59527ac462cd006c766b56c36c766b52c3a16c766b5e527ac46c766b5ec3645400616c766b51c36c766b52c36c766b56c394617c06726566756e6453c168124e656f2e52756e74696d652e4e6f74696679616c766b55c36c766b56c3936c766b55527ac46c766b56c36a52527ac461621700616c766b55c36c766b52c3936c766b55527ac4616168164e656f2e53746f726167652e476574436f6e746578740873616c65734e656f6c766b55c3615272680f4e656f2e53746f726167652e507574616c766b52c36c766b59527ac46203006c766b59c3616c7566', - 'hex', -); - -export const rpxTokenContract = new Contract({ - script: rpxTokenContractScript, - parameterList: [ContractParameterType.String, ContractParameterType.Array], - - returnType: ContractParameterType.ByteArray, - name: 'RPX Sale', - codeVersion: '1.0.0', - author: 'Red Pulse', - email: 'rpx@red-pulse.com', - description: 'RPX Sale', - contractProperties: ContractPropertyState.HasStorageDynamicInvokePayable, -}); - -export const mysteryScript = Buffer.from( - '0f53747265616d4465736b2056312e301163656f4073747265616d6974792e6f72670953747265616d69747903312e300a53747265616d4465736b51550270104daa240121c56b6c766b00527ac46c766b51527ac4616168164e656f2e52756e74696d652e47657454726967676572009c6c766b52527ac46c766b52c36404036161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b53527ac461682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686c766b54527ac4006c766b55527ac46c766b53c36c766b56527ac46c766b56c36168234e656f2e496e766f636174696f6e5472616e73616374696f6e2e476574536372697074610b00c10877697468647261776101697e61682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173687e9c009c6c766b57527ac46c766b57c3640e00006c766b58527ac462a7046c766b53c361654f1d6c766b59527ac46c766b59c364e800616c766b53c36165461e6c766b5a527ac46c766b5ac361009c6c766b5e527ac46c766b5ec3640e00006c766b58527ac4625c046c766b53c36114d6b7ecf58552465c0d8184d4964067b93d3497b56c766b54c36c766b5ac3615379517955727551727552795279547275527275652d0a6c766b55527ac46c766b5ac361656a206c766b5b527ac46c766b5ac36165ef206c766b5c527ac46c766b5bc36c766b5cc3946c766b5d527ac46c766b55c36411006c766b5dc36c766b55c3a2620400006c766b5f527ac46c766b5fc3640e00516c766b58527ac462b503006c766b58527ac462aa03616c766b53c36165631b6c766b60527ac46c766b60c361009c6c766b0113527ac46c766b0113c3640e00006c766b58527ac46275036c766b60c361650d046c766b0111527ac46c766b0111c356c361009c6c766b0114527ac46c766b0114c3640e00006c766b58527ac4623d036c766b0111c36165e21d6c766b0112527ac46c766b0112c361009c6c766b0115527ac46c766b0115c3640e00006c766b58527ac46206036c766b53c36c766b0112c36c766b54c36c766b0111c361537951795572755172755279527954727552727565a20a009c6c766b0116527ac46c766b0116c3640e00006c766b58527ac462ba02516c766b58527ac462af026168164e656f2e52756e74696d652e47657454726967676572519c6c766b0117527ac46c766b0117c3640f0061516c766b58527ac46277026168164e656f2e52756e74696d652e47657454726967676572609c6c766b0118527ac46c766b0118c3644002616c766b00c30a67657442616c616e6365876c766b0119527ac46c766b0119c3641900616c766b51c300c3616525026c766b58527ac46212026c766b00c3086465616c496e666f876c766b011a527ac46c766b011ac3641900616c766b51c300c3616587026c766b58527ac462dc016c766b00c30b676574486173684465616c876c766b011b527ac46c766b011bc3645a00616c766b51c300c36c766b51c351c36c766b51c352c36c766b51c353c36c766b51c354c36c766b51c355c36155795179577275517275547952795672755272755379537955727553727565c30d6c766b58527ac46262016c766b00c30c7265636569766564436f696e876c766b011c527ac46c766b011cc3645a00616c766b51c300c36c766b51c351c36c766b51c352c36c766b51c353c36c766b51c354c36c766b51c355c36155795179577275517275547952795672755272755379537955727553727565b30d6c766b58527ac462e7006c766b00c30a736574417070726f7665876c766b011d527ac46c766b011dc3641900616c766b51c300c361650b136c766b58527ac462af006c766b00c30b73657443616e63656c6564876c766b011e527ac46c766b011ec3641900616c766b51c300c3616584146c766b58527ac46276006c766b00c3087769746864726177876c766b011f527ac46c766b011fc3641200616165c7026c766b58527ac46247006c766b00c30a64656c6574654465616c876c766b0120527ac46c766b0120c3641900616c766b51c300c36165401b6c766b58527ac4620f0061006c766b58527ac46203006c766b58c3616c756656c56b6c766b00527ac4616c766b00c36165411c6c766b51527ac46c766b00c36165c61c6c766b52527ac46c766b00c36165211e6c766b53527ac4546153c66c766b527a527ac46c766b54c36c766b51c36c766b53c396007cc46c766b54c36c766b52c36c766b53c396517cc46c766b54c36c766b51c36c766b52c394527cc46c766b54c36c766b55527ac46203006c766b55c3616c75665ac56b6c766b00527ac4616165321d6c766b00c31673656c6c6572427579657241737365745374617475737e617c680f4e656f2e53746f726167652e4765746c766b51527ac46165f71c6c766b00c30576616c75657e617c680f4e656f2e53746f726167652e4765746c766b52527ac46165cd1c6c766b00c30a636f6d6d697373696f6e7e617c680f4e656f2e53746f726167652e4765746c766b53527ac401206c766b54527ac46c766b51c30128517f6101029c6c766b57527ac46c766b57c3640c0001146c766b54527ac46c766b51c301296c766b54c37f6c766b55527ac46c766b55c36165d31c6c766b56527ac458615ac66c766b527a527ac46c766b58c36c766b51c30001147f007cc46c766b58c36c766b51c3011401147f517cc46c766b58c36c766b55c3527cc46c766b58c36c766b52c3537cc46c766b58c36c766b53c3547cc46c766b58c36165f11b6c766b00c30a63616e63656c54696d657e617c680f4e656f2e53746f726167652e476574557cc46c766b58c36c766b51c301296c766b54c393517f567cc46c766b58c36c766b00c3577cc46c766b58c36c766b52c36c766b56c396587cc46c766b58c36c766b53c35196597cc46c766b58c36c766b59527ac46203006c766b59c3616c75660113c56b6161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b00527ac461682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686c766b51527ac4006c766b52527ac46c766b00c36165be156c766b53527ac46c766b53c364e800616c766b00c36165b5166c766b54527ac46c766b54c361009c6c766b58527ac46c766b58c3640e00006c766b59527ac462d0026c766b00c36114d6b7ecf58552465c0d8184d4964067b93d3497b56c766b51c36c766b54c3615379517955727551727552795279547275527275659c026c766b52527ac46c766b54c36165d9186c766b55527ac46c766b54c361655e196c766b56527ac46c766b55c36c766b56c3946c766b57527ac46c766b52c36411006c766b57c36c766b52c3a2620400006c766b5a527ac46c766b5ac3640e00516c766b59527ac4622902006c766b59527ac4621e02616c766b00c36165d2136c766b5b527ac46c766b5bc361009c6c766b5e527ac46c766b5ec3640e00006c766b59527ac462eb016c766b5bc361657efc6c766b5c527ac46c766b5cc361657c166c766b5d527ac46c766b5dc361009c6c766b5f527ac46c766b5fc3640e00006c766b59527ac462a9016c766b00c36c766b5dc36c766b51c36c766b5cc3615379517955727551727552795279547275527275654203009c6c766b60527ac46c766b60c3640e00006c766b59527ac46261016c766b5cc352c36c766b5cc353c300615272657a18616c766b5cc352c361209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5907c907c9e6311006c766b5cc356c36101029c620400006c766b0111527ac46c766b0111c36434006120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c606c766b5cc354c30061527265f817616c766b5cc356c36101039c6c766b0112527ac46c766b0112c3645100616c766b5cc3610104617c65c71161616c766b5bc36c766b5cc300c36c766b5cc351c36152720c72656c656173654576656e7454c168124e656f2e52756e74696d652e4e6f746966796161625400616c766b5cc3610105617c65791161616c766b5bc36c766b5cc300c36c766b5cc351c36152721272656c6561736543616e63656c4576656e7454c168124e656f2e52756e74696d652e4e6f746966796161516c766b59527ac46203006c766b59c3616c75665cc56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac461006c766b54527ac4616c766b00c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736c766b55527ac4006c766b56527ac4623b016c766b55c36c766b56c3c36c766b57527ac4616c766b57c36168184e656f2e4f75747075742e476574536372697074486173686c766b51c39c632e006c766b57c36168184e656f2e4f75747075742e476574536372697074486173686c766b52c39c009c620400006c766b58527ac46c766b58c3640e00006c766b59527ac462d7006c766b57c36168184e656f2e4f75747075742e476574536372697074486173686c766b52c39c6c766b5a527ac46c766b5ac36406006273006c766b57c36168154e656f2e4f75747075742e476574417373657449646c766b53c39c009c6c766b5b527ac46c766b5bc3640e00006c766b59527ac46260006c766b54c36c766b57c36168134e656f2e4f75747075742e47657456616c756593766c766b54527ac46c766b54527ac4616c766b56c351936c766b56527ac46c766b56c36c766b55c3c09f63bcfe6c766b54c36c766b59527ac46203006c766b59c3616c75660115c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac461006c766b54527ac4006c766b55527ac4616c766b00c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736c766b56527ac4006c766b57527ac46234036c766b56c36c766b57c3c36c766b58527ac4616c766b58c36168184e656f2e4f75747075742e476574536372697074486173686c766b51c39c632e006c766b58c36168184e656f2e4f75747075742e476574536372697074486173686c766b52c39c009c620400006c766b59527ac46c766b59c3640e00006c766b5a527ac4629f036c766b58c36168184e656f2e4f75747075742e476574536372697074486173686c766b52c39c6c766b5b527ac46c766b5bc3640600626c026c766b53c352c361209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5907c907c9e6311006c766b53c356c36101029c620400006c766b5c527ac46c766b5cc364a901616c766b58c36168154e656f2e4f75747075742e4765744173736574496461209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c6348006c766b58c36168154e656f2e4f75747075742e476574417373657449646120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c609c009c620400006c766b5d527ac46c766b5dc3640e00006c766b5a527ac46274026c766b58c36168154e656f2e4f75747075742e4765744173736574496461209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c6c766b5e527ac46c766b5ec36433006c766b54c36c766b58c36168134e656f2e4f75747075742e47657456616c756593766c766b54527ac46c766b54527ac46c766b58c36168154e656f2e4f75747075742e476574417373657449646120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c609c6c766b5f527ac46c766b5fc36433006c766b55c36c766b58c36168134e656f2e4f75747075742e47657456616c756593766c766b55527ac46c766b55527ac461627600616c766b58c36168154e656f2e4f75747075742e476574417373657449646c766b53c352c39c009c6c766b60527ac46c766b60c3640e00006c766b5a527ac46230016c766b55c36c766b58c36168134e656f2e4f75747075742e47657456616c756593766c766b55527ac46c766b55527ac461616c766b57c351936c766b57527ac46c766b57c36c766b56c3c09f63c3fc6c766b53c352c361209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5907c907c9e6311006c766b53c356c36101029c620400006c766b0111527ac46c766b0111c3645a00616c766b54c36c766b53c353c39e6c766b0112527ac46c766b0112c3640e00006c766b5a527ac46266006c766b55c36c766b53c354c39e6c766b0113527ac46c766b0113c3640e00006c766b5a527ac4623d0061622e00616c766b55c36c766b53c353c39e6c766b0114527ac46c766b0114c3640e00006c766b5a527ac4620f0061516c766b5a527ac46203006c766b5ac3616c756658c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac4616c766b00c36c766b51c37e6c766b52c37e6c766b54c37e6c766b55c37eaa6c766b56527ac46c766b56c36c766b57527ac46203006c766b57c3616c7566011ec56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac46161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b56527ac4006c766b57527ac4006c766b58527ac4006c766b59527ac46c766b00c36c766b51c37e6c766b52c37e6c766b54c37e6c766b55c37eaa6c766b5a527ac46c766b5ac361653af36c766b5b527ac46c766b5bc356c361009c009c6c766b5e527ac46c766b5ec3644b0061616c766b5ac36c766b51c36c766b52c3615272116465616c52657065617465644576656e7454c168124e656f2e52756e74696d652e4e6f7469667961006c766b5f527ac4627804616c766b56c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736c766b60527ac4006c766b0111527ac462d0016c766b60c36c766b0111c3c36c766b0112527ac4616c766b0112c36168184e656f2e4f75747075742e4765745363726970744861736861682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c6c766b0113527ac46c766b0113c3644701616c766b0112c36168134e656f2e4f75747075742e47657456616c75656c766b0114527ac46c766b0112c36168154e656f2e4f75747075742e4765744173736574496461209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c6c766b0115527ac46c766b0115c3641b00616c766b57c36c766b0114c3936c766b57527ac46162b7006c766b0112c36168154e656f2e4f75747075742e476574417373657449646120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c609c6c766b0116527ac46c766b0116c3641b00616c766b58c36c766b0114c3936c766b58527ac461624d006c766b0112c36168154e656f2e4f75747075742e476574417373657449646c766b53c39c6c766b0117527ac46c766b0117c3641800616c766b59c36c766b0114c3936c766b59527ac46161616c766b0111c351936c766b0111527ac46c766b0111c36c766b60c3c09f6326fe516c766b5c527ac4006c766b5d527ac46c766b53c361209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c6c766b0118527ac46c766b0118c3644d00616c766b54c36c766b57c39e6311006c766b55c36c766b58c39e620400516c766b0119527ac46c766b0119c3640e00006c766b5c527ac4620f006c766b57c36c766b5d527ac461627e006c766b53c36120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c609c6c766b011a527ac46c766b011ac3643b00616c766b54c36c766b58c39e6c766b011b527ac46c766b011bc3640e00006c766b5c527ac4620f006c766b58c36c766b5d527ac461620d0061006c766b5c527ac4616c766b5cc3009c6c766b011c527ac46c766b011cc364740061616c766b5ac36c766b51c36c766b52c36c766b53c36c766b54c36c766b55c3615579517957727551727554795279567275527275537953795572755372750f6465616c42726f6b656e4576656e7457c168124e656f2e52756e74696d652e4e6f7469667961006c766b5f527ac462ce006c766b53c36c766b5dc35161527265a70b616c766b53c361209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c6c766b011d527ac46c766b011dc36432006120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c606c766b58c351615272653f0b616c766b5ac36c766b00c36c766b51c36c766b52c36c766b53c36c766b54c36c766b55c36156795179587275517275557952795772755272755479537956727553727565f00261516c766b5f527ac46203006c766b5fc3616c756657c56b6c766b00527ac4616165a10b009c6c766b52527ac46c766b52c3640e00006c766b53527ac46281016c766b00c361651eee6c766b51527ac46c766b51c356c36101019c6c766b54527ac46c766b54c3644c01616c766b51c352c361209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c6c766b55527ac46c766b55c3643900616120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c606c766b51c354c30061527265240a61616284006c766b51c352c36120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c609c6c766b56527ac46c766b56c3643f00616c766b51c352c36c766b51c354c30061527265d009616c766b00c30576616c75656c766b51c353c36c766b51c354c39461527265f9036161620f0061006c766b53527ac46266006c766b51c3610103617c658b0361616c766b00c36c766b51c300c36c766b51c351c361527210617070726f76654465616c4576656e7454c168124e656f2e52756e74696d652e4e6f7469667961516c766b53527ac4620e00006c766b53527ac46203006c766b53c3616c756655c56b6c766b00527ac4616165ef09009c6c766b52527ac46c766b52c3640e00006c766b53527ac462f5006c766b00c361656cec6c766b51527ac46c766b51c356c3610101907c907c9e635e006c766b51c355c36168184e656f2e426c6f636b636861696e2e4765744865696768746168184e656f2e426c6f636b636861696e2e4765744865616465726168174e656f2e4865616465722e47657454696d657374616d709f620400006c766b54527ac46c766b54c3645d00616c766b51c3610102617c65660261616c766b00c36c766b51c300c36c766b51c351c36152721173656c6c657243616e63656c4576656e7454c168124e656f2e52756e74696d652e4e6f7469667961516c766b53527ac4620e00006c766b53527ac46203006c766b53c3616c756657c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac46c766b56527ac4616c766b00c36c766b52c36c766b53c36c766b54c3610101615479517956727551727553795279557275527275650b01616c766b00c30576616c75656c766b55c361527265db01616c766b00c30a636f6d6d697373696f6e6c766b56c361527265bf01616c766b00c30a63616e63656c54696d656168184e656f2e426c6f636b636861696e2e4765744865696768746168184e656f2e426c6f636b636861696e2e4765744865616465726168174e656f2e4865616465722e47657454696d657374616d706102201c9361527265530161616c766b00c36c766b52c36c766b53c36c766b54c36c766b55c36c766b56c3615579517957727551727554795279567275527275537953795572755372750e73746172744465616c4576656e7457c168124e656f2e52756e74696d652e4e6f7469667961616c756657c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac4616101016c766b55527ac46c766b53c3c001149c6c766b56527ac46c766b56c3640d006101026c766b55527ac46c766b00c31673656c6c6572427579657241737365745374617475736c766b51c36c766b52c37e6c766b55c37e6c766b53c37e6c766b54c37e61527265580061616c756652c56b6c766b00527ac46c766b51527ac4616c766b00c357c36c766b00c300c36c766b00c351c36c766b00c352c36c766b51c36154795179567275517275537952795572755272756521ff61616c756653c56b6c766b00527ac46c766b51527ac46c766b52527ac461616548066c766b00c36c766b51c37e6c766b52c3615272680f4e656f2e53746f726167652e50757461616c756657c56b6c766b00527ac4616c766b00c361681d4e656f2e5472616e73616374696f6e2e476574417474726962757465736c766b51527ac4616c766b51c36c766b52527ac4006c766b53527ac4627e006c766b52c36c766b53c3c36c766b54527ac4616c766b54c36168164e656f2e4174747269627574652e47657455736167656102f1009c6c766b55527ac46c766b55c3642a006c766b54c36168154e656f2e4174747269627574652e476574446174616c766b56527ac4622d00616c766b53c351936c766b53527ac46c766b53c36c766b52c3c09f6379ff61006c766b56527ac46203006c766b56c3616c756657c56b6c766b00527ac4616c766b00c361681d4e656f2e5472616e73616374696f6e2e476574417474726962757465736c766b51527ac4616c766b51c36c766b52527ac4006c766b53527ac462a1006c766b52c36c766b53c3c36c766b54527ac4616c766b54c36168164e656f2e4174747269627574652e47657455736167656102f200907c907c9e633a006c766b54c36168154e656f2e4174747269627574652e476574446174616114d6b7ecf58552465c0d8184d4964067b93d3497b59c620400006c766b55527ac46c766b55c3640e00516c766b56527ac4622c00616c766b53c351936c766b53527ac46c766b53c36c766b52c3c09f6356ff006c766b56527ac46203006c766b56c3616c756657c56b6c766b00527ac4616c766b00c361681d4e656f2e5472616e73616374696f6e2e476574417474726962757465736c766b51527ac4616c766b51c36c766b52527ac4006c766b53527ac4627e006c766b52c36c766b53c3c36c766b54527ac4616c766b54c36168164e656f2e4174747269627574652e47657455736167656102f3009c6c766b55527ac46c766b55c3642a006c766b54c36168154e656f2e4174747269627574652e476574446174616c766b56527ac4622d00616c766b53c351936c766b53527ac46c766b53c36c766b52c3c09f6379ff61006c766b56527ac46203006c766b56c3616c756654c56b6c766b00527ac4616c766b00c356c36101039c6c766b51527ac46c766b51c3641500616c766b00c351c36c766b52527ac4623b006c766b00c356c36101029c6c766b53527ac46c766b53c3641600616c766b00c300c36c766b52527ac4620f0061006c766b52527ac46203006c766b52c3616c756655c56b6c766b00527ac4616165cc02009c6c766b52527ac46c766b52c3640e00006c766b53527ac46203016c766b00c3616549e56c766b51527ac46c766b51c356c36101049c6311006c766b51c356c36101059c620400516c766b54527ac46c766b54c364bc006161654f026c766b00c31673656c6c6572427579657241737365745374617475737e617c68124e656f2e53746f726167652e44656c65746561616517026c766b00c30576616c75657e617c68124e656f2e53746f726167652e44656c657465616165f0016c766b00c30a636f6d6d697373696f6e7e617c68124e656f2e53746f726167652e44656c657465616165c4016c766b00c30a63616e63656c54696d657e617c68124e656f2e53746f726167652e44656c6574656161516c766b53527ac46203006c766b53c3616c756653c56b6c766b00527ac46161682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686168194e656f2e426c6f636b636861696e2e4765744163636f756e746c766b51527ac46c766b51c36c766b00c3617c68164e656f2e4163636f756e742e47657442616c616e63656c766b52527ac46203006c766b52c3616c756652c56b6c766b00527ac4616165e3006c766b00c30762616c616e63657e617c680f4e656f2e53746f726167652e4765746c766b51527ac46203006c766b51c3616c756655c56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b00c361659eff6c766b53527ac46c766b52c36c766b54527ac46c766b54c3643a006161656d006c766b00c30762616c616e63657e6c766b53c36c766b51c393615272680f4e656f2e53746f726167652e507574616162370061616536006c766b00c30762616c616e63657e6c766b53c36c766b51c394615272680f4e656f2e53746f726167652e5075746161616c756600c56b6168164e656f2e53746f726167652e476574436f6e74657874616c756600c56b6114d6b7ecf58552465c0d8184d4964067b93d3497b56168184e656f2e52756e74696d652e436865636b5769746e657373616c756600c56b6165a4ff057374617465617c680f4e656f2e53746f726167652e476574616c756653c56b6c766b00527ac4616c766b00c361209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c6c766b51527ac46c766b51c36412000400e1f5056c766b52527ac4620e00516c766b52527ac46203006c766b52c3616c756668134e656f2e436f6e74726163742e437265617465', - 'hex', -); - -export const aphelionExhangeScript = Buffer.from( - '013ac56b6c766b00527ac46c766b51527ac4616168164e656f2e52756e74696d652e47657454726967676572609c6c766b52527ac46c766b52c3649d0b61006c766b53527ac46c766b00c30b6163636570744f66666572876c766b55527ac46c766b55c3641900616c766b51c361e001012d256c766b56527ac462d10d6c766b00c30a67657442616c616e6365876c766b57527ac46c766b57c36422006c766b51c300c36c766b51c351c3617ce0010242726c766b56527ac462920d6c766b00c30e676574436f6e7472696275746564876c766b58527ac46c766b58c3641a006c766b51c300c361e00101104c6c766b56527ac462570d6c766b00c313676574417661696c61626c65546f436c61696d876c766b59527ac46c766b59c3641a006c766b51c300c361e00101b84d6c766b56527ac462170d6c766b00c30f6765744d61726b6574427579466565876c766b5a527ac46c766b5ac36422006c766b51c300c36c766b51c351c3617ce00102e60c6c766b56527ac462d30c6c766b00c3106765744d61726b657453656c6c466565876c766b5b527ac46c766b5bc36422006c766b51c300c36c766b51c351c3617ce00102e50c6c766b56527ac4628e0c6c766b00c3146765744d61726b65744d696e696d756d53697a65876c766b5c527ac46c766b5cc36422006c766b51c300c36c766b51c351c3617ce00102e00c6c766b56527ac462450c6c766b00c30f6f6e546f6b656e5472616e73666572876c766b5d527ac46c766b5dc364470061682b53797374656d2e457865637574696f6e456e67696e652e47657443616c6c696e67536372697074486173686c766b51c3617ce00102b5356c766b56527ac462dc0b6161006c766b54527ac461682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b5e527ac46c766b5ec361681d4e656f2e5472616e73616374696f6e2e476574417474726962757465736c766b5f527ac46c766b5fc3c0610119a06c766b0111527ac46c766b0111c364070061628802616c766b5fc36c766b0112527ac4006c766b0113527ac462fd006c766b0112c36c766b0113c3c36c766b0114527ac4616c766b0114c36168164e656f2e4174747269627574652e47657455736167656101209c6c766b0115527ac46c766b0115c364a200616c766b0114c36168154e656f2e4174747269627574652e476574446174616c766b54527ac46c766b54c36168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b0116527ac46c766b0116c36446006152c576001d73656e64657220696e76616c69642c206e6f742061207769746e657373c476516c766b54c3c46168124e656f2e52756e74696d652e4e6f746966796161628501616c766b0113c351936c766b0113527ac46c766b0113c36c766b0112c3c09f63f8fe6c766b5ec361681d4e656f2e5472616e73616374696f6e2e4765745265666572656e6365736c766b60527ac46c766b60c3c0610164a06c766b0117527ac46c766b0117c364070061621801616c766b60c36c766b0118527ac4006c766b0119527ac462bb006c766b0118c36c766b0119c3c36c766b011a527ac4616c766b011ac36168184e656f2e4f75747075742e4765745363726970744861736861682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c009c6c766b011b527ac46c766b011bc3642f00616c766b011ac36168184e656f2e4f75747075742e476574536372697074486173686c766b56527ac4622309616c766b0119c351936c766b0119527ac46c766b0119c36c766b0118c3c09f633aff51c576001547657453656e6465722829206e6f2073656e646572c46168124e656f2e52756e74696d652e4e6f74696679616161616c766b54c3c0009c6c766b0121527ac46c766b0121c36407006162ae0561682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b011c527ac46c766b011cc361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736c766b011d527ac46c766b011dc3c0009c6c766b0122527ac46c766b0122c3640700616231056c766b011cc361681d4e656f2e5472616e73616374696f6e2e4765745265666572656e6365736c766b011e527ac4006c766b011f527ac4006c766b0120527ac4616c766b011dc36c766b0123527ac4006c766b0124527ac4628c016c766b0123c36c766b0124c3c36c766b0125527ac4616c766b0125c36168184e656f2e4f75747075742e4765745363726970744861736861682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c009c6c766b0126527ac46c766b0126c364060062fe006c766b0125c36168154e656f2e4f75747075742e4765744173736574496461209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c6c766b0127527ac46c766b0127c3642e006c766b011fc36c766b0125c36168134e656f2e4f75747075742e47657456616c7565936c766b011f527ac46c766b0125c36168154e656f2e4f75747075742e476574417373657449646120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c609c6c766b0128527ac46c766b0128c3642e006c766b0120c36c766b0125c36168134e656f2e4f75747075742e47657456616c7565936c766b0120527ac4616c766b0124c351936c766b0124527ac46c766b0124c36c766b0123c3c09f6369fe6c766b011fc300a06c766b0129527ac46c766b0129c364860161616c766b011ec36c766b012a527ac4006c766b012b527ac462d7006c766b012ac36c766b012bc3c36c766b012c527ac4616c766b012cc36168184e656f2e4f75747075742e476574536372697074486173686c766b54c39c6347006c766b012cc36168154e656f2e4f75747075742e4765744173736574496461209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c620400006c766b012d527ac46c766b012dc3643000616c766b011fc36c766b012cc36168134e656f2e4f75747075742e47657456616c7565946c766b011f527ac461616c766b012bc351936c766b012b527ac46c766b012bc36c766b012ac3c09f631eff6c766b011fc300a06c766b012e527ac46c766b012ec3646b006161209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc56c766b54c36c766b011fc3615272e00103c07e7561209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc56c766b011fc3617ce00002ac2d6161616c766b0120c300a06c766b012f527ac46c766b012fc364860161616c766b011ec36c766b0130527ac4006c766b0131527ac462d7006c766b0130c36c766b0131c3c36c766b0132527ac4616c766b0132c36168184e656f2e4f75747075742e476574536372697074486173686c766b54c39c6347006c766b0132c36168154e656f2e4f75747075742e476574417373657449646120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c609c620400006c766b0133527ac46c766b0133c3643000616c766b0120c36c766b0132c36168134e656f2e4f75747075742e47657456616c7565946c766b0120527ac461616c766b0131c351936c766b0131527ac46c766b0131c36c766b0130c3c09f631eff6c766b0120c300a06c766b0134527ac46c766b0134c3646b00616120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c606c766b54c36c766b0120c3615272e00103247d756120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c606c766b0120c3617ce00002102c61616161616c766b00c361e00101c12e631d006c766b00c36c766b51c36c766b54c3615272e00103600e6214006c766b00c36c766b51c3617ce00102902f6c766b53527ac452c576006c766b53c3630e00074661696c757265620b000753756363657373c476516c766b00c3c46168124e656f2e52756e74696d652e4e6f74696679616c766b53c36c766b56527ac46277026168164e656f2e52756e74696d652e47657454726967676572009c6c766b0135527ac46c766b0135c36414006161e001007f4e6c766b56527ac4623a026168164e656f2e52756e74696d652e47657454726967676572519c6c766b0136527ac46c766b0136c36403026161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b0137527ac46c766b0137c36168174e656f2e5472616e73616374696f6e2e476574547970656102d1009c009c6c766b0138527ac46c766b0138c36469006152c576001b53656e64206d7573742075736520496e766f636174696f6e205458c476516c766b0137c36168174e656f2e5472616e73616374696f6e2e47657454797065c46168124e656f2e52756e74696d652e4e6f7469667961006c766b56527ac4623b016c766b00c30b6163636570744f666665728763b3006c766b00c30a67657442616c616e636587639f006c766b00c30b676574496e76657374656487638a006c766b00c313676574417661696c61626c65546f436c61696d87636d006c766b00c30f6765744d61726b6574427579466565876354006c766b00c3106765744d61726b657453656c6c46656587633a006c766b00c3146765744d61726b65744d696e696d756d53697a6587631c006c766b00c30f6f6e546f6b656e5472616e7366657287620400516c766b0139527ac46c766b0139c3644e006152c576001b4f502063616e2774206163636570742073656e742066756e64732ec476516c766b00c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b56527ac4621900516c766b56527ac4620e00006c766b56527ac46203006c766b56c3616c756654c56b6c766b00527ac46c766b51527ac4616c766b00c36c766b51c3617ce00102f4076c766b52527ac46c766b52c356c36c766b53527ac46203006c766b53c3616c756654c56b6c766b00527ac46c766b51527ac4616c766b00c36c766b51c3617ce00102b0076c766b52527ac46c766b52c357c36c766b53527ac46203006c766b53c3616c756654c56b6c766b00527ac46c766b51527ac4616c766b00c36c766b51c3617ce001026c076c766b52527ac46c766b52c354c36c766b53527ac46203006c766b53c3616c756660c56b6c766b00527ac4610d7365744d61726b65744661696c6c766b51527ac46c766b00c3c0569c009c6c766b57527ac46c766b57c36453006153c576006c766b51c3c476511772657175697265732073697820706172616d6574657273c476526c766b00c3c0c46168124e656f2e52756e74696d652e4e6f7469667961006c766b58527ac4627b0461e001002276630e0061e00100e175009c620400006c766b59527ac46c766b59c36440006152c576006c766b51c3c476510d4e6f207065726d697373696f6ec46168124e656f2e52756e74696d652e4e6f7469667961006c766b58527ac4621a046158c56c766b52527ac46c766b52c36c766b00c300c3527cc46c766b52c36c766b00c351c3537cc46c766b52c36c766b00c352c3547cc46c766b52c36c766b00c353c3557cc46c766b52c36c766b00c354c3567cc46c766b52c36c766b00c355c3577cc46c766b52c356c3009f630f006c766b52c357c3009f620400516c766b5a527ac46c766b5ac36449006152c576006c766b51c3c47651164665652063616e6e6f74206265206e65676174697665c46168124e656f2e52756e74696d652e4e6f7469667961006c766b58527ac46248036c766b52c352c3c001209c6c766b5b527ac46c766b5bc36411006c766b52c36101b9007cc46279006c766b52c352c3c001149c6c766b5c527ac46c766b5cc36411006c766b52c36101a7007cc46251006152c576006c766b51c3c476511e496e76616c6964206c656e677468206f662051756f746541737365744964c46168124e656f2e52756e74696d652e4e6f7469667961006c766b58527ac462aa026c766b52c353c3c001209c6c766b5d527ac46c766b5dc36411006c766b52c36101b9517cc46278006c766b52c353c3c001149c6c766b5e527ac46c766b5ec36411006c766b52c36101a7517cc46250006152c576006c766b51c3c476511d496e76616c6964206c656e677468206f66204261736541737365744964c46168124e656f2e52756e74696d652e4e6f7469667961006c766b58527ac4620d026168164e656f2e53746f726167652e476574436f6e7465787461045e7712956c766b52c352c37e617c680f4e656f2e53746f726167652e4765746c766b53527ac46168164e656f2e53746f726167652e476574436f6e7465787461045e7712956c766b52c353c37e617c680f4e656f2e53746f726167652e4765746c766b54527ac46c766b53c3c0640e006c766b54c3c0009c620400516c766b5f527ac46c766b5fc36454006154c576006c766b51c3c476510d496e76616c6964204173736574c476526c766b52c352c3c476536c766b52c353c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b58527ac46216016c766b52c361e001019c046c766b55527ac461076d61726b6574736c766b52c352c37e6c766b52c353c37e6c766b56527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b56c36c766b55c3615272680f4e656f2e53746f726167652e5075746153c57600097075744d61726b6574c476516c766b56c3c476526c766b55c3c46168124e656f2e52756e74696d652e4e6f746966796158c57600096d61726b6574536574c476516c766b56c3c476526c766b52c352c3c476536c766b52c353c3c476546c766b52c354c3c476556c766b52c355c3c476566c766b52c356c3c476576c766b52c357c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b58527ac46203006c766b58c3616c756659c56b6c766b00527ac4610f636c6f73654d61726b65744661696c6c766b51527ac46c766b00c3c0529c009c6c766b55527ac46c766b55c3644d006153c576006c766b51c3c47651115265717569726573203220706172616d73c476526c766b00c3c0c46168124e656f2e52756e74696d652e4e6f7469667961006c766b56527ac462b30161e001001c71630e0061e00100db70009c620400006c766b57527ac46c766b57c36440006152c576006c766b51c3c476510d4e6f207065726d697373696f6ec46168124e656f2e52756e74696d652e4e6f7469667961006c766b56527ac46252016c766b00c300c36c766b52527ac46c766b00c351c36c766b53527ac46c766b52c3c001209c6313006c766b52c3c00114907c907c9e6321006c766b53c3c001209c6311006c766b53c3c001149c009c62040000620400516c766b58527ac46c766b58c36459006152c576006c766b51c3c4765125496e76616c6964206c656e677468206f662062617365206f722071756f7465206173736574c46168124e656f2e52756e74696d652e4e6f7469667961006c766b56527ac462970061076d61726b6574736c766b52c37e6c766b53c37e6c766b54527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b54c3617c68124e656f2e53746f726167652e44656c6574656153c576000c6d61726b6574436c6f736564c476516c766b52c3c476526c766b53c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b56527ac46203006c766b56c3616c756658c56b6c766b00527ac46c766b51527ac46161076d61726b6574736c766b00c37e6c766b51c37e6c766b52527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b52c3617c680f4e656f2e53746f726167652e4765746c766b53527ac46c766b53c3c000a06c766b55527ac46c766b55c3641a00616c766b53c361e0010175016c766b56527ac462b10061076d61726b6574736c766b51c37e6c766b00c37e6c766b52527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b52c3617c680f4e656f2e53746f726167652e4765746c766b53527ac46c766b53c3c000a06c766b57527ac46c766b57c3641900616c766b53c361e00101f4006c766b56527ac46230006158c56c766b54527ac46c766b54c36100537cc46c766b54c36100527cc46c766b54c36c766b56527ac46203006c766b56c3616c756657c56b6c766b00527ac4616c766b00c354c361e001013f6e6c766b51527ac46c766b00c355c361e001012b6e6c766b52527ac46c766b00c356c361e00101176e6c766b53527ac46c766b00c357c361e00101036e6c766b54527ac46c766b00c300c36c766b00c351c37e6c766b51c37e6c766b52c37e6c766b53c37e6c766b54c37e6c766b00c353c37e6c766b00c352c37e6c766b55527ac46c766b55c36c766b56527ac46203006c766b56c3616c756656c56b6c766b00527ac4616158c56c766b51527ac46c766b51c36c766b00c300517f007cc46c766b51c36c766b00c351517f517cc46c766b51c36c766b00c352587f547cc46c766b51c36c766b00c35a587f557cc46c766b51c36c766b00c30112587f567cc46c766b51c36c766b00c3011a587f577cc46c766b51c36c766b00c3012201207f537cc46c766b51c36c766b00c3014201147f527cc46c766b51c300c36101b99c6c766b52527ac46c766b52c3645f00616c766b51c351c36101a79c6c766b53527ac46c766b53c3642c00616c766b51c36c766b00c3012201147f537cc46c766b51c36c766b00c3013601207f527cc461621700616c766b51c36c766b00c3014201207f527cc461616243006c766b51c351c36101a79c6c766b54527ac46c766b54c3642900616c766b51c36c766b00c3012201147f537cc46c766b51c36c766b00c3013601147f527cc4616c766b51c36c766b55527ac46203006c766b55c3616c75665bc56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b00c3086164644f66666572876c766b53527ac46c766b53c3641e006c766b51c36c766b52c3617ce0010294016c766b54527ac46281016c766b00c30b63616e63656c4f66666572876c766b55527ac46c766b55c3641e006c766b51c36c766b52c3617ce0010259176c766b54527ac46245016c766b00c3076465706f736974876c766b56527ac46c766b56c3641e006c766b51c36c766b52c3617ce00102691a6c766b54527ac4620d016c766b00c3087769746864726177876c766b57527ac46c766b57c364130061e0010031576c766b54527ac462df006c766b00c306636f6d6d6974876c766b58527ac46c766b58c3641e006c766b51c36c766b52c3617ce001021c2e6c766b54527ac462a8006c766b00c305636c61696d876c766b59527ac46c766b59c36418006c766b52c361e0010189346c766b54527ac46278006c766b00c308636f6d706f756e64876c766b5a527ac46c766b5ac36418006c766b52c361e00101c2376c766b54527ac462450051c576006c766b00c315202d20556e6b6e6f776e206f7065726174696f6e2e7ec46168124e656f2e52756e74696d652e4e6f7469667961006c766b54527ac46203006c766b54c3616c75660123c56b6c766b00527ac46c766b51527ac4616c766b51c3c0009c6c766b0111527ac46c766b0111c3640f00006c766b0112527ac462fe086c766b00c3c0559c009c6c766b0113527ac46c766b0113c3640f00006c766b0112527ac462d708116164644f66666572496e69744572726f726c766b52527ac46158c56c766b53527ac46c766b53c36c766b51c3007cc46c766b53c36c766b00c300c3557cc46c766b00c351c36c766b54527ac46c766b53c36c766b54c3537cc46c766b53c36c766b00c352c3567cc46c766b00c353c36c766b55527ac46c766b53c36c766b55c3547cc46c766b53c36c766b00c354c3577cc46c766b53c355c3c001209c6c766b0114527ac46c766b0114c3641300616c766b53c36101b9517cc461627f006c766b53c355c3c001149c6c766b0115527ac46c766b0115c3641300616c766b53c36101a7517cc4616253006154c576006c766b52c3c4765118496e76616c696420427579204173736574204c656e677468c476526c766b51c3c476536c766b53c355c3c46168124e656f2e52756e74696d652e4e6f7469667961616c766b53c356c3c001209c6c766b0116527ac46c766b0116c3641300616c766b53c36101b9527cc4616280006c766b53c356c3c001149c6c766b0117527ac46c766b0117c3641300616c766b53c36101a7527cc4616254006154c576006c766b52c3c4765119496e76616c69642053656c6c204173736574204c656e677468c476526c766b51c3c476536c766b53c356c3c46168124e656f2e52756e74696d652e4e6f7469667961616c766b54c300a1630d006c766b55c300a1620400516c766b0118527ac46c766b0118c3646c006155c576006c766b52c3c476511e4e6f206e65676174697665207175616e74697469657320616c6c6f776564c476526c766b51c3c476536c766b53c356c3c476546c766b55c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0112527ac46264066c766b53c353c361e0010185676c766b56527ac46c766b53c354c361e0010171676c766b57527ac46c766b53c357c361e001015d676c766b58527ac46c766b53c300c36c766b53c351c37e6c766b53c352c37e6c766b53c355c37e6c766b53c356c37e6c766b58c37e6c766b56c37e6c766b57c37e6c766b59527ac46c766b59c3aa6c766b5a527ac461060ffe750ffe756c766b5ac37e6c766b5b527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b5bc3617c680f4e656f2e53746f726167652e4765746c766b5c527ac46c766b5cc3c000a06c766b0119527ac46c766b0119c36458006154c576006c766b52c3c47651144f6666657220616c726561647920657869737473c476526c766b51c3c476536c766b5ac3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0112527ac46220050d6164644f666665724572726f726c766b5d527ac46c766b53c355c36c766b53c356c3617ce0010286f66c766b5e527ac46c766b5ec352c3c0009c6c766b011a527ac46c766b011ac36466006156c576006c766b5dc3c476510e496e76616c6964206d61726b6574c476526c766b51c3c476536c766b5ac3c476546c766b53c355c3c476556c766b53c356c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0112527ac46271046c766b5ec355c36c766b5f527ac46c766b53c355c36c766b5ec352c39c6c766b011b527ac46c766b011bc3645d01616c766b54c36c766b5ec354c39f6c766b011d527ac46c766b011dc3647f006158c576006c766b5dc3c4765117496e73756666696369656e74206f726465722073697a65c476526c766b51c3c476536c766b5ac3c476546c766b53c355c3c476556c766b53c356c3c476566c766b54c3c476576c766b5fc3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0112527ac462a8036c766b55c3610400e1f505956c766b54c3966c766b011c527ac46c766b011cc36c766b5fc3966c766b5fc3956c766b011cc39e6c766b011e527ac46c766b011ec3647a006158c576006c766b5dc3c4765111496e76616c6964207469636b2073697a65c476526c766b51c3c476536c766b5ac3c476546c766b53c355c3c476556c766b53c356c3c476566c766b011cc3c476576c766b5fc3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0112527ac462ed0261625e01616c766b55c36c766b5ec354c39f6c766b0120527ac46c766b0120c3647f006158c576006c766b5dc3c4765117496e73756666696369656e74206f726465722073697a65c476526c766b51c3c476536c766b5ac3c476546c766b53c355c3c476556c766b53c356c3c476566c766b55c3c476576c766b5fc3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0112527ac4624e026c766b54c3610400e1f505956c766b55c3966c766b011f527ac46c766b011fc36c766b5ec355c3966c766b5ec355c3956c766b011fc39e6c766b0121527ac46c766b0121c3647a006158c576006c766b5dc3c4765111496e76616c6964207469636b2073697a65c476526c766b51c3c476536c766b5ac3c476546c766b53c355c3c476556c766b53c356c3c476566c766b011fc3c476576c766b5fc3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0112527ac4628f01616c766b53c356c36c766b51c36c766b55c3615272e00103bc666c766b60527ac46c766b60c3009c6c766b0122527ac46c766b0122c36477006157c576006c766b5dc3c4765117556e61626c6520746f2072657365727665206173736574c476526c766b51c3c476536c766b5ac3c476546c766b53c355c3c476556c766b53c356c3c476566c766b55c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0112527ac462e2006168164e656f2e53746f726167652e476574436f6e746578746c766b5bc36c766b59c3615272680f4e656f2e53746f726167652e5075746154c5760009506f73744f66666572c476516c766b51c3c476526c766b5ac3c476536c766b59c3c46168124e656f2e52756e74696d652e4e6f746966796157c576000c6f6666657243726561746564c476516c766b5ac3c476526c766b53c300c3c476536c766b53c355c3c476546c766b54c3c476556c766b53c356c3c476566c766b55c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b0112527ac46203006c766b0112c3616c756659c56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b00c36c766b51c39f6c766b55527ac46c766b55c36412006c766b52c36c766b56527ac46273006c766b00c36c766b51c3966c766b53527ac4006c766b54527ac46c766b53c36c766b57527ac4621f006c766b54c351936c766b54527ac46c766b57c352966c766b57527ac46c766b57c300a06c766b58527ac46c766b58c363d1ff6c766b52c36c766b54c3956c766b56527ac46203006c766b56c3616c75660124c56b6c766b00527ac4616c766b00c300c36c766b51527ac46c766b00c351c36c766b52527ac46c766b00c352c36c766b53527ac46c766b00c353c36c766b54527ac46c766b00c354c36c766b55527ac46c766b00c355c36c766b56527ac46c766b53c36c766b55c3617ce001025df06c766b57527ac46c766b57c352c3c0009c6c766b60527ac46c766b60c3645c006154c57600186163636570744f66666572496e76616c69644d61726b6574c476516c766b52c3c476526c766b53c3c476536c766b55c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0111527ac462180b6c766b53c36c766b57c352c39c630b006c766b56c36208006c766b54c36c766b58527ac4106163636570744f666665724572726f726c766b59527ac46c766b52c36168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b0112527ac46c766b0112c36467006155c576006c766b59c3c476511a74616b657241646472657373206e6f742061207769746e657373c476526c766b52c3c476536c766b51c3c476546c766b58c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0111527ac462460a61060ffe750ffe756c766b51c37e6c766b5a527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b5ac3617c680f4e656f2e53746f726167652e4765746c766b5b527ac46c766b5bc3c0009c6c766b0113527ac46c766b0113c3644701616c766b00c356c36c766b0114527ac46c766b0114c364cb00616c766b00c357c36c766b0115527ac455c57600176163636570744f66666572437265617465734f66666572c47651274f666665724964206e6f7420666f756e643b204372656174696e672061206e6577206f66666572c476526c766b52c3c476536c766b51c3c476546c766b58c3c46168124e656f2e52756e74696d652e4e6f746966796155c576006c766b55c3c476516c766b56c3c476526c766b53c3c476536c766b54c3c476546c766b0115c3c46c766b52c3617ce0010213f36c766b0111527ac462ff0856c576006c766b59c3c47651114f666665724964206e6f7420666f756e64c476526c766b52c3c476536c766b51c3c476546c766b58c3c476556c766b00c356c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0111527ac4629c086c766b5bc361e00101046b6c766b5c527ac46c766b5cc355c36c766b53c39c009c6c766b0116527ac46c766b0116c36473006157c576006c766b59c3c4765115496e76616c696420617373657420746f2067697665c476526c766b52c3c476536c766b51c3c476546c766b58c3c476556c766b5cc355c3c476566c766b53c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0111527ac462fa076c766b5cc356c36c766b55c39c009c6c766b0117527ac46c766b0117c36476006157c576006c766b59c3c4765118496e76616c696420617373657420746f2072656365697665c476526c766b52c3c476536c766b51c3c476546c766b58c3c476556c766b5cc356c3c476566c766b55c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0111527ac46267076c766b54c300a16c766b0118527ac46c766b0118c36472006156c576006c766b59c3c476511e496e76616c6964207175616e7469747920746f20676976652c203c3d2030c476526c766b52c3c476536c766b51c3c476546c766b58c3c476556c766b54c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0111527ac462e0066c766b56c300a16c766b0119527ac46c766b0119c36475006156c576006c766b59c3c4765121496e76616c6964207175616e7469747920746f20726563656976652c203c3d2030c476526c766b52c3c476536c766b51c3c476546c766b58c3c476556c766b56c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0111527ac46256066c766b54c36c766b5cc353c3a06c766b011a527ac46c766b011ac364a1006156c576006c766b59c3c476512b496e76616c6964207175616e7469747920746f20676976652c206d6f7265207468616e206f666665726564c476526c766b52c3c476536c766b51c3c476546c766b58c3c476556c766b5cc353c3c46168124e656f2e52756e74696d652e4e6f74696679616c766b5cc353c36c766b54c3966c766b56c3956c766b56527ac46c766b5cc353c36c766b54527ac46162bc016c766b54c36c766b5cc353c39f6c766b011b527ac46c766b011bc3649e01616c766b5cc355c36c766b57c352c39c6c766b011c527ac46c766b011cc364c100616c766b5cc353c36c766b54c3946c766b57c354c39f6c766b011d527ac46c766b011dc36496006158c576006c766b59c3c4765126576f756c64206c6561766520616e20696e73756666696369656e74206f726465722073697a65c476526c766b52c3c476536c766b51c3c476546c766b58c3c476556c766b5cc355c3c476566c766b5cc353c36c766b54c394c476576c766b57c354c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0111527ac462a1046162be00616c766b5cc354c36c766b56c3946c766b57c354c39f6c766b011e527ac46c766b011ec36496006158c576006c766b59c3c4765126576f756c64206c6561766520616e20696e73756666696369656e74206f726465722073697a65c476526c766b52c3c476536c766b51c3c476546c766b58c3c476556c766b5cc356c3c476566c766b5cc354c36c766b56c394c476576c766b57c354c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0111527ac462e30361616c766b54c36c766b5cc354c3956c766b5cc353c3966c766b5d527ac46c766b56c36c766b5dc39e6c766b011f527ac46c766b011fc3648d006158c576006c766b59c3c4765129496e76616c6964207175616e7469747920746f207265636569766520213d2063616c63756c61746564c476526c766b52c3c476536c766b51c3c476546c766b58c3c476556c766b51c3c476566c766b56c3c476576c766b5dc3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0111527ac4621f036c766b53c36c766b57c352c39c630d006c766b57c356c3620a006c766b57c357c36c766b5e527ac46c766b58c36c766b57c354c36c766b5ec3615272e0010324f66c766b5f527ac46c766b53c36c766b52c36c766b54c3615272e001030f5a009c6c766b0120527ac46c766b0120c36472006156c576006c766b59c3c476511d496e73756666696369656e742062616c616e6365206f66206173736574c476526c766b52c3c476536c766b51c3c476546c766b58c3c476556c766b53c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0111527ac4623f026114952d12a025325e56a4cb3ba2d469b1e23c7c77a06c766b52c36c766b5fc3615272e001036659009c6c766b0121527ac46c766b0121c3648a00616c766b53c36c766b52c36c766b54c3615272e0010386587556c576006c766b59c3c476511e496e73756666696369656e742041504820666f7220747261646520666565c476526c766b52c3c476536c766b51c3c476546c766b58c3c476556c766b53c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0111527ac4627d016c766b5fc361e00001d816616c766b53c36c766b5cc300c36c766b54c3615272e00103f257756c766b5cc37654c36c766b56c394547cc46c766b5cc37653c36c766b54c394537cc46c766b5cc353c3009c6c766b0122527ac46c766b0122c3643d00616168164e656f2e53746f726167652e476574436f6e746578746c766b5ac3617c68124e656f2e53746f726167652e44656c6574656161627000616c766b5bc36c766b5bc3c06094806c766b5cc353c361e001012f557e6c766b5cc354c361e0010121557e6c766b0123527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b5ac36c766b0123c3615272680f4e656f2e53746f726167652e50757461616c766b55c36c766b52c36c766b56c3615272e00103f7567555c576000d6f666665724163636570746564c476516c766b52c3c476526c766b51c3c476536c766b5cc353c3c476546c766b5cc354c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b0111527ac46203006c766b0111c3616c75665ec56b6c766b00527ac46c766b51527ac4616c766b00c3c0519c009c6c766b58527ac46c766b58c3640e00006c766b59527ac4620c036c766b00c300c36c766b52527ac41063616e63656c4f666665724572726f726c766b53527ac46c766b52c3c001209c009c6c766b5a527ac46c766b5ac3644b006154c576006c766b53c3c47651116f666665724964206e6f7420666f756e64c476526c766b51c3c476536c766b52c3c46168124e656f2e52756e74696d652e4e6f74696679616161060ffe750ffe756c766b52c37e6c766b54527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b54c3617c680f4e656f2e53746f726167652e4765746c766b55527ac46c766b55c3c0009c6c766b5b527ac46c766b5bc36454006154c576006c766b53c3c47651116f666665724964206e6f7420666f756e64c476526c766b51c3c476536c766b52c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b59527ac462d0016c766b55c361e00101ef606c766b56527ac46c766b56c300c36168184e656f2e52756e74696d652e436865636b5769746e65737363170061e001004452630e0061e001007352009c620400006c766b5c527ac46c766b5cc36452006154c576006c766b53c3c476510d4e6f207065726d697373696f6ec476526c766b56c300c3c476536c766b52c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b59527ac46226016c766b56c356c36c766b56c300c36c766b56c354c3615272e001035a546c766b57527ac46c766b57c3009c6c766b5d527ac46c766b5dc36471006156c576006c766b53c3c47651184661696c656420746f2072656c6561736520617373657473c476526c766b56c300c3c476536c766b52c3c476546c766b56c356c3c476556c766b56c354c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b59527ac4627e006168164e656f2e53746f726167652e476574436f6e746578746c766b54c3617c68124e656f2e53746f726167652e44656c6574656153c576000d6f6666657243616e63656c6564c476516c766b56c300c3c476526c766b52c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b59527ac46203006c766b59c3616c75665cc56b6c766b00527ac46c766b51527ac4616c766b00c3c0529c009c6c766b55527ac46c766b55c3640e00006c766b56527ac46228020c6465706f7369744572726f726c766b52527ac46c766b00c300c36c766b53527ac46c766b00c351c36c766b54527ac46c766b53c3c001149c6c766b57527ac46c766b57c36474016161e0010026506c766b58527ac46c766b58c3644c006152c576006c766b52c3c47651194f776e65722063616e2774206465706f736974204e4550352ec46168124e656f2e52756e74696d652e4e6f7469667961006c766b56527ac46281016c766b54c300a16c766b59527ac46c766b59c36458006155c576006c766b52c3c476510d7175616e74697479203c3d2030c476526c766b51c3c476536c766b53c3c476546c766b54c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b56527ac46216016c766b53c36c766b51c36c766b54c3615272e001030259009c6c766b5a527ac46c766b5ac36466006155c576006c766b52c3c476511b4465706f7369742829204e45503520746f6b656e206661696c6564c476526c766b51c3c476536c766b53c3c476546c766b54c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b56527ac4628b006c766b53c36c766b51c36c766b54c3615272e00103615175616229006c766b53c3c001209c009c6c766b5b527ac46c766b5bc3640f0061006c766b56527ac462490054c57600076465706f736974c476516c766b51c3c476526c766b53c3c476536c766b54c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b56527ac46203006c766b56c3616c756655c56b6c766b00527ac46c766b51527ac4616c766b00c36101ba7e6c766b52527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b52c3617c680f4e656f2e53746f726167652e4765746c766b53527ac46c766b53c36c766b51c3936c766b53527ac46c766b53c3009f6c766b54527ac46c766b54c3640d0061006c766b53527ac4616168164e656f2e53746f726167652e476574436f6e746578746c766b52c36c766b53c3615272680f4e656f2e53746f726167652e50757461616c75665ac56b6c766b00527ac46c766b51527ac4616c766b51c3c0539f6c766b56527ac46c766b56c3640e00006c766b57527ac462bf016c766b51c300c36c766b52527ac46c766b51c351c36c766b53527ac46c766b51c352c36c766b54527ac411746f6b656e5472616e6665724572726f726c766b55527ac46c766b53c361682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c009c6c766b58527ac46c766b58c36495006156c576006c766b55c3c47651175472616e73666572206e6f742073656e7420746f207573c476526c766b52c3c476536c766b00c3c476546c766b53c3c4765561682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e6753637269707448617368c46168124e656f2e52756e74696d652e4e6f7469667961006c766b57527ac462a3006c766b54c300a16c766b59527ac46c766b59c36458006155c576006c766b55c3c476510d7175616e74697479203c3d2030c476526c766b52c3c476536c766b00c3c476546c766b54c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b57527ac46238006c766b00c36c766b52c36c766b54c3615272e001034d4e756c766b00c36c766b54c3617ce0000257fd61516c766b57527ac46203006c766b57c3616c756652c56b6c766b00527ac4616c766b00c3087365744f776e65728763cf006c766b00c30a7365744d616e616765728763bb006c766b00c3097365744d61726b65748763a8006c766b00c30b636c6f73654d61726b6574876393006c766b00c31e7365744665655265646973747269627574696f6e50657263656e7461676587636b006c766b00c315736574436c61696d4d696e696d756d426c6f636b7387634c006c766b00c3127265636c61696d4f727068616e46756e6473876330006c766b00c310736574417373657453657474696e6773876316006c766b00c3096170684e6f7469667987620400516c766b51527ac46203006c766b51c3616c75665cc56b6c766b00527ac46c766b51527ac4616c766b00c3087365744f776e6572876c766b52527ac46c766b52c3641a006c766b51c300c361e0010107026c766b53527ac462f4016c766b00c30a7365744d616e61676572876c766b54527ac46c766b54c3641a006c766b51c300c361e00101d3026c766b53527ac462bd016c766b00c3097365744d61726b6574876c766b55527ac46c766b55c36418006c766b51c361e001016bd36c766b53527ac46289016c766b00c30b636c6f73654d61726b6574876c766b56527ac46c766b56c36418006c766b51c361e001013fd86c766b53527ac46253016c766b00c31e7365744665655265646973747269627574696f6e50657263656e74616765876c766b57527ac46c766b57c3641a006c766b51c300c361e001014f096c766b53527ac46208016c766b00c315736574436c61696d4d696e696d756d426c6f636b73876c766b58527ac46c766b58c3641a006c766b51c300c361e00101d0096c766b53527ac462c6006c766b00c3127265636c61696d4f727068616e46756e6473876c766b59527ac46c766b59c3641a006c766b51c300c361e00101ce026c766b53527ac46287006c766b00c310736574417373657453657474696e6773876c766b5a527ac46c766b5ac36422006c766b51c300c36c766b51c351c3617ce00102f3056c766b53527ac46242006c766b00c3096170684e6f74696679876c766b5b527ac46c766b5bc36418006c766b51c361e001019a066c766b53527ac4620e00006c766b53527ac46203006c766b53c3616c756653c56b6c766b00527ac46161e001002d476168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b51527ac46c766b51c36450006153c576000c7365744f776e65724661696cc476510d4d757374206265206f776e6572c476526c766b00c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b52527ac46273006168164e656f2e53746f726167652e476574436f6e74657874056f776e65726c766b00c3615272680f4e656f2e53746f726167652e5075746152c57600087365744f776e6572c476516c766b00c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b52527ac46203006c766b52c3616c756653c56b6c766b00527ac46161e00100b7466168184e656f2e52756e74696d652e436865636b5769746e65737363290061e0010006466168184e656f2e52756e74696d652e436865636b5769746e657373009c620400006c766b51527ac46c766b51c36452006153c576000e7365744d616e616765724661696cc476510d4e6f207065726d697373696f6ec476526c766b00c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b52527ac46277006168164e656f2e53746f726167652e476574436f6e74657874076d616e616765726c766b00c3615272680f4e656f2e53746f726167652e5075746152c576000a7365744d616e61676572c476516c766b00c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b52527ac46203006c766b52c3616c75665ec56b6c766b00527ac46161e001000346009c6c766b56527ac46c766b56c36442006152c576000b7265636c61696d4661696cc47651084e6f207065726d73c46168124e656f2e52756e74696d652e4e6f7469667961006c766b57527ac46203036c766b00c36101ba7e6c766b51527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b51c3617c680f4e656f2e53746f726167652e4765746c766b52527ac46c766b00c3c001149c6c766b58527ac46c766b58c36472006151c5760061682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e6753637269707448617368c46c766b59527ac46c766b00c36c766b5a527ac46c766b5ac30962616c616e63654f666c766b59c3617c527ae201026c766b53527ac46162e0006c766b00c3c001209c6c766b5b527ac46c766b5bc36486006161682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686168194e656f2e426c6f636b636861696e2e4765744163636f756e746c766b5c527ac46c766b5cc36c766b00c3617c68164e656f2e4163636f756e742e47657442616c616e63656c766b53527ac4616245006152c576000b7265636c61696d4661696cc476510b4261642061737365744964c46168124e656f2e52756e74696d652e4e6f7469667961006c766b57527ac46257016c766b53c36c766b52c3946c766b54527ac46c766b54c300a16c766b5d527ac46c766b5dc36454006153c576000b7265636c61696d4661696cc47651124e6f7468696e6720746f207265636c61696dc476526c766b54c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b57527ac462de006c766b52c36c766b54c3936c766b52527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b51c36c766b52c3615272680f4e656f2e53746f726167652e507574616c766b00c361e001002f42617ce001028d306c766b55527ac46c766b55c36c766b54c3936c766b55527ac46c766b00c361e0010004426c766b55c3615272e00003174a6153c57600167265636c61696d65644f727068616e656446756e6473c476516c766b00c3c476526c766b54c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b57527ac46203006c766b57c3616c756654c56b6c766b00527ac46c766b51527ac46161e0010092426421006c766b00c3c001149c6311006c766b00c3c001209c009c62040000620400516c766b52527ac46c766b52c3640e00006c766b53527ac46281006168164e656f2e53746f726167652e476574436f6e7465787461045e7712956c766b00c37e6c766b51c3615272680f4e656f2e53746f726167652e5075746152c5760010736574417373657453657474696e6773c476516c766b51c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b53527ac46203006c766b53c3616c756653c56b6c766b00527ac46161e00100be41009c6c766b51527ac46c766b51c36445006152c57600096170684e6f74696679c476510d4e6f207065726d697373696f6ec46168124e656f2e52756e74696d652e4e6f7469667961006c766b52527ac4623b0052c57600096170684e6f74696679c476516c766b00c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b52527ac46203006c766b52c3616c756653c56b616168164e656f2e53746f726167652e476574436f6e746578741b6665655265646973747269627574696f6e50657263656e74616765617c680f4e656f2e53746f726167652e4765746c766b00527ac46c766b00c3009c6c766b51527ac46c766b51c3641100616101506c766b52527ac46212006c766b00c36c766b52527ac46203006c766b52c3616c756653c56b616168164e656f2e53746f726167652e476574436f6e7465787412636c61696d4d696e696d756d426c6f636b73617c680f4e656f2e53746f726167652e4765746c766b00527ac46c766b00c3009c6c766b51527ac46c766b51c3641200616102c0126c766b52527ac46212006c766b00c36c766b52527ac46203006c766b52c3616c756653c56b6c766b00527ac46161e001003b40630e0061e00100fa3f009c620400006c766b51527ac46c766b51c36434006151c57600094e6f207065726d732ec46168124e656f2e52756e74696d652e4e6f7469667961006c766b52527ac4625d006168164e656f2e53746f726167652e476574436f6e746578741b6665655265646973747269627574696f6e50657263656e746167656c766b00c3615272680f4e656f2e53746f726167652e50757461516c766b52527ac46203006c766b52c3616c756653c56b6c766b00527ac46161e00100783f630e0061e00100373f009c620400006c766b51527ac46c766b51c36434006151c57600094e6f207065726d732ec46168124e656f2e52756e74696d652e4e6f7469667961006c766b52527ac46254006168164e656f2e53746f726167652e476574436f6e7465787412636c61696d4d696e696d756d426c6f636b736c766b00c3615272680f4e656f2e53746f726167652e50757461516c766b52527ac46203006c766b52c3616c756656c56b6c766b00527ac4616c766b00c361e001005afd950164966c766b51527ac46c766b00c36c766b51c3946c766b52527ac46168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fc617c680f4e656f2e53746f726167652e4765746c766b53527ac46c766b53c300587f6c766b54527ac46c766b53c358587f6c766b55527ac46c766b54c36c766b51c3936c766b54527ac46c766b55c36c766b52c3936c766b55527ac46c766b54c361e001013d3e6c766b55c361e00101323e7e6c766b53527ac46168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fc6c766b53c3615272680f4e656f2e53746f726167652e50757461616c756655c56b6c766b00527ac46c766b51527ac4616c766b51c351c36c766b00c39f6c766b52527ac46c766b52c364aa00616c766b00c36c766b51c351c3946c766b53527ac46c766b51c300c36c766b53c3956c766b54527ac46c766b51c36c766b51c352c36c766b54c393527cc456c5760013757064617465546f74616c466565556e697473c476516c766b51c352c3c476526c766b54c3c476536c766b53c3c476546c766b51c300c3c476556c766b00c3c46168124e656f2e52756e74696d652e4e6f74696679616c766b51c36c766b00c3517cc461616c75665cc56b6c766b00527ac46c766b51527ac4616c766b00c3c0519c009c6c766b57527ac46c766b57c3644d006152c5760019436f6d6d69742829207265717569726573203120706172616dc476516c766b00c3c0c46168124e656f2e52756e74696d652e4e6f7469667961006c766b58527ac462790361e00100183c6c766b59527ac46c766b59c36454006153c576000b636f6d6d69744572726f72c47651124f776e65722063616e277420636f6d6d6974c476526c766b51c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b58527ac46213036c766b00c300c36c766b52527ac46c766b51c361e00101b50c6c766b53527ac46c766b53c351c300a06c766b5a527ac46c766b5ac3646b006154c576000b636f6d6d69744572726f72c476511f416c726561647920636f6d6d69747465642e20436c61696d2066697273742ec476526c766b51c3c476536c766b53c351c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b58527ac46273026168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fc617c680f4e656f2e53746f726167652e47657400587f61e00101073c6c766b54527ac461e00100e20c6c766b55527ac46c766b54c36c766b55c3617ce000023efd616c766b52c300a16330006114952d12a025325e56a4cb3ba2d469b1e23c7c77a06c766b51c36c766b52c3615272e00103fd3e009c620400516c766b5b527ac46c766b5bc36484006155c576000b636f6d6d69744572726f72c4765115496e73756666696369656e742062616c616e63652ec476526c766b51c3c476536c766b52c3c476546c766b51c36114952d12a025325e56a4cb3ba2d469b1e23c7c77a0617ce00102743bc46168124e656f2e52756e74696d652e4e6f7469667961006c766b58527ac46239016c766b55c37600c36c766b52c393007cc46c766b55c361e00101c70c6c766b56527ac46168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fa6c766b56c3615272680f4e656f2e53746f726167652e507574616c766b53c36c766b52c3517cc46c766b53c36168184e656f2e426c6f636b636861696e2e476574486569676874527cc46c766b53c36c766b53c352c3537cc46c766b53c36c766b54c3547cc46c766b53c36c766b55c352c3557cc46c766b53c361e0000194096156c576000b636f6e7472696275746564c476516c766b51c3c476526c766b53c351c3c476536c766b53c352c3c476546c766b53c354c3c476556c766b53c355c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b58527ac46203006c766b58c3616c756653c56b6c766b00527ac4616c766b00c361e001019f096c766b51527ac46c766b51c351c36c766b52527ac46203006c766b52c3616c75665ac56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b51c36c766b00c354c3946c766b53527ac46c766b53c300a16c766b57527ac46c766b57c36452006151c5760027476574417661696c61626c65546f436c61696d2829204e6f206665657320636f6c6c6563746564c46168124e656f2e52756e74696d652e4e6f7469667961006c766b58527ac46219016c766b00c351c36c766b53c3956c766b54527ac46c766b52c352c36c766b00c355c3946c766b55527ac46c766b55c300a16c766b59527ac46c766b59c36458006151c576002d476574417661696c61626c65546f436c61696d2829204e6f2046656520556e69747320617661696c61626c652ec46168124e656f2e52756e74696d652e4e6f7469667961006c766b58527ac46284006c766b53c36c766b54c3956c766b55c3966c766b56527ac456c576001463616c63417661696c61626c65546f436c61696dc476516c766b00c300c3c476526c766b53c3c476536c766b54c3c476546c766b55c3c476556c766b56c3c46168124e656f2e52756e74696d652e4e6f74696679616c766b56c36c766b58527ac46203006c766b58c3616c756656c56b6c766b00527ac4616c766b00c361e00101b7076c766b51527ac46c766b51c351c3009c6c766b54527ac46c766b54c3640e00006c766b55527ac4627b006168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fc617c680f4e656f2e53746f726167652e4765746c766b52527ac461e001004a086c766b53527ac46c766b51c36c766b52c36c766b53c3615272e00103a4fd6c766b55527ac46203006c766b55c3616c75665bc56b6c766b00527ac4616c766b00c361e00101f6066c766b51527ac46c766b51c351c3009c6c766b57527ac46c766b57c36455006153c5760009636c61696d4661696cc47651154e6f207175616e7469747920636f6d6d6974746564c476526c766b00c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b58527ac462df026168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fc617c680f4e656f2e53746f726167652e4765746c766b52527ac46c766b52c300587f61e0010152366c766b53527ac461e001002d076c766b54527ac46c766b53c36c766b54c3617ce0000289f7616c766b51c36c766b53c36c766b54c3615272e0010375fc6c766b55527ac46c766b51c361e000017b06616c766b54c37600c36c766b51c351c394007cc46168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fa6c766b54c361e001017e07615272680f4e656f2e53746f726167652e507574616c766b51c351c36c766b56527ac46c766b51c352c361e00100b1f3936168184e656f2e426c6f636b636861696e2e476574486569676874a16c766b59527ac46c766b59c3641a00616c766b56c36c766b55c3936c766b56527ac4616210016154c5760014636c61696d4665657357656e74546f4f776e6572c476513d4c657373207468616e206d696e696d756d20626c6f636b732073696e636520636f6d6d69742c2066656573206177617264656420746f206f776e65722ec476526c766b00c3c476536c766b55c3c46168124e656f2e52756e74696d652e4e6f74696679616c766b52c358587f6c766b5a527ac46c766b5ac36c766b55c3936c766b5a527ac46c766b53c361e00101c8336c766b5ac361e00101bd337e6c766b52527ac46168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fc6c766b52c3615272680f4e656f2e53746f726167652e50757461616114952d12a025325e56a4cb3ba2d469b1e23c7c77a06c766b00c36c766b56c3615272e0010372357553c5760007636c61696d6564c476516c766b00c3c476526c766b56c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b58527ac46203006c766b58c3616c756659c56b6c766b00527ac4616c766b00c361e001018a036c766b51527ac46c766b51c351c3009c6c766b56527ac46c766b56c36458006153c576000c636f6d706f756e644661696cc47651154e6f207175616e7469747920636f6d6d6974746564c476526c766b00c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b57527ac462800261e0010062f16c766b52527ac46c766b51c353c36c766b52c3936168184e656f2e426c6f636b636861696e2e476574486569676874a06c766b58527ac46c766b58c3648f006156c576000c636f6d706f756e644661696cc476511c4e6f742079657420656c696769626c6520746f20636f6d706f756e64c476526c766b00c3c476536c766b51c353c3c476546c766b52c3c476556168184e656f2e426c6f636b636861696e2e476574486569676874c46168124e656f2e52756e74696d652e4e6f7469667961006c766b57527ac462af016168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fc617c680f4e656f2e53746f726167652e47657400587f61e001011e326c766b53527ac461e00100f9026c766b54527ac46c766b53c36c766b54c3617ce0000255f3616c766b51c36c766b53c36c766b54c3615272e0010341f86c766b55527ac46c766b51c36168184e656f2e426c6f636b636861696e2e476574486569676874537cc46c766b51c37651c36c766b55c393517cc46c766b54c37600c36c766b55c393007cc46c766b51c36c766b53c3547cc46c766b51c36c766b54c352c3557cc46168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fa6c766b54c361e001010803615272680f4e656f2e53746f726167652e507574616c766b51c361e000016c006156c5760008636f6d706f756e64c476516c766b00c3c476526c766b51c351c3c476536c766b51c353c3c476546c766b51c354c3c476556c766b51c355c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b57527ac46203006c766b57c3616c756652c56b6c766b00527ac4616c766b00c361e001010e036c766b51527ac46c766b00c300c36114952d12a025325e56a4cb3ba2d469b1e23c7c77a06101d07e6c766b51c3615272e000030b316153c576000f707574436f6e747269627574696f6ec476516c766b00c300c3c476526c766b51c3c46168124e656f2e52756e74696d652e4e6f7469667961616c756655c56b6c766b00527ac4616c766b00c36114952d12a025325e56a4cb3ba2d469b1e23c7c77a06101d07e617ce0010230306c766b51527ac46c766b51c3c000a06c766b53527ac46c766b53c3641900616c766b51c361e00101ef026c766b54527ac46232006156c56c766b52527ac46c766b52c36c766b00c3007cc46c766b52c300517cc46c766b52c36c766b54527ac46203006c766b54c3616c756651c56b6c766b00527ac4616c766b00c300c36114952d12a025325e56a4cb3ba2d469b1e23c7c77a06101d07e617ce0000260306152c576001264656c657465436f6e747269627574696f6ec476516c766b00c300c3c46168124e656f2e52756e74696d652e4e6f7469667961616c756654c56b616168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fa617c680f4e656f2e53746f726167652e4765746c766b00527ac46c766b00c3c000a06c766b52527ac46c766b52c36418006c766b00c361e00101bc006c766b53527ac46262006153c56c766b51527ac46c766b51c361080000000000000000007cc46c766b51c3611000000000000000000000000000000000517cc46c766b51c3611000000000000000000000000000000000527cc46c766b51c36c766b53527ac46203006c766b53c3616c756652c56b6c766b00527ac4616c766b00c300c361e00101562d6c766b00c351c361e001018c2d7e6c766b00c352c361e001017e2d7e6c766b51527ac46203006c766b51c3616c756653c56b6c766b00527ac4616153c56c766b51527ac46c766b51c36c766b00c300587f007cc46c766b51c36c766b00c358607f517cc46c766b51c36c766b00c30118607f527cc46c766b51c36c766b52527ac46203006c766b52c3616c756658c56b6c766b00527ac4616c766b00c351c361e00101b12c6c766b51527ac46c766b00c352c361e001019d2c6c766b52527ac46c766b00c353c361e00101892c6c766b53527ac46c766b00c354c361e00101752c6c766b54527ac46c766b00c355c361e00101a42c6c766b55527ac46c766b00c300c36c766b51c37e6c766b52c37e6c766b53c37e6c766b54c37e6c766b55c37e6c766b56527ac46c766b56c36c766b57527ac46203006c766b57c3616c756653c56b6c766b00527ac4616156c56c766b51527ac46c766b51c36c766b00c30001147f007cc46c766b51c36c766b00c30114587f517cc46c766b51c36c766b00c3011c587f527cc46c766b51c36c766b00c30124587f537cc46c766b51c36c766b00c3012c587f547cc46c766b51c36c766b00c30134607f557cc46c766b51c36c766b52527ac46203006c766b52c3616c756659c56b6161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b00527ac46c766b00c361e001011a226c766b51527ac46c766b51c36101949c6c766b54527ac46c766b54c36418006c766b00c361e0010169376c766b55527ac4621302167665726966795769746864726177496e69744661696c6c766b52527ac46c766b00c36168174e656f2e5472616e73616374696f6e2e476574547970656102d1009c009c6c766b56527ac46c766b56c36462006153c576006c766b52c3c476510d77726f6e672074782074797065c476526c766b00c36168174e656f2e5472616e73616374696f6e2e47657454797065c46168124e656f2e52756e74696d652e4e6f7469667961006c766b55527ac46261016c766b00c36c766b53527ac46c766b53c36168234e656f2e496e766f636174696f6e5472616e73616374696f6e2e476574536372697074610b00c10877697468647261776101677e61682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173687e9c009c6c766b57527ac46c766b57c3648e006154c576006c766b52c3c476511d496e76616c696420496e766f636174696f6e20506172616d6574657273c476526c766b53c36168234e656f2e496e766f636174696f6e5472616e73616374696f6e2e476574536372697074c47653610b00c1087769746864726177c46168124e656f2e52756e74696d652e4e6f7469667961006c766b55527ac4624b006c766b51c36101939c6c766b58527ac46c766b58c36418006c766b00c361e0010131006c766b55527ac4621e006c766b00c36c766b51c3617ce0010299026c766b55527ac46203006c766b55c3616c75665cc56b6c766b00527ac46161e001007328630e0061e00100a228009c620400516c766b54527ac46c766b54c3640e00006c766b55527ac46243026c766b00c36168194e656f2e5472616e73616374696f6e2e476574496e707574736c766b51527ac46c766b00c361681d4e656f2e5472616e73616374696f6e2e4765745265666572656e6365736c766b52527ac46c766b00c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736c766b53527ac461e001004a276c766b52c36c766b53c361000008ffffffffffffff7f61557951795772755172755479527956727552727553795379557275537275e00106dd0d009c6c766b56527ac46c766b56c3640f0061006c766b55527ac4626901616c766b51c36c766b57527ac4006c766b58527ac46237016c766b57c36c766b58c3c36c766b59527ac4616168164e656f2e53746f726167652e476574436f6e746578746c766b59c36168114e656f2e496e7075742e476574486173686c766b59c36168124e656f2e496e7075742e476574496e64657861e00101f1277e617c680f4e656f2e53746f726167652e4765746c766b5a527ac46c766b5ac3c000a06c766b5b527ac46c766b5bc36491006154c576000f766572696679436c61696d4661696cc476510e496e707574207265736572766564c476526c766b5ac3c476536c766b59c36168114e656f2e496e7075742e476574486173686c766b59c36168124e656f2e496e7075742e476574496e64657861e0010154277ec46168124e656f2e52756e74696d652e4e6f7469667961006c766b55527ac4622c00616c766b58c351936c766b58527ac46c766b58c36c766b57c3c09f63c0fe516c766b55527ac46203006c766b55c3616c75660114c56b6c766b00527ac46c766b51527ac4616c766b00c36168194e656f2e5472616e73616374696f6e2e476574496e707574736c766b52527ac46c766b00c361681d4e656f2e5472616e73616374696f6e2e4765745265666572656e6365736c766b53527ac46c766b00c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736c766b54527ac46c766b00c361e00101a01d6c766b55527ac41276657269667957697468647261774661696c6c766b56527ac46c766b00c361e00101661e6c766b57527ac46c766b57c3c001149c6c766b58527ac46c766b00c36c766b57c3617ce001028d1f6c766b59527ac46c766b51c36101919c6c766b58c3856c766b5d527ac46c766b5dc3640e00006c766b5a527ac4620f006c766b59c36c766b5a527ac46c766b55c36c766b53c36c766b54c36c766b57c36c766b5ac36c766b59c361557951795772755172755479527956727552727553795379557275537275e00106e40a009c6c766b5e527ac46c766b5ec3640f0061006c766b5f527ac46258026168184e656f2e426c6f636b636861696e2e4765744865696768746c766b5b527ac46c766b00c361e0010119206c766b5c527ac46c766b5bc36c766b5cc3a06c766b60527ac46c766b60c3646e006155c576006c766b56c3c476512356616c696420556e74696c20486569676874203c2043757272656e7420486569676874c476526c766b55c3c476536c766b5cc3c476546c766b5bc3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b5f527ac4629f016c766b55c36168184e656f2e52756e74696d652e436865636b5769746e65737363170061e001009523630e0061e00100c423009c620400006c766b0111527ac46c766b0111c36448006153c576006c766b56c3c476510d6e6f207065726d697373696f6ec476526c766b55c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b5f527ac46211016c766b51c36101919c6c766b0112527ac46c766b0112c3643b006c766b00c36c766b55c36c766b52c36c766b54c3615379517955727551727552795279547275527275e00104d2006c766b5f527ac462bf006c766b51c36101929c6c766b0113527ac46c766b0113c3643b006c766b00c36c766b55c36c766b52c36c766b54c3615379517955727551727552795279547275527275e00104c4046c766b5f527ac4626d0056c576006c766b56c3c476511f57697468647261772056616c69646174652c20496e76616c69642053746570c476526c766b55c3c476536c766b51c3c47654610191c47655610192c46168124e656f2e52756e74696d652e4e6f7469667961006c766b5f527ac46203006c766b5fc3616c75660119c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac4616c766b00c361e00101191b6c766b54527ac46c766b54c3c001149c6c766b55527ac41276657269667957697468647261774661696c6c766b56527ac46c766b55c36c766b5a527ac46c766b5ac36474006154c576006c766b56c3c47651174d61726b206e6f742076616c696420666f72204e455035c476526c766b51c3c476536c766b53c300c36168154e656f2e4f75747075742e47657441737365744964c46168124e656f2e52756e74696d652e4e6f7469667961006c766b5b527ac4625c036c766b00c36c766b54c3617ce00102a11b6c766b57527ac46c766b54c36c766b51c3617ce00102690e6c766b58527ac46c766b58c36c766b57c39f6c766b5c527ac46c766b5cc3645f006155c576006c766b56c3c4765114496e73756666696369656e742062616c616e6365c476526c766b51c3c476536c766b58c3c476546c766b57c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b5b527ac462b602006c766b59527ac4616c766b53c36c766b5d527ac4006c766b5e527ac462c7006c766b5dc36c766b5ec3c36c766b5f527ac4616c766b5fc36168184e656f2e4f75747075742e4765745363726970744861736861682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c009c6c766b60527ac46c766b60c36406006241006c766b5fc36168134e656f2e4f75747075742e47657456616c75656c766b57c39e6c766b0111527ac46c766b0111c3640600620c00516c766b59527ac4616c766b5ec351936c766b5e527ac46c766b5ec36c766b5dc3c09f6330ff6c766b59c3009c6c766b0112527ac46c766b0112c36455006154c576006c766b56c3c47651124e6f206d61746368696e67206f7574707574c476526c766b51c3c476536c766b57c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b5b527ac4625901616c766b52c36c766b0113527ac4006c766b0114527ac46223016c766b0113c36c766b0114c3c36c766b0115527ac4616c766b0115c36168114e656f2e496e7075742e476574486173686c766b0115c36168124e656f2e496e7075742e476574496e64657861e00101c71f7e6c766b0116527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b0116c3617c680f4e656f2e53746f726167652e4765746c766b0117527ac46c766b0117c3c0009c6c766b0118527ac46c766b0118c364060062620055c576006c766b56c3c4765116496e70757420616c7265616479207265736572766564c476526c766b51c3c476536c766b0116c3c476546c766b0117c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b5b527ac4622f006c766b0114c351936c766b0114527ac46c766b0114c36c766b0113c3c09f63d2fe516c766b5b527ac46203006c766b5bc3616c75660117c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac4616c766b00c361e00101d5166c766b54527ac46c766b54c3c001149c6c766b55527ac41276657269667957697468647261774661696c6c766b56527ac46c766b55c3009c6c766b57527ac46c766b57c3646f02616c766b00c361681d4e656f2e5472616e73616374696f6e2e4765745265666572656e6365736c766b58527ac4006c766b59527ac44f6c766b5a527ac4006c766b5c527ac462a400616c766b58c36c766b5cc3c36c766b5d527ac46c766b5dc36168184e656f2e4f75747075742e4765745363726970744861736861682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c009c6c766b5e527ac46c766b5ec3640600621e006c766b5cc36c766b5a527ac46c766b59c351936c766b59527ac4616c766b5cc351936c766b5c527ac46c766b5cc36c766b58c3c09f6c766b5f527ac46c766b5fc36347ff6c766b59c3519c009c6c766b60527ac46c766b60c3644c006153c576006c766b56c3c47651103120696e707574207265717569726564c476526c766b51c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0111527ac46243026c766b52c36c766b5ac3c36168114e656f2e496e7075742e476574486173686c766b52c36c766b5ac3c36168124e656f2e496e7075742e476574496e64657861e00101b61c7e6c766b5b527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b5bc3617c680f4e656f2e53746f726167652e4765746c766b51c39c009c6c766b0112527ac46c766b0112c36467006154c576006c766b56c3c4765123496e707574206e6f7420726573657276656420666f7220746869732061646472657373c476526c766b51c3c476536c766b5bc3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0111527ac4624801516c766b0111527ac4623c01616c766b53c36c766b0113527ac4006c766b0114527ac46205016c766b0113c36c766b0114c3c36c766b0115527ac4616c766b0115c36168154e656f2e4f75747075742e476574417373657449646120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c609c009c6c766b0116527ac46c766b0116c3648a006154c576006c766b56c3c476512d4e455035207769746864726177616c73206f6e6c792061626c6520746f2075736520474153206f757470757473c476526c766b51c3c476536c766b0115c36168154e656f2e4f75747075742e47657441737365744964c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0111527ac4623100616c766b0114c351936c766b0114527ac46c766b0114c36c766b0113c3c09f63f0fe516c766b0111527ac46203006c766b0111c3616c7566011fc56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac461006c766b56527ac4006c766b57527ac46c766b53c36120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c609c630700006208006c766b54c36c766b58527ac46c766b53c361209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c630700006208006c766b54c36c766b59527ac4006c766b5a527ac41276657269667957697468647261774661696c6c766b5b527ac4616c766b51c36c766b5e527ac4006c766b5f527ac4620c026c766b5ec36c766b5fc3c36c766b60527ac4616c766b60c36168184e656f2e4f75747075742e4765745363726970744861736861682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c009c6c766b0111527ac46c766b0111c36406006284016c766b5ac36c766b0112527ac46c766b0112c3644c006152c576006c766b5bc3c4765118457863656564656420616c6c6f77656420696e707574732ec46168124e656f2e52756e74696d652e4e6f7469667961006c766b0113527ac4622f046c766b60c36168154e656f2e4f75747075742e476574417373657449646120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c609c6c766b0114527ac46c766b0114c3642e006c766b56c36c766b60c36168134e656f2e4f75747075742e47657456616c7565936c766b56527ac4627c006c766b60c36168154e656f2e4f75747075742e4765744173736574496461209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c6c766b0115527ac46c766b0115c3642b006c766b57c36c766b60c36168134e656f2e4f75747075742e47657456616c7565936c766b57527ac46c766b56c36c766b57c3936c766b55c3a06c766b0116527ac46c766b0116c3640d0061516c766b5a527ac461616c766b5fc351936c766b5f527ac46c766b5fc36c766b5ec3c09f63ebfd006c766b5c527ac4006c766b5d527ac4616c766b52c36c766b0117527ac4006c766b0118527ac4628b016c766b0117c36c766b0118c3c36c766b0119527ac4616c766b0119c36168184e656f2e4f75747075742e4765745363726970744861736861682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c009c6c766b011a527ac46c766b011ac364060062fd006c766b0119c36168154e656f2e4f75747075742e476574417373657449646120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c609c6c766b011b527ac46c766b011bc3642f006c766b5cc36c766b0119c36168134e656f2e4f75747075742e47657456616c7565936c766b5c527ac4627e006c766b0119c36168154e656f2e4f75747075742e4765744173736574496461209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c6c766b011c527ac46c766b011cc3642c006c766b5dc36c766b0119c36168134e656f2e4f75747075742e47657456616c7565936c766b5d527ac4616c766b0118c351936c766b0118527ac46c766b0118c36c766b0117c3c09f636afe6c766b56c36c766b5cc36c766b58c3939e6c766b011d527ac46c766b011dc36470006156c576006c766b5bc3c476511c47415320696e70757420213d206578706563746564206f7574707574c476526c766b00c3c476536c766b56c3c476546c766b5cc3c476556c766b58c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0113527ac4629e006c766b57c36c766b5dc36c766b59c3939e6c766b011e527ac46c766b011ec36470006156c576006c766b5bc3c476511c4e454f20696e70757420213d206578706563746564206f7574707574c476526c766b00c3c476536c766b57c3c476546c766b5dc3c476556c766b59c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0113527ac4620f00516c766b0113527ac46203006c766b0113c3616c756655c56b6161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b00527ac46c766b00c361e00101bc0a6c766b51527ac46c766b51c361019151809c6c766b52527ac46c766b52c36418006c766b00c361e0010177016c766b53527ac4628f006c766b51c361019251809c6c766b54527ac46c766b54c36418006c766b00c361e00101ca066c766b53527ac462600054c576001e457865637574652057697468647261772c20496e76616c69642053746570c476516c766b51c3c476526101915180c476536101925180c46168124e656f2e52756e74696d652e4e6f7469667961006c766b53527ac46203006c766b53c3616c756655c56b6c766b00527ac46c766b51527ac4616c766b00c36114952d12a025325e56a4cb3ba2d469b1e23c7c77a0907c907c9e6312006c766b51c361e001005e119c620400006c766b52527ac46c766b52c3646000616168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fc617c680f4e656f2e53746f726167652e4765746c766b53527ac46c766b53c358587f6c766b54527ac4621e006c766b51c36c766b00c3617ce001025a136c766b54527ac46203006c766b54c3616c75660117c56b6c766b00527ac4616c766b00c361e00101f6096c766b51527ac46c766b00c361e00101d60a6c766b52527ac46c766b00c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736c766b53527ac40c77697468647261774661696c6c766b54527ac46c766b52c3c001149c6c766b5b527ac46c766b5bc3644a006153c576006c766b54c3c476510f43616e2774206d61726b204e455035c476526c766b51c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b5c527ac462b0046c766b52c3c001209c009c6c766b5d527ac46c766b5dc36451006153c576006c766b54c3c47651164d61726b2061737365744964206c656e20213d203332c476526c766b51c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b5c527ac46248046c766b00c36c766b52c3617ce00102090b6c766b55527ac46c766b51c36c766b52c36101b07e617ce00102e6116c766b56527ac46c766b56c3c000a06c766b5e527ac46c766b5ec36456006154c576006c766b54c3c4765113416c7265616479207769746864726177696e67c476526c766b51c3c476536c766b56c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b5c527ac462aa036c766b52c36c766b51c3617ce001024bfd6c766b57527ac46c766b57c36c766b55c39f6c766b5f527ac46c766b5fc3645f006155c576006c766b54c3c4765114496e73756666696369656e742062616c616e6365c476526c766b51c3c476536c766b57c3c476546c766b55c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b5c527ac4621c036168164e656f2e53746f726167652e476574436f6e7465787461045e7712956c766b52c37e617c680f4e656f2e53746f726167652e4765746c766b58527ac46c766b58c3c058a06c766b60527ac46c766b60c3640f01616c766b58c351587f6c766b0111527ac46c766b0111c3610500e40b5402a06c766b0112527ac46c766b0112c3641200610500e40b54026c766b0111527ac46c766b0111c300a06c766b0113527ac46c766b0113c364b600616c766b51c361e00100af0d9c6331006114952d12a025325e56a4cb3ba2d469b1e23c7c77a06c766b51c36c766b0111c3615272e00103e111009c620400006c766b0114527ac46c766b0114c36465006154c576006c766b54c3c4765121496e73756666696369656e742041504820666f7220776974686472617720466565c476526c766b51c3c476536c766b0111c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b5c527ac462bc0161616c766b57c36c766b55c3946c766b57527ac46c766b52c36c766b51c36c766b57c3615272e00003fe14616c766b00c36c766b53c36c766b55c36c766b51c3615379517955727551727552795279547275527275e00104780a6c766b59527ac46c766b59c3009c6c766b0115527ac46c766b0115c36463006153c576006c766b54c3c47651284d61726b20537465702c206661696c656420746f2072657365727665206f7574707574205554584fc476526c766b51c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b5c527ac462e3006c766b52c36c766b51c36c766b55c3615272e00103bc0b6c766b5a527ac46c766b5ac3009c6c766b0116527ac46c766b0116c36462006155c576006c766b54c3c4765117657865637574654d61726b206d61726b206661696c6564c476526c766b51c3c476536c766b52c3c476546c766b55c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b5c527ac4624e0054c576000c77697468647261774d61726bc476516c766b51c3c476526c766b52c3c476536c766b55c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b5c527ac46203006c766b5cc3616c75660111c56b6c766b00527ac4616c766b00c36168194e656f2e5472616e73616374696f6e2e476574496e707574736c766b51527ac46c766b00c361e001014c046c766b52527ac46c766b00c361e001012c056c766b53527ac46c766b53c3c001149c6c766b54527ac46c766b00c36c766b53c3617ce0010253066c766b55527ac40c77697468647261774661696c6c766b56527ac46c766b54c3009c6c766b57527ac46c766b57c3643901616c766b53c3c001209c009c6c766b58527ac46c766b58c36451006153c576006c766b56c3c47651164d61726b2061737365744964206c656e20213d203332c476526c766b52c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b59527ac4627e026c766b52c36c766b53c36101b07e617ce000026c0d61616c766b51c36c766b5a527ac4006c766b5b527ac4628f006c766b5ac36c766b5bc3c36c766b5c527ac4616168164e656f2e53746f726167652e476574436f6e746578746c766b5cc36168114e656f2e496e7075742e476574486173686c766b5cc36168124e656f2e496e7075742e476574496e64657861e00101a90b7e617c68124e656f2e53746f726167652e44656c65746561616c766b5bc351936c766b5b527ac46c766b5bc36c766b5ac3c09f6368ff61626a01616c766b53c36c766b52c3617ce00102baf76c766b5d527ac46c766b5dc36c766b55c39f6c766b5f527ac46c766b5fc3646c006155c576006c766b56c3c47651215769746864726177204e45503520696e737566666963656e742062616c616e6365c476526c766b52c3c476536c766b5dc3c476546c766b55c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b59527ac46215016c766b52c36c766b53c36c766b55c3615272e001030e156c766b5e527ac46c766b5ec3009c6c766b60527ac46c766b60c3646f006155c576006c766b56c3c4765124657865637574655769746864726177204e455035205472616e73666572206661696c6564c476526c766b52c3c476536c766b53c3c476546c766b55c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b59527ac46275006c766b5dc36c766b55c3946c766b5d527ac46c766b53c36c766b52c36c766b5dc3615272e000032210616154c57600087769746864726177c476516c766b52c3c476526c766b53c3c476536c766b55c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b59527ac46203006c766b59c3616c756657c56b6c766b00527ac4616c766b00c361681d4e656f2e5472616e73616374696f6e2e476574417474726962757465736c766b51527ac4616c766b51c36c766b52527ac4006c766b53527ac46281006c766b52c36c766b53c3c36c766b54527ac4616c766b54c36168164e656f2e4174747269627574652e47657455736167656102a1009c6c766b55527ac46c766b55c3642d00616c766b54c36168154e656f2e4174747269627574652e4765744461746151806c766b56527ac4622d00616c766b53c351936c766b53527ac46c766b53c36c766b52c3c09f6376ff61006c766b56527ac46203006c766b56c3616c756657c56b6c766b00527ac4616c766b00c361681d4e656f2e5472616e73616374696f6e2e476574417474726962757465736c766b51527ac4616c766b51c36c766b52527ac4006c766b53527ac46282006c766b52c36c766b53c3c36c766b54527ac4616c766b54c36168164e656f2e4174747269627574652e47657455736167656102a2009c6c766b55527ac46c766b55c3642e00616c766b54c36168154e656f2e4174747269627574652e476574446174610114806c766b56527ac4622d00616c766b53c351936c766b53527ac46c766b53c36c766b52c3c09f6375ff61006c766b56527ac46203006c766b56c3616c756658c56b6c766b00527ac4616c766b00c361681d4e656f2e5472616e73616374696f6e2e476574417474726962757465736c766b51527ac4616c766b51c36c766b52527ac4006c766b53527ac462df006c766b52c36c766b53c3c36c766b54527ac4616c766b54c36168164e656f2e4174747269627574652e47657455736167656102a3009c6c766b55527ac46c766b55c3642e00616c766b54c36168154e656f2e4174747269627574652e476574446174610120806c766b56527ac4628a006c766b54c36168164e656f2e4174747269627574652e47657455736167656102a4009c6c766b57527ac46c766b57c3642e00616c766b54c36168154e656f2e4174747269627574652e476574446174610114806c766b56527ac4622d00616c766b53c351936c766b53527ac46c766b53c36c766b52c3c09f6318ff61006c766b56527ac46203006c766b56c3616c75665ac56b6c766b00527ac46c766b51527ac461006c766b52527ac46c766b00c361681d4e656f2e5472616e73616374696f6e2e476574417474726962757465736c766b53527ac4616c766b53c36c766b54527ac4006c766b55527ac46281006c766b54c36c766b55c3c36c766b56527ac4616c766b56c36168164e656f2e4174747269627574652e47657455736167656102a5009c6c766b57527ac46c766b57c3642d00616c766b56c36168154e656f2e4174747269627574652e4765744461746158806c766b52527ac4622100616c766b55c351936c766b55527ac46c766b55c36c766b54c3c09f6376ff6c766b51c361209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c6c766b58527ac46c766b58c3641d00616c766b52c30400e1f505960400e1f505956c766b52527ac4616c766b52c36c766b59527ac46203006c766b59c3616c756657c56b6c766b00527ac4616c766b00c361681d4e656f2e5472616e73616374696f6e2e476574417474726962757465736c766b51527ac4616c766b51c36c766b52527ac4006c766b53527ac46281006c766b52c36c766b53c3c36c766b54527ac4616c766b54c36168164e656f2e4174747269627574652e47657455736167656102a6009c6c766b55527ac46c766b55c3642d00616c766b54c36168154e656f2e4174747269627574652e4765744461746158806c766b56527ac4622c00616c766b53c351936c766b53527ac46c766b53c36c766b52c3c09f6376ff006c766b56527ac46203006c766b56c3616c75665ac56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac461006c766b54527ac4628301616c766b51c36c766b54c3c36c766b55527ac46c766b55c36168184e656f2e4f75747075742e4765745363726970744861736861682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c009c6c766b56527ac46c766b56c364060062fd006c766b55c36168134e656f2e4f75747075742e47657456616c75656c766b52c39e6c766b57527ac46c766b57c364060062ca006168164e656f2e53746f726167652e476574436f6e746578746c766b00c36168174e656f2e5472616e73616374696f6e2e476574486173686c766b54c361e0010129037e6c766b53c3615272680f4e656f2e53746f726167652e5075746153c576000c7574786f5265736572766564c476516c766b00c36168174e656f2e5472616e73616374696f6e2e476574486173686c766b54c361e00101d0027ec476526c766b53c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b58527ac46237006c766b54c351936c766b54527ac46c766b54c36c766b51c3c09f6c766b59527ac46c766b59c36368fe006c766b58527ac46203006c766b58c3616c756654c56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b00c3006c766b52c394617ce00002fab2616c766b51c36c766b00c36101b07e6c766b52c3615272e00003fe0261516c766b53527ac46203006c766b53c3616c756653c56b616168164e656f2e53746f726167652e476574436f6e74657874056f776e6572617c680f4e656f2e53746f726167652e4765746c766b00527ac46c766b00c3c0009c6c766b51527ac46c766b51c3642400616114c313cf812a9b4c5996edc04e1e43ecb88d8ea6506c766b52527ac46212006c766b00c36c766b52527ac46203006c766b52c3616c756653c56b616168164e656f2e53746f726167652e476574436f6e74657874076d616e61676572617c680f4e656f2e53746f726167652e4765746c766b00527ac46c766b00c3c0009c6c766b51527ac46c766b51c36412006161e0010019ff6c766b00527ac4616c766b00c36c766b52527ac46203006c766b52c3616c756651c56b6161e00100effe6168184e656f2e52756e74696d652e436865636b5769746e6573736c766b00527ac46203006c766b00c3616c756651c56b6161e0010044ff6168184e656f2e52756e74696d652e436865636b5769746e6573736c766b00527ac46203006c766b00c3616c756653c56b6c766b00527ac4616c766b00c36c766b51527ac46c766b51c361080000000000000000586c766b51c3c094807e6c766b52527ac46203006c766b52c3616c756653c56b6c766b00527ac4616c766b00c36c766b51527ac46c766b51c3611000000000000000000000000000000000606c766b51c3c094807e6c766b52527ac46203006c766b52c3616c756653c56b6c766b00527ac4616c766b00c36c766b51527ac46c766b51c361020000526c766b51c3c094807e6c766b52527ac46203006c766b52c3616c756652c56b6c766b00527ac4616c766b00c3c0640c006c766b00c3620d00610800000000000000006c766b51527ac46203006c766b51c3616c756654c56b6c766b00527ac46c766b51527ac4616c766b00c36c766b51c37e6c766b52527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b52c3617c680f4e656f2e53746f726167652e4765746c766b53527ac46203006c766b53c3616c756654c56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b00c36c766b51c37e6c766b53527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b53c36c766b52c3615272680f4e656f2e53746f726167652e50757461616c756653c56b6c766b00527ac46c766b51527ac4616c766b00c36c766b51c37e6c766b52527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b52c3617c68124e656f2e53746f726167652e44656c65746561616c756656c56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b51c36c766b00c37e6c766b53527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b53c3617c680f4e656f2e53746f726167652e4765746c766b54527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b53c36c766b54c36c766b52c393615272680f4e656f2e53746f726167652e50757461516c766b55527ac46203006c766b55c3616c756658c56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b51c36c766b00c37e6c766b53527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b53c3617c680f4e656f2e53746f726167652e4765746c766b54527ac46c766b52c36c766b54c3a06c766b55527ac46c766b55c3640e00006c766b56527ac462a6006c766b54c36c766b52c3946c766b54527ac46c766b54c3009c6c766b57527ac46c766b57c3643b006168164e656f2e53746f726167652e476574436f6e746578746c766b53c3617c68124e656f2e53746f726167652e44656c65746561623b006168164e656f2e53746f726167652e476574436f6e746578746c766b53c36c766b54c3615272680f4e656f2e53746f726167652e50757461516c766b56527ac46203006c766b56c3616c75665bc56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b51c36c766b00c37e6c766b53527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b53c3617c680f4e656f2e53746f726167652e4765746c766b54527ac46c766b52c36c766b54c3a06c766b55527ac46c766b55c3646701616c766b00c3c001149c009c6c766b57527ac46c766b57c36469006154c576002652656475636542616c616e63654f6628292061737365744964206c656e67746820213d203230c476516c766b51c3c476526c766b00c3c476536c766b52c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b58527ac46289016c766b52c36c766b54c3946c766b56527ac46c766b00c36c766b51c36c766b56c3615272e001030904009c6c766b59527ac46c766b59c3646c006155c576002152656475636542616c616e63654f6628292043616e27742050756c6c204e455035c476516c766b51c3c476526c766b00c3c476536c766b54c3c476546c766b52c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b58527ac462e6006168164e656f2e53746f726167652e476574436f6e746578746c766b53c3617c68124e656f2e53746f726167652e44656c65746561516c766b58527ac462a6006c766b54c36c766b52c3946c766b54527ac46c766b54c3009c6c766b5a527ac46c766b5ac3643b006168164e656f2e53746f726167652e476574436f6e746578746c766b53c3617c68124e656f2e53746f726167652e44656c65746561623b006168164e656f2e53746f726167652e476574436f6e746578746c766b53c36c766b54c3615272680f4e656f2e53746f726167652e50757461516c766b58527ac46203006c766b58c3616c756659c56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b00c36114952d12a025325e56a4cb3ba2d469b1e23c7c77a0907c907c9e6312006c766b51c361e001009cf79c620400006c766b53527ac46c766b53c364ff00616168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fc617c680f4e656f2e53746f726167652e4765746c766b54527ac46c766b54c300587f6c766b55527ac46c766b54c358587f6c766b56527ac46c766b52c3009f6c766b57527ac46c766b57c3640900006a52527ac46c766b52c36c766b56527ac46c766b55c361e0010166f86c766b56c361e001015bf87e6c766b54527ac46168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fc6c766b54c3615272680f4e656f2e53746f726167652e507574616246006c766b52c300a16c766b58527ac46c766b58c36418006c766b51c36c766b00c3617ce00002b2f961621b006c766b51c36c766b00c36c766b52c3615272e0000330f961616c75665ac56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46153c576006c766b51c3c476516c766b52c3c476526c766b54c3c46c766b55527ac46c766b00c36c766b56527ac46c766b56c36c766b53c36c766b55c3617c527ae201026c766b57527ac46c766b57c3009c6c766b58527ac46c766b58c3646a006156c576000c73656e644e6570354661696cc476510f5472616e73666572206661696c6564c476526c766b00c3c476536c766b51c3c476546c766b52c3c476556c766b54c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b59527ac4620e00516c766b59527ac46203006c766b59c3616c756658c56b6c766b00527ac46c766b51527ac46c766b52527ac4616168164e656f2e53746f726167652e476574436f6e7465787461045e7712956c766b00c37e617c680f4e656f2e53746f726167652e4765746c766b53527ac46c766b53c3c0009c6c766b55527ac46c766b55c36460006155c576000c70756c6c4e6570354661696cc476510d496e76616c6964204173736574c476526c766b51c3c476536c766b00c3c476546c766b52c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b56527ac462c8006c766b53c351806101019c630f00087472616e736665726210000c7472616e7366657246726f6d6c766b54527ac46c766b00c36c766b51c361682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686c766b54c36c766b52c3615479517956727551727553795279557275527275e00105a9fd009c6c766b57527ac46c766b57c3640e00006c766b56527ac46220006c766b00c36c766b52c3617ce0000284a661516c766b56527ac46203006c766b56c3616c756657c56b6c766b00527ac46c766b51527ac46c766b52527ac4616168164e656f2e53746f726167652e476574436f6e7465787461045e7712956c766b51c37e617c680f4e656f2e53746f726167652e4765746c766b53527ac46c766b53c3c0009c6c766b54527ac46c766b54c36460006155c576000c73656e644e6570354661696cc476510d496e76616c6964204173736574c476526c766b00c3c476536c766b51c3c476546c766b52c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b55527ac462a0006c766b51c361682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686c766b00c3087472616e736665726c766b52c3615479517956727551727553795279557275527275e0010539fc009c6c766b56527ac46c766b56c3640e00006c766b55527ac46222006c766b51c3006c766b52c394617ce0000212a561516c766b55527ac46203006c766b55c3616c756659c56b6c766b00527ac46161e0010030f3630e0061e001005ff3009c620400006c766b52527ac46c766b52c3640e00006c766b53527ac46277016c766b00c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736c766b51527ac4616c766b51c36c766b54527ac4006c766b55527ac462dd006c766b54c36c766b55c3c36c766b56527ac4616c766b56c36168154e656f2e4f75747075742e476574417373657449646120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60907c907c9e6359006c766b56c36168184e656f2e4f75747075742e4765745363726970744861736861682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c009c620400516c766b57527ac46c766b57c3640e00006c766b53527ac4626b00616c766b55c351936c766b55527ac46c766b55c36c766b54c3c09f631aff6c766b00c36168174e656f2e5472616e73616374696f6e2e4765745479706561529c009c6c766b58527ac46c766b58c3640f0061006c766b53527ac4620e00516c766b53527ac46203006c766b53c3616c756656c56b6c766b00527ac4616158c56c766b51527ac46c766b51c36c766b00c30001147f007cc46c766b51c36c766b00c30114517f517cc46c766b51c36c766b00c30115517f527cc46c766b51c351c36101b99c6c766b52527ac46c766b52c364a300616c766b51c36c766b00c3011601207f557cc46c766b51c352c36101b99c6c766b53527ac46c766b53c3643c00616c766b51c36c766b00c3013601207f567cc46c766b51c36c766b00c3015e587f537cc46c766b51c36c766b00c30166587f547cc461623900616c766b51c36c766b00c3013601147f567cc46c766b51c36c766b00c30152587f537cc46c766b51c36c766b00c3015a587f547cc4616162b0006c766b51c352c36101b99c6c766b54527ac46c766b54c3644e00616c766b51c36c766b00c3011601147f557cc46c766b51c36c766b00c3012a01207f567cc46c766b51c36c766b00c30152587f537cc46c766b51c36c766b00c3015a587f547cc461624b00616c766b51c36c766b00c3011601147f557cc46c766b51c36c766b00c3012a01147f567cc46c766b51c36c766b00c30146587f537cc46c766b51c36c766b00c3014e587f547cc4616c766b51c36c766b55527ac46203006c766b55c3616c7566', - 'hex', -); - -export const aphelionExchangeContract = new Contract({ - script: aphelionExhangeScript, - parameterList: [ContractParameterType.String, ContractParameterType.Array], - - returnType: ContractParameterType.ByteArray, - name: 'Aphelion Exchange', - codeVersion: '1.0.120040116', - author: 'APH Dev Team', - email: 'support@aphelion.orgs', - description: "Aphelion's Exchange", - contractProperties: ContractPropertyState.HasStorageDynamicInvokePayable, -}); - -export const aphelionDexScript = Buffer.from( - '029400c56b6c766b00527ac46c766b51527ac4616168164e656f2e52756e74696d652e47657454726967676572609c6c766b52527ac46c766b52c364781e616c766b00c30b6163636570744f66666572876c766b5b527ac46c766b5bc36418006c766b51c361e0010129316c766b5c527ac462b4206c766b00c3087769746864726177876c766b5d527ac46c766b5dc364130061e001007d736c766b5c527ac46286206c766b00c30a67657442616c616e6365876c766b5e527ac46c766b5ec36422006c766b51c300c36c766b51c351c3617ce00102807f6c766b5c527ac46247206c766b00c30e676574436f6e7472696275746564876c766b5f527ac46c766b5fc3641a006c766b51c300c361e00101f04f6c766b5c527ac4620c206c766b00c313676574417661696c61626c65546f436c61696d876c766b60527ac46c766b60c3641a006c766b51c300c361e0010187516c766b5c527ac462cc1f6c766b00c314676574417068436f6e76657273696f6e52617465876c766b0111527ac46c766b0111c3641b006c766b51c300c361e0010140286c766b5c527ac462891f61006c766b53527ac461682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b54527ac46c766b54c361681d4e656f2e5472616e73616374696f6e2e476574417474726962757465736c766b55527ac4616c766b55c36c766b0112527ac4006c766b0113527ac462e3006c766b0112c36c766b0113c3c36c766b0114527ac4616c766b0114c36168164e656f2e4174747269627574652e4765745573616765610120907c907c9e6357006c766b0114c36168154e656f2e4174747269627574652e4765744461746161682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c009c620400006c766b0115527ac46c766b0115c3642c00616c766b0114c36168154e656f2e4174747269627574652e476574446174616c766b53527ac4622500616c766b0113c351936c766b0113527ac46c766b0113c36c766b0112c3c09f6312ff6c766b00c3086164644f66666572876c766b0116527ac46c766b0116c3647300616c766b51c3c0559c009c6c766b0118527ac46c766b0118c3640e00006c766b5c527ac462cf1d6c766b51c352c36c766b0117527ac46c766b0117c3c001149c6c766b0119527ac46c766b0119c3641e006c766b51c36c766b53c3617ce001029b266c766b5c527ac4628a1d616289016c766b00c3076465706f736974876c766b011a527ac46c766b011ac3646a01616c766b51c3c0529c009c6c766b011d527ac46c766b011dc3640e00006c766b5c527ac462401d6c766b51c300c36c766b011b527ac46168164e656f2e53746f726167652e476574436f6e746578746102574c6c766b53c37e617c680f4e656f2e53746f726167652e4765746c766b011c527ac46c766b011cc3c0009c6c766b011e527ac46c766b011ec36465006155c576000c6465706f7369744572726f72c476510f6e6f742077686974656c6973746564c476526c766b53c3c476536c766b011bc3c476546c766b51c351c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b5c527ac462771c6c766b011bc3c001149c6c766b011f527ac46c766b011fc3643600616c766b51c351c36c766b0120527ac46c766b011bc36c766b0120c36c766b53c3615272e001035e396c766b5c527ac462291c6c766b011bc3c001209c009c6c766b0121527ac46c766b0121c3640e00006c766b5c527ac462011c616c766b00c30f6f6e546f6b656e5472616e73666572876c766b0122527ac46c766b0122c364470061682b53797374656d2e457865637574696f6e456e67696e652e47657443616c6c696e67536372697074486173686c766b51c3617ce00102e43a6c766b5c527ac462951b6161006c766b56527ac46c766b55c3c0610119a06c766b0124527ac46c766b0124c3640f0061006c766b5c527ac462641b6c766b53c36168184e656f2e52756e74696d652e436865636b5769746e6573736c766b0125527ac46c766b0125c3641300616c766b53c36c766b56527ac4628c02616c766b55c36c766b0126527ac4006c766b0127527ac46208016c766b0126c36c766b0127c3c36c766b0128527ac4616c766b0128c36168164e656f2e4174747269627574652e4765745573616765610120907c907c9e632c006c766b0128c36168154e656f2e4174747269627574652e476574446174616c766b53c39c009c620400006c766b0129527ac46c766b0129c3647c00616c766b0128c36168154e656f2e4174747269627574652e476574446174616168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b012a527ac46c766b012ac364070061622c006c766b0128c36168154e656f2e4174747269627574652e476574446174616c766b56527ac4627e01616c766b0127c351936c766b0127527ac46c766b0127c36c766b0126c3c09f63edfe6c766b54c361681d4e656f2e5472616e73616374696f6e2e4765745265666572656e6365736c766b0123527ac46c766b0123c3c0610164a06c766b012b527ac46c766b012bc364070061620f01616c766b0123c36c766b012c527ac4006c766b012d527ac462bb006c766b012cc36c766b012dc3c36c766b012e527ac4616c766b012ec36168184e656f2e4f75747075742e4765745363726970744861736861682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c009c6c766b012f527ac46c766b012fc3642f00616c766b012ec36168184e656f2e4f75747075742e476574536372697074486173686c766b56527ac4624d00616c766b012dc351936c766b012d527ac46c766b012dc36c766b012cc3c09f633aff51c57600096e6f2073656e646572c46168124e656f2e52756e74696d652e4e6f746966796162270a616c766b00c3076465706f73697487916416006c766b00c3086164644f666665728791620400006c766b0130527ac46c766b0130c364060062e506006c766b57527ac4006c766b58527ac4616c766b54c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736c766b0131527ac46c766b0131c3c0009c6c766b0132527ac46c766b0132c364070061623605616c766b0131c36c766b0133527ac4006c766b0134527ac46288016c766b0133c36c766b0134c3c36c766b0135527ac4616c766b0135c36168184e656f2e4f75747075742e4765745363726970744861736861682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c009c6c766b0136527ac46c766b0136c364060062fa006c766b0135c36168154e656f2e4f75747075742e4765744173736574496461209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c6c766b0137527ac46c766b0137c3642c006c766b57c36c766b0135c36168134e656f2e4f75747075742e47657456616c7565936c766b57527ac46c766b0135c36168154e656f2e4f75747075742e476574417373657449646120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c609c6c766b0138527ac46c766b0138c3642c006c766b58c36c766b0135c36168134e656f2e4f75747075742e47657456616c7565936c766b58527ac4616c766b0134c351936c766b0134527ac46c766b0134c36c766b0133c3c09f636dfe6c766b57c300a0630d006c766b58c300a0620400516c766b0139527ac46c766b0139c3645e03616c766b54c361681d4e656f2e5472616e73616374696f6e2e4765745265666572656e6365736c766b013a527ac46c766b57c300a06c766b013b527ac46c766b013bc364810161616c766b013ac36c766b013c527ac4006c766b013d527ac462d5006c766b013cc36c766b013dc3c36c766b013e527ac4616c766b013ec36168184e656f2e4f75747075742e476574536372697074486173686c766b56c39c6347006c766b013ec36168154e656f2e4f75747075742e4765744173736574496461209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c620400006c766b013f527ac46c766b013fc3642e00616c766b57c36c766b013ec36168134e656f2e4f75747075742e47657456616c7565946c766b57527ac461616c766b013dc351936c766b013d527ac46c766b013dc36c766b013cc3c09f6320ff6c766b57c300a06c766b0140527ac46c766b0140c36469006161209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc56c766b56c36c766b57c3615272e00003637f6161209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc56c766b57c3617ce00002eb326161616c766b58c300a06c766b0141527ac46c766b0141c364810161616c766b013ac36c766b0142527ac4006c766b0143527ac462d5006c766b0142c36c766b0143c3c36c766b0144527ac4616c766b0144c36168184e656f2e4f75747075742e476574536372697074486173686c766b56c39c6347006c766b0144c36168154e656f2e4f75747075742e476574417373657449646120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c609c620400006c766b0145527ac46c766b0145c3642e00616c766b58c36c766b0144c36168134e656f2e4f75747075742e47657456616c7565946c766b58527ac461616c766b0143c351936c766b0143527ac46c766b0143c36c766b0142c3c09f6320ff6c766b58c300a06c766b0146527ac46c766b0146c3646900616120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c606c766b56c36c766b58c3615272e00003cd7d616120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c606c766b58c3617ce0000255316161616161616c766b00c3086164644f66666572876c766b0147527ac46c766b0147c3641e006c766b51c36c766b56c3617ce00102a81b6c766b5c527ac46297126c766b00c3076465706f736974876c766b0148527ac46c766b0148c364fe00616c766b51c300c36c766b0149527ac46c766b0149c361209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c6c766b014b527ac46c766b014bc3641500616c766b57c36c766b014a527ac461625a006c766b0149c36120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c609c6c766b014c527ac46c766b014cc3641500616c766b58c36c766b014a527ac461620e00006c766b5c527ac462c51154c57600076465706f736974c476516c766b56c3c476526c766b0149c3c476536c766b014ac3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b5c527ac4627d11616c766b00c306636f6d6d6974876c766b014d527ac46c766b014dc3641e006c766b51c36c766b56c3617ce00102a93d6c766b5c527ac46243116c766b00c305636c61696d876c766b014e527ac46c766b014ec36418006c766b56c361e001018d436c766b5c527ac46211116c766b00c308636f6d706f756e64876c766b014f527ac46c766b014fc36418006c766b56c361e00101ad476c766b5c527ac462dc106c766b00c30b63616e63656c4f66666572876c766b0150527ac46c766b0150c3641e006c766b51c36c766b56c3617ce00102782b6c766b5c527ac4629e106c766b00c30473656e64876c766b0151527ac46c766b0151c3640f026161e001006978630e0061e001009878009c620400006c766b0157527ac46c766b0157c3640e00006c766b5c527ac46250106c766b51c3c0539c009c6c766b0158527ac46c766b0158c3640e00006c766b5c527ac4622a106c766b51c300c36c766b0152527ac46c766b0152c3c001149c6312006c766b0152c3c001209c009c620400006c766b0159527ac46c766b0159c3640e00006c766b5c527ac462e20f6c766b51c351c36c766b0153527ac46c766b0153c300a16c766b015a527ac46c766b015ac3640e00006c766b5c527ac462af0f6c766b51c352c36c766b0154527ac46c766b0154c3c001149c009c6c766b015b527ac46c766b015bc3640e00006c766b5c527ac462780f6c766b0152c36c766b56c3617ce00102956e6c766b0155527ac46c766b0155c36c766b0153c39f6c766b015c527ac46c766b015cc3640e00006c766b5c527ac462350f6c766b0155c36c766b0153c3946c766b0155527ac46c766b0152c36c766b56c36c766b0155c3615272e00003c67f616c766b0152c36c766b0154c3617ce00102226e6c766b0156527ac46c766b0156c36c766b0153c3936c766b0156527ac46c766b0152c36c766b0154c36c766b0156c3615272e000037b7f6154c576000473656e74c476516c766b56c3c476526c766b0154c3c476536c766b0153c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b5c527ac462760e61006c766b59527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b5a527ac46c766b00c3087365744f776e6572876c766b015d527ac46c766b015dc3641a006c766b51c300c361e001010e306c766b59527ac462560b6c766b00c30a7365744d616e61676572876c766b015e527ac46c766b015ec3641a006c766b51c300c361e001017c306c766b59527ac4621d0b6c766b00c3097365744d61726b6574876c766b015f527ac46c766b015fc36418006c766b51c361e00101ba0d6c766b59527ac462e70a6c766b00c30b636c6f73654d61726b6574876c766b0160527ac46c766b0160c36418006c766b51c361e00101f5116c766b59527ac462af0a6c766b00c3117365744173736574546f41706852617465876c766b0161527ac46c766b0161c36422006c766b51c300c36c766b51c351c3617ce0010208156c766b59527ac462670a6c766b00c31e7365744665655265646973747269627574696f6e50657263656e74616765876c766b0162527ac46c766b0162c3641a006c766b51c300c361e0010116366c766b59527ac4621a0a6c766b00c315736574436c61696d4d696e696d756d426c6f636b73876c766b0163527ac46c766b0163c3641a006c766b51c300c361e0010163366c766b59527ac462d6096c766b00c3127265636c61696d4f727068616e46756e6473876c766b0164527ac46c766b0164c3641a006c766b51c300c361e001019f2f6c766b59527ac46295096c766b00c310736574417373657453657474696e6773876c766b0165527ac46c766b0165c36422006c766b51c300c36c766b51c351c3617ce0010259326c766b59527ac4624e096c766b00c30b6164644964656e74697479876c766b0166527ac46c766b0166c3645a036161e0010051736168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b016f527ac46c766b016fc3640e00006c766b5c527ac462ab0b6c766b51c3c0549f6c766b0170527ac46c766b0170c3640e00006c766b5c527ac462870b6c766b51c300c36c766b0167527ac46c766b0167c3c001209c009c6c766b0171527ac46c766b0171c3640e00006c766b5c527ac462500b6c766b51c351c36c766b0168527ac46c766b0168c3c06412006c766b0168c3c001209c009c620400006c766b0172527ac46c766b0172c3640e00006c766b5c527ac4620b0b6c766b51c352c36c766b0169527ac46c766b0169c3c06412006c766b0169c3c001209c009c620400006c766b0173527ac46c766b0173c3640e00006c766b5c527ac462c60a6c766b51c353c36c766b016a527ac46c766b016ac3c001149c009c6c766b0174527ac46c766b0174c3640e00006c766b5c527ac4628f0a6c766b51c3c054a06c766b0175527ac46c766b0175c36415006c766b51c354c36c766b016b527ac4620c00006c766b016b527ac46154c56c766b016c527ac46c766b016cc36c766b0168c3007cc46c766b016cc36c766b0169c3517cc46c766b016cc36c766b016ac3527cc46c766b016cc36c766b016bc3537cc46c766b5ac3610255496c766b0167c37e617c680f4e656f2e53746f726167652e4765746c766b016d527ac46c766b016dc3c000a06c766b0176527ac46c766b0176c3647a00616c766b016dc36168174e656f2e52756e74696d652e446573657269616c697a656c766b0177527ac46c766b0177c352c36c766b016ac39c009c6c766b0178527ac46c766b0178c3642e00616c766b5ac36102574c6c766b0177c352c37e617c68124e656f2e53746f726167652e44656c6574656161616c766b016cc36168154e656f2e52756e74696d652e53657269616c697a656c766b016e527ac46168164e656f2e53746f726167652e476574436f6e74657874610255496c766b0167c37e6c766b016ec3615272680f4e656f2e53746f726167652e5075746156c576000b7365744964656e74697479c476516c766b0167c3c476526c766b0168c3c476536c766b0169c3c476546c766b016ac3c476556c766b016bc3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b5c527ac46294086c766b00c31077686974656c69737441646472657373876c766b0179527ac46c766b0179c36453036161e00100d26f6168184e656f2e52756e74696d652e436865636b5769746e65737363290061e00100a46e6168184e656f2e52756e74696d652e436865636b5769746e657373009c620400006c766b028000527ac46c766b028000c3640e00006c766b5c527ac46202086c766b51c3c0529c009c6c766b028100527ac46c766b028100c3640e00006c766b5c527ac462da076c766b51c300c36c766b017a527ac46c766b017ac3c001149c009c6c766b028200527ac46c766b028200c3640e00006c766b5c527ac462a1076c766b51c351c36c766b017b527ac46c766b017bc3c001209c009c6c766b028300527ac46c766b028300c3640e00006c766b5c527ac46268076c766b5ac3610255496c766b017bc37e617c680f4e656f2e53746f726167652e4765746c766b017d527ac46c766b017dc3c0009c6c766b028400527ac46c766b028400c3642e006153c57651106d697373696e67206964656e74697479c476526c766b017bc3c46c766b017c527ac4629f016c766b017dc36168174e656f2e52756e74696d652e446573657269616c697a656c766b017e527ac46c766b017ec352c36c766b017ac39c009c6c766b028500527ac46c766b028500c36442006155c576511061646472657373206d69736d61746368c476526c766b017bc3c476536c766b017ac3c476546c766b017ec352c3c46c766b017c527ac46214016c766b5ac36c766b017ac3617c680f4e656f2e53746f726167652e4765746c766b017f527ac46c766b017fc3c000a06c766b028600527ac46c766b028600c3646100616c766b017fc36c766b017bc39c009c6c766b028700527ac46c766b028700c3643a006154c5765113616c72656164792077686974656c6973746564c476526c766b017bc3c476536c766b017ac3c46c766b017c527ac462780061623000616c766b5ac36102574c6c766b017ac37e6c766b017bc3615272680f4e656f2e53746f726167652e507574616153c576000b77686974656c6973746564c476516c766b017ac3c476526c766b017bc3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b5c527ac4625a05616c766b017cc3000d77686974656c6973744661696cc46c766b017cc36168124e656f2e52756e74696d652e4e6f7469667961006c766b5c527ac4621c056c766b00c310626c61636b6c69737441646472657373876c766b028800527ac46c766b028800c36405016161e00100586c6168184e656f2e52756e74696d652e436865636b5769746e65737363290061e001002a6b6168184e656f2e52756e74696d652e436865636b5769746e657373009c620400006c766b028a00527ac46c766b028a00c3640e00006c766b5c527ac46288046c766b51c300c36c766b028900527ac46c766b028900c3c001149c009c6c766b028b00527ac46c766b028b00c3640e00006c766b5c527ac4624d046c766b5ac36102574c6c766b028900c37e617c68124e656f2e53746f726167652e44656c6574656152c576000b626c61636b6c6973746564c476516c766b028900c3c46168124e656f2e52756e74696d652e4e6f7469667961616230016c766b00c3096170684e6f74696679876c766b028c00527ac46c766b028c00c36418006c766b51c361e00101de2a6c766b59527ac462f8006c766b00c30e73657457686974656c6973746572876c766b028d00527ac46c766b028d00c36497006161e00100776b009c6c766b028e00527ac46c766b028e00c3640f0061006c766b5c527ac46268036c766b5ac30b77686974656c69737465726c766b51c300c3615272680f4e656f2e53746f726167652e5075746152c576000e73657457686974656c6973746572c476516c766b51c300c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b5c527ac462fc026151c576006c766b00c315202d20556e6b6e6f776e206f7065726174696f6e2e7ec46168124e656f2e52756e74696d652e4e6f74696679616152c576006c766b59c3630e00074661696c757265620b000753756363657373c476516c766b00c3c46168124e656f2e52756e74696d652e4e6f74696679616c766b59c36c766b5c527ac46276026168164e656f2e52756e74696d652e47657454726967676572009c6c766b028f00527ac46c766b028f00c36414006161e00100f2406c766b5c527ac46237026168164e656f2e52756e74696d652e47657454726967676572519c6c766b029000527ac46c766b029000c364fe016161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b029100527ac46c766b029100c36168174e656f2e5472616e73616374696f6e2e476574547970656102d1009c009c6c766b029200527ac46c766b029200c3646a006152c576001b53656e64206d7573742075736520496e766f636174696f6e205458c476516c766b029100c36168174e656f2e5472616e73616374696f6e2e47657454797065c46168124e656f2e52756e74696d652e4e6f7469667961006c766b5c527ac46231016c766b00c30b6163636570744f666665728763a7006c766b00c3086164644f66666572876395006c766b00c3087769746864726177876383006c766b00c30f6f6e546f6b656e5472616e7366657287636a006c766b00c30a67657442616c616e6365876356006c766b00c30e676574436f6e747269627574656487633e006c766b00c313676574417661696c61626c65546f436c61696d876321006c766b00c314676574417068436f6e76657273696f6e5261746587620400516c766b029300527ac46c766b029300c3644e006152c576001b4f502063616e2774206163636570742073656e742066756e64732ec476516c766b00c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b5c527ac4621900516c766b5c527ac4620e00006c766b5c527ac46203006c766b5cc3616c75660111c56b6c766b00527ac4616c766b00c3c0569c009c6c766b59527ac46c766b59c3640f0061006c766b5a527ac4623c046c766b00c300c36c766b52527ac46c766b00c351c36c766b53527ac46c766b52c3c001209c6313006c766b52c3c00114907c907c9e6321006c766b53c3c001209c6311006c766b53c3c001149c009c62040000620400516c766b5b527ac46c766b5bc3641d00610d626164206173736574206c656e6c766b51527ac462800361076d61726b6574736c766b52c37e6c766b53c37e6c766b54527ac461e001004e67630e0061e001000d67009c620400006c766b5c527ac46c766b5cc364d000616168164e656f2e53746f726167652e476574436f6e746578746c766b54c3617c680f4e656f2e53746f726167652e4765746c766b5d527ac46c766b5dc3c0640e0061e001002067009c620400516c766b5e527ac46c766b5ec3641c00610d4e6f207065726d697373696f6e6c766b51527ac462ca026c766b5dc36168174e656f2e52756e74696d652e446573657269616c697a656c766b55527ac46c766b55c36c766b00c352c3527cc46c766b55c36c766b00c354c3547cc46c766b55c36c766b00c355c3557cc461626500616156c56c766b55527ac46c766b55c36c766b52c3007cc46c766b55c36c766b53c3517cc46c766b55c36c766b00c352c3527cc46c766b55c36c766b00c353c3537cc46c766b55c36c766b00c354c3547cc46c766b55c36c766b00c355c3557cc4616c766b55c354c3009f630f006c766b55c355c3009f620400516c766b5f527ac46c766b5fc364250061164665652063616e6e6f74206265206e656761746976656c766b51527ac462c7016168164e656f2e53746f726167652e476574436f6e7465787461045e7712956c766b55c300c37e617c680f4e656f2e53746f726167652e4765746c766b56527ac46168164e656f2e53746f726167652e476574436f6e7465787461045e7712956c766b55c351c37e617c680f4e656f2e53746f726167652e4765746c766b57527ac46c766b56c3c0640e006c766b57c3c0009c620400516c766b60527ac46c766b60c3641c00610d496e76616c69642041737365746c766b51527ac46208016c766b55c36168154e656f2e52756e74696d652e53657269616c697a656c766b58527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b54c36c766b58c3615272680f4e656f2e53746f726167652e5075746153c57600097075744d61726b6574c476516c766b54c3c476526c766b58c3c46168124e656f2e52756e74696d652e4e6f746966796158c57600096d61726b6574536574c476516c766b54c3c476526c766b55c300c3c476536c766b55c351c3c476546c766b55c352c3c476556c766b55c353c3c476566c766b55c354c3c476576c766b55c355c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b5a527ac46240006152c576000d7365744d61726b65744661696cc476516c766b51c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b5a527ac46203006c766b5ac3616c756659c56b6c766b00527ac4616c766b00c3c0529c009c6c766b55527ac46c766b55c364200061115265717569726573203220706172616d736c766b51527ac4626b0161e001006663630e0061e001002563009c620400006c766b56527ac46c766b56c3641c00610d4e6f207065726d697373696f6e6c766b51527ac4622e016c766b00c300c36c766b52527ac46c766b00c351c36c766b53527ac46c766b52c3c001209c6313006c766b52c3c00114907c907c9e6321006c766b53c3c001209c6311006c766b53c3c001149c009c62040000620400516c766b57527ac46c766b57c36435006125496e76616c6964206c656e677468206f662062617365206f722071756f74652061737365746c766b51527ac462970061076d61726b6574736c766b52c37e6c766b53c37e6c766b54527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b54c3617c68124e656f2e53746f726167652e44656c6574656153c576000c6d61726b6574436c6f736564c476516c766b52c3c476526c766b53c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b58527ac46242006152c576000f636c6f73654d61726b65744661696cc476516c766b51c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b58527ac46203006c766b58c3616c756659c56b6c766b00527ac46c766b51527ac4616168164e656f2e53746f726167652e476574436f6e746578746c766b52527ac461076d61726b6574736c766b00c37e6c766b51c37e6c766b53527ac46c766b52c36c766b53c3617c680f4e656f2e53746f726167652e4765746c766b54527ac46c766b54c3c000a06c766b56527ac46c766b56c3642e00616c766b54c36168174e656f2e52756e74696d652e446573657269616c697a656c766b57527ac462b10061076d61726b6574736c766b51c37e6c766b00c37e6c766b53527ac46c766b52c36c766b53c3617c680f4e656f2e53746f726167652e4765746c766b54527ac46c766b54c3c000a06c766b58527ac46c766b58c3642d00616c766b54c36168174e656f2e52756e74696d652e446573657269616c697a656c766b57527ac46230006156c56c766b55527ac46c766b55c36100517cc46c766b55c36100007cc46c766b55c36c766b57527ac46203006c766b57c3616c756655c56b6c766b00527ac46c766b51527ac4616c766b00c3c001209c6311006c766b00c3c001149c009c620400006c766b52527ac46c766b52c3640e00006c766b53527ac462890061e001003d6063170061e00100fc5f630e0061e00100bb5f009c620400006c766b54527ac46c766b54c3640e00006c766b53527ac46251006168164e656f2e53746f726167652e476574436f6e74657874610862617365726174656c766b00c37e6c766b51c3615272680f4e656f2e53746f726167652e50757461516c766b53527ac46203006c766b53c3616c756652c56b6c766b00527ac4616168164e656f2e53746f726167652e476574436f6e74657874610862617365726174656c766b00c37e617c680f4e656f2e53746f726167652e4765746c766b51527ac46203006c766b51c3616c7566011dc56b6c766b00527ac46c766b51527ac461116164644f66666572496e69744572726f726c766b53527ac46156c56c766b54527ac46c766b54c36c766b51c3007cc46c766b54c36c766b00c300c3537cc46c766b00c351c36c766b55527ac46c766b54c36c766b55c3517cc46c766b54c36c766b00c352c3547cc46c766b00c353c36c766b56527ac46c766b54c36c766b56c3527cc46c766b54c36c766b00c354c3557cc46c766b54c353c3c001209c6315006c766b54c353c3c00114907c907c9e6325006c766b54c354c3c001209c6313006c766b54c354c3c001149c009c62040000620400516c766b5f527ac46c766b5fc36444006155c5765114496e76616c6964204173736574204c656e677468c476526c766b51c3c476536c766b54c353c3c476546c766b54c354c3c46c766b52527ac462f0056c766b55c300a1630d006c766b56c300a1620400516c766b60527ac46c766b60c3644a006155c576511e4e6f206e65676174697665207175616e74697469657320616c6c6f776564c476526c766b51c3c476536c766b55c3c476546c766b56c3c46c766b52527ac46285056c766b54c36168154e656f2e52756e74696d652e53657269616c697a656c766b57527ac46c766b57c3aa6c766b58527ac461060ffe750ffe756c766b58c37e6c766b59527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b59c3617c680f4e656f2e53746f726167652e4765746c766b5a527ac46c766b5ac3c000a06c766b0111527ac46c766b0111c36438006154c57651144f6666657220616c726561647920657869737473c476526c766b51c3c476536c766b58c3c46c766b52527ac462b9040d6164644f666665724572726f726c766b53527ac46168164e656f2e53746f726167652e476574436f6e746578746102574c6c766b51c37e617c680f4e656f2e53746f726167652e4765746c766b5b527ac46c766b5bc3c0009c6c766b0112527ac46c766b0112c36447006156c576510f4e6f742077686974656c6973746564c476526c766b51c3c476536c766b58c3c476546c766b54c353c3c476556c766b54c354c3c46c766b52527ac4620a046c766b54c353c36c766b54c354c3617ce0010235fa6c766b5c527ac46c766b5cc300c3c0009c6c766b0113527ac46c766b0113c36446006156c576510e496e76616c6964206d61726b6574c476526c766b51c3c476536c766b58c3c476546c766b54c353c3c476556c766b54c354c3c46c766b52527ac46290036c766b5cc353c36c766b5d527ac46c766b54c353c36c766b5cc300c39c6c766b0114527ac46c766b0114c3641d01616c766b55c36c766b5cc352c39f6c766b0116527ac46c766b0116c3645f006158c5765117496e73756666696369656e74206f726465722073697a65c476526c766b51c3c476536c766b58c3c476546c766b54c353c3c476556c766b54c354c3c476566c766b55c3c476576c766b5dc3c46c766b52527ac462e7026c766b56c3610400e1f505956c766b55c3966c766b0115527ac46c766b0115c36c766b5dc3966c766b5dc3956c766b0115c39e6c766b0117527ac46c766b0117c3645a006158c5765111496e76616c6964207469636b2073697a65c476526c766b51c3c476536c766b58c3c476546c766b54c353c3c476556c766b54c354c3c476566c766b0115c3c476576c766b5dc3c46c766b52527ac4624c0261621a01616c766b56c36c766b5cc352c39f6c766b0119527ac46c766b0119c3645f006158c5765117496e73756666696369656e74206f726465722073697a65c476526c766b51c3c476536c766b58c3c476546c766b54c353c3c476556c766b54c354c3c476566c766b56c3c476576c766b5dc3c46c766b52527ac462cd016c766b55c3610400e1f505956c766b56c3966c766b0118527ac46c766b0118c36c766b5dc3966c766b5dc3956c766b0118c39e6c766b011a527ac46c766b011ac3645a006158c5765111496e76616c6964207469636b2073697a65c476526c766b51c3c476536c766b58c3c476546c766b54c353c3c476556c766b54c354c3c476566c766b0118c3c476576c766b5dc3c46c766b52527ac4623201616c766b54c354c36c766b51c36c766b56c3615272e00103245f6c766b5e527ac46c766b5ec3009c6c766b011b527ac46c766b011bc36457006157c5765117556e61626c6520746f2072657365727665206173736574c476526c766b51c3c476536c766b58c3c476546c766b54c353c3c476556c766b54c354c3c476566c766b56c3c46c766b52527ac462a5006168164e656f2e53746f726167652e476574436f6e746578746c766b59c36c766b57c3615272680f4e656f2e53746f726167652e5075746157c576000c6f6666657243726561746564c476516c766b58c3c476526c766b54c300c3c476536c766b54c353c3c476546c766b55c3c476556c766b54c354c3c476566c766b56c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b011c527ac4623700616c766b52c3006c766b53c3c46c766b52c36168124e656f2e52756e74696d652e4e6f7469667961006c766b011c527ac46203006c766b011cc3616c75660126c56b6c766b00527ac4616c766b00c300c36c766b51527ac46c766b00c351c36c766b52527ac46c766b00c352c36c766b53527ac46c766b00c353c36c766b54527ac46c766b00c354c36c766b55527ac46c766b00c355c36c766b56527ac46c766b53c36c766b55c3617ce0010294f56c766b58527ac46c766b58c300c3c0009c6c766b0112527ac46c766b0112c36444006155c57651186163636570744f66666572496e76616c69644d61726b6574c476526c766b52c3c476536c766b53c3c476546c766b55c3c46c766b57527ac4624a096c766b53c36c766b58c300c39c630b006c766b56c36208006c766b54c36c766b59527ac46c766b53c36c766b58c300c39c630b006c766b54c36208006c766b56c36c766b5a527ac46c766b52c36168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b0113527ac46c766b0113c36447006155c576511a74616b657241646472657373206e6f742061207769746e657373c476526c766b52c3c476536c766b51c3c476546c766b59c3c46c766b57527ac4628c0861060ffe750ffe756c766b51c37e6c766b5b527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b5bc3617c680f4e656f2e53746f726167652e4765746c766b5c527ac46c766b5cc3c0009c6c766b0114527ac46c766b0114c3642701616c766b00c356c36c766b0115527ac46c766b0115c364cb00616c766b00c357c36c766b0116527ac455c57600176163636570744f66666572437265617465734f66666572c47651274f666665724964206e6f7420666f756e643b204372656174696e672061206e6577206f66666572c476526c766b52c3c476536c766b51c3c476546c766b59c3c46168124e656f2e52756e74696d652e4e6f746966796155c576006c766b55c3c476516c766b56c3c476526c766b53c3c476536c766b54c3c476546c766b0116c3c46c766b52c3617ce00102d1f56c766b0117527ac462850756c57651114f666665724964206e6f7420666f756e64c476526c766b52c3c476536c766b51c3c476546c766b59c3c476556c766b00c356c3c46c766b57527ac46202076c766b5cc36168174e656f2e52756e74696d652e446573657269616c697a656c766b5d527ac46c766b5dc353c36c766b53c39c009c6c766b0118527ac46c766b0118c36453006157c5765115496e76616c696420617373657420746f2067697665c476526c766b52c3c476536c766b51c3c476546c766b59c3c476556c766b5dc353c3c476566c766b53c3c46c766b57527ac4626c066c766b5dc354c36c766b55c39c009c6c766b0119527ac46c766b0119c36456006157c5765118496e76616c696420617373657420746f2072656365697665c476526c766b52c3c476536c766b51c3c476546c766b59c3c476556c766b5dc354c3c476566c766b55c3c46c766b57527ac462f9056c766b54c300a16c766b011a527ac46c766b011ac36452006156c576511e496e76616c6964207175616e7469747920746f20676976652c203c3d2030c476526c766b52c3c476536c766b51c3c476546c766b59c3c476556c766b54c3c46c766b57527ac46292056c766b56c300a16c766b011b527ac46c766b011bc36455006156c5765121496e76616c6964207175616e7469747920746f20726563656976652c203c3d2030c476526c766b52c3c476536c766b51c3c476546c766b59c3c476556c766b56c3c46c766b57527ac46228056c766b54c36c766b5dc351c3a06c766b011c527ac46c766b011cc3643000616c766b5dc351c36c766b54527ac46c766b5dc351c36c766b54c3966c766b56c3956c766b56527ac461625a016c766b54c36c766b5dc351c39f6c766b011d527ac46c766b011dc3643c01616c766b5dc353c36c766b58c300c39c6c766b011e527ac46c766b011ec3649000616c766b5dc351c36c766b54c3946c766b58c352c39f6c766b011f527ac46c766b011fc36465006158c5765115576f756c64206c65617665203c6d696e2073697a65c476526c766b52c3c476536c766b51c3c476546c766b59c3c476556c766b5dc353c3c476566c766b5dc351c36c766b54c394c476576c766b58c352c3c46c766b57527ac462150461628d00616c766b5dc352c36c766b56c3946c766b58c352c39f6c766b0120527ac46c766b0120c36465006158c5765115576f756c64206c65617665203c6d696e2073697a65c476526c766b52c3c476536c766b51c3c476546c766b59c3c476556c766b5dc354c3c476566c766b5dc352c36c766b56c394c476576c766b58c352c3c46c766b57527ac462880361616c766b54c36c766b5dc352c3956c766b5dc351c3966c766b5e527ac46c766b56c36c766b5ec39e6c766b0121527ac46c766b0121c36462006158c576511e52656365697665205175616e7469747920213d2063616c63756c61746564c476526c766b52c3c476536c766b51c3c476546c766b59c3c476556c766b51c3c476566c766b56c3c476576c766b5ec3c46c766b57527ac462ef026c766b53c36c766b58c300c39c630d006c766b58c354c3620a006c766b58c355c36c766b5f527ac46c766b58c351c361e00101e1f06c766b60527ac46c766b5ac36c766b60c3956c766b5fc395610400e1f50596610400e1f505966c766b0111527ac46c766b53c36c766b52c36c766b54c3615272e001035a53009c6c766b0122527ac46c766b0122c36452006156c576511d496e73756666696369656e742062616c616e6365206f66206173736574c476526c766b52c3c476536c766b51c3c476546c766b59c3c476556c766b53c3c46c766b57527ac46214026114952d12a025325e56a4cb3ba2d469b1e23c7c77a06c766b52c36c766b0111c3615272e00103d052009c6c766b0123527ac46c766b0123c3646a00616c766b53c36c766b52c36c766b54c3615272e0000300526156c576511e496e73756666696369656e742041504820666f7220747261646520666565c476526c766b52c3c476536c766b51c3c476546c766b59c3c476556c766b53c3c46c766b57527ac46271016c766b0111c361e000013711616c766b53c36c766b5dc300c36c766b54c3615272e000038b51616c766b5dc37652c36c766b56c394527cc46c766b5dc37651c36c766b54c394517cc46c766b5dc351c3009c6c766b0124527ac46c766b0124c3643d00616168164e656f2e53746f726167652e476574436f6e746578746c766b5bc3617c68124e656f2e53746f726167652e44656c6574656161626300616c766b5dc36168154e656f2e52756e74696d652e53657269616c697a656c766b0125527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b5bc36c766b0125c3615272680f4e656f2e53746f726167652e50757461616c766b55c36c766b52c36c766b56c3615272e000039d506155c576000d6f666665724163636570746564c476516c766b52c3c476526c766b51c3c476536c766b5dc351c3c476546c766b5dc352c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b0117527ac4624300616c766b57c300106163636570744f666665724572726f72c46c766b57c36168124e656f2e52756e74696d652e4e6f7469667961006c766b0117527ac46203006c766b0117c3616c75665cc56b6c766b00527ac46c766b51527ac4616c766b00c3c0519c009c6c766b57527ac46c766b57c3640e00006c766b58527ac4621f026c766b00c300c36c766b52527ac4116f666665724964206e6f7420666f756e646c766b53527ac46c766b52c3c001209c009c6c766b59527ac46c766b59c3640700628b0161060ffe750ffe756c766b52c37e6c766b54527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b54c3617c680f4e656f2e53746f726167652e4765746c766b55527ac46c766b55c3c0009c6c766b5a527ac46c766b5ac36406006224016c766b55c36168174e656f2e52756e74696d652e446573657269616c697a656c766b56527ac46c766b56c300c36168184e656f2e52756e74696d652e436865636b5769746e65737363170061e00100ef4b630e0061e001001e4c009c620400006c766b5b527ac46c766b5bc3641c00610d4e6f207065726d697373696f6e6c766b53527ac4629c006c766b56c354c36c766b56c300c36c766b56c352c3615272e00003734e616168164e656f2e53746f726167652e476574436f6e746578746c766b54c3617c68124e656f2e53746f726167652e44656c6574656153c576000d6f6666657243616e63656c6564c476516c766b56c300c3c476526c766b52c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b58527ac46253006154c576001063616e63656c4f666665724572726f72c476516c766b53c3c476526c766b51c3c476536c766b52c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b58527ac46203006c766b58c3616c756657c56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b51c300a16c766b54527ac46c766b54c3641c00610d7175616e74697479203c3d20306c766b53527ac462b0006c766b00c36c766b52c36c766b51c3615272e00103184f009c6c766b55527ac46c766b55c3642a00611b4465706f7369742829204e45503520746f6b656e206661696c65646c766b53527ac46261006c766b00c36c766b52c36c766b51c3615272e00003f04c6154c57600076465706f736974c476516c766b52c3c476526c766b00c3c476536c766b51c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b56527ac46257006155c576000c6465706f7369744572726f72c476516c766b53c3c476526c766b52c3c476536c766b00c3c476546c766b51c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b56527ac46203006c766b56c3616c756655c56b6c766b00527ac46c766b51527ac4616c766b00c36101ba7e6c766b52527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b52c3617c680f4e656f2e53746f726167652e4765746c766b53527ac46c766b53c36c766b51c3936c766b53527ac46c766b53c3009f6c766b54527ac46c766b54c3640d0061006c766b53527ac4616168164e656f2e53746f726167652e476574436f6e746578746c766b52c36c766b53c3615272680f4e656f2e53746f726167652e50757461616c75665cc56b6c766b00527ac46c766b51527ac4616c766b51c3c0539f6c766b57527ac46c766b57c3640e00006c766b58527ac4626f026c766b51c300c36c766b53527ac46c766b51c351c36c766b54527ac46c766b51c352c36c766b55527ac46c766b54c361682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c009c6c766b59527ac46c766b59c36476006156c57651175472616e73666572206e6f742073656e7420746f207573c476526c766b53c3c476536c766b00c3c476546c766b54c3c4765561682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e6753637269707448617368c46c766b52527ac4624b016c766b55c300a16c766b5a527ac46c766b5ac36439006155c576510d7175616e74697479203c3d2030c476526c766b53c3c476536c766b00c3c476546c766b55c3c46c766b52527ac462ff006168164e656f2e53746f726167652e476574436f6e746578746102574c6c766b53c37e617c680f4e656f2e53746f726167652e4765746c766b56527ac46c766b56c3c0009c6c766b5b527ac46c766b5bc3643b006155c576510f6e6f742077686974656c6973746564c476526c766b53c3c476536c766b00c3c476546c766b55c3c46c766b52527ac46273006c766b00c36c766b53c36c766b55c3615272e000037d49616c766b00c36c766b55c3617ce0000222fd6154c57600076465706f736974c476516c766b53c3c476526c766b00c3c476536c766b55c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b58527ac4624300616c766b52c30011746f6b656e5472616e6665724572726f72c46c766b52c36168124e656f2e52756e74696d652e4e6f7469667961006c766b58527ac46203006c766b58c3616c756653c56b6c766b00527ac46161e00100f245009c6c766b51527ac46c766b51c3640f0061006c766b52527ac46273006168164e656f2e53746f726167652e476574436f6e74657874056f776e65726c766b00c3615272680f4e656f2e53746f726167652e5075746152c57600087365744f776e6572c476516c766b00c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b52527ac46203006c766b52c3616c756653c56b6c766b00527ac46161e001004b45009c6c766b51527ac46c766b51c3640f0061006c766b52527ac46277006168164e656f2e53746f726167652e476574436f6e74657874076d616e616765726c766b00c3615272680f4e656f2e53746f726167652e5075746152c576000a7365744d616e61676572c476516c766b00c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b52527ac46203006c766b52c3616c75665ec56b6c766b00527ac46161e00100a044009c6c766b56527ac46c766b56c3640f0061006c766b57527ac462cd026c766b00c36101ba7e6c766b51527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b51c3617c680f4e656f2e53746f726167652e4765746c766b52527ac46c766b00c3c001149c6c766b58527ac46c766b58c36472006151c5760061682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e6753637269707448617368c46c766b59527ac46c766b00c36c766b5a527ac46c766b5ac30962616c616e63654f666c766b59c3617c527ae201026c766b53527ac46162aa006c766b00c3c001209c6c766b5b527ac46c766b5bc36486006161682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686168194e656f2e426c6f636b636861696e2e4765744163636f756e746c766b5c527ac46c766b5cc36c766b00c3617c68164e656f2e4163636f756e742e47657442616c616e63656c766b53527ac461620f0061006c766b57527ac46257016c766b53c36c766b52c3946c766b54527ac46c766b54c300a16c766b5d527ac46c766b5dc36454006153c576000b7265636c61696d4661696cc47651124e6f7468696e6720746f207265636c61696dc476526c766b54c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b57527ac462de006c766b52c36c766b54c3936c766b52527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b51c36c766b52c3615272680f4e656f2e53746f726167652e507574616c766b00c361e00100b440617ce0010279396c766b55527ac46c766b55c36c766b54c3936c766b55527ac46c766b00c361e0010089406c766b55c3615272e00003d84a6153c57600167265636c61696d65644f727068616e656446756e6473c476516c766b00c3c476526c766b54c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b57527ac46203006c766b57c3616c756654c56b6c766b00527ac46c766b51527ac46161e0010098416421006c766b00c3c001149c6311006c766b00c3c001209c009c62040000620400516c766b52527ac46c766b52c3640e00006c766b53527ac46281006168164e656f2e53746f726167652e476574436f6e7465787461045e7712956c766b00c37e6c766b51c3615272680f4e656f2e53746f726167652e5075746152c5760010736574417373657453657474696e6773c476516c766b51c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b53527ac46203006c766b53c3616c756656c56b6c766b00527ac46161e00100c440009c6c766b52527ac46c766b52c36445006152c57600096170684e6f74696679c476510d4e6f207065726d697373696f6ec46168124e656f2e52756e74696d652e4e6f7469667961006c766b53527ac46296006c766b00c3c05193c56c766b51527ac46c766b51c300096170684e6f74696679c4006c766b54527ac46229006c766b51c36c766b54c351936c766b00c36c766b54c3c3c46c766b54c351936c766b54527ac46c766b54c36c766b00c3c09f6c766b55527ac46c766b55c363c2ff6c766b51c36168124e656f2e52756e74696d652e4e6f7469667961516c766b53527ac46203006c766b53c3616c756653c56b616168164e656f2e53746f726167652e476574436f6e746578741b6665655265646973747269627574696f6e50657263656e74616765617c680f4e656f2e53746f726167652e4765746c766b00527ac46c766b00c3009c6c766b51527ac46c766b51c3641100616101506c766b52527ac46212006c766b00c36c766b52527ac46203006c766b52c3616c756653c56b616168164e656f2e53746f726167652e476574436f6e7465787412636c61696d4d696e696d756d426c6f636b73617c680f4e656f2e53746f726167652e4765746c766b00527ac46c766b00c3009c6c766b51527ac46c766b51c3641200616102c0126c766b52527ac46212006c766b00c36c766b52527ac46203006c766b52c3616c756653c56b6c766b00527ac46161e00100ae3e009c6c766b51527ac46c766b51c3640f0061006c766b52527ac4625d006168164e656f2e53746f726167652e476574436f6e746578741b6665655265646973747269627574696f6e50657263656e746167656c766b00c3615272680f4e656f2e53746f726167652e50757461516c766b52527ac46203006c766b52c3616c756653c56b6c766b00527ac46161e00100553e630e0061e00100143e009c620400006c766b51527ac46c766b51c3640f0061006c766b52527ac46254006168164e656f2e53746f726167652e476574436f6e7465787412636c61696d4d696e696d756d426c6f636b736c766b00c3615272680f4e656f2e53746f726167652e50757461516c766b52527ac46203006c766b52c3616c756656c56b6c766b00527ac4616c766b00c361e00100b1fd950164966c766b51527ac46c766b00c36c766b51c3946c766b52527ac46168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fc617c680f4e656f2e53746f726167652e4765746c766b53527ac46c766b53c300587f6c766b54527ac46c766b53c358587f6c766b55527ac46c766b54c36c766b51c3936c766b54527ac46c766b55c36c766b52c3936c766b55527ac46c766b54c361e00101773d6c766b55c361e001016c3d7e6c766b53527ac46168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fc6c766b53c3615272680f4e656f2e53746f726167652e50757461616c756655c56b6c766b00527ac46c766b51527ac4616c766b51c351c36c766b00c39f6c766b52527ac46c766b52c364aa00616c766b00c36c766b51c351c3946c766b53527ac46c766b51c300c36c766b53c3956c766b54527ac46c766b51c36c766b51c352c36c766b54c393527cc456c5760013757064617465546f74616c466565556e697473c476516c766b51c352c3c476526c766b54c3c476536c766b53c3c476546c766b51c300c3c476556c766b00c3c46168124e656f2e52756e74696d652e4e6f74696679616c766b51c36c766b00c3517cc461616c75665dc56b6c766b00527ac46c766b51527ac4616c766b00c3c0519c009c6c766b58527ac46c766b58c3640f0061006c766b59527ac462410361e00100583b6c766b5a527ac46c766b5ac3642e006153c57651124f776e65722063616e277420636f6d6d6974c476526c766b51c3c46c766b52527ac462c7026c766b00c300c36c766b53527ac46c766b51c361e00101ee0d6c766b54527ac46c766b54c351c300a06c766b5b527ac46c766b5bc36445006154c576511f416c726561647920636f6d6d69747465642e20436c61696d2066697273742ec476526c766b51c3c476536c766b54c351c3c46c766b52527ac4624d026168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fc617c680f4e656f2e53746f726167652e47657400587f61e00101cb3b6c766b55527ac461e00100410e6c766b56527ac46c766b55c36c766b56c3617ce00002c8fd616c766b53c300a16330006114952d12a025325e56a4cb3ba2d469b1e23c7c77a06c766b51c36c766b53c3615272e001034b40009c620400516c766b5c527ac46c766b5cc3645e006155c5765115496e73756666696369656e742062616c616e63652ec476526c766b51c3c476536c766b53c3c476546c766b51c36114952d12a025325e56a4cb3ba2d469b1e23c7c77a0617ce00102473bc46c766b52527ac46239016c766b56c37600c36c766b53c393007cc46c766b56c361e001014c0e6c766b57527ac46168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fa6c766b57c3615272680f4e656f2e53746f726167652e507574616c766b54c36c766b53c3517cc46c766b54c36168184e656f2e426c6f636b636861696e2e476574486569676874527cc46c766b54c36c766b54c352c3537cc46c766b54c36c766b55c3547cc46c766b54c36c766b56c352c3557cc46c766b54c361e00001190b6156c576000b636f6e7472696275746564c476516c766b51c3c476526c766b54c351c3c476536c766b54c352c3c476546c766b54c354c3c476556c766b54c355c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b59527ac4623d00616c766b52c3000b636f6d6d69744572726f72c46c766b52c36168124e656f2e52756e74696d652e4e6f7469667961006c766b59527ac46203006c766b59c3616c756653c56b6c766b00527ac4616c766b00c361e00101ea0a6c766b51527ac46c766b51c351c36c766b52527ac46203006c766b52c3616c75665bc56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b51c36c766b00c354c3946c766b53527ac46c766b53c300a16c766b58527ac46c766b58c36443006151c5760027476574417661696c61626c65546f436c61696d2829204e6f206665657320636f6c6c6563746564c46c766b55527ac4006c766b54527ac462ec006c766b00c351c36c766b53c3956c766b56527ac46c766b52c352c36c766b00c355c3946c766b57527ac46c766b57c300a16c766b59527ac46c766b59c36449006151c576002d476574417661696c61626c65546f436c61696d2829204e6f2046656520556e69747320617661696c61626c652ec46c766b55527ac4006c766b54527ac46266006c766b53c36c766b56c3956c766b57c3966c766b54527ac456c576001463616c63417661696c61626c65546f436c61696dc476516c766b00c300c3c476526c766b53c3c476536c766b56c3c476546c766b57c3c476556c766b54c3c46c766b55527ac4616c766b55c36168124e656f2e52756e74696d652e4e6f74696679616c766b54c36c766b5a527ac46203006c766b5ac3616c756656c56b6c766b00527ac4616c766b00c361e0010113096c766b51527ac46c766b51c351c3009c6c766b54527ac46c766b54c3640e00006c766b55527ac4627b006168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fc617c680f4e656f2e53746f726167652e4765746c766b52527ac461e00100a6096c766b53527ac46c766b51c36c766b52c36c766b53c3615272e00103b5fd6c766b55527ac46203006c766b55c3616c75665fc56b6c766b00527ac4616c766b00c361e001006b349c6c766b58527ac46c766b58c36448006161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b59527ac46c766b59c361e00101302d6a00527ac4616c766b00c361e00101f2076c766b51527ac46c766b51c351c3009c6c766b5a527ac46c766b5ac36455006153c5760009636c61696d4661696cc47651154e6f207175616e7469747920636f6d6d6974746564c476526c766b00c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b5b527ac46268036168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fc617c680f4e656f2e53746f726167652e4765746c766b52527ac46c766b52c300587f61e00101b3356c766b53527ac461e0010029086c766b54527ac46c766b53c36c766b54c3617ce00002b0f7616c766b51c36c766b53c36c766b54c3615272e0010326fc6c766b55527ac46c766b51c361e000017707616c766b54c37600c36c766b51c351c394007cc46168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fa6c766b54c361e001017a08615272680f4e656f2e53746f726167652e507574616c766b51c351c36c766b56527ac46c766b51c352c361e001002ff4936168184e656f2e426c6f636b636861696e2e476574486569676874a16c766b5c527ac46c766b5cc3641a00616c766b56c36c766b55c3936c766b56527ac4616206016154c5760014636c61696d4665657357656e74546f4f776e6572c47651344c657373206d696e20626c6f636b732073696e636520636f6d6d69742c2066656573206177617264656420746f206f776e65722ec476526c766b00c3c476536c766b55c3c46168124e656f2e52756e74696d652e4e6f74696679616c766b52c358587f6c766b5d527ac46c766b5dc36c766b55c3936c766b5d527ac46c766b53c361e0010132336c766b5dc361e0010127337e6c766b52527ac46168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fc6c766b52c3615272680f4e656f2e53746f726167652e50757461616c766b00c36114952d12a025325e56a4cb3ba2d469b1e23c7c77a06c766b56c3615272e00103753d6c766b57527ac46c766b57c3009c6c766b5e527ac46c766b5ec36479006155c5760009636c61696d4661696cc476511873656e644e657035205472616e73666572206661696c6564c476526c766b00c3c476536114952d12a025325e56a4cb3ba2d469b1e23c7c77a0c476546c766b56c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b5b527ac462410053c5760007636c61696d6564c476516c766b00c3c476526c766b56c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b5b527ac46203006c766b5bc3616c75665bc56b6c766b00527ac4616c766b00c361e0010093309c6312006c766b00c361e0010007309c620400516c766b56527ac46c766b56c36448006161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b57527ac46c766b57c361e00101c8286a00527ac4616c766b00c361e001018a036c766b51527ac46c766b51c351c3009c6c766b58527ac46c766b58c36458006153c576000c636f6d706f756e644661696cc47651154e6f207175616e7469747920636f6d6d6974746564c476526c766b00c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b59527ac462800261e00100e4f06c766b52527ac46c766b51c353c36c766b52c3936168184e656f2e426c6f636b636861696e2e476574486569676874a06c766b5a527ac46c766b5ac3648f006156c576000c636f6d706f756e644661696cc476511c4e6f742079657420656c696769626c6520746f20636f6d706f756e64c476526c766b00c3c476536c766b51c353c3c476546c766b52c3c476556168184e656f2e426c6f636b636861696e2e476574486569676874c46168124e656f2e52756e74696d652e4e6f7469667961006c766b59527ac462af016168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fc617c680f4e656f2e53746f726167652e47657400587f61e0010183306c766b53527ac461e00100f9026c766b54527ac46c766b53c36c766b54c3617ce0000280f2616c766b51c36c766b53c36c766b54c3615272e00103f6f66c766b55527ac46c766b51c36168184e656f2e426c6f636b636861696e2e476574486569676874537cc46c766b51c37651c36c766b55c393517cc46c766b54c37600c36c766b55c393007cc46c766b51c36c766b53c3547cc46c766b51c36c766b54c352c3557cc46168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fa6c766b54c361e001010803615272680f4e656f2e53746f726167652e507574616c766b51c361e000016c006156c5760008636f6d706f756e64c476516c766b00c3c476526c766b51c351c3c476536c766b51c353c3c476546c766b51c354c3c476556c766b51c355c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b59527ac46203006c766b59c3616c756652c56b6c766b00527ac4616c766b00c361e001010e036c766b51527ac46c766b00c300c36114952d12a025325e56a4cb3ba2d469b1e23c7c77a06101d07e6c766b51c3615272e00003702f6153c576000f707574436f6e747269627574696f6ec476516c766b00c300c3c476526c766b51c3c46168124e656f2e52756e74696d652e4e6f7469667961616c756655c56b6c766b00527ac4616c766b00c36114952d12a025325e56a4cb3ba2d469b1e23c7c77a06101d07e617ce00102952e6c766b51527ac46c766b51c3c000a06c766b53527ac46c766b53c3641900616c766b51c361e00101ef026c766b54527ac46232006156c56c766b52527ac46c766b52c36c766b00c3007cc46c766b52c300517cc46c766b52c36c766b54527ac46203006c766b54c3616c756651c56b6c766b00527ac4616c766b00c300c36114952d12a025325e56a4cb3ba2d469b1e23c7c77a06101d07e617ce00002c52e6152c576001264656c657465436f6e747269627574696f6ec476516c766b00c300c3c46168124e656f2e52756e74696d652e4e6f7469667961616c756654c56b616168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fa617c680f4e656f2e53746f726167652e4765746c766b00527ac46c766b00c3c000a06c766b52527ac46c766b52c36418006c766b00c361e00101bc006c766b53527ac46262006153c56c766b51527ac46c766b51c361080000000000000000007cc46c766b51c3611000000000000000000000000000000000517cc46c766b51c3611000000000000000000000000000000000527cc46c766b51c36c766b53527ac46203006c766b53c3616c756652c56b6c766b00527ac4616c766b00c300c361e00101bb2b6c766b00c351c361e00101f12b7e6c766b00c352c361e00101e32b7e6c766b51527ac46203006c766b51c3616c756653c56b6c766b00527ac4616153c56c766b51527ac46c766b51c36c766b00c300587f007cc46c766b51c36c766b00c358607f517cc46c766b51c36c766b00c30118607f527cc46c766b51c36c766b52527ac46203006c766b52c3616c756658c56b6c766b00527ac4616c766b00c351c361e00101162b6c766b51527ac46c766b00c352c361e00101022b6c766b52527ac46c766b00c353c361e00101ee2a6c766b53527ac46c766b00c354c361e00101da2a6c766b54527ac46c766b00c355c361e00101092b6c766b55527ac46c766b00c300c36c766b51c37e6c766b52c37e6c766b53c37e6c766b54c37e6c766b55c37e6c766b56527ac46c766b56c36c766b57527ac46203006c766b57c3616c756653c56b6c766b00527ac4616156c56c766b51527ac46c766b51c36c766b00c30001147f007cc46c766b51c36c766b00c30114587f517cc46c766b51c36c766b00c3011c587f527cc46c766b51c36c766b00c30124587f537cc46c766b51c36c766b00c3012c587f547cc46c766b51c36c766b00c30134607f557cc46c766b51c36c766b52527ac46203006c766b52c3616c7566013cc56b6161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b00527ac46c766b00c361681d4e656f2e5472616e73616374696f6e2e476574417474726962757465736c766b51527ac461006c766b52527ac4616c766b51c36c766b0113527ac4006c766b0114527ac4628d006c766b0113c36c766b0114c3c36c766b0115527ac4616c766b0115c36168164e656f2e4174747269627574652e47657455736167656102a1009c009c6c766b0116527ac46c766b0116c3640600622d006c766b0115c36168154e656f2e4174747269627574652e4765744461746151806c766b52527ac46224006c766b0114c351936c766b0114527ac46c766b0114c36c766b0113c3c09f6368ff6c766b52c36101949c6c766b0117527ac46c766b0117c36419006c766b00c361e00101dc346c766b0118527ac462b10b6c766b00c36168194e656f2e5472616e73616374696f6e2e476574496e707574736c766b53527ac46c766b00c361681d4e656f2e5472616e73616374696f6e2e4765745265666572656e6365736c766b54527ac46c766b00c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736c766b55527ac461682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686c766b56527ac46c766b00c36c766b57527ac46c766b57c36168234e656f2e496e766f636174696f6e5472616e73616374696f6e2e476574536372697074610800c105636c61696d6101677e6c766b56c37e9c6c766b0119527ac46c766b0119c3646a00616c766b00c361e00101e71e6c766b011a527ac46c766b011ac36c766b53c36c766b54c36c766b55c361000000006157795179597275517275567952795872755272755579537957727553727554795479567275547275e001084e0a6c766b0118527ac462390a167665726966795769746864726177496e69744661696c6c766b58527ac46c766b00c36168174e656f2e5472616e73616374696f6e2e476574547970656102d1009c009c6c766b011b527ac46c766b011bc3640f00006c766b0118527ac462d8096c766b57c36168234e656f2e496e766f636174696f6e5472616e73616374696f6e2e476574536372697074610b00c10877697468647261776101677e6c766b56c37e9c009c6c766b011c527ac46c766b011cc36480006154c576006c766b58c3c476510e496e76616c696420506172616d73c476526c766b57c36168234e656f2e496e766f636174696f6e5472616e73616374696f6e2e476574536372697074c47653610b00c1087769746864726177c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0118527ac46205096c766b52c36101939c6c766b011d527ac46c766b011dc364b2006161e001002125630e0061e001005025009c620400006c766b011e527ac46c766b011ec3640f00006c766b0118527ac462b80861e00100f1236c766b53c36c766b54c36c766b55c361000008ffffffffffffff7f006157795179597275517275567952795872755272755579537957727553727554795479567275547275e001087208009c6c766b011f527ac46c766b011fc364100061006c766b0118527ac4624808516c766b0118527ac4623c086c766b00c361e00101841c6c766b5a527ac46c766b5ac36168184e656f2e52756e74696d652e436865636b5769746e65737363170061e001003e24630e0061e001006d24009c620400006c766b0120527ac46c766b0120c36429006153c576510d6e6f207065726d697373696f6ec476526c766b5ac3c46c766b59527ac46279076c766b00c361e00101f51c6c766b5b527ac46c766b5bc3c001149c6c766b5c527ac46c766b00c36c766b5bc3617ce001021c1e6c766b5d527ac46c766b52c36101919c6c766b5cc3856c766b0121527ac46c766b0121c3640e00006c766b5e527ac4620f006c766b5dc36c766b5e527ac46c766b5cc3630b006c766b5dc3620400006c766b5f527ac46c766b52c36101929c6c766b60527ac46c766b5ac36c766b53c36c766b54c36c766b55c36c766b5bc36c766b5ec36c766b5fc36c766b60c36157795179597275517275567952795872755272755579537957727553727554795479567275547275e00108d606009c6c766b0122527ac46c766b0122c364100061006c766b0118527ac462ac066168184e656f2e426c6f636b636861696e2e4765744865696768746c766b0111527ac46c766b00c361e00101661e6c766b0112527ac46c766b0111c36c766b0112c3a06c766b0123527ac46c766b0123c36451006155c576512356616c696420556e74696c20486569676874203c2043757272656e7420486569676874c476526c766b5ac3c476536c766b0112c3c476546c766b0111c3c46c766b59527ac462c8056c766b52c36101919c6c766b0124527ac46c766b0124c3643a02616c766b5cc36c766b0127527ac46c766b0127c36455006154c57651174d61726b206e6f742076616c696420666f72204e455035c476526c766b5ac3c476536c766b55c300c36168154e656f2e4f75747075742e47657441737365744964c46c766b59527ac46245056c766b5bc36c766b5ac3617ce00102f4186c766b0125527ac46c766b0125c36c766b5dc39f6c766b0128527ac46c766b0128c36441006155c5765114496e73756666696369656e742062616c616e6365c476526c766b5ac3c476536c766b0125c3c476546c766b5dc3c46c766b59527ac462d104006c766b0126527ac4616c766b55c36c766b0129527ac4006c766b012a527ac462d1006c766b0129c36c766b012ac3c36c766b012b527ac4616c766b012bc36168184e656f2e4f75747075742e4765745363726970744861736861682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c009c6c766b012c527ac46c766b012cc36406006243006c766b012bc36168134e656f2e4f75747075742e47657456616c75656c766b5dc39e6c766b012d527ac46c766b012dc3640600620d00516c766b0126527ac4616c766b012ac351936c766b012a527ac46c766b012ac36c766b0129c3c09f6324ff6c766b0126c3009c6c766b012e527ac46c766b012ec36436006154c57651124e6f206d61746368696e67206f7574707574c476526c766b5ac3c476536c766b5dc3c46c766b59527ac4628303516c766b0118527ac462b9036c766b60c36c766b012f527ac46c766b012fc3641903616c766b5cc3009c6c766b0130527ac46c766b0130c364250161006c766b0131527ac4006c766b0132527ac462a100616c766b54c36c766b0132c3c36c766b0133527ac46c766b0133c36168184e656f2e4f75747075742e4765745363726970744861736861682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c009c6c766b0134527ac46c766b0134c36406006214006c766b0131c351936c766b0131527ac4616c766b0132c351936c766b0132527ac46c766b0132c36c766b54c3c09f6c766b0135527ac46c766b0135c36347ff6c766b0131c3519c009c6c766b0136527ac46c766b0136c3642c006153c57651103120696e707574207265717569726564c476526c766b5ac3c46c766b59527ac4623202516c766b0118527ac4626802616c766b55c36c766b0137527ac4006c766b0138527ac462a7016c766b0137c36c766b0138c3c36c766b0139527ac4616c766b0139c36168154e656f2e4f75747075742e476574417373657449646120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c609c009c6c766b013a527ac46c766b013ac36464006154c57651274e45503520776974686472617773206f6e6c792063616e2075736520474153206f757470757473c476526c766b5ac3c476536c766b0139c36168154e656f2e4f75747075742e47657441737365744964c46c766b59527ac46241016c766b0139c36168184e656f2e4f75747075742e4765745363726970744861736861682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c009c6c766b013b527ac46c766b013bc364060062640054c57651284e4550352063616e27742068617665206f75747075747320746f2074686520636f6e74726163742ec476526c766b5ac3c476536c766b0139c36168154e656f2e4f75747075742e47657441737365744964c46c766b59527ac46278006c766b0138c351936c766b0138527ac46c766b0138c36c766b0137c3c09f634efe516c766b0118527ac4628d0055c576001f57697468647261772056616c69646174652c20496e76616c69642053746570c476516c766b5ac3c476526c766b52c3c47653610191c47654610192c46c766b59527ac4616c766b59c3001276657269667957697468647261774661696cc46c766b59c36168124e656f2e52756e74696d652e4e6f7469667961006c766b0118527ac46203006c766b0118c3616c75660124c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac46c766b56527ac46c766b57527ac461006c766b58527ac4006c766b59527ac46c766b54c36120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c609c630700006208006c766b55c36c766b5a527ac46c766b54c361209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c630700006208006c766b55c36c766b5b527ac41276657269667957697468647261774661696c6c766b5c527ac4006c766b5f527ac4623903616c766b52c36c766b5fc3c36c766b60527ac46c766b60c36168184e656f2e4f75747075742e4765745363726970744861736861682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c009c6c766b0114527ac46c766b0114c364060062b1026c766b58c36c766b59c3936c766b56c3a26c766b0115527ac46c766b0115c36454006153c576006c766b5cc3c4765118457863656564656420616c6c6f77656420696e707574732ec476526c766b00c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0116527ac46256056c766b60c36168154e656f2e4f75747075742e476574417373657449646120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c609c6c766b0117527ac46c766b0117c3642e006c766b58c36c766b60c36168134e656f2e4f75747075742e47657456616c7565936c766b58527ac4627c006c766b60c36168154e656f2e4f75747075742e4765744173736574496461209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c6c766b0118527ac46c766b0118c3642b006c766b59c36c766b60c36168134e656f2e4f75747075742e47657456616c7565936c766b59527ac46c766b51c36c766b5fc3c36c766b0111527ac46c766b0111c36168114e656f2e496e7075742e476574486173686c766b0111c36168124e656f2e496e7075742e476574496e64657861e00101541a7e6c766b0112527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b0112c3617c680f4e656f2e53746f726167652e4765746c766b0113527ac46c766b57c3630f006c766b0113c3c0009c620400006c766b0119527ac46c766b0119c3640600628f006c766b57c36412006c766b0113c36c766b00c39c620400006c766b011a527ac46c766b011ac364060062630055c576006c766b5cc3c4765116496e70757420616c7265616479207265736572766564c476526c766b00c3c476536c766b0112c3c476546c766b0113c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0116527ac4621b036c766b5fc351936c766b5f527ac46c766b5fc36c766b52c3c09f6c766b011b527ac46c766b011bc363b0fc006c766b5d527ac4006c766b5e527ac4616c766b53c36c766b011c527ac4006c766b011d527ac4628b016c766b011cc36c766b011dc3c36c766b011e527ac4616c766b011ec36168184e656f2e4f75747075742e4765745363726970744861736861682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c009c6c766b011f527ac46c766b011fc364060062fd006c766b011ec36168154e656f2e4f75747075742e476574417373657449646120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c609c6c766b0120527ac46c766b0120c3642f006c766b5dc36c766b011ec36168134e656f2e4f75747075742e47657456616c7565936c766b5d527ac4627e006c766b011ec36168154e656f2e4f75747075742e4765744173736574496461209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c6c766b0121527ac46c766b0121c3642c006c766b5ec36c766b011ec36168134e656f2e4f75747075742e47657456616c7565936c766b5e527ac4616c766b011dc351936c766b011d527ac46c766b011dc36c766b011cc3c09f636afe6c766b58c36c766b5dc36c766b5ac3939e6c766b0122527ac46c766b0122c36470006156c576006c766b5cc3c476511c47415320696e70757420213d206578706563746564206f7574707574c476526c766b00c3c476536c766b58c3c476546c766b5dc3c476556c766b5ac3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0116527ac4629e006c766b59c36c766b5ec36c766b5bc3939e6c766b0123527ac46c766b0123c36470006156c576006c766b5cc3c476511c4e454f20696e70757420213d206578706563746564206f7574707574c476526c766b00c3c476536c766b59c3c476546c766b5ec3c476556c766b5bc3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0116527ac4620f00516c766b0116527ac46203006c766b0116c3616c75660132c56b6161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b00527ac46c766b00c361681d4e656f2e5472616e73616374696f6e2e476574417474726962757465736c766b51527ac461006c766b52527ac461006c766b53527ac461006c766b54527ac4006c766b55527ac4616c766b51c36c766b57527ac4006c766b58527ac462f6016c766b57c36c766b58c3c36c766b59527ac4616c766b59c36168164e656f2e4174747269627574652e47657455736167656102a1009c6c766b5a527ac46c766b5ac3642e00616c766b59c36168154e656f2e4174747269627574652e4765744461746151806c766b52527ac4616277016c766b59c36168164e656f2e4174747269627574652e47657455736167656102a2009c6c766b5b527ac46c766b5bc3642f00616c766b59c36168154e656f2e4174747269627574652e476574446174610114806c766b53527ac4616219016c766b59c36168164e656f2e4174747269627574652e47657455736167656102a3009c6c766b5c527ac46c766b5cc3642f00616c766b59c36168154e656f2e4174747269627574652e476574446174610120806c766b54527ac46162bb006c766b59c36168164e656f2e4174747269627574652e47657455736167656102a4009c6c766b5d527ac46c766b5dc3642f00616c766b59c36168154e656f2e4174747269627574652e476574446174610114806c766b54527ac461625d006c766b59c36168164e656f2e4174747269627574652e47657455736167656102a5009c6c766b5e527ac46c766b5ec3642b00616c766b59c36168154e656f2e4174747269627574652e4765744461746158806c766b55527ac461616c766b58c351936c766b58527ac46c766b58c36c766b57c3c09f6301fe6c766b52c36101929c6c766b5f527ac46c766b5fc3647a04616c766b54c3c001149c6c766b60527ac46c766b60c364ce02616c766b53c36c766b54c37e6c766b0111527ac4006c766b0113527ac46c766b54c36114952d12a025325e56a4cb3ba2d469b1e23c7c77a0907c907c9e6312006c766b53c361e001005c109c620400006c766b0115527ac46c766b0115c3646d0061516c766b0113527ac46168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fc617c680f4e656f2e53746f726167652e4765746c766b0116527ac46c766b0116c358587f6c766b0112527ac461623d006168164e656f2e53746f726167652e476574436f6e746578746c766b0111c3617c680f4e656f2e53746f726167652e4765746c766b0112527ac46c766b0112c36c766b55c39f6c766b0117527ac46c766b0117c3644e006155c57651215769746864726177204e45503520696e737566666963656e742062616c616e6365c476526c766b53c3c476536c766b0112c3c476546c766b55c3c46c766b56527ac462c0076c766b53c36c766b54c36c766b55c3615272e001031f1c6c766b0114527ac46c766b0114c3009c6c766b0118527ac46c766b0118c36450006155c5765124657865637574655769746864726177204e455035205472616e73666572206661696c6564c476526c766b53c3c476536c766b54c3c476546c766b55c3c46c766b56527ac4623b076c766b0112c36c766b55c3946c766b0112527ac46c766b0113c36c766b0119527ac46c766b0119c3641f006c766b54c36c766b53c36c766b0112c3615272e00003ce1861629100616c766b0112c300a16c766b011a527ac46c766b011ac3643c006168164e656f2e53746f726167652e476574436f6e746578746c766b0111c3617c68124e656f2e53746f726167652e44656c65746561623d006168164e656f2e53746f726167652e476574436f6e746578746c766b0111c36c766b0112c3615272680f4e656f2e53746f726167652e507574616161624e01616c766b00c36168194e656f2e5472616e73616374696f6e2e476574496e707574736c766b011b527ac46c766b54c3c001209c009c6c766b011c527ac46c766b011cc36432006153c57651164d61726b2061737365744964206c656e20213d203332c476526c766b53c3c46c766b56527ac462ed056c766b53c36c766b54c36101b07e617ce00002581161616c766b011bc36c766b011d527ac4006c766b011e527ac46296006c766b011dc36c766b011ec3c36c766b011f527ac4616168164e656f2e53746f726167652e476574436f6e746578746c766b011fc36168114e656f2e496e7075742e476574486173686c766b011fc36168124e656f2e496e7075742e476574496e64657861e001018d0f7e617c68124e656f2e53746f726167652e44656c65746561616c766b011ec351936c766b011e527ac46c766b011ec36c766b011dc3c09f635fff6154c57600087769746864726177c476516c766b53c3c476526c766b54c3c476536c766b55c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b0120527ac4620b056c766b52c36101919c6c766b0121527ac46c766b0121c3646e04616c766b00c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736c766b0122527ac46c766b54c3c001149c6c766b0128527ac46c766b0128c3642b006153c576510f43616e2774206d61726b204e455035c476526c766b53c3c46c766b56527ac46248046c766b54c3c001209c009c6c766b0129527ac46c766b0129c36432006153c57651164d61726b2061737365744964206c656e20213d203332c476526c766b53c3c46c766b56527ac462fd036c766b53c36c766b54c37e6101b07e6c766b0123527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b0123c3617c680f4e656f2e53746f726167652e4765746c766b0124527ac46c766b0124c3c000a06c766b012a527ac46c766b012ac36438006154c5765113416c7265616479207769746864726177696e67c476526c766b53c3c476536c766b0124c3c46c766b56527ac4625d036c766b54c36c766b53c3617ce0010292036c766b0125527ac46c766b0125c36c766b55c39f6c766b012b527ac46c766b012bc36441006155c5765114496e73756666696369656e742062616c616e6365c476526c766b53c3c476536c766b0125c3c476546c766b55c3c46c766b56527ac462e9026168164e656f2e53746f726167652e476574436f6e7465787461045e7712956c766b54c37e617c680f4e656f2e53746f726167652e4765746c766b0126527ac46c766b0126c3c058a06c766b012c527ac46c766b012cc364f100616c766b0126c351587f6c766b012d527ac46c766b012dc3610500e40b5402a06c766b012e527ac46c766b012ec3641200610500e40b54026c766b012d527ac46c766b012dc300a06c766b012f527ac46c766b012fc3649700616c766b53c361e00100a4099c6331006114952d12a025325e56a4cb3ba2d469b1e23c7c77a06c766b53c36c766b012dc3615272e001037f0e009c620400006c766b0130527ac46c766b0130c36446006154c5765121496e73756666696369656e742041504820666f7220776974686472617720466565c476526c766b53c3c476536c766b012dc3c46c766b56527ac462a30161616c766b0125c36c766b55c3946c766b0125527ac46c766b54c36c766b53c36c766b0125c3615272e000034b13616c766b00c36c766b0122c36c766b55c36c766b53c3615379517955727551727552795279547275527275e00104e5066c766b0127527ac46c766b0127c3009c6c766b0131527ac46c766b0131c36444006153c57651284d61726b20537465702c206661696c656420746f2072657365727665206f7574707574205554584fc476526c766b53c3c46c766b56527ac462e3006c766b54c3006c766b55c394617ce0000264c0616168164e656f2e53746f726167652e476574436f6e746578746c766b0123c36c766b55c3615272680f4e656f2e53746f726167652e5075746154c576000c77697468647261774d61726bc476516c766b53c3c476526c766b54c3c476536c766b55c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b0120527ac462860052c576001777697468647261774661696c496e76616c696453746570c476516c766b52c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b0120527ac4623f00616c766b56c3000c77697468647261774661696cc46c766b56c36168124e656f2e52756e74696d652e4e6f7469667961006c766b0120527ac46203006c766b0120c3616c756655c56b6c766b00527ac46c766b51527ac4616c766b00c36114952d12a025325e56a4cb3ba2d469b1e23c7c77a0907c907c9e6312006c766b51c361e00100f7069c620400006c766b52527ac46c766b52c3646000616168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fc617c680f4e656f2e53746f726167652e4765746c766b53527ac46c766b53c358587f6c766b54527ac4621e006c766b51c36c766b00c3617ce00102ac096c766b54527ac46203006c766b54c3616c756657c56b6c766b00527ac4616c766b00c361681d4e656f2e5472616e73616374696f6e2e476574417474726962757465736c766b51527ac4616c766b51c36c766b52527ac4006c766b53527ac46282006c766b52c36c766b53c3c36c766b54527ac4616c766b54c36168164e656f2e4174747269627574652e47657455736167656102a2009c6c766b55527ac46c766b55c3642e00616c766b54c36168154e656f2e4174747269627574652e476574446174610114806c766b56527ac4622d00616c766b53c351936c766b53527ac46c766b53c36c766b52c3c09f6375ff61006c766b56527ac46203006c766b56c3616c756658c56b6c766b00527ac4616c766b00c361681d4e656f2e5472616e73616374696f6e2e476574417474726962757465736c766b51527ac4616c766b51c36c766b52527ac4006c766b53527ac462df006c766b52c36c766b53c3c36c766b54527ac4616c766b54c36168164e656f2e4174747269627574652e47657455736167656102a3009c6c766b55527ac46c766b55c3642e00616c766b54c36168154e656f2e4174747269627574652e476574446174610120806c766b56527ac4628a006c766b54c36168164e656f2e4174747269627574652e47657455736167656102a4009c6c766b57527ac46c766b57c3642e00616c766b54c36168154e656f2e4174747269627574652e476574446174610114806c766b56527ac4622d00616c766b53c351936c766b53527ac46c766b53c36c766b52c3c09f6318ff61006c766b56527ac46203006c766b56c3616c75665ac56b6c766b00527ac46c766b51527ac461006c766b52527ac46c766b00c361681d4e656f2e5472616e73616374696f6e2e476574417474726962757465736c766b53527ac4616c766b53c36c766b54527ac4006c766b55527ac46281006c766b54c36c766b55c3c36c766b56527ac4616c766b56c36168164e656f2e4174747269627574652e47657455736167656102a5009c6c766b57527ac46c766b57c3642d00616c766b56c36168154e656f2e4174747269627574652e4765744461746158806c766b52527ac4622100616c766b55c351936c766b55527ac46c766b55c36c766b54c3c09f6376ff6c766b51c361209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c6c766b58527ac46c766b58c3641d00616c766b52c30400e1f505960400e1f505956c766b52527ac4616c766b52c36c766b59527ac46203006c766b59c3616c756657c56b6c766b00527ac4616c766b00c361681d4e656f2e5472616e73616374696f6e2e476574417474726962757465736c766b51527ac4616c766b51c36c766b52527ac4006c766b53527ac46281006c766b52c36c766b53c3c36c766b54527ac4616c766b54c36168164e656f2e4174747269627574652e47657455736167656102a6009c6c766b55527ac46c766b55c3642d00616c766b54c36168154e656f2e4174747269627574652e4765744461746158806c766b56527ac4622c00616c766b53c351936c766b53527ac46c766b53c36c766b52c3c09f6376ff006c766b56527ac46203006c766b56c3616c75665ac56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac461006c766b54527ac4628301616c766b51c36c766b54c3c36c766b55527ac46c766b55c36168184e656f2e4f75747075742e4765745363726970744861736861682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c009c6c766b56527ac46c766b56c364060062fd006c766b55c36168134e656f2e4f75747075742e47657456616c75656c766b52c39e6c766b57527ac46c766b57c364060062ca006168164e656f2e53746f726167652e476574436f6e746578746c766b00c36168174e656f2e5472616e73616374696f6e2e476574486173686c766b54c361e0010185037e6c766b53c3615272680f4e656f2e53746f726167652e5075746153c576000c7574786f5265736572766564c476516c766b00c36168174e656f2e5472616e73616374696f6e2e476574486173686c766b54c361e001012c037ec476526c766b53c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b58527ac46237006c766b54c351936c766b54527ac46c766b54c36c766b51c3c09f6c766b59527ac46c766b59c36368fe006c766b58527ac46203006c766b58c3616c756653c56b616168164e656f2e53746f726167652e476574436f6e74657874056f776e6572617c680f4e656f2e53746f726167652e4765746c766b00527ac46c766b00c3c0009c6c766b51527ac46c766b51c364240061611464d3cf9933bfb4c7f2fea9bf7aa5bc5503e7e02a6c766b52527ac46212006c766b00c36c766b52527ac46203006c766b52c3616c756653c56b616168164e656f2e53746f726167652e476574436f6e74657874076d616e61676572617c680f4e656f2e53746f726167652e4765746c766b00527ac46c766b00c3c0009c6c766b51527ac46c766b51c36412006161e0010019ff6c766b00527ac4616c766b00c36c766b52527ac46203006c766b52c3616c756653c56b616168164e656f2e53746f726167652e476574436f6e746578740b77686974656c6973746572617c680f4e656f2e53746f726167652e4765746c766b00527ac46c766b00c3c0009c6c766b51527ac46c766b51c36412006161e0010025ff6c766b00527ac4616c766b00c36c766b52527ac46203006c766b52c3616c756651c56b6161e001006efe6168184e656f2e52756e74696d652e436865636b5769746e6573736c766b00527ac46203006c766b00c3616c756651c56b6161e00100c3fe6168184e656f2e52756e74696d652e436865636b5769746e6573736c766b00527ac46203006c766b00c3616c756651c56b6161e0010008ff6168184e656f2e52756e74696d652e436865636b5769746e6573736c766b00527ac46203006c766b00c3616c756653c56b6c766b00527ac4616c766b00c36c766b51527ac46c766b51c361080000000000000000586c766b51c3c094807e6c766b52527ac46203006c766b52c3616c756653c56b6c766b00527ac4616c766b00c36c766b51527ac46c766b51c3611000000000000000000000000000000000606c766b51c3c094807e6c766b52527ac46203006c766b52c3616c756653c56b6c766b00527ac4616c766b00c36c766b51527ac46c766b51c361020000526c766b51c3c094807e6c766b52527ac46203006c766b52c3616c756652c56b6c766b00527ac4616c766b00c3c0640c006c766b00c3620d00610800000000000000006c766b51527ac46203006c766b51c3616c756654c56b6c766b00527ac46c766b51527ac4616c766b00c36c766b51c37e6c766b52527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b52c3617c680f4e656f2e53746f726167652e4765746c766b53527ac46203006c766b53c3616c756654c56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b00c36c766b51c37e6c766b53527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b53c36c766b52c3615272680f4e656f2e53746f726167652e50757461616c756653c56b6c766b00527ac46c766b51527ac4616c766b00c36c766b51c37e6c766b52527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b52c3617c68124e656f2e53746f726167652e44656c65746561616c756655c56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b51c36c766b00c37e6c766b53527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b53c3617c680f4e656f2e53746f726167652e4765746c766b54527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b53c36c766b54c36c766b52c393615272680f4e656f2e53746f726167652e50757461616c756658c56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b51c36c766b00c37e6c766b53527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b53c3617c680f4e656f2e53746f726167652e4765746c766b54527ac46c766b52c36c766b54c3a06c766b55527ac46c766b55c3640e00006c766b56527ac462a6006c766b54c36c766b52c3946c766b54527ac46c766b54c3009c6c766b57527ac46c766b57c3643b006168164e656f2e53746f726167652e476574436f6e746578746c766b53c3617c68124e656f2e53746f726167652e44656c65746561623b006168164e656f2e53746f726167652e476574436f6e746578746c766b53c36c766b54c3615272680f4e656f2e53746f726167652e50757461516c766b56527ac46203006c766b56c3616c756658c56b6c766b00527ac46c766b51527ac46c766b52527ac4616168164e656f2e53746f726167652e476574436f6e7465787461045e7712956c766b00c37e617c680f4e656f2e53746f726167652e4765746c766b53527ac46c766b53c3c0009c6c766b55527ac46c766b55c36460006155c576000c70756c6c4e6570354661696cc476510d496e76616c6964204173736574c476526c766b51c3c476536c766b00c3c476546c766b52c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b56527ac462c8006c766b53c351806101019c630f00087472616e736665726210000c7472616e7366657246726f6d6c766b54527ac46c766b00c36c766b51c361682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686c766b54c36c766b52c3615479517956727551727553795279557275527275e001056904009c6c766b57527ac46c766b57c3640e00006c766b56527ac46220006c766b00c36c766b52c3617ce000025cb061516c766b56527ac46203006c766b56c3616c75665dc56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b51c36c766b00c37e6c766b53527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b53c3617c680f4e656f2e53746f726167652e4765746c766b54527ac46c766b52c36c766b54c3a06c766b55527ac46c766b55c3640a01616c766b00c3c001149c009c6c766b57527ac46c766b57c36469006154c576002652656475636542616c616e63654f6628292061737365744964206c656e67746820213d203230c476516c766b51c3c476526c766b00c3c476536c766b52c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b58527ac46282016c766b52c36c766b54c3946c766b56527ac46c766b00c36c766b51c36c766b56c3615272e0010342fd009c6c766b59527ac46c766b59c3640f0061006c766b58527ac4623c016168164e656f2e53746f726167652e476574436f6e746578746c766b53c3617c68124e656f2e53746f726167652e44656c65746561516c766b58527ac462fc006c766b00c3c001149c6c766b5a527ac46c766b5ac3644100616c766b51c36168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b5b527ac46c766b5bc3640e00006c766b58527ac462a700616c766b54c36c766b52c3946c766b54527ac46c766b54c3009c6c766b5c527ac46c766b5cc3643b006168164e656f2e53746f726167652e476574436f6e746578746c766b53c3617c68124e656f2e53746f726167652e44656c65746561623b006168164e656f2e53746f726167652e476574436f6e746578746c766b53c36c766b54c3615272680f4e656f2e53746f726167652e50757461516c766b58527ac46203006c766b58c3616c756659c56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b00c36114952d12a025325e56a4cb3ba2d469b1e23c7c77a0907c907c9e6312006c766b51c361e0010060f59c620400006c766b53527ac46c766b53c364ff00616168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fc617c680f4e656f2e53746f726167652e4765746c766b54527ac46c766b54c300587f6c766b55527ac46c766b54c358587f6c766b56527ac46c766b52c3009f6c766b57527ac46c766b57c3640900006a52527ac46c766b52c36c766b56527ac46c766b55c361e00101e3f66c766b56c361e00101d8f67e6c766b54527ac46168164e656f2e53746f726167652e476574436f6e746578746115952d12a025325e56a4cb3ba2d469b1e23c7c77a0fc6c766b54c3615272680f4e656f2e53746f726167652e507574616246006c766b52c300a16c766b58527ac46c766b58c36418006c766b51c36c766b00c3617ce000022ff861621b006c766b51c36c766b00c36c766b52c3615272e00003adf761616c75665ac56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46153c576006c766b51c3c476516c766b52c3c476526c766b54c3c46c766b55527ac46c766b00c36c766b56527ac46c766b56c36c766b53c36c766b55c3617c527ae201026c766b57527ac46c766b57c3009c6c766b58527ac46c766b58c3646a006156c576000c73656e644e6570354661696cc476510f5472616e73666572206661696c6564c476526c766b00c3c476536c766b51c3c476546c766b52c3c476556c766b54c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b59527ac4620e00516c766b59527ac46203006c766b59c3616c756657c56b6c766b00527ac46c766b51527ac46c766b52527ac4616168164e656f2e53746f726167652e476574436f6e7465787461045e7712956c766b51c37e617c680f4e656f2e53746f726167652e4765746c766b53527ac46c766b53c3c0009c6c766b54527ac46c766b54c36460006155c576000c73656e644e6570354661696cc476510d496e76616c6964204173736574c476526c766b00c3c476536c766b51c3c476546c766b52c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b55527ac462a0006c766b51c361682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686c766b00c3087472616e736665726c766b52c3615479517956727551727553795279557275527275e00105d3fd009c6c766b56527ac46c766b56c3640e00006c766b55527ac46222006c766b51c3006c766b52c394617ce00002c4a961516c766b55527ac46203006c766b55c3616c756659c56b6c766b00527ac46161e001000ff3630e0061e001003ef3009c620400006c766b52527ac46c766b52c3640e00006c766b53527ac46277016c766b00c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736c766b51527ac4616c766b51c36c766b54527ac4006c766b55527ac462dd006c766b54c36c766b55c3c36c766b56527ac4616c766b56c36168154e656f2e4f75747075742e476574417373657449646120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60907c907c9e6359006c766b56c36168184e656f2e4f75747075742e4765745363726970744861736861682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c009c620400516c766b57527ac46c766b57c3640e00006c766b53527ac4626b00616c766b55c351936c766b55527ac46c766b55c36c766b54c3c09f631aff6c766b00c36168174e656f2e5472616e73616374696f6e2e4765745479706561529c009c6c766b58527ac46c766b58c3640f0061006c766b53527ac4620e00516c766b53527ac46203006c766b53c3616c7566', - 'hex', -); - -export const aphelionDexContract = new Contract({ - script: aphelionDexScript, - parameterList: [ContractParameterType.String, ContractParameterType.Array], - - returnType: ContractParameterType.ByteArray, - name: 'Aphelion DEX v3', - codeVersion: '1.0.120050116', - author: 'APH Dev Team', - email: 'support@aphelion.orgs', - description: "Aphelion's Decentralized Exchange v3", - contractProperties: ContractPropertyState.HasStorageDynamicInvokePayable, -}); - -export const bridgeProtocolTokenContractScript = Buffer.from( - '5ec56b6c766b00527ac46c766b51527ac4616168164e656f2e52756e74696d652e47657454726967676572009c6c766b52527ac46c766b52c3643f0061611430e31779f56fb490e76cde7374a917ff8c8a45036168184e656f2e52756e74696d652e436865636b5769746e6573736c766b53527ac4621c026168164e656f2e52756e74696d652e47657454726967676572609c6c766b54527ac46c766b54c364b101616c766b00c3046e616d65876c766b55527ac46c766b55c36411006165f4016c766b53527ac462c9016c766b00c30673796d626f6c876c766b56527ac46c766b56c36411006165f1016c766b53527ac4629f016c766b00c308646563696d616c73876c766b57527ac46c766b57c3641100616586016c766b53527ac46273016c766b00c30b746f74616c537570706c79876c766b58527ac46c766b58c36411006165b2016c766b53527ac46244016c766b00c30962616c616e63654f66876c766b59527ac46c766b59c3644700616c766b51c3640e006c766b51c3c0519f620400516c766b5a527ac46c766b5ac3640e00006c766b53527ac462f6006c766b51c300c36165e9016c766b53527ac462e1006c766b00c3087472616e73666572876c766b5b527ac46c766b5bc3645700616c766b51c3640e006c766b51c3c0539f620400516c766b5c527ac46c766b5cc3640e00006c766b53527ac46294006c766b51c300c36c766b51c351c36c766b51c352c3615272653c026c766b53527ac4626f006c766b00c3066465706c6f79876c766b5d527ac46c766b5dc364110061652d056c766b53527ac46245006151c576001a4d697373696e67206f7220696e76616c696420616374696f6e2ec46168124e656f2e52756e74696d652e4e6f7469667961006c766b53527ac46203006c766b53c3616c756651c56b61586c766b00527ac46203006c766b00c3616c756651c56b610f4272696467652050726f746f636f6c6c766b00527ac46203006c766b00c3616c756651c56b6104544f4c4c6c766b00527ac46203006c766b00c3616c756654c56b61006c766b00527ac46168164e656f2e53746f726167652e476574436f6e7465787411746f74616c5f746f6c6c5f737570706c79617c680f4e656f2e53746f726167652e4765746c766b51527ac46c766b51c3009e640e006c766b51c3c000a0620400006c766b52527ac46c766b52c3640f006c766b51c36c766b00527ac46c766b00c36c766b53527ac46203006c766b53c3616c756656c56b6c766b00527ac4616c766b00c3009c6311006c766b00c3c001149c009c620400516c766b53527ac46c766b53c3640e00006c766b54527ac4628100006c766b51527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b00c3617c680f4e656f2e53746f726167652e4765746c766b52527ac46c766b52c3640e006c766b52c3c000a0620400006c766b55527ac46c766b55c3640f006c766b52c36c766b51527ac46c766b51c36c766b54527ac46203006c766b54c3616c75665cc56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b00c3009c6311006c766b00c3c001149c009c620400516c766b55527ac46c766b55c3640e00006c766b56527ac462c9026c766b00c36168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b57527ac46c766b57c36465006151c576003a43616e6e6f742073656e642c207472616e73616374696f6e206e6f74207369676e6564206173207468652073656e64657220616464726573732ec46168124e656f2e52756e74696d652e4e6f7469667961006c766b56527ac46236026c766b51c3009c6311006c766b51c3c001149c009c620400516c766b58527ac46c766b58c3640e00006c766b56527ac46203026c766b52c3009f6315006c766b52c308001092f50c91fb00a0620400516c766b59527ac46c766b59c3640e00006c766b56527ac462cc016c766b00c36c766b51c39c6c766b5a527ac46c766b5ac3640e00516c766b56527ac462a7016c766b00c36165c7fd6c766b53527ac46c766b51c36165b7fd6c766b54527ac46c766b53c36c766b52c39f6c766b5b527ac46c766b5bc36474006153c576003943616e6e6f74207472616e736665722e20496e73756666696369656e742062616c616e636520696e2073656e64696e67206163636f756e742ec476516c766b00c3c476526c766b53c3c46168124e656f2e52756e74696d652e4e6f7469667961006c766b56527ac462fc006168164e656f2e53746f726167652e476574436f6e746578746c766b00c36c766b53c36c766b52c394615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e746578746c766b51c36c766b54c36c766b52c393615272680f4e656f2e53746f726167652e50757461616c766b00c36c766b51c36c766b52c3615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f746966796154c576000b5472616e73666572726564c476516c766b51c3c476526c766b00c3c476536c766b52c3c46168124e656f2e52756e74696d652e4e6f7469667961516c766b56527ac46203006c766b56c3616c756654c56b61611430e31779f56fb490e76cde7374a917ff8c8a45036168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b51527ac46c766b51c36457006151c576002c596f7520646f206e6f742068617665207065726d697373696f6e20746f206465706c6f7920746f6b656e732ec46168124e656f2e52756e74696d652e4e6f7469667961006c766b52527ac462a3016165ebfa6c766b00527ac46c766b00c300a06c766b53527ac46c766b53c36443006151c5760018546f6b656e7320616c7265616479206465706c6f7965642ec46168124e656f2e52756e74696d652e4e6f7469667961006c766b52527ac46242016168164e656f2e53746f726167652e476574436f6e74657874611430e31779f56fb490e76cde7374a917ff8c8a450308001092f50c91fb00615272680f4e656f2e53746f726167652e5075746153c57600084465706c6f796564c47651611430e31779f56fb490e76cde7374a917ff8c8a4503c47652611430e31779f56fb490e76cde7374a917ff8c8a4503616598fac46168124e656f2e52756e74696d652e4e6f74696679616100611430e31779f56fb490e76cde7374a917ff8c8a450308001092f50c91fb00615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f74696679616168164e656f2e53746f726167652e476574436f6e7465787411746f74616c5f746f6c6c5f737570706c7908001092f50c91fb00615272680f4e656f2e53746f726167652e50757461516c766b52527ac46203006c766b52c3616c7566', - 'hex', -); - -export const bridgeProtocolTokenContract = new Contract({ - script: bridgeProtocolTokenContractScript, - parameterList: [ContractParameterType.String, ContractParameterType.Array], - - returnType: ContractParameterType.ByteArray, - name: 'Bridge Protocol', - codeVersion: '1', - author: 'Alex Guba, Thomas Lobker', - email: 'tokensale@bridgeprotocol.io', - description: 'Contract for TOLL NEP-5 token.', - contractProperties: ContractPropertyState.HasStorageDynamicInvokePayable, -}); - -export const bridgeProtocolKeyServerScript = Buffer.from( - '028700c56b6a00527ac46a51527ac468164e656f2e53746f726167652e476574436f6e74657874616a52527ac41430e31779f56fb490e76cde7374a917ff8c8a45036a53527ac468164e656f2e52756e74696d652e47657454726967676572616a54527ac46a54c3010087642d006a53c368184e656f2e52756e74696d652e436865636b5769746e65737361640700516c756661006c7566616a54c301108764600c6a00c3077075626c69736887646f006a51c3c0549e6434001b496e76616c6964206e756d626572206f6620617267756d656e7473680f4e656f2e52756e74696d652e4c6f67006c7566616a52c36a51c300c36a51c351c36a51c352c36a51c353c3547951795672755172755379527955727552727565e7206c7566616a00c30361646487646f006a51c3c0549e6434001b496e76616c6964206e756d626572206f6620617267756d656e7473680f4e656f2e52756e74696d652e4c6f67006c7566616a52c36a51c300c36a51c351c36a51c352c36a51c353c3547951795672755172755379527955727552727565791b6c7566616a00c3067265766f6b6587646a006a51c3c0539e6434001b496e76616c6964206e756d626572206f6620617267756d656e7473680f4e656f2e52756e74696d652e4c6f67006c7566616a52c36a51c300c36a51c351c36a51c352c3537951795572755172755279527954727552727565e7166c7566616a00c3076465706f73697487646a006a51c3c0539e6434001b496e76616c6964206e756d626572206f6620617267756d656e7473680f4e656f2e52756e74696d652e4c6f67006c7566616a52c36a51c300c36a51c351c36a51c352c353795179557275517275527952795472755272756595136c7566616a00c3057370656e6487646f006a51c3c0549e6434001b496e76616c6964206e756d626572206f6620617267756d656e7473680f4e656f2e52756e74696d652e4c6f67006c7566616a52c36a51c300c36a51c351c36a51c352c36a51c353c354795179567275517275537952795572755272756593106c7566616a00c307617070726f766587646f006a51c3c0549e6434001b496e76616c6964206e756d626572206f6620617267756d656e7473680f4e656f2e52756e74696d652e4c6f67006c7566616a52c36a51c300c36a51c351c36a51c352c36a51c353c35479517956727551727553795279557275527275657a0c6c7566616a00c304696e6974876425016a53c368184e656f2e52756e74696d652e436865636b5769746e65737361632a00115065726d697373696f6e2064656e696564680f4e656f2e52756e74696d652e4c6f67006c7566616a53c351c176c96a55527ac400000053c176c96a56527ac46a52c30b696e697469616c697a6564515272680f4e656f2e53746f726167652e507574616a52c30661646d696e736a55c368154e656f2e52756e74696d652e53657269616c697a65615272680f4e656f2e53746f726167652e507574616a52c304666565736a56c368154e656f2e52756e74696d652e53657269616c697a65615272680f4e656f2e53746f726167652e5075746117436f6e747261637420697320696e697469616c697a6564680f4e656f2e52756e74696d652e4c6f67516c7566616a00c30561646d696e876458036a51c3c0529e6434001b496e76616c6964206e756d626572206f6620617267756d656e7473680f4e656f2e52756e74696d652e4c6f67006c7566616a52c30b696e697469616c697a65647c680f4e656f2e53746f726167652e476574616334001b436f6e7472616374206973206e6f7420696e697469616c697a6564680f4e656f2e52756e74696d652e4c6f67006c7566616a52c30661646d696e737c680f4e656f2e53746f726167652e4765746168174e656f2e52756e74696d652e446573657269616c697a65616a55527ac46a55c368154e656f2e456e756d657261746f722e4372656174656a57527ac4006a58527ac461616a57c368134e656f2e456e756d657261746f722e4e657874645d006a57c368144e656f2e456e756d657261746f722e56616c75656168184e656f2e52756e74696d652e436865636b5769746e6573736164afff6a57c368144e656f2e456e756d657261746f722e56616c7565616a58527ac4628dff6161616a58c3c001149e642a00115065726d697373696f6e2064656e696564680f4e656f2e52756e74696d652e4c6f67006c7566616a51c351c3c001149e642d00144164647265737320697320696e636f7272656374680f4e656f2e52756e74696d652e4c6f67006c7566616a58c36a51c351c3876454003b54617267657420616464726573732063616e6e6f74206265207468652073616d652061732061757468656e7469636174696f6e2061646472657373680f4e656f2e52756e74696d652e4c6f67006c7566616a51c300c306617070656e6487640f006a55c36a51c351c3c862ca00616a51c300c30672656d6f7665876491006a55c368154e656f2e456e756d657261746f722e4372656174656a57527ac400c176c96a55527ac461616a57c368134e656f2e456e756d657261746f722e4e6578746447006a57c368144e656f2e456e756d657261746f722e56616c7565616a51c351c38763c4ff6a55c36a57c368144e656f2e456e756d657261746f722e56616c756561c862a3ff6161622b006111556e6b6e6f776e206f7065726174696f6e680f4e656f2e52756e74696d652e4c6f67006c7566616a52c30661646d696e736a55c368154e656f2e52756e74696d652e53657269616c697a65615272680f4e656f2e53746f726167652e50757461516c7566616a00c3046665657387649d026a51c3c0539e6434001b496e76616c6964206e756d626572206f6620617267756d656e7473680f4e656f2e52756e74696d652e4c6f67006c7566616a52c30b696e697469616c697a65647c680f4e656f2e53746f726167652e476574616334001b436f6e7472616374206973206e6f7420696e697469616c697a6564680f4e656f2e52756e74696d652e4c6f67006c7566616a52c30661646d696e737c680f4e656f2e53746f726167652e4765746168174e656f2e52756e74696d652e446573657269616c697a65616a55527ac46a55c368154e656f2e456e756d657261746f722e4372656174656a57527ac4006a58527ac461616a57c368134e656f2e456e756d657261746f722e4e657874645d006a57c368144e656f2e456e756d657261746f722e56616c75656168184e656f2e52756e74696d652e436865636b5769746e6573736164afff6a57c368144e656f2e456e756d657261746f722e56616c7565616a58527ac4628dff6161616a58c3c001149e642a00115065726d697373696f6e2064656e696564680f4e656f2e52756e74696d652e4c6f67006c7566616a51c300c300a263300017416d6f756e74206d75737420626520706f736974697665680f4e656f2e52756e74696d652e4c6f67006c7566616a51c351c300a263300017416d6f756e74206d75737420626520706f736974697665680f4e656f2e52756e74696d652e4c6f67006c7566616a51c352c300a263300017416d6f756e74206d75737420626520706f736974697665680f4e656f2e52756e74696d652e4c6f67006c7566616a51c300c36a51c351c36a51c352c353c176c96a56527ac46a52c304666565736a56c368154e656f2e52756e74696d652e53657269616c697a65615272680f4e656f2e53746f726167652e50757461516c7566616a00c3076d696772617465876419026a52c30b696e697469616c697a65647c680f4e656f2e53746f726167652e476574616334001b436f6e7472616374206973206e6f7420696e697469616c697a6564680f4e656f2e52756e74696d652e4c6f67006c7566616a52c30661646d696e737c680f4e656f2e53746f726167652e4765746168174e656f2e52756e74696d652e446573657269616c697a65616a55527ac46a55c368154e656f2e456e756d657261746f722e4372656174656a57527ac4006a58527ac461616a57c368134e656f2e456e756d657261746f722e4e657874645d006a57c368144e656f2e456e756d657261746f722e56616c75656168184e656f2e52756e74696d652e436865636b5769746e6573736164afff6a57c368144e656f2e456e756d657261746f722e56616c7565616a58527ac4628dff6161616a58c3c001149e642a00115065726d697373696f6e2064656e696564680f4e656f2e52756e74696d652e4c6f67006c7566616a51c3c0599e6434001b496e76616c6964206e756d626572206f6620617267756d656e7473680f4e656f2e52756e74696d652e4c6f67006c7566616a51c300c36a51c351c36a51c352c36a51c353c36a51c354c36a51c355c36a51c356c36a51c357c36a51c358c3587951795a727551727557795279597275527275567953795872755372755579547957727554727568144e656f2e436f6e74726163742e4d696772617465616a59527ac46a59c36c75666111496e76616c6964206f7065726174696f6e680f4e656f2e52756e74696d652e4c6f67006c756661006c7566012dc56b6a00527ac46a51527ac46a52527ac46a53527ac46a54527ac46a55527ac41430e31779f56fb490e76cde7374a917ff8c8a45036a56527ac46a55c36a52c387640900006a55527ac4616a00c36a51c37c680f4e656f2e53746f726167652e47657461916441006a55c391643a006a51c36a56c36a54c353c176c96a57527ac4087472616e736665726a57c37c67484cd8df57690eec73a5b44296bf94789f58fd786c7566616a55c363bd006a53c300c36a58527ac46a53c351c36a59527ac46a53c352c36a5a527ac46a59c36a54c3a2633a006a51c36a56c36a54c353c176c96a57527ac4087472616e736665726a57c37c67484cd8df57690eec73a5b44296bf94789f58fd786c7566616a59c36a54c3946a59527ac46a58c36a59c36a5ac353c176c96a53527ac46a00c36a52c36a53c368154e656f2e52756e74696d652e53657269616c697a65615272680f4e656f2e53746f726167652e50757461516c7566625201616a00c36a55c37c680f4e656f2e53746f726167652e4765746168174e656f2e52756e74696d652e446573657269616c697a65616a53527ac46a53c300c36a58527ac46a53c351c36a59527ac46a53c352c36a5a527ac46a59c36a54c3a2630700006c7566616a00c36a55c36a51c37e7c680f4e656f2e53746f726167652e476574616a5b527ac46a5bc3630700006c7566616a54c36a5bc3a0640700006c7566616a5bc36a54c3946a5b527ac46a5bc300a06427006a00c36a55c36a51c37e6a5bc35272680f4e656f2e53746f726167652e50757461622400616a00c36a55c36a51c37e7c68124e656f2e53746f726167652e44656c65746561616a59c36a54c3946a59527ac46a58c36a59c36a5ac353c176c96a53527ac46a00c36a55c36a53c368154e656f2e52756e74696d652e53657269616c697a65615272680f4e656f2e53746f726167652e5075746161195061796d656e7420686173206265656e20617070726f766564680f4e656f2e52756e74696d652e4c6f67516c7566012ec56b6a00527ac46a51527ac46a52527ac46a53527ac46a54527ac407617070726f76656a51c36a52c36a53c36a54c354c176c952c176c96a55527ac46a55c368154e656f2e52756e74696d652e53657269616c697a6561680f4e656f2e52756e74696d652e4c6f676a00c30b696e697469616c697a65647c680f4e656f2e53746f726167652e476574616334001b436f6e7472616374206973206e6f7420696e697469616c697a6564680f4e656f2e52756e74696d652e4c6f67006c7566616a51c368184e656f2e52756e74696d652e436865636b5769746e65737361632a00115065726d697373696f6e2064656e696564680f4e656f2e52756e74696d652e4c6f67006c7566616a52c3c001149e642e00154964656e7469747920697320696e636f7272656374680f4e656f2e52756e74696d652e4c6f67006c7566616a53c300a263300017416d6f756e74206d75737420626520706f736974697665680f4e656f2e52756e74696d652e4c6f67006c7566616a54c3c001149e6432001955736572206164647265737320697320696e636f7272656374680f4e656f2e52756e74696d652e4c6f67006c7566616a00c36a52c37c680f4e656f2e53746f726167652e476574616a56527ac46a56c36332001950617373706f7274206973206e6f74207075626c6973686564680f4e656f2e52756e74696d652e4c6f67006c7566616a56c368174e656f2e52756e74696d652e446573657269616c697a65616a56527ac46a56c300c36a57527ac46a56c351c36a58527ac46a56c352c36a59527ac46a53c300a064a9006a00c304666565737c680f4e656f2e53746f726167652e4765746168174e656f2e52756e74696d652e446573657269616c697a65616a5a527ac46a5ac352c36a5b527ac46a00c36a51c36a52c36a56c36a5bc36a52c35579517957727551727554795279567275527275537953795572755372756558fa6a5c527ac46a5cc36327000e5061796d656e74206661696c6564680f4e656f2e52756e74696d652e4c6f67006c7566616a52c36a54c37e6a5d527ac46a53c300a06423006a00c36a5dc36a53c35272680f4e656f2e53746f726167652e50757461622000616a00c36a5dc37c68124e656f2e53746f726167652e44656c657465616107617070726f76656a51c36a52c36a53c36a5bc36a58c355c176c952c176c96a5e527ac46a5ec368154e656f2e52756e74696d652e53657269616c697a656168124e656f2e52756e74696d652e4e6f7469667961516c75660121c56b6a00527ac46a51527ac46a52527ac46a53527ac46a54527ac4057370656e646a51c36a52c36a53c36a54c354c176c952c176c96a55527ac46a55c368154e656f2e52756e74696d652e53657269616c697a6561680f4e656f2e52756e74696d652e4c6f676a51c368184e656f2e52756e74696d652e436865636b5769746e65737361632a00115065726d697373696f6e2064656e696564680f4e656f2e52756e74696d652e4c6f67006c7566616a52c3c001149e642e00154964656e7469747920697320696e636f7272656374680f4e656f2e52756e74696d652e4c6f67006c7566616a54c3c001149e6437001e50726f7669646572206964656e7469747920697320696e636f7272656374680f4e656f2e52756e74696d652e4c6f67006c7566616a53c300a263300017416d6f756e74206d75737420626520706f736974697665680f4e656f2e52756e74696d652e4c6f67006c7566616a00c36a52c37c680f4e656f2e53746f726167652e476574616a56527ac46a56c36332001950617373706f7274206973206e6f74207075626c6973686564680f4e656f2e52756e74696d652e4c6f67006c7566616a56c368174e656f2e52756e74696d652e446573657269616c697a65616a56527ac46a00c36a51c36a52c36a56c36a53c36a54c35579517957727551727554795279567275527275537953795572755372756579f76a57527ac46a57c36327000e5061796d656e74206661696c6564680f4e656f2e52756e74696d652e4c6f67006c756661057370656e646a51c36a52c36a53c36a54c354c176c952c176c96a58527ac46a58c368154e656f2e52756e74696d652e53657269616c697a656168124e656f2e52756e74696d652e4e6f7469667961516c75660125c56b6a00527ac46a51527ac46a52527ac46a53527ac41430e31779f56fb490e76cde7374a917ff8c8a45036a54527ac4076465706f7369746a51c36a52c36a53c353c176c952c176c96a55527ac46a55c368154e656f2e52756e74696d652e53657269616c697a6561680f4e656f2e52756e74696d652e4c6f676a51c368184e656f2e52756e74696d652e436865636b5769746e65737361632a00115065726d697373696f6e2064656e696564680f4e656f2e52756e74696d652e4c6f67006c7566616a52c3c001149e642e00154964656e7469747920697320696e636f7272656374680f4e656f2e52756e74696d652e4c6f67006c7566616a53c300a263300017416d6f756e74206d75737420626520706f736974697665680f4e656f2e52756e74696d652e4c6f67006c7566616a00c36a52c37c680f4e656f2e53746f726167652e476574616a56527ac46a56c36332001950617373706f7274206973206e6f74207075626c6973686564680f4e656f2e52756e74696d652e4c6f67006c7566616a56c368174e656f2e52756e74696d652e446573657269616c697a65616a56527ac46a56c300c36a57527ac46a56c351c36a58527ac46a56c352c36a59527ac46a51c36a54c36a53c353c176c96a5a527ac4087472616e736665726a5ac37c67484cd8df57690eec73a5b44296bf94789f58fd786a5b527ac46a5bc363310018556e61626c6520746f206465706f73697420746f6b656e73680f4e656f2e52756e74696d652e4c6f67006c7566616a58c36a53c3936a58527ac46a57c36a58c36a59c353c176c96a56527ac46a00c36a52c36a56c368154e656f2e52756e74696d652e53657269616c697a65615272680f4e656f2e53746f726167652e50757461076465706f7369746a51c36a52c36a53c36a58c354c176c952c176c96a5c527ac46a5cc368154e656f2e52756e74696d652e53657269616c697a656168124e656f2e52756e74696d652e4e6f7469667961516c7566012fc56b6a00527ac46a51527ac46a52527ac46a53527ac4067265766f6b656a51c36a52c36a53c353c176c952c176c96a54527ac46a54c368154e656f2e52756e74696d652e53657269616c697a6561680f4e656f2e52756e74696d652e4c6f676a51c368184e656f2e52756e74696d652e436865636b5769746e65737361632a00115065726d697373696f6e2064656e696564680f4e656f2e52756e74696d652e4c6f67006c7566616a52c3c001149e642e00154964656e7469747920697320696e636f7272656374680f4e656f2e52756e74696d652e4c6f67006c7566616a53c3c001149e6432001955736572206164647265737320697320696e636f7272656374680f4e656f2e52756e74696d652e4c6f67006c7566616a52c36a00c36a51c37c680f4e656f2e53746f726167652e476574619e6439002050617373706f7274206e6f7420617474616368656420746f2061646472657373680f4e656f2e52756e74696d652e4c6f67006c7566616a52c36a00c36a53c37c680f4e656f2e53746f726167652e476574619e643e002550617373706f7274206e6f7420617474616368656420746f20757365722061646472657373680f4e656f2e52756e74696d652e4c6f67006c7566616a00c36a52c37c680f4e656f2e53746f726167652e476574616a55527ac46a55c36332001950617373706f7274206973206e6f74207075626c6973686564680f4e656f2e52756e74696d652e4c6f67006c7566616a55c368174e656f2e52756e74696d652e446573657269616c697a65616a55527ac46a55c300c36a56527ac46a55c351c36a57527ac46a55c352c36a58527ac46a58c368154e656f2e456e756d657261746f722e4372656174656a59527ac400c176c96a58527ac461616a59c368134e656f2e456e756d657261746f722e4e657874616445006a59c368144e656f2e456e756d657261746f722e56616c7565616a53c38763c5ff6a58c36a59c368144e656f2e456e756d657261746f722e56616c756561c862a4ff6161616a57c36450006a58c3c0916448002f556e61626c6520746f2072656d6f76652070617373706f7274207769746820706f7369746976652062616c616e6365680f4e656f2e52756e74696d652e4c6f67006c7566616a00c36a53c37c68124e656f2e53746f726167652e44656c657465616a58c3c06322006a00c36a52c37c68124e656f2e53746f726167652e44656c65746561624b00616a56c36a57c36a58c353c176c96a55527ac46a00c36a52c36a55c368154e656f2e52756e74696d652e53657269616c697a65615272680f4e656f2e53746f726167652e5075746161067265766f6b656a51c36a52c36a53c353c176c952c176c96a5a527ac46a5ac368154e656f2e52756e74696d652e53657269616c697a656168124e656f2e52756e74696d652e4e6f7469667961516c7566013bc56b6a00527ac46a51527ac46a52527ac46a53527ac46a54527ac4036164646a51c36a52c36a53c36a54c354c176c952c176c96a55527ac46a55c368154e656f2e52756e74696d652e53657269616c697a6561680f4e656f2e52756e74696d652e4c6f676a00c30b696e697469616c697a65647c680f4e656f2e53746f726167652e476574616334001b436f6e7472616374206973206e6f7420696e697469616c697a6564680f4e656f2e52756e74696d652e4c6f67006c7566616a51c368184e656f2e52756e74696d652e436865636b5769746e65737361632a00115065726d697373696f6e2064656e696564680f4e656f2e52756e74696d652e4c6f67006c7566616a52c3c001149e642e00154964656e7469747920697320696e636f7272656374680f4e656f2e52756e74696d652e4c6f67006c7566616a53c3c001149e6432001955736572206164647265737320697320696e636f7272656374680f4e656f2e52756e74696d652e4c6f67006c7566616a54c3c001149e6437001e50726f7669646572206964656e7469747920697320696e636f7272656374680f4e656f2e52756e74696d652e4c6f67006c7566616a00c36a52c37c680f4e656f2e53746f726167652e476574616a56527ac46a56c36332001950617373706f7274206973206e6f74207075626c6973686564680f4e656f2e52756e74696d652e4c6f67006c7566616a56c368174e656f2e52756e74696d652e446573657269616c697a65616a56527ac46a56c300c36a57527ac46a56c351c36a58527ac46a56c352c36a59527ac46a59c368154e656f2e456e756d657261746f722e4372656174656a5a527ac4006a5b527ac461616a5ac368134e656f2e456e756d657261746f722e4e657874645d006a5ac368144e656f2e456e756d657261746f722e56616c75656168184e656f2e52756e74696d652e436865636b5769746e6573736164afff6a5ac368144e656f2e456e756d657261746f722e56616c7565616a5b527ac4628dff6161616a51c36a5bc39e642a00115065726d697373696f6e2064656e696564680f4e656f2e52756e74696d652e4c6f67006c7566616a00c304666565737c680f4e656f2e53746f726167652e4765746168174e656f2e52756e74696d652e446573657269616c697a65616a5c527ac46a5cc351c36a5d527ac46a00c36a51c36a52c36a56c36a5dc36a54c3557951795772755172755479527956727552727553795379557275537275656eec6a5e527ac46a5ec36327000e5061796d656e74206661696c6564680f4e656f2e52756e74696d652e4c6f67006c7566616a53c36a51c3876424006a00c36a53c36a52c35272680f4e656f2e53746f726167652e50757461516c7566616a59c368154e656f2e456e756d657261746f722e4372656174656a5a527ac461616a5ac368134e656f2e456e756d657261746f722e4e657874642b006a5ac368144e656f2e456e756d657261746f722e56616c7565616a53c38764c6ff516c756662bfff6161616a59c36a53c3c86a57c36a58c36a59c353c176c96a56527ac46a00c36a52c36a56c368154e656f2e52756e74696d652e53657269616c697a65615272680f4e656f2e53746f726167652e50757461036164646a51c36a52c36a53c36a5dc36a54c355c176c952c176c96a5f527ac46a5fc368154e656f2e52756e74696d652e53657269616c697a656168124e656f2e52756e74696d652e4e6f7469667961516c7566012bc56b6a00527ac46a51527ac46a52527ac46a53527ac46a54527ac4077075626c6973686a51c36a52c36a53c36a54c354c176c952c176c96a55527ac46a55c368154e656f2e52756e74696d652e53657269616c697a6561680f4e656f2e52756e74696d652e4c6f676a00c30b696e697469616c697a65647c680f4e656f2e53746f726167652e476574616334001b436f6e7472616374206973206e6f7420696e697469616c697a6564680f4e656f2e52756e74696d652e4c6f67006c7566616a51c368184e656f2e52756e74696d652e436865636b5769746e65737361632a00115065726d697373696f6e2064656e696564680f4e656f2e52756e74696d652e4c6f67006c7566616a52c3c001149e642e00154964656e7469747920697320696e636f7272656374680f4e656f2e52756e74696d652e4c6f67006c7566616a54c3c001149e6437001e50726f7669646572206964656e7469747920697320696e636f7272656374680f4e656f2e52756e74696d652e4c6f67006c7566616a00c36a51c37c680f4e656f2e53746f726167652e476574616435001c4164647265737320697320616c7265616479207075626c6973686564680f4e656f2e52756e74696d652e4c6f67006c7566616a00c36a52c37c680f4e656f2e53746f726167652e476574616a56527ac46a56c36436001d50617373706f727420697320616c7265616479207075626c6973686564680f4e656f2e52756e74696d652e4c6f67006c7566616a53c3c00120a1643000175075626c6963206b657920697320746f6f2073686f7274680f4e656f2e52756e74696d652e4c6f67006c7566616a53c3006a51c351c176c953c176c96a56527ac46a00c304666565737c680f4e656f2e53746f726167652e4765746168174e656f2e52756e74696d652e446573657269616c697a65616a57527ac46a57c300c36a58527ac46a00c36a51c36a52c36a56c36a58c36a54c35579517957727551727554795279567275527275537953795572755372756520e86a59527ac46a59c36327000e5061796d656e74206661696c6564680f4e656f2e52756e74696d652e4c6f67006c7566616a00c36a52c36a56c368154e656f2e52756e74696d652e53657269616c697a65615272680f4e656f2e53746f726167652e507574616a00c36a51c36a52c35272680f4e656f2e53746f726167652e50757461077075626c6973686a51c36a52c36a53c36a58c354c176c952c176c96a5a527ac46a5ac368154e656f2e52756e74696d652e53657269616c697a656168124e656f2e52756e74696d652e4e6f7469667961516c75665ec56b6a00527ac46a51527ac46a51c36a00c3946a52527ac46a52c3c56a53527ac4006a54527ac46a00c36a55527ac461616a00c36a51c39f6433006a54c36a55c3936a56527ac46a56c36a53c36a54c37bc46a54c351936a54527ac46a55c36a54c3936a00527ac462c8ff6161616a53c36c7566', - 'hex', -); - -export const bridgeProtocolKeyServer = new Contract({ - script: bridgeProtocolKeyServerScript, - parameterList: [ContractParameterType.String, ContractParameterType.Array], - - returnType: ContractParameterType.ByteArray, - name: 'Bridge Protocol', - codeVersion: '1', - author: 'Thomas Lobker', - email: 'support@bridgeprotocol.io', - description: 'Bridge Protocol keyserver for the NEO Smart Economy', - contractProperties: ContractPropertyState.HasStorageDynamicInvokePayable, -}); - -export const nexTokenContractScript = Buffer.from( - '0133c56b6a00527ac46a51527ac468164e656f2e53746f726167652e476574436f6e74657874616a52527ac4046e616d650673796d626f6c08646563696d616c730b746f74616c537570706c790962616c616e63654f66087472616e736665720c7472616e7366657246726f6d07617070726f766509616c6c6f77616e636559c176c96a53527ac468164e656f2e52756e74696d652e47657454726967676572616a54527ac46a54c30100876456006a52c3537c65af1c6a55527ac46a55c3640700516c7566616533236a56527ac46a56c31773656e745f66726f6d5f636f6e74726163745f61646472c3640700006c7566616a52c36a56c351527265a2166c7566616a54c3011087647302006a5b527ac46a53c3c06a5c527ac4616a5bc36a5cc39f647f006a53c36a5bc3c36a57527ac46a5bc351936a5b527ac46a00c36a57c38764d8ff682b53797374656d2e457865637574696f6e456e67696e652e47657443616c6c696e6753637269707448617368616a58527ac46a52c36a00c36a51c36a58c35379517955727551727552795279547275527275656e0f6c7566627cff6161616a00c30b63697263756c6174696f6e87640c006a52c365cd206c7566616a00c30d7465737457686974656c697374876428006a51c300c36a59527ac46a51c351c36a5a527ac46a52c36a59c36a5ac3527265791a6c7566616a00c30c70757457686974656c697374876410006a52c36a51c37c65f0186c7566616a00c30a6d696e74546f6b656e7387640c006a52c36588166c7566616a00c31263726f776473616c65417661696c61626c6587640c006a52c365d4206c7566616a00c3066465706c6f7987640900653c056c7566616a00c310696e697469616c697a654f776e6572738761640c006a52c365661d6c7566616a00c3096765744f776e65727387640c006a52c3659f1b6c7566616a00c30b636865636b4f776e65727387640e006a52c3537c65991a6c7566616a00c30b7377697463684f776e6572876410006a52c36a51c37c65fb196c7566616a00c3096f776e65724d696e74876410006a52c36a51c37c651f106c7566616a00c30f6d696772617465436f6e747261637487640c006a51c3658e026c7566616a00c30d6d696e7452656d61696e64657287640900653a006c75666107756e6b6e6f776e680f4e656f2e52756e74696d652e4c6f6711756e6b6e6f776e206f7065726174696f6e6c756661006c75660123c56b070080e03779c3116a00527ac40420f79b5b6a51527ac4070080e03779c3116a00527ac40420f79b5b6a51527ac4070080e03779c3116a00527ac40420f79b5b6a51527ac4070080e03779c3116a00527ac40420f79b5b6a51527ac4070080e03779c3116a00527ac40420f79b5b6a51527ac4070080e03779c3116a00527ac40420f79b5b6a51527ac468164e656f2e53746f726167652e476574436f6e74657874616a52527ac46a52c3537c653119630700006c7566616a52c365021b6346002d416c6c204f776e657273206d757374206d696e74206265666f7265206d696e74696e672072656d61696e646572680f4e656f2e52756e74696d652e4c6f67006c75666168134e656f2e52756e74696d652e47657454696d65616a53527ac46a53c36a51c39f640700006c7566616a00c36a52c365ce1d946a54527ac46a54c300a1642c00134e6f2072656d61696e696e6720746f6b656e73680f4e656f2e52756e74696d652e4c6f67006c756661682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e6753637269707448617368616a55527ac46a55c3653c1d6a56527ac46a52c36a56c37c680f4e656f2e53746f726167652e476574616a57527ac46a57c36a54c3936a58527ac46a52c36a56c36a58c35272680f4e656f2e53746f726167652e507574616a52c36a54c37c653d1d6a59527ac4006a55c36a54c35272087472616e7366657254c168124e656f2e52756e74696d652e4e6f746966796a59c36c75660119c56b6a00527ac468164e656f2e53746f726167652e476574436f6e74657874616a51527ac46a51c3537c657e17630700006c756661682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686165491c6a52527ac46a51c36a52c37c680f4e656f2e53746f726167652e476574616a53527ac46a53c300a0646b004c5143616e6e6f74206d696772617465207965742e2020506c65617365207472616e7366657220616c6c206e656f2f67617320616e6420746f6b656e732066726f6d20636f6e74726163742061646472657373680f4e656f2e52756e74696d652e4c6f67006c7566616a00c3c0599e642c001350726f76696465203920617267756d656e7473680f4e656f2e52756e74696d652e4c6f67006c7566616a00c300c36a54527ac46a00c351c36a55527ac46a00c352c36a56527ac46a00c353c36a57527ac46a00c354c36a58527ac46a00c355c36a59527ac46a00c356c36a5a527ac46a00c357c36a5b527ac46a00c358c36a5c527ac46a54c36a55c36a56c36a57c36a58c36a59c36a5ac36a5bc36a5cc3587951795a727551727557795279597275527275567953795872755372755579547957727554727568144e656f2e436f6e74726163742e4d696772617465616a5d527ac46a5dc36c75660114c56b0700c029f73d54056a00527ac40700c029f73d54056a00527ac40700c029f73d54056a00527ac40700c029f73d54056a00527ac40700c029f73d54056a00527ac40700c029f73d54056a00527ac468164e656f2e53746f726167652e476574436f6e74657874616a51527ac46a51c3537c654515630700006c7566616a51c30b696e697469616c697a65647c680f4e656f2e53746f726167652e4765746163c1006a51c30b696e697469616c697a6564515272680f4e656f2e53746f726167652e50757461682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e6753637269707448617368616a52527ac46a52c365bf196a53527ac46a51c36a53c36a00c35272680f4e656f2e53746f726167652e507574616a51c36a00c37c65ea196a54527ac4006a52c36a00c35272087472616e7366657254c168124e656f2e52756e74696d652e4e6f746966796a54c36c756661006c756656c56b6a00527ac46a51527ac46a52527ac46a00c36a51c36a52c37c6512197c680f4e656f2e53746f726167652e476574616c7566011fc56b6a00527ac46a51527ac46a52527ac46a53527ac46a54527ac46a51c3682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686187644b003243616e6e6f7420617070726f76652066726f6d20636f6e747261637420616464726573732e20557365207472616e73666572680f4e656f2e52756e74696d652e4c6f67006c7566616a54c3682953797374656d2e457865637574696f6e456e67696e652e476574456e74727953637269707448617368619e6499003e43616e6e6f742063616c6c2066726f6d20616e6f7468657220636f6e7472616374206f6e20626568616c66206f66206f7468657220616464726573736573680f4e656f2e52756e74696d652e4c6f672953657474696e672066726f6d206164647265737320746f2063616c6c696e6753637269707448617368680f4e656f2e52756e74696d652e4c6f676a54c36a51527ac4625200616a51c368184e656f2e52756e74696d652e436865636b5769746e6573736163300017496e73756666696369656e742070726976656c65676573680f4e656f2e52756e74696d652e4c6f67006c7566616a52c3c001149e640700006c7566616a53c3009f640700006c7566616a51c3654e176a55527ac46a00c36a55c37c680f4e656f2e53746f726167652e476574616a53c3a26485006a51c36a52c37c65f5166a56527ac46a53c300876422006a00c36a56c37c68124e656f2e53746f726167652e44656c65746561622100616a00c36a56c36a53c35272680f4e656f2e53746f726167652e50757461616a51c36a52c36a53c3527207617070726f766554c168124e656f2e52756e74696d652e4e6f74696679516c756661126e6f7420656e6f7567682062616c616e6365680f4e656f2e52756e74696d652e4c6f67006c75660120c56b6a00527ac46a51527ac46a52527ac46a53527ac46a53c300a1640700006c7566616a51c36a52c37c6525166a54527ac46a54c3c001319e640700006c7566616a00c36a54c37c680f4e656f2e53746f726167652e476574616a55527ac46a55c36a53c39f6438001b496e73756666696369656e742066756e647320617070726f76656468124e656f2e52756e74696d652e4e6f7469667961006c7566616a51c365d7156a56527ac46a52c365cc156a57527ac46a00c36a56c37c680f4e656f2e53746f726167652e476574616a58527ac46a58c36a53c39f64400023496e73756666696369656e7420746f6b656e7320696e2066726f6d2062616c616e636568124e656f2e52756e74696d652e4e6f7469667961006c7566616a00c36a57c37c680f4e656f2e53746f726167652e476574616a59527ac46a58c36a53c3946a5a527ac46a59c36a53c3936a5b527ac46a00c36a57c36a5bc35272680f4e656f2e53746f726167652e507574616a00c36a56c36a5ac35272680f4e656f2e53746f726167652e507574616a55c36a53c3946a5c527ac46a5cc300876422006a00c36a54c37c68124e656f2e53746f726167652e44656c65746561622100616a00c36a54c36a5cc35272680f4e656f2e53746f726167652e50757461616a51c36a52c36a53c35272087472616e7366657254c168124e656f2e52756e74696d652e4e6f74696679516c75660127c56b6a00527ac46a51527ac46a52527ac46a53527ac46a54527ac46a53c300a1640700006c7566616a52c3c001149e640700006c7566616a54c3682953797374656d2e457865637574696f6e456e67696e652e476574456e74727953637269707448617368619e6499003e43616e6e6f742063616c6c2066726f6d20616e6f7468657220636f6e7472616374206f6e20626568616c66206f66206f7468657220616464726573736573680f4e656f2e52756e74696d652e4c6f672953657474696e672066726f6d206164647265737320746f2063616c6c696e6753637269707448617368680f4e656f2e52756e74696d652e4c6f676a54c36a51527ac462c900616a51c3682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e675363726970744861736861876442006a00c3537c65290e6386001b4d7573742061757468656e746963617465206173206f776e657273680f4e656f2e52756e74696d652e4c6f67006c7566625200616a51c368184e656f2e52756e74696d652e436865636b5769746e6573736163300017496e73756666696369656e742070726976656c65676573680f4e656f2e52756e74696d652e4c6f67006c7566616a51c365a2126a55527ac46a52c36597126a56527ac46a00c36a55c37c680f4e656f2e53746f726167652e476574616a57527ac46a57c36a53c39f642f0012696e73756666696369656e742066756e647368124e656f2e52756e74696d652e4e6f7469667961006c7566616a51c36a52c387640700516c7566616a57c36a53c3876422006a00c36a55c37c68124e656f2e53746f726167652e44656c65746561622d00616a57c36a53c3946a58527ac46a00c36a55c36a58c35272680f4e656f2e53746f726167652e50757461616a00c36a56c37c680f4e656f2e53746f726167652e476574616a59527ac46a59c36a53c3936a5a527ac46a00c36a56c36a5ac35272680f4e656f2e53746f726167652e507574616a51c36a52c36a53c35272087472616e7366657254c168124e656f2e52756e74696d652e4e6f74696679516c75660126c56b6a00527ac46a51527ac46a52527ac46a53527ac4094e455820546f6b656e6a54527ac4034e45586a55527ac4586a56527ac4070080e03779c3116a57527ac4094e455820546f6b656e6a54527ac4034e45586a55527ac4586a56527ac4070080e03779c3116a57527ac46a51c3046e616d65876409006a54c36c7566616a51c308646563696d616c73876409006a56c36c7566616a51c30673796d626f6c876409006a55c36c7566616a51c30b746f74616c537570706c79876409006a57c36c7566616a51c30962616c616e63654f66876431006a52c3c051876424006a00c36a52c300c36579107c680f4e656f2e53746f726167652e476574616c756661621a01616a51c3087472616e7366657287643f006a52c3c053876432006a00c36a52c300c36a52c351c36a52c352c36a53c3547951795672755172755379527955727552727565abfb6c75666162cd00616a51c30c7472616e7366657246726f6d87643c006a52c3c05387642f006a00c36a52c300c36a52c351c36a52c352c353795179557275517275527952795472755272756550f96c756661627f00616a51c307617070726f766587643f006a52c3c053876432006a00c36a52c300c36a52c351c36a52c352c36a53c35479517956727551727553795279557275527275655cf66c756661623300616a51c309616c6c6f77616e6365876421006a52c3c052876418006a00c36a52c300c36a52c351c3527265f3f56c756661006c7566011cc56b6a00527ac46a51527ac4070080f420e6b5006a52527ac4070080f420e6b5006a52527ac46a51c3c0519e640700006c7566616a51c300c36a53527ac46a53c3657e0b630700006c7566616a00c36a53c37c680f4e656f2e53746f726167652e476574616a54527ac46a54c368184e656f2e52756e74696d652e436865636b5769746e65737361630700006c7566616a52c36a55527ac46a53c3064d696e7465647e6a56527ac46a00c36a56c37c680f4e656f2e53746f726167652e476574616a57527ac46a57c3642d00144f776e657220616c7265616479206d696e746564680f4e656f2e52756e74696d652e4c6f67006c7566616a00c36a56c3515272680f4e656f2e53746f726167652e507574616a00c36a55c37c657c0e6a58527ac4006a54c36a55c35272087472616e7366657254c168124e656f2e52756e74696d652e4e6f746966796a54c365f20d6a59527ac46a00c36a59c37c680f4e656f2e53746f726167652e476574616a5a527ac46a5ac36a55c3936a5b527ac46a00c36a59c36a5bc35272680f4e656f2e53746f726167652e50757461516c7566012fc56b6a00527ac46a51527ac46a52527ac46a53527ac40e696e5f63697263756c6174696f6e6a54527ac4070080e03779c3116a55527ac40500e87648176a56527ac40600282e8cd1006a57527ac404a0768d5b6a58527ac404a0bc925b6a59527ac40420b1965b6a5a527ac40420f79b5b6a5b527ac4086d696e74656452316a5c527ac4086d696e74656452326a5d527ac40e696e5f63697263756c6174696f6e6a54527ac4070080e03779c3116a55527ac40500e87648176a56527ac40600282e8cd1006a57527ac404a0768d5b6a58527ac404a0bc925b6a59527ac40420b1965b6a5a527ac40420f79b5b6a5b527ac4086d696e74656452316a5c527ac4086d696e74656452326a5d527ac468134e656f2e52756e74696d652e47657454696d65616a5e527ac46a00c36a54c37c680f4e656f2e53746f726167652e476574616a5f527ac46a5fc36a51c3936a60527ac46a60c36a55c3a0640700006c7566616a5ec36a58c3a2649f006a5ec36a59c3a16495000f4d696e74696e6720526f756e642031680f4e656f2e52756e74696d652e4c6f676a52c36a5cc37e6a0111527ac46a51c36a56c3a1645d006a00c306726f756e64316a52c3527265e6056448006a00c36a0111c37c680f4e656f2e53746f726167652e4765746191642a006a53c3631f006a00c36a0111c3515272680f4e656f2e53746f726167652e5075746161516c7566616a5ec36a5ac3a2649f006a5ec36a5bc3a16495000f4d696e74696e6720726f756e642032680f4e656f2e52756e74696d652e4c6f676a52c36a5dc37e6a0112527ac46a51c36a57c3a1645d006a00c306726f756e64326a52c35272653f056448006a00c36a0112c37c680f4e656f2e53746f726167652e4765746191642a006a53c3631f006a00c36a0112c3515272680f4e656f2e53746f726167652e5075746161516c7566610c4e6f7420656c696769626c65680f4e656f2e52756e74696d652e4c6f67006c75665bc56b6a00527ac46a51527ac46a52527ac46a51c30873656e745f6e656fc300876441006a51c30873656e745f676173c30087642f00164e6f206e656f206f7220676173206174746163686564680f4e656f2e52756e74696d652e4c6f67006c7566616a51c3653e006a53527ac46a00c36a53c36a51c30673656e646572c36a52c353795179557275517275527952795472755272756596fc6a54527ac46a54c36c75665bc56b6a00527ac40480cb816e6a51527ac404407658236a52527ac40480cb816e6a51527ac404407658236a52527ac46a00c30873656e745f6e656fc36a51c3950400e1f505966a53527ac46a00c30873656e745f676173c36a52c3950400e1f505966a54527ac46a53c36a54c3936a55527ac46a55c36c7566011cc56b6a00527ac4209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc56a51527ac420e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c606a52527ac4066c61737454586a53527ac46a00c36a53c37c680f4e656f2e53746f726167652e476574616a54527ac4682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726168174e656f2e5472616e73616374696f6e2e47657448617368616a55527ac46a54c36a55c387640700006c7566616a00c36a53c36a55c35272680f4e656f2e53746f726167652e5075746165480a6a56527ac46a00c36a56c300527265dbfd6a57527ac46a56c30673656e646572c36a58527ac46a57c36391006a56c30873656e745f6e656fc300a06435006a58c36a56c30873656e745f6e656fc36a51c3527206726566756e6454c168124e656f2e52756e74696d652e4e6f74696679616a56c30873656e745f676173c300a06435006a58c36a56c30873656e745f676173c36a52c3527206726566756e6454c168124e656f2e52756e74696d652e4e6f7469667961006c7566616a58c365f6076a59527ac46a00c36a59c37c680f4e656f2e53746f726167652e476574616a5a527ac46a56c365a6fd6a5b527ac46a5bc36a5ac3936a5c527ac46a00c36a59c36a5cc35272680f4e656f2e53746f726167652e507574616a00c36a5bc37c65ec076a5d527ac4006a58c36a5bc35272087472616e7366657254c168124e656f2e52756e74696d652e4e6f74696679516c75660114c56b6a00527ac46a51527ac41479a3f4abfb672cd9ecb56b814858e849f54bdda16a52527ac46a52c368184e656f2e52756e74696d652e436865636b5769746e65737361633b00224d7573742068617665204b594320526567697374726172207065726d697373696f6e680f4e656f2e52756e74696d652e4c6f67006c7566616a51c3c0529e642a0011696e636f727265637420617267206c656e680f4e656f2e52756e74696d652e4c6f67006c7566616a51c300c36a53527ac46a51c351c36a54527ac4006a57527ac46a54c3c06a58527ac4616a57c36a58c39f6482006a54c36a57c3c36a55527ac46a57c351936a57527ac46a53c36a55c37c65b5006a56527ac46a56c3c0012487644b006a00c36a56c3515272680f4e656f2e53746f726167652e507574616a55c3106b79635f726567697374726174696f6e52c168124e656f2e52756e74696d652e4e6f746966796281ff61006c75666279ff616161516c756659c56b6a00527ac46a51527ac46a52527ac46a51c36a52c37c6533006a53527ac46a53c3c0012487641f006a00c36a53c37c680f4e656f2e53746f726167652e476574616c756661006c756656c56b6a00527ac46a51527ac40a6b7963417070726f76656a52527ac46a52c36a00c36a51c37e7e6c756660c56b6a00527ac46a51527ac46a00c3537c656b00630700006c7566616a51c3c0529e640700006c7566616a51c300c36a52527ac46a52c365cc01630700006c7566616a51c351c36a53527ac46a53c3c00114876424006a00c36a52c36a53c35272680f4e656f2e53746f726167652e50757461516c756661006c75665dc56b6a00527ac46a51527ac46a00c3126f776e6572735f696e697469616c697a65647c680f4e656f2e53746f726167652e476574616334001b506c656173652072756e20696e697469616c697a654f776e657273680f4e656f2e52756e74696d652e4c6f67006c756661006a52527ac46a00c36573006a53527ac4006a55527ac46a53c3c06a56527ac4616a55c36a56c39f6447006a53c36a55c3c36a54527ac46a55c351936a55527ac46a54c368184e656f2e52756e74696d652e436865636b5769746e6573736164c1ff6a52c351936a52527ac462b4ff6161616a52c36a51c3a26c756654c56b6a00527ac46a00c3066f776e6572317c680f4e656f2e53746f726167652e476574616a00c3066f776e6572327c680f4e656f2e53746f726167652e476574616a00c3066f776e6572337c680f4e656f2e53746f726167652e476574616a00c3066f776e6572347c680f4e656f2e53746f726167652e476574616a00c3066f776e6572357c680f4e656f2e53746f726167652e4765746155c176c96c756656c56b6a00527ac46a00c3066f776e65723187633b006a00c3066f776e65723287632d006a00c3066f776e65723387631f006a00c3066f776e657234876311006a00c3066f776e6572358764080061516c756661006c756658c56b6a00527ac40c6f776e6572314d696e7465640c6f776e6572324d696e7465640c6f776e6572334d696e7465640c6f776e6572344d696e7465640c6f776e6572354d696e74656455c176c96a51527ac4006a54527ac46a51c36a53527ac46a53c3c06a55527ac4616a54c36a55c39f643c006a53c36a54c3c36a52527ac46a54c351936a54527ac46a00c36a52c37c680f4e656f2e53746f726167652e4765746163c6ff006c756662bfff616161516c75660116c56b6a00527ac414507dd1f00e30e7955ab8b349707f42fa2b65376b6a51527ac41451b824a566a64543759cd5c958c193afa4d0b8fb6a52527ac414993e3a81002d4b5a56ac9808ceec1fefcb2ebcf56a53527ac414edcfa803566c0600a682d6c89ab4d035e13346ba6a54527ac414e39c5a9e04751bfb85dfd0b607766cdcb995719f6a55527ac46a00c3126f776e6572735f696e697469616c697a65647c680f4e656f2e53746f726167652e476574616390016a00c3066f776e6572316a51c35272680f4e656f2e53746f726167652e507574616a00c3066f776e6572326a52c35272680f4e656f2e53746f726167652e507574616a00c3066f776e6572336a53c35272680f4e656f2e53746f726167652e507574616a00c3066f776e6572346a54c35272680f4e656f2e53746f726167652e507574616a00c3066f776e6572356a55c35272680f4e656f2e53746f726167652e507574616a00c30c6f776e6572314d696e746564005272680f4e656f2e53746f726167652e507574616a00c30c6f776e6572324d696e746564005272680f4e656f2e53746f726167652e507574616a00c30c6f776e6572334d696e746564005272680f4e656f2e53746f726167652e507574616a00c30c6f776e6572344d696e746564005272680f4e656f2e53746f726167652e507574616a00c30c6f776e6572354d696e746564005272680f4e656f2e53746f726167652e507574616a00c3126f776e6572735f696e697469616c697a6564515272680f4e656f2e53746f726167652e50757461516c756661006c756656c56b6a00527ac46a51527ac409616c6c6f77616e63656a52527ac46a52c36a00c36a51c37e7e6c756655c56b6a00527ac40762616c616e63656a51527ac46a51c36a00c37e6c756655c56b6a00527ac40e696e5f63697263756c6174696f6e6a51527ac46a00c36a51c37c680f4e656f2e53746f726167652e476574616c756659c56b6a00527ac46a51527ac40e696e5f63697263756c6174696f6e6a52527ac46a00c36a52c37c680f4e656f2e53746f726167652e476574616a53527ac46a53c36a51c3936a53527ac46a00c36a52c36a53c35272680f4e656f2e53746f726167652e50757461516c756658c56b6a00527ac40e696e5f63697263756c6174696f6e6a51527ac4070080e03779c3116a52527ac46a00c36a51c37c680f4e656f2e53746f726167652e476574616a53527ac46a52c36a53c3946a54527ac46a54c36c75665ec56b6a00527ac46a51527ac46a51c36a00c3946a52527ac46a52c3c56a53527ac4006a54527ac46a00c36a55527ac461616a00c36a51c39f6433006a54c36a55c3936a56527ac46a56c36a53c36a54c37bc46a54c351936a54527ac46a55c36a54c3936a00527ac462c8ff6161616a53c36c75660119c56b209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc56a00527ac420e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c606a51527ac4682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e6572616a52527ac46a52c3681d4e656f2e5472616e73616374696f6e2e4765745265666572656e636573616a53527ac4682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e6753637269707448617368616a54527ac4006a55527ac4006a56527ac4006a57527ac4006a58527ac46a53c3c000a0649901006a5c527ac46a53c3c06a5d527ac4616a5cc36a5dc39f6474006a53c36a5cc3c36a59527ac46a5cc351936a5c527ac46a59c368184e656f2e4f75747075742e47657453637269707448617368616a54c387640c00516a58527ac462b4ff616a55c363adff6a59c368184e656f2e4f75747075742e47657453637269707448617368616a55527ac46287ff616161006a5f527ac46a52c3681a4e656f2e5472616e73616374696f6e2e4765744f757470757473616a5e527ac46a5ec3c06a60527ac4616a5fc36a60c39f64ca006a5ec36a5fc3c36a5a527ac46a5fc351936a5f527ac46a5ac368184e656f2e4f75747075742e47657453637269707448617368616a54c38764bdff6a5ac368154e656f2e4f75747075742e47657441737365744964616a00c3876425006a56c36a5ac368134e656f2e4f75747075742e47657456616c756561936a56527ac4616a5ac368154e656f2e4f75747075742e47657441737365744964616a51c3876456ff6a57c36a5ac368134e656f2e4f75747075742e47657456616c756561936a57527ac46231ff616161c76a5b527ac46a54c36a5bc30872656365697665727bc46a55c36a5bc30673656e6465727bc46a56c36a5bc30873656e745f6e656f7bc46a57c36a5bc30873656e745f6761737bc46a58c36a5bc31773656e745f66726f6d5f636f6e74726163745f616464727bc46a5bc36c7566', - 'hex', -); - -export const nexTokenContract = new Contract({ - script: nexTokenContractScript, - parameterList: [ContractParameterType.String, ContractParameterType.Array], - - returnType: ContractParameterType.ByteArray, - name: 'NEX Token', - codeVersion: '1', - author: 'Neon Exchange AG', - email: 'contact@neonexchange.org', - description: 'NEX Security Token: NEX is a platform for high performance decentralized exchange and payment', - contractProperties: ContractPropertyState.HasStorageDynamicInvokePayable, -}); - -export const timeCoinContractScript = Buffer.from( - '54c56b6c766b00527ac46c766b51527ac46168164e656f2e52756e74696d652e4765745472696767657260907c907c9e6316016165d9016a52527ac4006a53527ac4622a006a52c36a53c3c36a00c3876412006a00c36a51c3617c650b02616c75666a53c351936a53527ac46a53c36a52c3c09f63d1ff61652c196a52527ac4006a53527ac4622a006a52c36a53c3c36a00c3876412006a00c36a51c3617c657b19616c75666a53c351936a53527ac46a53c36a52c3c09f63d1ff616586166a52527ac4006a53527ac4622a006a52c36a53c3c36a00c3876412006a00c36a51c3617c659816616c75666a53c351936a53527ac46a53c36a52c3c09f63d1ff61654d066a52527ac4006a53527ac4622a006a52c36a53c3c36a00c3876412006a00c36a51c3617c654606616c75666a53c351936a53527ac46a53c36a52c3c09f63d1ff6227006168164e656f2e52756e74696d652e47657454726967676572630b006165c812616c756600616c756600c56b0854696d65436f696e616c756600c56b03544d43616c756600c56b58616c756600c56b137b224e45502d35222c20224e45502d3130227d616c756651c56b6c766b00527ac46a00c3c063080000616c75666a00c36168174e656f2e52756e74696d652e446573657269616c697a65616c756651c56b6c766b00527ac46a00c36168154e656f2e52756e74696d652e53657269616c697a65616c756600c56b54c57600610e636f6e74726163744465706c6f79c47651610f636f6e74726163744d696772617465c47652611275706461746541646d696e41646472657373c47653610d7365744f7463417070726f7665c4616c756653c56b6c766b00527ac46c766b51527ac46165b311635300384f7065726174696f6e206661696c65642e20636f6e747261637420696e766f6b6572206973206e6f742041646d696e697374726174696f7261680f4e656f2e52756e74696d652e4c6f6700616c75666a00c3610e636f6e74726163744465706c6f7987640b006165bb00616c75666a00c3610f636f6e74726163744d69677261746587641f006a51c359617c65cc1063080000616c75666a51c361655c02616c75666a00c3611275706461746541646d696e41646472657373876421006a51c351617c65951063080000616c75666a51c300c361658d01616c75666a00c3610d7365744f7463417070726f766587642f006a51c352617c65611063080000616c75666a51c300c36a51c351c36a52527ac46a52c3617c651b03616c756600616c756651c56b61651411644f0034436f6e74726163744465706c6f79206973206661696c65642e20636f6e747261637420616c7265616479206465706c6f7965642e61680f4e656f2e52756e74696d652e4c6f6700616c75666165fa106a00527ac46168164e656f2e53746f726167652e476574436f6e746578746165191d6a00c3615272680f4e656f2e53746f726167652e5075746168164e656f2e53746f726167652e476574436f6e746578746165fd1c0800006c98fdf0e107615272680f4e656f2e53746f726167652e50757461147d2185c97fa43cb41c5617941c6b68d146a84ae561655b007561147d2185c97fa43cb41c5617941c6b68d146a84ae50800006c98fdf0e107617c651717751a436f6e74726163744465706c6f7920697320737563636573732e61680f4e656f2e52756e74696d652e4c6f6751616c756651c56b6c766b00527ac46a00c3c001149c634c003155706461746541646d696e41646472657373206661696c65642e206e65774164647265737320697320696e76616c69642e61680f4e656f2e52756e74696d652e4c6f6700616c75666168164e656f2e53746f726167652e476574436f6e746578746165c71b6a00c3615272680f4e656f2e53746f726167652e50757451616c75665ac56b6c766b00527ac461682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e675363726970744861736861681a4e656f2e426c6f636b636861696e2e476574436f6e74726163746168164e656f2e436f6e74726163742e4765745363726970746a00c300c36a51527ac46a51c3907c907c9e63080000616c75666a00c351c36a52527ac46a00c352c36a53527ac46a00c353c36a54527ac46a00c354c36a55527ac46a00c355c36a56527ac46a00c356c36a57527ac46a00c357c36a58527ac46a00c358c36a59527ac46a51c36a52c36a53c36a54c36a55c36a56c36a57c36a58c36a59c361587951795a727551727557795279597275527275567953795872755372755579547957727554727568144e656f2e436f6e74726163742e4d6967726174657551616c756653c56b6c766b00527ac46c766b51527ac46a00c3c001149c634200275365744f7463417070726f76652066616c65642e206164647265737320697320696e76616c696461680f4e656f2e52756e74696d652e4c6f6700616c75666168164e656f2e53746f726167652e476574436f6e7465787461655f1a617c656e1a6a51c363070000620400516a52527ac46a00c36a52c361527265781a51616c756600c56b51c576006112737570706f727465645374616e6461726473c4616c756652c56b6c766b00527ac46c766b51527ac46a00c36112737570706f727465645374616e646172647387640b006165f8f9616c756600616c756653c56b6c766b00527ac46c766b51527ac46a00c3c001149c633f002453657442616c616e63652066616c65642e206164647265737320697320696e76616c696461680f4e656f2e52756e74696d652e4c6f6700616c75666168164e656f2e53746f726167652e476574436f6e7465787461654c19617c657b196a52527ac46a51c300a16411006a52c36a00c3617c65d5196212006a52c36a00c36a51c361527265771951616c75665bc56b6c766b00527ac4006a51527ac46165930c6165e60c6a52527ac46a52c300c30164956a52c351c3936a53527ac46a52c352c36a54527ac46168164e656f2e53746f726167652e476574436f6e746578746165d1186a00c37e617c68104e656f2e53746f726167652e46696e646a55527ac462c2016a55c36168124e656f2e4974657261746f722e56616c75656168174e656f2e52756e74696d652e446573657269616c697a656a56527ac46a56c351c36a53c39f6443006168164e656f2e53746f726167652e476574436f6e74657874616551186a00c37e6a56c351c37e617c68124e656f2e53746f726167652e44656c657465623f016a56c351c36a53c39c641b01006a57527ac46a56c353c3cc6a58527ac4006a59527ac46241006a58c36a59c3c36a5a527ac46a5ac36a54c3a1640f006a56c353c36a5ac3ca6215006a57c36a56c353c36a5ac3c3936a57527ac46a59c351936a59527ac46a59c36a58c3c09f63baff6a57c36a56c352c39e64ac006a56c36a57c3527cc46a56c352c300a16443006168164e656f2e53746f726167652e476574436f6e74657874616583176a00c37e6a56c351c37e617c68124e656f2e53746f726167652e44656c6574656259006168164e656f2e53746f726167652e476574436f6e74657874616543176a00c37e6a56c351c37e6a56c36168154e656f2e52756e74696d652e53657269616c697a65615272680f4e656f2e53746f726167652e5075746a56c352c300a16311006a51c36a56c352c3936a51527ac46a55c36168114e656f2e4974657261746f722e4e657874632afe6a51c3009f64080000616c75666a51c3616c75660114c56b6c766b00527ac46c766b51527ac46a51c300a164080000616c75666165200a6165730a6a52527ac46a52c352c36a53527ac46a52c300c30164956a52c351c3936a54527ac4006a55527ac4006a56527ac4c76a57527ac46168164e656f2e53746f726167652e476574436f6e7465787461654c166a00c37e617c68104e656f2e53746f726167652e46696e646a58527ac46282016a58c36168124e656f2e4974657261746f722e56616c75656168174e656f2e52756e74696d652e446573657269616c697a656a59527ac46a59c351c36a54c39f6443006168164e656f2e53746f726167652e476574436f6e746578746165cc156a00c37e6a59c351c37e617c68124e656f2e53746f726167652e44656c65746562ff006a59c351c36a54c39c64bb000075006a5a527ac46a59c353c3cc6a5b527ac4006a5c527ac46241006a5bc36a5cc3c36a5d527ac46a5dc36a53c3a1640f006a59c353c36a5dc3ca6215006a5ac36a59c353c36a5dc3c3936a5a527ac46a5cc351936a5c527ac46a5cc36a5bc3c09f63baff6a59c36a5ac3527cc46a59c352c300a16443006168164e656f2e53746f726167652e476574436f6e74657874616508156a00c37e6a59c351c37e617c68124e656f2e53746f726167652e44656c657465623b006a55c3009c630f006a55c36a59c351c3a0640d006a59c351c36a55527ac46a56c36a59c352c3936a56527ac46a57c36a59c351c36a59c3c46a58c36168114e656f2e4974657261746f722e4e657874636afe6a51c300a164080051616c75666a51c36a56c3a264fb016a57c3cc6a5b527ac4006a5c527ac46254006a5bc36a5cc3c36a5e527ac46168164e656f2e53746f726167652e476574436f6e74657874616541146a00c37e6a5ec37e617c68124e656f2e53746f726167652e44656c6574656a5cc351936a5c527ac46a5cc36a5bc3c09f63a7ff51616c75666a57c36a55c3c36a5f527ac46a51c36a5fc352c39400a26451006a51c36a5fc352c3946a51527ac46168164e656f2e53746f726167652e476574436f6e746578746165c4136a00c37e6a5fc351c37e617c68124e656f2e53746f726167652e44656c6574656214016a5fc37652c36a51c394527cc46a5fc353c3cc6a60527ac4006a0111527ac4628b006a51c36a5fc353c36a60c36a0111c3c3c39400a2642b006a51c36a5fc353c36a60c36a0111c3c3c3946a51527ac46a5fc353c36a60c36a0111c3c3ca6238006a5fc353c36a0112527ac46a60c36a0111c3c36a0113527ac46a0112c36a0113c36a0112c36a0113c3c36a51c394c4006a51527ac46a51c300a1631b006a0111c351936a0111527ac46a0111c36a60c3c09f636fff6168164e656f2e53746f726167652e476574436f6e746578746165ce126a00c37e6a5fc351c37e6a5fc36168154e656f2e52756e74696d652e53657269616c697a65615272680f4e656f2e53746f726167652e50757451616c75666a5fc300c300946a55527ac46a55c3009e6376fe51616c756656c56b6c766b00527ac46c766b51527ac46c766b52527ac46a52c361652e067600c36a53527ac47651c36a54527ac452c36a55527ac46a00c36a51c36a53c36a54c36a55c3615479517956727551727553795279557275527275650700616c75665fc56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46a52c30164956a53c3936a55527ac46154c56a56527ac46168164e656f2e53746f726167652e476574436f6e746578746165bc116a00c37e6a55c37e617c680f4e656f2e53746f726167652e4765746a57527ac46a57c3c06428006a57c36168174e656f2e52756e74696d652e446573657269616c697a656a56527ac4621c006154c57600007cc4766a55c3517cc47600527cc46a56527ac46168164e656f2e53746f726167652e476574436f6e7465787461653a116a00c37e617c68104e656f2e53746f726167652e46696e646a58527ac462cb006a58c36168124e656f2e4974657261746f722e56616c75656168174e656f2e52756e74696d652e446573657269616c697a656a5b527ac46a5bc351c36a55c3a26388006a5bc300c3009c630f006a55c36a5bc300c39f6472006a56c36a5bc300c30094007cc46a5bc36a55c3007cc46168164e656f2e53746f726167652e476574436f6e7465787461658e106a00c37e6a5bc351c37e6a5bc36168154e656f2e52756e74696d652e53657269616c697a65615272680f4e656f2e53746f726167652e507574621d006a58c36168114e656f2e4974657261746f722e4e6578746321ff006a59527ac4c76a5a527ac46a56c37652c36a51c393527cc46a56c352c36a51c39c6410006a5ac36a54c36a51c3c46296006a56c353c36a54c3cb642a006a56c353c36a5c527ac46a54c36a5d527ac46a5cc36a5dc36a5cc36a5dc3c36a51c393c4620f006a56c353c36a54c36a51c3c4516a5e527ac46245006a59c36a56c352c39c6342006a56c353c36a5ec3cb6423006a5ac36a5ec36a56c353c36a5ec3c3c46a59c36a5ac36a5ec3c3936a59527ac46a5ec351936a5e527ac46a5ec3011fa163b8ff6a56c36a5ac3537cc46168164e656f2e53746f726167652e476574436f6e7465787461654d0f6a00c37e6a55c37e6a56c36168154e656f2e52756e74696d652e53657269616c697a65615272680f4e656f2e53746f726167652e50757451616c756656c56b6c766b00527ac46c766b51527ac4c76a52527ac46168164e656f2e53746f726167652e476574436f6e746578746165dd0e6a00c37e617c68104e656f2e53746f726167652e46696e646a53527ac4006a54527ac4625c006a53c36168124e656f2e4974657261746f722e56616c75656168174e656f2e52756e74696d652e446573657269616c697a656a55527ac46a51c36a55c351c3a1640f006a52c36a55c351c36a55c3c46a54c351936a54527ac46a53c36168114e656f2e4974657261746f722e4e6578746390ff6a52c3616c756651c56b6c766b00527ac46a00c3c001149c635400395665726966794973417070726f7665644f74632066616c65642e202866726f6d207c20746f29206164647265737320697320696e76616c696461680f4e656f2e52756e74696d652e4c6f6700616c75666168164e656f2e53746f726167652e476574436f6e746578746165cb0d617c65da0d6a00c3617c65880e00a164080000616c756651616c756652c56b6c766b00527ac46c766b51527ac46a00c3c06a51c3907c907c9e63080051616c756617496e76616c696420417267756d656e74204c656e67746861680f4e656f2e52756e74696d652e4c6f6700616c756600c56b61658a006453006168164e656f2e53746f726167652e476574436f6e746578746165cf0c617c680f4e656f2e53746f726167652e4765746168184e656f2e52756e74696d652e436865636b5769746e657373616c756661147d2185c97fa43cb41c5617941c6b68d146a84ae56168184e656f2e52756e74696d652e436865636b5769746e657373616c756600c56b6168164e656f2e53746f726167652e476574436f6e7465787461655d0c617c680f4e656f2e53746f726167652e47657400a0616c756600c56b6168184e656f2e426c6f636b636861696e2e4765744865696768746168184e656f2e426c6f636b636861696e2e4765744865616465726168174e656f2e4865616465722e47657454696d657374616d70616c75665bc56b6c766b00527ac453c56a51527ac45dc5760000c47651011fc47652013bc47653015ac476540178c47655029700c4765602b500c4765702d400c4765802f300c47659021101c4765a023001c4765b024e01c4765c026d01c46a52527ac45dc5760000c47651011fc47652013cc47653015bc476540179c47655029800c4765602b600c4765702d500c4765802f400c47659021201c4765a023101c4765b024f01c4765c026e01c46a53527ac46a00c30500f791770e9303805101966a54527ac46a54c303b13a02966a55527ac46a54c36a55c303b13a0295946a54527ac46a54c303ac8e00966a56527ac46a56c354907c907c9e630900536a56527ac46a54c36a56c303ac8e0095946a54527ac46a54c302b505966a57527ac46a54c36a57c302b50595946a54527ac46a54c3026d01966a58527ac46a58c354907c907c9e630900536a58527ac46a51c3006a55c3029001956a56c3016495936a57c35495936a58c3935193c46a54c36a58c3026d0195946a54527ac46a58c353907c907c9e631c006a57c30118907c907c9e630b006a56c3539c62080051620400006309006a52c36206006a53c36a59527ac46a54c356996a5a527ac4620d006a5ac351936a5a527ac46a54c36a59c36a5ac3c3a263ebff6a51c3516a5ac3c46a51c3526a54c36a59c36a5ac35194c3945193c46a51c3616c756600c56b52c5760061187472616e73666572576974684c6f636b7570506572696f64c47651610e6765744c6f636b75704172726179c4616c75665ec56b6c766b00527ac46c766b51527ac46a00c361187472616e73666572576974684c6f636b7570506572696f6487645c006a51c354617c6524fc63080000616c75666a51c300c36a51c351c36a52527ac46a51c352c36a53527ac46a51c353c36a54527ac46a52c36a53c36a54c361537951795572755172755279527954727552727565fd00616c75666a00c3610e6765744c6f636b757041727261798764dd006a51c351617c65b4fb63080000616c75666a51c300c36165befc616511fd6a55527ac46a55c300c30164956a55c351c3936a56527ac4c76a57527ac46a56c3617c6507facd6a58527ac4006a59527ac46277006a58c36a59c3c36a5a527ac4006a5b527ac4624a006a5ac353c3cc6a5bc3c36a5c527ac46a5ac351c30164956a5cc3936a5d527ac46a57c36a5dc352c576006a5dc3c476516a5ac353c36a5cc3c30094c4c46a5bc351936a5b527ac46a5bc36a5ac353c3ccc09f63aeff6a59c351936a59527ac46a59c36a58c3c09f6384ff6a57c3cd616c756600616c756655c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46165d6fb6a54527ac46a53c36a54c3a1645100365472616e73666572576974684c6f636b7570506572696f64206661696c65642e20706572696f64203c3d2063757272656e7454696d6561680f4e656f2e52756e74696d652e4c6f6700616c75666a00c36a51c36a52c36a53c361537951795572755172755279527954727552727565f504616c756600c56b56c5760061046e616d65c47651610673796d626f6cc47652610b746f74616c537570706c79c476536108646563696d616c73c47654610962616c616e63654f66c4765561087472616e73666572c4616c756600c56b616572e7616c756600c56b616577e7616c756600c56b616577e7616c756654c56b6c766b00527ac46c766b51527ac46a00c361046e616d6587640b006165c0ff616c75666a00c36108646563696d616c7387640b006165bdff616c75666a00c3610b746f74616c537570706c7987640b0061659e00616c75666a00c3610673796d626f6c87640b0061657fff616c75666a00c3610962616c616e63654f66876421006a51c351617c6533f963080000616c75666a51c300c361658e00616c75666a00c361087472616e7366657287643d006a51c353617c6504f963080000616c75666a51c300c36a51c351c36a52527ac46a51c352c36a53527ac46a52c36a53c3615272651d01616c756600616c756600c56b6168164e656f2e53746f726167652e476574436f6e7465787461652206617c680f4e656f2e53746f726167652e476574616c756651c56b6c766b00527ac46a00c3c001149c633f002442616c616e63654f66206973206661696c65642e20696e76616c6964206164647265737361680f4e656f2e52756e74696d652e4c6f6700616c75666168164e656f2e53746f726167652e476574436f6e746578746165b605617c65e5056a00c3617c659306616c756653c56b6c766b00527ac46c766b51527ac46a00c361656dff6a51c3936a52527ac46a00c36a52c3617c65bceb7561006a00c36a51c3615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667951616c756658c56b6c766b00527ac46c766b51527ac46c766b52527ac46a00c3c00114907c907c9e630d006a51c3c001149c6348002d5472616e73666572206973206661696c65642e202866726f6d7c746f292061646472657320696e76616c69642e61680f4e656f2e52756e74696d652e4c6f6700616c75666a52c3009f6445002a5472616e73666572206973206661696c65642e207472616e736665722076616c7565206973203c3d203061680f4e656f2e52756e74696d652e4c6f6700616c75666a00c36168184e656f2e52756e74696d652e436865636b5769746e6573736346002b5472616e73666572206661696c65642e20636f6e747261637420696e766f6b65722069732076616c69642e61680f4e656f2e52756e74696d652e4c6f6700616c75666a51c36165f5f56a53527ac46a00c36165f3fd6a54527ac4006a55527ac46a53c3640e006a54c36a55527ac4621b006a00c36165dbea6a57527ac46a54c36a57c3946a55527ac46a55c36a52c39f644200275472616e73666572206973206661696c65642e2066726f6d42616c616e6365203c2076616c756561680f4e656f2e52756e74696d652e4c6f6700616c75666a00c36a51c39c630b006a52c3009c644400295472616e73666572206661696c65642e2066726f6d203d3d20746f206f722076616c7565203d3d203061680f4e656f2e52756e74696d652e4c6f6751616c75666a53c3640f006a00c36a52c3617c6581ec756a00c36a54c36a52c394617c6565e9756a51c36165fafc6a52c3936a56527ac46a51c36a56c3617c6549e975616a00c36a51c36a52c3615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667951616c756659c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46a00c3c00114907c907c9e630d006a51c3c001149c6348002d5472616e73666572206973206661696c65642e202866726f6d7c746f292061646472657320696e76616c69642e61680f4e656f2e52756e74696d652e4c6f6700616c75666a52c3009f6445002a5472616e73666572206973206661696c65642e207472616e736665722076616c7565206973203c3d203061680f4e656f2e52756e74696d652e4c6f6700616c75666a00c36168184e656f2e52756e74696d652e436865636b5769746e6573736346002b5472616e73666572206661696c65642e20636f6e747261637420696e766f6b65722069732076616c69642e61680f4e656f2e52756e74696d652e4c6f6700616c75666a51c3616579f36a54527ac46a00c3616577fb6a55527ac4006a56527ac46a54c3640e006a55c36a56527ac4621b006a00c361655fe86a58527ac46a55c36a58c3946a56527ac46a56c36a52c39f644200275472616e73666572206973206661696c65642e2066726f6d42616c616e6365203c2076616c756561680f4e656f2e52756e74696d652e4c6f6700616c75666a00c36a51c39c630b006a52c3009c644400295472616e73666572206661696c65642e2066726f6d203d3d20746f206f722076616c7565203d3d203061680f4e656f2e52756e74696d652e4c6f6751616c75666a54c3640f006a00c36a52c3617c6505ea756a00c36a55c36a52c394617c65e9e6756a51c361657efa6a52c3936a57527ac46a51c36a57c3617c65cde6756a51c36a52c36a53c36152726516ee75616a00c36a51c36a52c3615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667951616c756600c56b0d636f6e747261637441646d696e616c756600c56b10636f6e7472616374496e697454696d65616c756600c56b10746f74616c546f6b656e537570706c79616c756600c56b0862616c616e63655f616c756600c56b086c6f636b7570735f616c756600c56b0c6f7463417070726f7665645f616c756652c56b6c766b00527ac46c766b51527ac46152c5766a00c3007cc4766a51c3517cc4616c756654c56b6c766b00527ac46c766b51527ac46c766b52527ac46a00c351c301007e6a51c37e6a53527ac46a00c300c36a53c36a52c3615272680f4e656f2e53746f726167652e507574616c756653c56b6c766b00527ac46c766b51527ac46a00c351c301007e6a51c37e6a52527ac46a00c300c36a52c3617c68124e656f2e53746f726167652e44656c657465616c756653c56b6c766b00527ac46c766b51527ac46a00c351c301007e6a51c37e6a52527ac46a00c300c36a52c3617c680f4e656f2e53746f726167652e476574616c7566', - 'hex', -); - -export const timeCoinContract = new Contract({ - script: timeCoinContractScript, - parameterList: [ContractParameterType.String, ContractParameterType.Array], - - returnType: ContractParameterType.ByteArray, - name: 'TimeCoin', - codeVersion: '1', - author: 'Time Innovation Pte. Ltd.', - email: 'info@timeinnovation.io', - description: 'https://timeinnovation.io', - contractProperties: ContractPropertyState.HasStorageDynamicInvokePayable, -}); - -export const deepBrainContractScript = Buffer.from( - '011ac56b6c766b00527ac46c766b51527ac4616168164e656f2e52756e74696d652e47657454726967676572009c6c766b54527ac46c766b54c3643e0061149cc874ad8a8410fbe5f7aa8bdec559b2532f70ff6168184e656f2e52756e74696d652e436865636b5769746e6573736c766b55527ac46259036168164e656f2e52756e74696d652e47657454726967676572609c6c766b56527ac46c766b56c364b702616c766b00c304696e6974876c766b57527ac46c766b57c3641100616552036c766b55527ac46206036c766b00c30a6d696e74546f6b656e73876c766b58527ac46c766b58c36411006165a6066c766b55527ac462d8026c766b00c30b746f74616c537570706c79876c766b59527ac46c766b59c36411006165e5086c766b55527ac462a9026c766b00c30a746f74616c546f6b656e876c766b5a527ac46c766b5ac36411006165b7026c766b55527ac4627b026c766b00c30869636f546f6b656e876c766b5b527ac46c766b5bc364110061656d0b6c766b55527ac4624f026c766b00c30669636f4e656f876c766b5c527ac46c766b5cc36411006165a80b6c766b55527ac46225026c766b00c306656e6449636f876c766b5d527ac46c766b5dc36411006165d40b6c766b55527ac462fb016c766b00c3046e616d65876c766b5e527ac46c766b5ec36411006165e6016c766b55527ac462d3016c766b00c30673796d626f6c876c766b5f527ac46c766b5fc36411006165d2016c766b55527ac462a9016c766b00c3087472616e73666572876c766b60527ac46c766b60c3647900616c766b51c3c0539c009c6c766b0114527ac46c766b0114c3640e00006c766b55527ac46264016c766b51c300c36c766b0111527ac46c766b51c351c36c766b0112527ac46c766b51c352c36c766b0113527ac46c766b0111c36c766b0112c36c766b0113c361527265a0076c766b55527ac46215016c766b00c30962616c616e63654f66876c766b0115527ac46c766b0115c3644d00616c766b51c3c0519c009c6c766b0117527ac46c766b0117c3640e00006c766b55527ac462cd006c766b51c300c36c766b0116527ac46c766b0116c3616579096c766b55527ac462aa006c766b00c308646563696d616c73876c766b0118527ac46c766b0118c36411006165b0006c766b55527ac4627c0061616533106c766b52527ac4616528146c766b53527ac46c766b53c300907c907ca1630e006c766b52c3c000a0620400006c766b0119527ac46c766b0119c3642f00616c766b52c36c766b53c3617c06726566756e6453c168124e656f2e52756e74696d652e4e6f746966796161006c766b55527ac46203006c766b55c3616c756600c56b0e44656570427261696e20436f696e616c756600c56b03444243616c756600c56b58616c756600c56b0800009108c7369500616c756653c56b616168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c79617c680f4e656f2e53746f726167652e4765746c766b00527ac46c766b00c3c000a06c766b51527ac46c766b51c3640e00006c766b52527ac46217036168164e656f2e53746f726167652e476574436f6e7465787414bebf52398ff3e133126e5b4a98fd617d964cfb97080000b2d3595bf006615272680f4e656f2e53746f726167652e507574610014bebf52398ff3e133126e5b4a98fd617d964cfb97080000b2d3595bf006615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f74696679616168164e656f2e53746f726167652e476574436f6e7465787414f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9080000869eae29d500615272680f4e656f2e53746f726167652e507574610014f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9080000869eae29d500615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f74696679616168164e656f2e53746f726167652e476574436f6e7465787414d1bb74c15125a9645541a68fd30502e389c444d208000038e5be87aa00615272680f4e656f2e53746f726167652e507574610014d1bb74c15125a9645541a68fd30502e389c444d208000038e5be87aa00615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f74696679616168164e656f2e53746f726167652e476574436f6e746578741437743bc4b40df893cbb0f73bca21079c7edb625c080000d9e9ac2d7803615272680f4e656f2e53746f726167652e50757461001437743bc4b40df893cbb0f73bca21079c7edb625c080000d9e9ac2d7803615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f74696679616168164e656f2e53746f726167652e476574436f6e7465787414c0f7dcf9919cbf48408ef2f32c965aaa3d7ad4710800008a5d78456301615272680f4e656f2e53746f726167652e507574610014c0f7dcf9919cbf48408ef2f32c965aaa3d7ad4710800008a5d78456301615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f74696679616168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c79080000d39eec7f4b0d615272680f4e656f2e53746f726167652e50757461516c766b52527ac46203006c766b52c3616c75665dc56b616165f30b6c766b00527ac46c766b00c3c0009c6c766b59527ac46c766b59c3640f0061006c766b5a527ac46236026168184e656f2e426c6f636b636861696e2e4765744865696768746168184e656f2e426c6f636b636861696e2e4765744865616465726168174e656f2e4865616465722e47657454696d657374616d706c766b51527ac46c766b51c30450c7335a946c766b52527ac461655c0f6c766b53527ac46c766b00c36c766b53c36c766b52c361527265b1106c766b54527ac46c766b54c3009c6c766b5b527ac46c766b5bc3640f0061006c766b5a527ac46284016c766b52c36165c5066c766b55527ac46c766b00c36c766b54c36c766b55c361527265d4076c766b56527ac46c766b56c3009c6c766b5c527ac46c766b5cc3640f0061006c766b5a527ac46236016168164e656f2e53746f726167652e476574436f6e746578746c766b00c3617c680f4e656f2e53746f726167652e4765746c766b57527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b00c36c766b56c36c766b57c393615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c79617c680f4e656f2e53746f726167652e4765746c766b58527ac46168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c796c766b56c36c766b58c393615272680f4e656f2e53746f726167652e50757461006c766b00c36c766b56c3615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667961516c766b5a527ac46203006c766b5ac3616c756651c56b616168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c79617c680f4e656f2e53746f726167652e4765746c766b00527ac46203006c766b00c3616c75665bc56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b52c300a16c766b55527ac46c766b55c3640e00006c766b56527ac46204026c766b00c36168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b57527ac46c766b57c3640e00006c766b56527ac462c8016c766b00c36c766b51c39c6c766b58527ac46c766b58c3640e00516c766b56527ac462a3016168164e656f2e53746f726167652e476574436f6e746578746c766b00c3617c680f4e656f2e53746f726167652e4765746c766b53527ac46c766b53c36c766b52c39f6c766b59527ac46c766b59c3640e00006c766b56527ac46246016c766b53c36c766b52c39c6c766b5a527ac46c766b5ac3643b006168164e656f2e53746f726167652e476574436f6e746578746c766b00c3617c68124e656f2e53746f726167652e44656c657465616241006168164e656f2e53746f726167652e476574436f6e746578746c766b00c36c766b53c36c766b52c394615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e746578746c766b51c3617c680f4e656f2e53746f726167652e4765746c766b54527ac46168164e656f2e53746f726167652e476574436f6e746578746c766b51c36c766b54c36c766b52c393615272680f4e656f2e53746f726167652e507574616c766b00c36c766b51c36c766b52c3615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667961516c766b56527ac46203006c766b56c3616c756652c56b6c766b00527ac4616168164e656f2e53746f726167652e476574436f6e746578746c766b00c3617c680f4e656f2e53746f726167652e4765746c766b51527ac46203006c766b51c3616c756652c56b616168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c79617c680f4e656f2e53746f726167652e4765746c766b00527ac46c766b00c3080000d39eec7f4b0d946c766b51527ac46203006c766b51c3616c756652c56b616168164e656f2e53746f726167652e476574436f6e746578740669636f4e656f617c680f4e656f2e53746f726167652e4765746c766b00527ac46c766b00c36c766b51527ac46203006c766b51c3616c756655c56b61149cc874ad8a8410fbe5f7aa8bdec559b2532f70ff6168184e656f2e52756e74696d652e436865636b5769746e657373009c6c766b52527ac46c766b52c3640e00006c766b53527ac4624e016168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c79617c680f4e656f2e53746f726167652e4765746c766b00527ac408000064a7b3b6e00d6c766b00c3946c766b51527ac46c766b51c300a16c766b54527ac46c766b54c3640f0061006c766b53527ac462d7006168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c7908000064a7b3b6e00d615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e74657874149cc874ad8a8410fbe5f7aa8bdec559b2532f70ff6c766b51c3615272680f4e656f2e53746f726167652e5075746100149cc874ad8a8410fbe5f7aa8bdec559b2532f70ff6c766b51c3615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667961516c766b53527ac46203006c766b53c3616c756658c56b6c766b00527ac4616c766b00c302100ea0009c6c766b51527ac46c766b51c3641400610500b864d9456c766b52527ac462ef006c766b00c3026054a0009c6c766b53527ac46c766b53c3641400610500d45885436c766b52527ac462c4006c766b00c303c0a800a0009c6c766b54527ac46c766b54c3641400610500f04c31416c766b52527ac46298006c766b00c303805101a0009c6c766b55527ac46c766b55c36414006105000c41dd3e6c766b52527ac4626c006c766b00c30380f403a0009c6c766b56527ac46c766b56c36414006105002835893c6c766b52527ac46240006c766b00c303008c0aa0009c6c766b57527ac46c766b57c3641400610500601de1376c766b52527ac4621400610500980539336c766b52527ac46203006c766b52c3616c75665ec56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b51c30400e1f505966c766b52c3956c766b53527ac46168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c79617c680f4e656f2e53746f726167652e4765746c766b54527ac46168164e656f2e53746f726167652e476574436f6e746578740669636f4e656f617c680f4e656f2e53746f726167652e4765746c766b55527ac408000064a7b3b6e00d6c766b54c3946c766b56527ac46c766b56c300a16c766b57527ac46c766b57c3643900616c766b00c36c766b51c3617c06726566756e6453c168124e656f2e52756e74696d652e4e6f7469667961006c766b58527ac4620c026c766b56c36c766b53c39f6c766b59527ac46c766b59c3649701616c766b56c36c766b52c3966c766b5a527ac46c766b5ac36c766b52c3956c766b53527ac46c766b51c36c766b5ac30400e1f50595946c766b5b527ac46c766b00c36c766b5bc3617c06726566756e6453c168124e656f2e52756e74696d652e4e6f74696679616c766b56c36c766b53c3946c766b5c527ac46168164e656f2e53746f726167652e476574436f6e74657874149cc874ad8a8410fbe5f7aa8bdec559b2532f70ff6c766b5cc3615272680f4e656f2e53746f726167652e507574616168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c79617c680f4e656f2e53746f726167652e4765746c766b5d527ac46168164e656f2e53746f726167652e476574436f6e746578740b746f74616c537570706c796c766b5dc36c766b5cc393615272680f4e656f2e53746f726167652e507574616c766b5ac30400e1f505956a51527ac400149cc874ad8a8410fbe5f7aa8bdec559b2532f70ff6c766b5cc3615272087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667961616c766b55c36c766b51c3936c766b55527ac46168164e656f2e53746f726167652e476574436f6e746578740669636f4e656f6c766b55c3615272680f4e656f2e53746f726167652e507574616c766b53c36c766b58527ac46203006c766b58c3616c756657c56b6161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b00527ac46c766b00c361681d4e656f2e5472616e73616374696f6e2e4765745265666572656e6365736c766b51527ac4616c766b51c36c766b52527ac4006c766b53527ac4629d006c766b52c36c766b53c3c36c766b54527ac4616c766b54c36168154e656f2e4f75747075742e47657441737365744964209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c6c766b55527ac46c766b55c3642d006c766b54c36168184e656f2e4f75747075742e476574536372697074486173686c766b56527ac4622c00616c766b53c351936c766b53527ac46c766b53c36c766b52c3c09f635aff006c766b56527ac46203006c766b56c3616c756651c56b6161682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686c766b00527ac46203006c766b00c3616c756658c56b6c766b00527ac46c766b51527ac46c766b52527ac4616168164e656f2e53746f726167652e476574436f6e746578746c766b00c36c766b52c37e617c680f4e656f2e53746f726167652e4765746c766b53527ac46c766b52c3616558016c766b53c3946c766b54527ac46c766b54c300a0009c6c766b55527ac46c766b55c3643900616c766b00c36c766b51c3617c06726566756e6453c168124e656f2e52756e74696d652e4e6f7469667961006c766b56527ac462f4006c766b54c36c766b51c39f6c766b57527ac46c766b57c3648700616c766b00c36c766b51c36c766b54c394617c06726566756e6453c168124e656f2e52756e74696d652e4e6f74696679616168164e656f2e53746f726167652e476574436f6e746578746c766b00c36c766b52c37e6c766b54c36c766b53c393615272680f4e656f2e53746f726167652e507574616c766b54c36c766b56527ac46256006168164e656f2e53746f726167652e476574436f6e746578746c766b00c36c766b52c37e6c766b51c36c766b53c393615272680f4e656f2e53746f726167652e507574616c766b51c36c766b56527ac46203006c766b56c3616c756655c56b6c766b00527ac4616c766b00c3056361705f31876321006c766b00c3056361705f32876312006c766b00c3056361705f3387620400516c766b51527ac46c766b51c3641400610500e87648176c766b52527ac4626d006c766b00c3056361705f34876c766b53527ac46c766b53c3641400610500d0ed902e6c766b52527ac46241006c766b00c3056361705f35876c766b54527ac46c766b54c364140061050088526a746c766b52527ac462150061060010a5d4e8006c766b52527ac46203006c766b52c3616c756658c56b6161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b00527ac46c766b00c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736c766b51527ac4006c766b52527ac4616c766b51c36c766b53527ac4006c766b54527ac462cd006c766b53c36c766b54c3c36c766b55527ac4616c766b55c36168184e656f2e4f75747075742e47657453637269707448617368616584fc907c907c9e6345006c766b55c36168154e656f2e4f75747075742e47657441737365744964209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c620400006c766b56527ac46c766b56c3642d00616c766b52c36c766b55c36168134e656f2e4f75747075742e47657456616c7565936c766b52527ac461616c766b54c351936c766b54527ac46c766b54c36c766b53c3c09f632aff6c766b52c36c766b57527ac46203006c766b57c3616c75665cc56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b52c3009f6c766b53527ac46c766b53c3643900616c766b00c36c766b51c3617c06726566756e6453c168124e656f2e52756e74696d652e4e6f7469667961006c766b54527ac462ca016c766b52c302100ea0009c6c766b55527ac46c766b55c3642400616c766b00c36c766b51c3056361705f31615272657bfb6c766b54527ac4628f016c766b52c3026054a0009c6c766b56527ac46c766b56c3642400616c766b00c36c766b51c3056361705f326152726540fb6c766b54527ac46254016c766b52c303c0a800a0009c6c766b57527ac46c766b57c3642400616c766b00c36c766b51c3056361705f336152726504fb6c766b54527ac46218016c766b52c303805101a0009c6c766b58527ac46c766b58c3642400616c766b00c36c766b51c3056361705f3461527265c8fa6c766b54527ac462dc006c766b52c30380f403a0009c6c766b59527ac46c766b59c3642400616c766b00c36c766b51c3056361705f35615272658cfa6c766b54527ac462a0006c766b52c303008c0aa0009c6c766b5a527ac46c766b5ac3642400616c766b00c36c766b51c3056361705f366152726550fa6c766b54527ac46264006c766b52c303008d27a0009c6c766b5b527ac46c766b5bc3641300616c766b51c36c766b54527ac4623900616c766b00c36c766b51c3617c06726566756e6453c168124e656f2e52756e74696d652e4e6f7469667961006c766b54527ac46203006c766b54c3616c7566', - 'hex', -); - -export const deepBrainContract = new Contract({ - script: deepBrainContractScript, - parameterList: [ContractParameterType.String, ContractParameterType.Array], - - returnType: ContractParameterType.ByteArray, - name: 'DBC Sale', - codeVersion: '1.0', - author: 'DeepBrainChain', - email: 'developer@deepbrainchain.org', - description: 'DBC Sale Contract', - contractProperties: ContractPropertyState.HasStorageDynamicInvokePayable, -}); diff --git a/packages/neo-one-node-vm/src/__data__/utils.ts b/packages/neo-one-node-vm/src/__data__/utils.ts deleted file mode 100644 index 6c740bfa09..0000000000 --- a/packages/neo-one-node-vm/src/__data__/utils.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { utils } from '@neo-one/client-common'; -import { StorageItem } from '@neo-one/node-core'; - -// tslint:disable-next-line no-any -export const verifyBlockchainSnapshot = (blockchain: any) => { - Object.entries(blockchain).forEach(([name, obj]) => { - if (typeof obj === 'object' && obj !== null) { - Object.entries(obj).forEach(([mockName, maybeMock]) => { - if (maybeMock != undefined && maybeMock.mock != undefined) { - expect(`${name}.${mockName}`).toMatchSnapshot(); - expect(maybeMock.mock.calls).toMatchSnapshot(); - } - }); - } - }); -}; - -// tslint:disable-next-line no-any -export const verifyListeners = (listeners: any) => { - // tslint:disable-next-line no-any - Object.values(listeners).forEach((func: any) => { - expect(func.mock.calls).toMatchSnapshot(); - }); -}; - -export const expectItemBNEquals = (item: StorageItem, value: string) => { - expect(utils.fromSignedBuffer(item.value).toString(10)).toEqual(value); -}; - -// tslint:disable-next-line:no-any readonly-array -export const badSeen = (...args: any[]) => new Set(args); diff --git a/packages/neo-one-node-vm/src/__tests__/ApplicationEngine.test.ts b/packages/neo-one-node-vm/src/__tests__/ApplicationEngine.test.ts new file mode 100644 index 0000000000..cb727cec1a --- /dev/null +++ b/packages/neo-one-node-vm/src/__tests__/ApplicationEngine.test.ts @@ -0,0 +1,19 @@ +import { TriggerType, common, VMState } from '@neo-one/client-common'; +import { ApplicationEngine } from '../ApplicationEngine'; +import { Dispatcher } from '../Dispatcher'; + +describe('ApplicationEngine test', () => { + const dispatcher = new Dispatcher(); + beforeEach(() => { + dispatcher.reset(); + }); + test('withApplicationEngine -- NOP Script -- Halt', () => { + const engine = new ApplicationEngine(dispatcher); + engine.create({ + trigger: TriggerType.Application, + gas: common.TWENTY_FIXED8, + }); + + expect(engine.state).toEqual(VMState.BREAK); + }); +}); diff --git a/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts b/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts new file mode 100644 index 0000000000..39398edc01 --- /dev/null +++ b/packages/neo-one-node-vm/src/__tests__/Dispatcher.test.ts @@ -0,0 +1,108 @@ +import { common, ScriptBuilder, TriggerType, VMState } from '@neo-one/client-common'; +import { BN } from 'bn.js'; +import { ApplicationEngine } from '../ApplicationEngine'; +import { Dispatcher } from '../Dispatcher'; + +describe('Dispatcher Tests', () => { + const dispatcher = new Dispatcher(); + beforeEach(() => { + dispatcher.reset(); + }); + + test('withApplicationEngine -- NOP Script', () => { + const result = dispatcher.withApplicationEngine( + { + trigger: TriggerType.Application, + gas: common.ONE_HUNDRED_FIXED8, + }, + (engine) => { + expect(engine.state).toEqual(VMState.BREAK); + + const script = new ScriptBuilder(); + script.emitOp('PUSHNULL'); + + engine.loadScript({ script: script.build() }); + + engine.execute(); + + return { + gasconsumed: engine.gasConsumed, + state: engine.state, + stack: engine.resultStack, + }; + }, + ); + + expect(result.state).toEqual(VMState.HALT); + + // check that the dispatcher reset the engine. + const postEngine = new ApplicationEngine(dispatcher); + expect(postEngine.resultStack).toEqual([]); + expect(postEngine.gasConsumed).toEqual(new BN(0)); + expect(postEngine.state).toEqual(VMState.BREAK); + expect(() => postEngine.execute()).toThrow(); + }); + + test('Dispatcher correctly parses and initializes options', () => { + const standbyValidators = [ + '03b209fd4f53a7170ea4444e0cb0a6bb6a53c2bd016926989cf85f9b0fba17a70c', + '02df48f60e8f3e01c48ff40b9b7f1310d7a8b2a193188befe1c2e3df740e895093', + '03b8d9d5771d8f513aa0869b9cc8d50986403b78c6da36890638c3d46a5adce04a', + '02ca0e27697b9c248f6f16e085fd0061e26f44da85b58ee835c110caa5ec3ba554', + '024c7b7fb6c310fccf1ba33b082519d82964ea93868d676662d4a59ad548df0e7d', + '02aaec38470f6aad0042c6e877cfd8087d2676b0f516fddd362801b9bd3936399e', + '02486fd15702c4490a26703112a5cc1d0923fd697a33406bd5a1c00e0013b09a70', + ]; + const standbyMembers = [ + '023a36c72844610b4d34d1968662424011bf783ca9d984efa19a20babf5582f3fe', + '03708b860c1de5d87f5b151a12c2a99feebd2e8b315ee8e7cf8aa19692a9e18379', + '03c6aa6e12638b36e88adc1ccdceac4db9929575c3e03576c617c49cce7114a050', + '03204223f8c86b8cd5c89ef12e4f0dbb314172e9241e30c9ef2293790793537cf0', + '02a62c915cf19c7f19a50ec217e79fac2439bbaad658493de0c7d8ffa92ab0aa62', + '03409f31f0d66bdc2f70a9730b66fe186658f84a8018204db01c106edc36553cd0', + '0288342b141c30dc8ffcde0204929bb46aed5756b41ef4a56778d15ada8f0c6654', + '020f2887f41474cfeb11fd262e982051c1541418137c02a0f4961af911045de639', + '0222038884bbd1d8ff109ed3bdef3542e768eef76c1247aea8bc8171f532928c30', + '03d281b42002647f0113f36c7b8efb30db66078dfaaa9ab3ff76d043a98d512fde', + '02504acbc1f4b3bdad1d86d6e1a08603771db135a73e61c9d565ae06a1938cd2ad', + '0226933336f1b75baa42d42b71d9091508b638046d19abd67f4e119bf64a7cfb4d', + '03cdcea66032b82f5c30450e381e5295cae85c5e6943af716cc6b646352a6067dc', + '02cd5a5547119e24feaa7c2a0f37b8c9366216bab7054de0065c9be42084003c8a', + ]; + const standbyCommittee = standbyValidators.concat(standbyMembers).concat('random hash'); + const input = { + magic: 5195086 + 1, + addressVersion: 0x35 + 1, + standbyCommittee, + committeeMembersCount: standbyCommittee.length, + validatorsCount: standbyValidators.length, + millisecondsPerBlock: 15000 + 1, + memoryPoolMaxTransactions: 50000 + 1, + }; + + const newDis = new Dispatcher({ protocolSettings: input }); + const result = newDis.getConfig(); + expect(result.magic).toEqual(input.magic); + expect(result.addressVersion).toEqual(input.addressVersion); + expect(result.standbyCommittee).toEqual(standbyCommittee); + expect(result.committeeMembersCount).toEqual(input.committeeMembersCount); + expect(result.validatorsCount).toEqual(input.validatorsCount); + expect(result.seedList).toEqual([ + 'seed1.neo.org:10333', + 'seed2.neo.org:10333', + 'seed3.neo.org:10333', + 'seed4.neo.org:10333', + 'seed5.neo.org:10333', + ]); + expect(result.millisecondsPerBlock).toEqual(input.millisecondsPerBlock); + expect(result.memoryPoolMaxTransactions).toEqual(input.memoryPoolMaxTransactions); + }); + + test('Dispatcher returns config without initializing config', () => { + expect(dispatcher.getConfig()).toBeDefined(); + }); + + test.only('test output only', () => { + console.log(dispatcher.test()); + }); +}); diff --git a/packages/neo-one-node-vm/src/__tests__/__snapshots__/execute.test.ts.snap b/packages/neo-one-node-vm/src/__tests__/__snapshots__/execute.test.ts.snap deleted file mode 100644 index d9123227ce..0000000000 --- a/packages/neo-one-node-vm/src/__tests__/__snapshots__/execute.test.ts.snap +++ /dev/null @@ -1,69535 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 1`] = `"0"`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 2`] = `"contract.get"`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 3`] = ` -Array [ - Array [ - Object { - "hash": "cbf29df42fb950a4456787ec4ebf2076795f8948", - }, - ], - Array [ - Object { - "hash": "cbf29df42fb950a4456787ec4ebf2076795f8948", - }, - ], - Array [ - Object { - "hash": "cbf29df42fb950a4456787ec4ebf2076795f8948", - }, - ], - Array [ - Object { - "hash": "cbf29df42fb950a4456787ec4ebf2076795f8948", - }, - ], - Array [ - Object { - "hash": "cbf29df42fb950a4456787ec4ebf2076795f8948", - }, - ], -] -`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 4`] = `"contract.tryGet"`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 5`] = `Array []`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 6`] = `"storageItem.add"`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 7`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cbf29df42fb950a4456787ec4ebf2076795f8948", - "key": "6d616e61676572", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "1a1af8a9f46ebcaa47f3b2f967dd7bf606d89316", - }, - ], -] -`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 8`] = `"storageItem.update"`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 9`] = `Array []`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 10`] = `"storageItem.get"`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 11`] = `Array []`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 12`] = `"storageItem.tryGet"`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 13`] = ` -Array [ - Array [ - Object { - "hash": "cbf29df42fb950a4456787ec4ebf2076795f8948", - "key": "6d616e61676572", - }, - ], - Array [ - Object { - "hash": "cbf29df42fb950a4456787ec4ebf2076795f8948", - "key": "6f776e6572", - }, - ], - Array [ - Object { - "hash": "cbf29df42fb950a4456787ec4ebf2076795f8948", - "key": "6d616e61676572", - }, - ], -] -`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 14`] = `"storageItem.delete"`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 15`] = `Array []`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 16`] = `"action.add"`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 17`] = `Array []`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 18`] = `"contract.get"`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 19`] = ` -Array [ - Array [ - Object { - "hash": "cbf29df42fb950a4456787ec4ebf2076795f8948", - }, - ], - Array [ - Object { - "hash": "cbf29df42fb950a4456787ec4ebf2076795f8948", - }, - ], - Array [ - Object { - "hash": "cbf29df42fb950a4456787ec4ebf2076795f8948", - }, - ], - Array [ - Object { - "hash": "cbf29df42fb950a4456787ec4ebf2076795f8948", - }, - ], - Array [ - Object { - "hash": "cbf29df42fb950a4456787ec4ebf2076795f8948", - }, - ], -] -`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 20`] = `"contract.tryGet"`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 21`] = `Array []`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 22`] = `"storageItem.add"`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 23`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cbf29df42fb950a4456787ec4ebf2076795f8948", - "key": "6d616e61676572", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "1a1af8a9f46ebcaa47f3b2f967dd7bf606d89316", - }, - ], -] -`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 24`] = `"storageItem.update"`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 25`] = `Array []`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 26`] = `"storageItem.get"`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 27`] = `Array []`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 28`] = `"storageItem.tryGet"`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 29`] = ` -Array [ - Array [ - Object { - "hash": "cbf29df42fb950a4456787ec4ebf2076795f8948", - "key": "6d616e61676572", - }, - ], - Array [ - Object { - "hash": "cbf29df42fb950a4456787ec4ebf2076795f8948", - "key": "6f776e6572", - }, - ], - Array [ - Object { - "hash": "cbf29df42fb950a4456787ec4ebf2076795f8948", - "key": "6d616e61676572", - }, - ], -] -`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 30`] = `"storageItem.delete"`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 31`] = `Array []`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 32`] = `"action.add"`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 33`] = `Array []`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 34`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "47657453656e6465722829206e6f2073656e646572", - }, - ], - "scriptHash": "cbf29df42fb950a4456787ec4ebf2076795f8948", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6465706c6f79202d20556e6b6e6f776e206f7065726174696f6e2e", - }, - ], - "scriptHash": "cbf29df42fb950a4456787ec4ebf2076795f8948", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "4661696c757265", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6465706c6f79", - }, - ], - "scriptHash": "cbf29df42fb950a4456787ec4ebf2076795f8948", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "47657453656e6465722829206e6f2073656e646572", - }, - ], - "scriptHash": "cbf29df42fb950a4456787ec4ebf2076795f8948", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7365744d616e61676572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "1a1af8a9f46ebcaa47f3b2f967dd7bf606d89316", - }, - ], - "scriptHash": "cbf29df42fb950a4456787ec4ebf2076795f8948", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "53756363657373", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7365744d616e61676572", - }, - ], - "scriptHash": "cbf29df42fb950a4456787ec4ebf2076795f8948", - }, - ], -] -`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 35`] = `Array []`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 36`] = `Array []`; - -exports[`execute Aphelion exchange deploy + set manager - CALL_I opcode 37`] = `Array []`; - -exports[`execute Bridge Protocol publish 1`] = `"0"`; - -exports[`execute Bridge Protocol publish 2`] = `"contract.get"`; - -exports[`execute Bridge Protocol publish 3`] = ` -Array [ - Array [ - Object { - "hash": "484cd8df57690eec73a5b44296bf94789f58fd78", - }, - ], - Array [ - Object { - "hash": "484cd8df57690eec73a5b44296bf94789f58fd78", - }, - ], - Array [ - Object { - "hash": "484cd8df57690eec73a5b44296bf94789f58fd78", - }, - ], - Array [ - Object { - "hash": "484cd8df57690eec73a5b44296bf94789f58fd78", - }, - ], - Array [ - Object { - "hash": "484cd8df57690eec73a5b44296bf94789f58fd78", - }, - ], - Array [ - Object { - "hash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - }, - ], - Array [ - Object { - "hash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - }, - ], - Array [ - Object { - "hash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - }, - ], - Array [ - Object { - "hash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - }, - ], - Array [ - Object { - "hash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - }, - ], - Array [ - Object { - "hash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - }, - ], - Array [ - Object { - "hash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - }, - ], - Array [ - Object { - "hash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - }, - ], - Array [ - Object { - "hash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - }, - ], - Array [ - Object { - "hash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - }, - ], - Array [ - Object { - "hash": "484cd8df57690eec73a5b44296bf94789f58fd78", - }, - ], - Array [ - Object { - "hash": "484cd8df57690eec73a5b44296bf94789f58fd78", - }, - ], - Array [ - Object { - "hash": "484cd8df57690eec73a5b44296bf94789f58fd78", - }, - ], - Array [ - Object { - "hash": "484cd8df57690eec73a5b44296bf94789f58fd78", - }, - ], - Array [ - Object { - "hash": "484cd8df57690eec73a5b44296bf94789f58fd78", - }, - ], - Array [ - Object { - "hash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - }, - ], - Array [ - Object { - "hash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - }, - ], -] -`; - -exports[`execute Bridge Protocol publish 4`] = `"contract.tryGet"`; - -exports[`execute Bridge Protocol publish 5`] = `Array []`; - -exports[`execute Bridge Protocol publish 6`] = `"storageItem.add"`; - -exports[`execute Bridge Protocol publish 7`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "484cd8df57690eec73a5b44296bf94789f58fd78", - "key": "30e31779f56fb490e76cde7374a917ff8c8a4503", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "001092f50c91fb00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "484cd8df57690eec73a5b44296bf94789f58fd78", - "key": "746f74616c5f746f6c6c5f737570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "001092f50c91fb00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - "key": "696e697469616c697a6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - "key": "61646d696e73", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "8001001430e31779f56fb490e76cde7374a917ff8c8a4503", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - "key": "66656573", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "8003000000000000", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "484cd8df57690eec73a5b44296bf94789f58fd78", - "key": "a1502468141d9b6832da9d2e455bde41779faea5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - "key": "aefaa22d12d1222db572901ba81478da2803bb2b", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "800300fd8f022d2d2d2d2d424547494e20504750205055424c4943204b455920424c4f434b2d2d2d2d2d0d0a56657273696f6e3a204f70656e5047502e6a732076332e312e300d0a436f6d6d656e743a2068747470733a2f2f6f70656e7067706a732e6f72670d0a0d0a786a4d45572f6c343252594a4b775942424148615277384241516441356c6e326d70414150374864645834506c54774f51425658305a475942542b720a6636784757624c786833504e4b454a796157526e5a53425159584e7a634739796443413859573576626b4269636d6c6b5a32567759584e7a634739790a64433570627a37436477515146676f414b515543572f6c343251594c435163494177494a454b6755654e6f6f413773724242554943674944466749420a41686b4241687344416834424141414148674541727962314574726c53315870587558636c595568506b44345055516c7835587a6c3070354e526e740a735334412f693230434d57346e67312b42762f5548316266496247355871736742666e4e4c4a6a744f584e74413355507a6a6745572f6c343252494b0a4b7759424241475856514546415145485142545944733873494d2b5669446a52336567325065746646715962632f564a536535575a316b4b677234530a4177454942384a68424267574341415442514a622b586a5a4352436f46486a614b414f374b77496244414141457145412f3342596f5a5641666b31380a704f4d556f612f5a446e32476e4a5447312f4f456c684b4a4558553543614944415039315032373557527a686d77364a337a6a55753279652f5777510a5950492f414e434841532f766c344c6443413d3d0d0a3d336f514b0d0a2d2d2d2d2d454e4420504750205055424c4943204b455920424c4f434b2d2d2d2d2d0d0a0d0a000080010014a1502468141d9b6832da9d2e455bde41779faea5", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - "key": "a1502468141d9b6832da9d2e455bde41779faea5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "aefaa22d12d1222db572901ba81478da2803bb2b", - }, - ], -] -`; - -exports[`execute Bridge Protocol publish 8`] = `"storageItem.update"`; - -exports[`execute Bridge Protocol publish 9`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "484cd8df57690eec73a5b44296bf94789f58fd78", - "key": "30e31779f56fb490e76cde7374a917ff8c8a4503", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "001092f50c91fb00", - }, - Object { - "flags": 0, - "value": "001092f50c91fb00", - }, - ], -] -`; - -exports[`execute Bridge Protocol publish 10`] = `"storageItem.get"`; - -exports[`execute Bridge Protocol publish 11`] = `Array []`; - -exports[`execute Bridge Protocol publish 12`] = `"storageItem.tryGet"`; - -exports[`execute Bridge Protocol publish 13`] = ` -Array [ - Array [ - Object { - "hash": "484cd8df57690eec73a5b44296bf94789f58fd78", - "key": "746f74616c5f746f6c6c5f737570706c79", - }, - ], - Array [ - Object { - "hash": "484cd8df57690eec73a5b44296bf94789f58fd78", - "key": "30e31779f56fb490e76cde7374a917ff8c8a4503", - }, - ], - Array [ - Object { - "hash": "484cd8df57690eec73a5b44296bf94789f58fd78", - "key": "30e31779f56fb490e76cde7374a917ff8c8a4503", - }, - ], - Array [ - Object { - "hash": "484cd8df57690eec73a5b44296bf94789f58fd78", - "key": "746f74616c5f746f6c6c5f737570706c79", - }, - ], - Array [ - Object { - "hash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - "key": "696e697469616c697a6564", - }, - ], - Array [ - Object { - "hash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - "key": "61646d696e73", - }, - ], - Array [ - Object { - "hash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - "key": "66656573", - }, - ], - Array [ - Object { - "hash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - "key": "696e697469616c697a6564", - }, - ], - Array [ - Object { - "hash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - "key": "a1502468141d9b6832da9d2e455bde41779faea5", - }, - ], - Array [ - Object { - "hash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - "key": "aefaa22d12d1222db572901ba81478da2803bb2b", - }, - ], - Array [ - Object { - "hash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - "key": "66656573", - }, - ], - Array [ - Object { - "hash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - "key": "a1502468141d9b6832da9d2e455bde41779faea5", - }, - ], - Array [ - Object { - "hash": "484cd8df57690eec73a5b44296bf94789f58fd78", - "key": "a1502468141d9b6832da9d2e455bde41779faea5", - }, - ], - Array [ - Object { - "hash": "484cd8df57690eec73a5b44296bf94789f58fd78", - "key": "30e31779f56fb490e76cde7374a917ff8c8a4503", - }, - ], - Array [ - Object { - "hash": "484cd8df57690eec73a5b44296bf94789f58fd78", - "key": "a1502468141d9b6832da9d2e455bde41779faea5", - }, - ], - Array [ - Object { - "hash": "484cd8df57690eec73a5b44296bf94789f58fd78", - "key": "30e31779f56fb490e76cde7374a917ff8c8a4503", - }, - ], - Array [ - Object { - "hash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - "key": "aefaa22d12d1222db572901ba81478da2803bb2b", - }, - ], - Array [ - Object { - "hash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - "key": "a1502468141d9b6832da9d2e455bde41779faea5", - }, - ], -] -`; - -exports[`execute Bridge Protocol publish 14`] = `"storageItem.delete"`; - -exports[`execute Bridge Protocol publish 15`] = `Array []`; - -exports[`execute Bridge Protocol publish 16`] = `"action.add"`; - -exports[`execute Bridge Protocol publish 17`] = `Array []`; - -exports[`execute Bridge Protocol publish 18`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "4465706c6f796564", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "30e31779f56fb490e76cde7374a917ff8c8a4503", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "001092f50c91fb00", - }, - ], - "scriptHash": "484cd8df57690eec73a5b44296bf94789f58fd78", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "30e31779f56fb490e76cde7374a917ff8c8a4503", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "001092f50c91fb00", - }, - ], - "scriptHash": "484cd8df57690eec73a5b44296bf94789f58fd78", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "a1502468141d9b6832da9d2e455bde41779faea5", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "30e31779f56fb490e76cde7374a917ff8c8a4503", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - ], - "scriptHash": "484cd8df57690eec73a5b44296bf94789f58fd78", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "5472616e73666572726564", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "30e31779f56fb490e76cde7374a917ff8c8a4503", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "a1502468141d9b6832da9d2e455bde41779faea5", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - ], - "scriptHash": "484cd8df57690eec73a5b44296bf94789f58fd78", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "800200077075626c69736880040014a1502468141d9b6832da9d2e455bde41779faea50014aefaa22d12d1222db572901ba81478da2803bb2b00fd8f022d2d2d2d2d424547494e20504750205055424c4943204b455920424c4f434b2d2d2d2d2d0d0a56657273696f6e3a204f70656e5047502e6a732076332e312e300d0a436f6d6d656e743a2068747470733a2f2f6f70656e7067706a732e6f72670d0a0d0a786a4d45572f6c343252594a4b775942424148615277384241516441356c6e326d70414150374864645834506c54774f51425658305a475942542b720a6636784757624c786833504e4b454a796157526e5a53425159584e7a634739796443413859573576626b4269636d6c6b5a32567759584e7a634739790a64433570627a37436477515146676f414b515543572f6c343251594c435163494177494a454b6755654e6f6f413773724242554943674944466749420a41686b4241687344416834424141414148674541727962314574726c53315870587558636c595568506b44345055516c7835587a6c3070354e526e740a735334412f693230434d57346e67312b42762f5548316266496247355871736742666e4e4c4a6a744f584e74413355507a6a6745572f6c343252494b0a4b7759424241475856514546415145485142545944733873494d2b5669446a52336567325065746646715962632f564a536535575a316b4b677234530a4177454942384a68424267574341415442514a622b586a5a4352436f46486a614b414f374b77496244414141457145412f3342596f5a5641666b31380a704f4d556f612f5a446e32476e4a5447312f4f456c684b4a4558553543614944415039315032373557527a686d77364a337a6a55753279652f5777510a5950492f414e434841532f766c344c6443413d3d0d0a3d336f514b0d0a2d2d2d2d2d454e4420504750205055424c4943204b455920424c4f434b2d2d2d2d2d0d0a0d0a0000", - }, - ], - "scriptHash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - }, - ], -] -`; - -exports[`execute Bridge Protocol publish 19`] = ` -Array [ - Array [ - Object { - "message": "Contract is initialized", - "scriptHash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - }, - ], - Array [ - Object { - "message": "οΏ½publishοΏ½οΏ½P$hοΏ½h2ڝ.E[οΏ½AwοΏ½οΏ½οΏ½οΏ½οΏ½οΏ½-οΏ½\\"-οΏ½rοΏ½οΏ½xοΏ½(οΏ½+οΏ½οΏ½-----BEGIN PGP PUBLIC KEY BLOCK----- -Version: OpenPGP.js v3.1.0 -Comment: https://openpgpjs.org - -xjMEW/l42RYJKwYBBAHaRw8BAQdA5ln2mpAAP7HddX4PlTwOQBVX0ZGYBT+r -f6xGWbLxh3PNKEJyaWRnZSBQYXNzcG9ydCA8YW5vbkBicmlkZ2VwYXNzcG9y -dC5pbz7CdwQQFgoAKQUCW/l42QYLCQcIAwIJEKgUeNooA7srBBUICgIDFgIB -AhkBAhsDAh4BAAAAHgEAryb1EtrlS1XpXuXclYUhPkD4PUQlx5Xzl0p5NRnt -sS4A/i20CMW4ng1+Bv/UH1bfIbG5XqsgBfnNLJjtOXNtA3UPzjgEW/l42RIK -KwYBBAGXVQEFAQEHQBTYDs8sIM+ViDjR3eg2PetfFqYbc/VJSe5WZ1kKgr4S -AwEIB8JhBBgWCAATBQJb+XjZCRCoFHjaKAO7KwIbDAAAEqEA/3BYoZVAfk18 -pOMUoa/ZDn2GnJTG1/OElhKJEXU5CaIDAP91P275WRzhmw6J3zjUu2ye/WwQ -YPI/ANCHAS/vl4LdCA== -=3oQK ------END PGP PUBLIC KEY BLOCK----- - -οΏ½οΏ½οΏ½-οΏ½\\"-οΏ½rοΏ½οΏ½xοΏ½(οΏ½+", - "scriptHash": "f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4", - }, - ], -] -`; - -exports[`execute Bridge Protocol publish 20`] = `Array []`; - -exports[`execute Bridge Protocol publish 21`] = `Array []`; - -exports[`execute Deep Brain transfers 1`] = `"0"`; - -exports[`execute Deep Brain transfers 2`] = `"contract.get"`; - -exports[`execute Deep Brain transfers 3`] = ` -Array [ - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], -] -`; - -exports[`execute Deep Brain transfers 4`] = `"contract.tryGet"`; - -exports[`execute Deep Brain transfers 5`] = `Array []`; - -exports[`execute Deep Brain transfers 6`] = `"storageItem.add"`; - -exports[`execute Deep Brain transfers 7`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "bebf52398ff3e133126e5b4a98fd617d964cfb97", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000b2d3595bf006", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000869eae29d500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "d1bb74c15125a9645541a68fd30502e389c444d2", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "000038e5be87aa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "37743bc4b40df893cbb0f73bca21079c7edb625c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000d9e9ac2d7803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "c0f7dcf9919cbf48408ef2f32c965aaa3d7ad471", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00008a5d78456301", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000d39eec7f4b0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "1c65bc389492f9b14c8a708bba1d013c428d9909", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e8755b958fde1d", - }, - ], -] -`; - -exports[`execute Deep Brain transfers 8`] = `"storageItem.update"`; - -exports[`execute Deep Brain transfers 9`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000869eae29d500", - }, - Object { - "flags": 0, - "value": "188a2a091f4bb700", - }, - ], -] -`; - -exports[`execute Deep Brain transfers 10`] = `"storageItem.get"`; - -exports[`execute Deep Brain transfers 11`] = `Array []`; - -exports[`execute Deep Brain transfers 12`] = `"storageItem.tryGet"`; - -exports[`execute Deep Brain transfers 13`] = ` -Array [ - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "bebf52398ff3e133126e5b4a98fd617d964cfb97", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "d1bb74c15125a9645541a68fd30502e389c444d2", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "37743bc4b40df893cbb0f73bca21079c7edb625c", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "c0f7dcf9919cbf48408ef2f32c965aaa3d7ad471", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "1c65bc389492f9b14c8a708bba1d013c428d9909", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "1c65bc389492f9b14c8a708bba1d013c428d9909", - }, - ], -] -`; - -exports[`execute Deep Brain transfers 14`] = `"storageItem.delete"`; - -exports[`execute Deep Brain transfers 15`] = `Array []`; - -exports[`execute Deep Brain transfers 16`] = `"action.add"`; - -exports[`execute Deep Brain transfers 17`] = `Array []`; - -exports[`execute Deep Brain transfers 18`] = `"header.get"`; - -exports[`execute Deep Brain transfers 19`] = `Array []`; - -exports[`execute Deep Brain transfers 20`] = `"0"`; - -exports[`execute Deep Brain transfers 21`] = `"contract.get"`; - -exports[`execute Deep Brain transfers 22`] = ` -Array [ - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], -] -`; - -exports[`execute Deep Brain transfers 23`] = `"contract.tryGet"`; - -exports[`execute Deep Brain transfers 24`] = `Array []`; - -exports[`execute Deep Brain transfers 25`] = `"storageItem.add"`; - -exports[`execute Deep Brain transfers 26`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "bebf52398ff3e133126e5b4a98fd617d964cfb97", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000b2d3595bf006", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000869eae29d500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "d1bb74c15125a9645541a68fd30502e389c444d2", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "000038e5be87aa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "37743bc4b40df893cbb0f73bca21079c7edb625c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000d9e9ac2d7803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "c0f7dcf9919cbf48408ef2f32c965aaa3d7ad471", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00008a5d78456301", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000d39eec7f4b0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "1c65bc389492f9b14c8a708bba1d013c428d9909", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e8755b958fde1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "b511fe310e31bdbeea50b5bcf00107ed35b8f79d", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "80d49f69cd74", - }, - ], -] -`; - -exports[`execute Deep Brain transfers 27`] = `"storageItem.update"`; - -exports[`execute Deep Brain transfers 28`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000869eae29d500", - }, - Object { - "flags": 0, - "value": "188a2a091f4bb700", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "188a2a091f4bb700", - }, - Object { - "flags": 0, - "value": "98b58a9f51d6b600", - }, - ], -] -`; - -exports[`execute Deep Brain transfers 29`] = `"storageItem.get"`; - -exports[`execute Deep Brain transfers 30`] = `Array []`; - -exports[`execute Deep Brain transfers 31`] = `"storageItem.tryGet"`; - -exports[`execute Deep Brain transfers 32`] = ` -Array [ - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "bebf52398ff3e133126e5b4a98fd617d964cfb97", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "d1bb74c15125a9645541a68fd30502e389c444d2", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "37743bc4b40df893cbb0f73bca21079c7edb625c", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "c0f7dcf9919cbf48408ef2f32c965aaa3d7ad471", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "1c65bc389492f9b14c8a708bba1d013c428d9909", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "1c65bc389492f9b14c8a708bba1d013c428d9909", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "b511fe310e31bdbeea50b5bcf00107ed35b8f79d", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "b511fe310e31bdbeea50b5bcf00107ed35b8f79d", - }, - ], -] -`; - -exports[`execute Deep Brain transfers 33`] = `"storageItem.delete"`; - -exports[`execute Deep Brain transfers 34`] = `Array []`; - -exports[`execute Deep Brain transfers 35`] = `"action.add"`; - -exports[`execute Deep Brain transfers 36`] = `Array []`; - -exports[`execute Deep Brain transfers 37`] = `"header.get"`; - -exports[`execute Deep Brain transfers 38`] = `Array []`; - -exports[`execute Deep Brain transfers 39`] = `"0"`; - -exports[`execute Deep Brain transfers 40`] = `"contract.get"`; - -exports[`execute Deep Brain transfers 41`] = ` -Array [ - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], -] -`; - -exports[`execute Deep Brain transfers 42`] = `"contract.tryGet"`; - -exports[`execute Deep Brain transfers 43`] = `Array []`; - -exports[`execute Deep Brain transfers 44`] = `"storageItem.add"`; - -exports[`execute Deep Brain transfers 45`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "bebf52398ff3e133126e5b4a98fd617d964cfb97", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000b2d3595bf006", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000869eae29d500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "d1bb74c15125a9645541a68fd30502e389c444d2", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "000038e5be87aa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "37743bc4b40df893cbb0f73bca21079c7edb625c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000d9e9ac2d7803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "c0f7dcf9919cbf48408ef2f32c965aaa3d7ad471", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00008a5d78456301", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000d39eec7f4b0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "1c65bc389492f9b14c8a708bba1d013c428d9909", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e8755b958fde1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "b511fe310e31bdbeea50b5bcf00107ed35b8f79d", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "80d49f69cd74", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "4951c0bbd42cb2e7e96a08662b0aa779c9a1c383", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "805fd38d7102", - }, - ], -] -`; - -exports[`execute Deep Brain transfers 46`] = `"storageItem.update"`; - -exports[`execute Deep Brain transfers 47`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000869eae29d500", - }, - Object { - "flags": 0, - "value": "188a2a091f4bb700", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "188a2a091f4bb700", - }, - Object { - "flags": 0, - "value": "98b58a9f51d6b600", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "98b58a9f51d6b600", - }, - Object { - "flags": 0, - "value": "1856b711e0d3b600", - }, - ], -] -`; - -exports[`execute Deep Brain transfers 48`] = `"storageItem.get"`; - -exports[`execute Deep Brain transfers 49`] = `Array []`; - -exports[`execute Deep Brain transfers 50`] = `"storageItem.tryGet"`; - -exports[`execute Deep Brain transfers 51`] = ` -Array [ - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "bebf52398ff3e133126e5b4a98fd617d964cfb97", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "d1bb74c15125a9645541a68fd30502e389c444d2", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "37743bc4b40df893cbb0f73bca21079c7edb625c", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "c0f7dcf9919cbf48408ef2f32c965aaa3d7ad471", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "1c65bc389492f9b14c8a708bba1d013c428d9909", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "1c65bc389492f9b14c8a708bba1d013c428d9909", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "b511fe310e31bdbeea50b5bcf00107ed35b8f79d", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "b511fe310e31bdbeea50b5bcf00107ed35b8f79d", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "4951c0bbd42cb2e7e96a08662b0aa779c9a1c383", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "4951c0bbd42cb2e7e96a08662b0aa779c9a1c383", - }, - ], -] -`; - -exports[`execute Deep Brain transfers 52`] = `"storageItem.delete"`; - -exports[`execute Deep Brain transfers 53`] = `Array []`; - -exports[`execute Deep Brain transfers 54`] = `"action.add"`; - -exports[`execute Deep Brain transfers 55`] = `Array []`; - -exports[`execute Deep Brain transfers 56`] = `"header.get"`; - -exports[`execute Deep Brain transfers 57`] = `Array []`; - -exports[`execute Deep Brain transfers 58`] = `"0"`; - -exports[`execute Deep Brain transfers 59`] = `"contract.get"`; - -exports[`execute Deep Brain transfers 60`] = ` -Array [ - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], -] -`; - -exports[`execute Deep Brain transfers 61`] = `"contract.tryGet"`; - -exports[`execute Deep Brain transfers 62`] = `Array []`; - -exports[`execute Deep Brain transfers 63`] = `"storageItem.add"`; - -exports[`execute Deep Brain transfers 64`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "bebf52398ff3e133126e5b4a98fd617d964cfb97", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000b2d3595bf006", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000869eae29d500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "d1bb74c15125a9645541a68fd30502e389c444d2", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "000038e5be87aa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "37743bc4b40df893cbb0f73bca21079c7edb625c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000d9e9ac2d7803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "c0f7dcf9919cbf48408ef2f32c965aaa3d7ad471", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00008a5d78456301", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000d39eec7f4b0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "1c65bc389492f9b14c8a708bba1d013c428d9909", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e8755b958fde1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "b511fe310e31bdbeea50b5bcf00107ed35b8f79d", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "80d49f69cd74", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "4951c0bbd42cb2e7e96a08662b0aa779c9a1c383", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "805fd38d7102", - }, - ], -] -`; - -exports[`execute Deep Brain transfers 65`] = `"storageItem.update"`; - -exports[`execute Deep Brain transfers 66`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000869eae29d500", - }, - Object { - "flags": 0, - "value": "188a2a091f4bb700", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "188a2a091f4bb700", - }, - Object { - "flags": 0, - "value": "98b58a9f51d6b600", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "98b58a9f51d6b600", - }, - Object { - "flags": 0, - "value": "1856b711e0d3b600", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "1c65bc389492f9b14c8a708bba1d013c428d9909", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e8755b958fde1d", - }, - Object { - "flags": 0, - "value": "684afbfe5c531e", - }, - ], -] -`; - -exports[`execute Deep Brain transfers 67`] = `"storageItem.get"`; - -exports[`execute Deep Brain transfers 68`] = `Array []`; - -exports[`execute Deep Brain transfers 69`] = `"storageItem.tryGet"`; - -exports[`execute Deep Brain transfers 70`] = ` -Array [ - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "bebf52398ff3e133126e5b4a98fd617d964cfb97", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "d1bb74c15125a9645541a68fd30502e389c444d2", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "37743bc4b40df893cbb0f73bca21079c7edb625c", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "c0f7dcf9919cbf48408ef2f32c965aaa3d7ad471", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "1c65bc389492f9b14c8a708bba1d013c428d9909", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "1c65bc389492f9b14c8a708bba1d013c428d9909", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "b511fe310e31bdbeea50b5bcf00107ed35b8f79d", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "b511fe310e31bdbeea50b5bcf00107ed35b8f79d", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "4951c0bbd42cb2e7e96a08662b0aa779c9a1c383", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "4951c0bbd42cb2e7e96a08662b0aa779c9a1c383", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "b511fe310e31bdbeea50b5bcf00107ed35b8f79d", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "b511fe310e31bdbeea50b5bcf00107ed35b8f79d", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "1c65bc389492f9b14c8a708bba1d013c428d9909", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "1c65bc389492f9b14c8a708bba1d013c428d9909", - }, - ], -] -`; - -exports[`execute Deep Brain transfers 71`] = `"storageItem.delete"`; - -exports[`execute Deep Brain transfers 72`] = ` -Array [ - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "b511fe310e31bdbeea50b5bcf00107ed35b8f79d", - }, - ], -] -`; - -exports[`execute Deep Brain transfers 73`] = `"action.add"`; - -exports[`execute Deep Brain transfers 74`] = `Array []`; - -exports[`execute Deep Brain transfers 75`] = `"header.get"`; - -exports[`execute Deep Brain transfers 76`] = `Array []`; - -exports[`execute Deep Brain transfers 77`] = `"0"`; - -exports[`execute Deep Brain transfers 78`] = `"contract.get"`; - -exports[`execute Deep Brain transfers 79`] = ` -Array [ - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], -] -`; - -exports[`execute Deep Brain transfers 80`] = `"contract.tryGet"`; - -exports[`execute Deep Brain transfers 81`] = `Array []`; - -exports[`execute Deep Brain transfers 82`] = `"storageItem.add"`; - -exports[`execute Deep Brain transfers 83`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "bebf52398ff3e133126e5b4a98fd617d964cfb97", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000b2d3595bf006", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000869eae29d500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "d1bb74c15125a9645541a68fd30502e389c444d2", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "000038e5be87aa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "37743bc4b40df893cbb0f73bca21079c7edb625c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000d9e9ac2d7803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "c0f7dcf9919cbf48408ef2f32c965aaa3d7ad471", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00008a5d78456301", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000d39eec7f4b0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "1c65bc389492f9b14c8a708bba1d013c428d9909", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e8755b958fde1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "b511fe310e31bdbeea50b5bcf00107ed35b8f79d", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "80d49f69cd74", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "4951c0bbd42cb2e7e96a08662b0aa779c9a1c383", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "805fd38d7102", - }, - ], -] -`; - -exports[`execute Deep Brain transfers 84`] = `"storageItem.update"`; - -exports[`execute Deep Brain transfers 85`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000869eae29d500", - }, - Object { - "flags": 0, - "value": "188a2a091f4bb700", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "188a2a091f4bb700", - }, - Object { - "flags": 0, - "value": "98b58a9f51d6b600", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "98b58a9f51d6b600", - }, - Object { - "flags": 0, - "value": "1856b711e0d3b600", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "1c65bc389492f9b14c8a708bba1d013c428d9909", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e8755b958fde1d", - }, - Object { - "flags": 0, - "value": "684afbfe5c531e", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "1c65bc389492f9b14c8a708bba1d013c428d9909", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "684afbfe5c531e", - }, - Object { - "flags": 0, - "value": "e8a9ce8cce551e", - }, - ], -] -`; - -exports[`execute Deep Brain transfers 86`] = `"storageItem.get"`; - -exports[`execute Deep Brain transfers 87`] = `Array []`; - -exports[`execute Deep Brain transfers 88`] = `"storageItem.tryGet"`; - -exports[`execute Deep Brain transfers 89`] = ` -Array [ - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "bebf52398ff3e133126e5b4a98fd617d964cfb97", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "d1bb74c15125a9645541a68fd30502e389c444d2", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "37743bc4b40df893cbb0f73bca21079c7edb625c", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "c0f7dcf9919cbf48408ef2f32c965aaa3d7ad471", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "1c65bc389492f9b14c8a708bba1d013c428d9909", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "1c65bc389492f9b14c8a708bba1d013c428d9909", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "b511fe310e31bdbeea50b5bcf00107ed35b8f79d", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "b511fe310e31bdbeea50b5bcf00107ed35b8f79d", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "4951c0bbd42cb2e7e96a08662b0aa779c9a1c383", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "4951c0bbd42cb2e7e96a08662b0aa779c9a1c383", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "b511fe310e31bdbeea50b5bcf00107ed35b8f79d", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "b511fe310e31bdbeea50b5bcf00107ed35b8f79d", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "1c65bc389492f9b14c8a708bba1d013c428d9909", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "1c65bc389492f9b14c8a708bba1d013c428d9909", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "4951c0bbd42cb2e7e96a08662b0aa779c9a1c383", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "4951c0bbd42cb2e7e96a08662b0aa779c9a1c383", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "1c65bc389492f9b14c8a708bba1d013c428d9909", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "1c65bc389492f9b14c8a708bba1d013c428d9909", - }, - ], -] -`; - -exports[`execute Deep Brain transfers 90`] = `"storageItem.delete"`; - -exports[`execute Deep Brain transfers 91`] = ` -Array [ - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "b511fe310e31bdbeea50b5bcf00107ed35b8f79d", - }, - ], - Array [ - Object { - "hash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - "key": "4951c0bbd42cb2e7e96a08662b0aa779c9a1c383", - }, - ], -] -`; - -exports[`execute Deep Brain transfers 92`] = `"action.add"`; - -exports[`execute Deep Brain transfers 93`] = `Array []`; - -exports[`execute Deep Brain transfers 94`] = `"header.get"`; - -exports[`execute Deep Brain transfers 95`] = `Array []`; - -exports[`execute Deep Brain transfers 96`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "bebf52398ff3e133126e5b4a98fd617d964cfb97", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0000b2d3595bf006", - }, - ], - "scriptHash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0000869eae29d500", - }, - ], - "scriptHash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "d1bb74c15125a9645541a68fd30502e389c444d2", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "000038e5be87aa00", - }, - ], - "scriptHash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "37743bc4b40df893cbb0f73bca21079c7edb625c", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0000d9e9ac2d7803", - }, - ], - "scriptHash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "c0f7dcf9919cbf48408ef2f32c965aaa3d7ad471", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00008a5d78456301", - }, - ], - "scriptHash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "1c65bc389492f9b14c8a708bba1d013c428d9909", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "e8755b958fde1d", - }, - ], - "scriptHash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "b511fe310e31bdbeea50b5bcf00107ed35b8f79d", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "80d49f69cd74", - }, - ], - "scriptHash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "4951c0bbd42cb2e7e96a08662b0aa779c9a1c383", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "805fd38d7102", - }, - ], - "scriptHash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "b511fe310e31bdbeea50b5bcf00107ed35b8f79d", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "1c65bc389492f9b14c8a708bba1d013c428d9909", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "80d49f69cd74", - }, - ], - "scriptHash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "4951c0bbd42cb2e7e96a08662b0aa779c9a1c383", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "1c65bc389492f9b14c8a708bba1d013c428d9909", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "805fd38d7102", - }, - ], - "scriptHash": "cf9472821400ceb06ca780c2a937fec5bbec51b9", - }, - ], -] -`; - -exports[`execute Deep Brain transfers 97`] = `Array []`; - -exports[`execute Deep Brain transfers 98`] = `Array []`; - -exports[`execute Deep Brain transfers 99`] = `Array []`; - -exports[`execute Mystery invoke deploy - invalid contract paramter ignored 1`] = `"contract.tryGet"`; - -exports[`execute Mystery invoke deploy - invalid contract paramter ignored 2`] = ` -Array [ - Array [ - Object { - "hash": "d086cae503c771f6231273a60c85fc52de910e35", - }, - ], -] -`; - -exports[`execute Mystery invoke deploy - invalid contract paramter ignored 3`] = `"contract.add"`; - -exports[`execute Mystery invoke deploy - invalid contract paramter ignored 4`] = ` -Array [ - Array [ - Object { - "__$type": "Contract", - "author": "Streamity", - "codeVersion": "1.0", - "contractProperties": 1, - "description": "StreamDesk V1.0", - "email": "ceo@streamity.org", - "hasDynamicInvoke": false, - "hasStorage": true, - "name": "StreamDesk", - "parameterList": Array [ - 16, - ], - "payable": false, - "returnType": 5, - "script": "0121c56b6c766b00527ac46c766b51527ac4616168164e656f2e52756e74696d652e47657454726967676572009c6c766b52527ac46c766b52c36404036161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b53527ac461682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686c766b54527ac4006c766b55527ac46c766b53c36c766b56527ac46c766b56c36168234e656f2e496e766f636174696f6e5472616e73616374696f6e2e476574536372697074610b00c10877697468647261776101697e61682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173687e9c009c6c766b57527ac46c766b57c3640e00006c766b58527ac462a7046c766b53c361654f1d6c766b59527ac46c766b59c364e800616c766b53c36165461e6c766b5a527ac46c766b5ac361009c6c766b5e527ac46c766b5ec3640e00006c766b58527ac4625c046c766b53c36114d6b7ecf58552465c0d8184d4964067b93d3497b56c766b54c36c766b5ac3615379517955727551727552795279547275527275652d0a6c766b55527ac46c766b5ac361656a206c766b5b527ac46c766b5ac36165ef206c766b5c527ac46c766b5bc36c766b5cc3946c766b5d527ac46c766b55c36411006c766b5dc36c766b55c3a2620400006c766b5f527ac46c766b5fc3640e00516c766b58527ac462b503006c766b58527ac462aa03616c766b53c36165631b6c766b60527ac46c766b60c361009c6c766b0113527ac46c766b0113c3640e00006c766b58527ac46275036c766b60c361650d046c766b0111527ac46c766b0111c356c361009c6c766b0114527ac46c766b0114c3640e00006c766b58527ac4623d036c766b0111c36165e21d6c766b0112527ac46c766b0112c361009c6c766b0115527ac46c766b0115c3640e00006c766b58527ac46206036c766b53c36c766b0112c36c766b54c36c766b0111c361537951795572755172755279527954727552727565a20a009c6c766b0116527ac46c766b0116c3640e00006c766b58527ac462ba02516c766b58527ac462af026168164e656f2e52756e74696d652e47657454726967676572519c6c766b0117527ac46c766b0117c3640f0061516c766b58527ac46277026168164e656f2e52756e74696d652e47657454726967676572609c6c766b0118527ac46c766b0118c3644002616c766b00c30a67657442616c616e6365876c766b0119527ac46c766b0119c3641900616c766b51c300c3616525026c766b58527ac46212026c766b00c3086465616c496e666f876c766b011a527ac46c766b011ac3641900616c766b51c300c3616587026c766b58527ac462dc016c766b00c30b676574486173684465616c876c766b011b527ac46c766b011bc3645a00616c766b51c300c36c766b51c351c36c766b51c352c36c766b51c353c36c766b51c354c36c766b51c355c36155795179577275517275547952795672755272755379537955727553727565c30d6c766b58527ac46262016c766b00c30c7265636569766564436f696e876c766b011c527ac46c766b011cc3645a00616c766b51c300c36c766b51c351c36c766b51c352c36c766b51c353c36c766b51c354c36c766b51c355c36155795179577275517275547952795672755272755379537955727553727565b30d6c766b58527ac462e7006c766b00c30a736574417070726f7665876c766b011d527ac46c766b011dc3641900616c766b51c300c361650b136c766b58527ac462af006c766b00c30b73657443616e63656c6564876c766b011e527ac46c766b011ec3641900616c766b51c300c3616584146c766b58527ac46276006c766b00c3087769746864726177876c766b011f527ac46c766b011fc3641200616165c7026c766b58527ac46247006c766b00c30a64656c6574654465616c876c766b0120527ac46c766b0120c3641900616c766b51c300c36165401b6c766b58527ac4620f0061006c766b58527ac46203006c766b58c3616c756656c56b6c766b00527ac4616c766b00c36165411c6c766b51527ac46c766b00c36165c61c6c766b52527ac46c766b00c36165211e6c766b53527ac4546153c66c766b527a527ac46c766b54c36c766b51c36c766b53c396007cc46c766b54c36c766b52c36c766b53c396517cc46c766b54c36c766b51c36c766b52c394527cc46c766b54c36c766b55527ac46203006c766b55c3616c75665ac56b6c766b00527ac4616165321d6c766b00c31673656c6c6572427579657241737365745374617475737e617c680f4e656f2e53746f726167652e4765746c766b51527ac46165f71c6c766b00c30576616c75657e617c680f4e656f2e53746f726167652e4765746c766b52527ac46165cd1c6c766b00c30a636f6d6d697373696f6e7e617c680f4e656f2e53746f726167652e4765746c766b53527ac401206c766b54527ac46c766b51c30128517f6101029c6c766b57527ac46c766b57c3640c0001146c766b54527ac46c766b51c301296c766b54c37f6c766b55527ac46c766b55c36165d31c6c766b56527ac458615ac66c766b527a527ac46c766b58c36c766b51c30001147f007cc46c766b58c36c766b51c3011401147f517cc46c766b58c36c766b55c3527cc46c766b58c36c766b52c3537cc46c766b58c36c766b53c3547cc46c766b58c36165f11b6c766b00c30a63616e63656c54696d657e617c680f4e656f2e53746f726167652e476574557cc46c766b58c36c766b51c301296c766b54c393517f567cc46c766b58c36c766b00c3577cc46c766b58c36c766b52c36c766b56c396587cc46c766b58c36c766b53c35196597cc46c766b58c36c766b59527ac46203006c766b59c3616c75660113c56b6161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b00527ac461682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686c766b51527ac4006c766b52527ac46c766b00c36165be156c766b53527ac46c766b53c364e800616c766b00c36165b5166c766b54527ac46c766b54c361009c6c766b58527ac46c766b58c3640e00006c766b59527ac462d0026c766b00c36114d6b7ecf58552465c0d8184d4964067b93d3497b56c766b51c36c766b54c3615379517955727551727552795279547275527275659c026c766b52527ac46c766b54c36165d9186c766b55527ac46c766b54c361655e196c766b56527ac46c766b55c36c766b56c3946c766b57527ac46c766b52c36411006c766b57c36c766b52c3a2620400006c766b5a527ac46c766b5ac3640e00516c766b59527ac4622902006c766b59527ac4621e02616c766b00c36165d2136c766b5b527ac46c766b5bc361009c6c766b5e527ac46c766b5ec3640e00006c766b59527ac462eb016c766b5bc361657efc6c766b5c527ac46c766b5cc361657c166c766b5d527ac46c766b5dc361009c6c766b5f527ac46c766b5fc3640e00006c766b59527ac462a9016c766b00c36c766b5dc36c766b51c36c766b5cc3615379517955727551727552795279547275527275654203009c6c766b60527ac46c766b60c3640e00006c766b59527ac46261016c766b5cc352c36c766b5cc353c300615272657a18616c766b5cc352c361209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5907c907c9e6311006c766b5cc356c36101029c620400006c766b0111527ac46c766b0111c36434006120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c606c766b5cc354c30061527265f817616c766b5cc356c36101039c6c766b0112527ac46c766b0112c3645100616c766b5cc3610104617c65c71161616c766b5bc36c766b5cc300c36c766b5cc351c36152720c72656c656173654576656e7454c168124e656f2e52756e74696d652e4e6f746966796161625400616c766b5cc3610105617c65791161616c766b5bc36c766b5cc300c36c766b5cc351c36152721272656c6561736543616e63656c4576656e7454c168124e656f2e52756e74696d652e4e6f746966796161516c766b59527ac46203006c766b59c3616c75665cc56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac461006c766b54527ac4616c766b00c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736c766b55527ac4006c766b56527ac4623b016c766b55c36c766b56c3c36c766b57527ac4616c766b57c36168184e656f2e4f75747075742e476574536372697074486173686c766b51c39c632e006c766b57c36168184e656f2e4f75747075742e476574536372697074486173686c766b52c39c009c620400006c766b58527ac46c766b58c3640e00006c766b59527ac462d7006c766b57c36168184e656f2e4f75747075742e476574536372697074486173686c766b52c39c6c766b5a527ac46c766b5ac36406006273006c766b57c36168154e656f2e4f75747075742e476574417373657449646c766b53c39c009c6c766b5b527ac46c766b5bc3640e00006c766b59527ac46260006c766b54c36c766b57c36168134e656f2e4f75747075742e47657456616c756593766c766b54527ac46c766b54527ac4616c766b56c351936c766b56527ac46c766b56c36c766b55c3c09f63bcfe6c766b54c36c766b59527ac46203006c766b59c3616c75660115c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac461006c766b54527ac4006c766b55527ac4616c766b00c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736c766b56527ac4006c766b57527ac46234036c766b56c36c766b57c3c36c766b58527ac4616c766b58c36168184e656f2e4f75747075742e476574536372697074486173686c766b51c39c632e006c766b58c36168184e656f2e4f75747075742e476574536372697074486173686c766b52c39c009c620400006c766b59527ac46c766b59c3640e00006c766b5a527ac4629f036c766b58c36168184e656f2e4f75747075742e476574536372697074486173686c766b52c39c6c766b5b527ac46c766b5bc3640600626c026c766b53c352c361209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5907c907c9e6311006c766b53c356c36101029c620400006c766b5c527ac46c766b5cc364a901616c766b58c36168154e656f2e4f75747075742e4765744173736574496461209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c6348006c766b58c36168154e656f2e4f75747075742e476574417373657449646120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c609c009c620400006c766b5d527ac46c766b5dc3640e00006c766b5a527ac46274026c766b58c36168154e656f2e4f75747075742e4765744173736574496461209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c6c766b5e527ac46c766b5ec36433006c766b54c36c766b58c36168134e656f2e4f75747075742e47657456616c756593766c766b54527ac46c766b54527ac46c766b58c36168154e656f2e4f75747075742e476574417373657449646120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c609c6c766b5f527ac46c766b5fc36433006c766b55c36c766b58c36168134e656f2e4f75747075742e47657456616c756593766c766b55527ac46c766b55527ac461627600616c766b58c36168154e656f2e4f75747075742e476574417373657449646c766b53c352c39c009c6c766b60527ac46c766b60c3640e00006c766b5a527ac46230016c766b55c36c766b58c36168134e656f2e4f75747075742e47657456616c756593766c766b55527ac46c766b55527ac461616c766b57c351936c766b57527ac46c766b57c36c766b56c3c09f63c3fc6c766b53c352c361209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5907c907c9e6311006c766b53c356c36101029c620400006c766b0111527ac46c766b0111c3645a00616c766b54c36c766b53c353c39e6c766b0112527ac46c766b0112c3640e00006c766b5a527ac46266006c766b55c36c766b53c354c39e6c766b0113527ac46c766b0113c3640e00006c766b5a527ac4623d0061622e00616c766b55c36c766b53c353c39e6c766b0114527ac46c766b0114c3640e00006c766b5a527ac4620f0061516c766b5a527ac46203006c766b5ac3616c756658c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac4616c766b00c36c766b51c37e6c766b52c37e6c766b54c37e6c766b55c37eaa6c766b56527ac46c766b56c36c766b57527ac46203006c766b57c3616c7566011ec56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac46161682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e65726c766b56527ac4006c766b57527ac4006c766b58527ac4006c766b59527ac46c766b00c36c766b51c37e6c766b52c37e6c766b54c37e6c766b55c37eaa6c766b5a527ac46c766b5ac361653af36c766b5b527ac46c766b5bc356c361009c009c6c766b5e527ac46c766b5ec3644b0061616c766b5ac36c766b51c36c766b52c3615272116465616c52657065617465644576656e7454c168124e656f2e52756e74696d652e4e6f7469667961006c766b5f527ac4627804616c766b56c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736c766b60527ac4006c766b0111527ac462d0016c766b60c36c766b0111c3c36c766b0112527ac4616c766b0112c36168184e656f2e4f75747075742e4765745363726970744861736861682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173689c6c766b0113527ac46c766b0113c3644701616c766b0112c36168134e656f2e4f75747075742e47657456616c75656c766b0114527ac46c766b0112c36168154e656f2e4f75747075742e4765744173736574496461209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c6c766b0115527ac46c766b0115c3641b00616c766b57c36c766b0114c3936c766b57527ac46162b7006c766b0112c36168154e656f2e4f75747075742e476574417373657449646120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c609c6c766b0116527ac46c766b0116c3641b00616c766b58c36c766b0114c3936c766b58527ac461624d006c766b0112c36168154e656f2e4f75747075742e476574417373657449646c766b53c39c6c766b0117527ac46c766b0117c3641800616c766b59c36c766b0114c3936c766b59527ac46161616c766b0111c351936c766b0111527ac46c766b0111c36c766b60c3c09f6326fe516c766b5c527ac4006c766b5d527ac46c766b53c361209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c6c766b0118527ac46c766b0118c3644d00616c766b54c36c766b57c39e6311006c766b55c36c766b58c39e620400516c766b0119527ac46c766b0119c3640e00006c766b5c527ac4620f006c766b57c36c766b5d527ac461627e006c766b53c36120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c609c6c766b011a527ac46c766b011ac3643b00616c766b54c36c766b58c39e6c766b011b527ac46c766b011bc3640e00006c766b5c527ac4620f006c766b58c36c766b5d527ac461620d0061006c766b5c527ac4616c766b5cc3009c6c766b011c527ac46c766b011cc364740061616c766b5ac36c766b51c36c766b52c36c766b53c36c766b54c36c766b55c3615579517957727551727554795279567275527275537953795572755372750f6465616c42726f6b656e4576656e7457c168124e656f2e52756e74696d652e4e6f7469667961006c766b5f527ac462ce006c766b53c36c766b5dc35161527265a70b616c766b53c361209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c6c766b011d527ac46c766b011dc36432006120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c606c766b58c351615272653f0b616c766b5ac36c766b00c36c766b51c36c766b52c36c766b53c36c766b54c36c766b55c36156795179587275517275557952795772755272755479537956727553727565f00261516c766b5f527ac46203006c766b5fc3616c756657c56b6c766b00527ac4616165a10b009c6c766b52527ac46c766b52c3640e00006c766b53527ac46281016c766b00c361651eee6c766b51527ac46c766b51c356c36101019c6c766b54527ac46c766b54c3644c01616c766b51c352c361209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c6c766b55527ac46c766b55c3643900616120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c606c766b51c354c30061527265240a61616284006c766b51c352c36120e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c609c6c766b56527ac46c766b56c3643f00616c766b51c352c36c766b51c354c30061527265d009616c766b00c30576616c75656c766b51c353c36c766b51c354c39461527265f9036161620f0061006c766b53527ac46266006c766b51c3610103617c658b0361616c766b00c36c766b51c300c36c766b51c351c361527210617070726f76654465616c4576656e7454c168124e656f2e52756e74696d652e4e6f7469667961516c766b53527ac4620e00006c766b53527ac46203006c766b53c3616c756655c56b6c766b00527ac4616165ef09009c6c766b52527ac46c766b52c3640e00006c766b53527ac462f5006c766b00c361656cec6c766b51527ac46c766b51c356c3610101907c907c9e635e006c766b51c355c36168184e656f2e426c6f636b636861696e2e4765744865696768746168184e656f2e426c6f636b636861696e2e4765744865616465726168174e656f2e4865616465722e47657454696d657374616d709f620400006c766b54527ac46c766b54c3645d00616c766b51c3610102617c65660261616c766b00c36c766b51c300c36c766b51c351c36152721173656c6c657243616e63656c4576656e7454c168124e656f2e52756e74696d652e4e6f7469667961516c766b53527ac4620e00006c766b53527ac46203006c766b53c3616c756657c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac46c766b56527ac4616c766b00c36c766b52c36c766b53c36c766b54c3610101615479517956727551727553795279557275527275650b01616c766b00c30576616c75656c766b55c361527265db01616c766b00c30a636f6d6d697373696f6e6c766b56c361527265bf01616c766b00c30a63616e63656c54696d656168184e656f2e426c6f636b636861696e2e4765744865696768746168184e656f2e426c6f636b636861696e2e4765744865616465726168174e656f2e4865616465722e47657454696d657374616d706102201c9361527265530161616c766b00c36c766b52c36c766b53c36c766b54c36c766b55c36c766b56c3615579517957727551727554795279567275527275537953795572755372750e73746172744465616c4576656e7457c168124e656f2e52756e74696d652e4e6f7469667961616c756657c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac4616101016c766b55527ac46c766b53c3c001149c6c766b56527ac46c766b56c3640d006101026c766b55527ac46c766b00c31673656c6c6572427579657241737365745374617475736c766b51c36c766b52c37e6c766b55c37e6c766b53c37e6c766b54c37e61527265580061616c756652c56b6c766b00527ac46c766b51527ac4616c766b00c357c36c766b00c300c36c766b00c351c36c766b00c352c36c766b51c36154795179567275517275537952795572755272756521ff61616c756653c56b6c766b00527ac46c766b51527ac46c766b52527ac461616548066c766b00c36c766b51c37e6c766b52c3615272680f4e656f2e53746f726167652e50757461616c756657c56b6c766b00527ac4616c766b00c361681d4e656f2e5472616e73616374696f6e2e476574417474726962757465736c766b51527ac4616c766b51c36c766b52527ac4006c766b53527ac4627e006c766b52c36c766b53c3c36c766b54527ac4616c766b54c36168164e656f2e4174747269627574652e47657455736167656102f1009c6c766b55527ac46c766b55c3642a006c766b54c36168154e656f2e4174747269627574652e476574446174616c766b56527ac4622d00616c766b53c351936c766b53527ac46c766b53c36c766b52c3c09f6379ff61006c766b56527ac46203006c766b56c3616c756657c56b6c766b00527ac4616c766b00c361681d4e656f2e5472616e73616374696f6e2e476574417474726962757465736c766b51527ac4616c766b51c36c766b52527ac4006c766b53527ac462a1006c766b52c36c766b53c3c36c766b54527ac4616c766b54c36168164e656f2e4174747269627574652e47657455736167656102f200907c907c9e633a006c766b54c36168154e656f2e4174747269627574652e476574446174616114d6b7ecf58552465c0d8184d4964067b93d3497b59c620400006c766b55527ac46c766b55c3640e00516c766b56527ac4622c00616c766b53c351936c766b53527ac46c766b53c36c766b52c3c09f6356ff006c766b56527ac46203006c766b56c3616c756657c56b6c766b00527ac4616c766b00c361681d4e656f2e5472616e73616374696f6e2e476574417474726962757465736c766b51527ac4616c766b51c36c766b52527ac4006c766b53527ac4627e006c766b52c36c766b53c3c36c766b54527ac4616c766b54c36168164e656f2e4174747269627574652e47657455736167656102f3009c6c766b55527ac46c766b55c3642a006c766b54c36168154e656f2e4174747269627574652e476574446174616c766b56527ac4622d00616c766b53c351936c766b53527ac46c766b53c36c766b52c3c09f6379ff61006c766b56527ac46203006c766b56c3616c756654c56b6c766b00527ac4616c766b00c356c36101039c6c766b51527ac46c766b51c3641500616c766b00c351c36c766b52527ac4623b006c766b00c356c36101029c6c766b53527ac46c766b53c3641600616c766b00c300c36c766b52527ac4620f0061006c766b52527ac46203006c766b52c3616c756655c56b6c766b00527ac4616165cc02009c6c766b52527ac46c766b52c3640e00006c766b53527ac46203016c766b00c3616549e56c766b51527ac46c766b51c356c36101049c6311006c766b51c356c36101059c620400516c766b54527ac46c766b54c364bc006161654f026c766b00c31673656c6c6572427579657241737365745374617475737e617c68124e656f2e53746f726167652e44656c65746561616517026c766b00c30576616c75657e617c68124e656f2e53746f726167652e44656c657465616165f0016c766b00c30a636f6d6d697373696f6e7e617c68124e656f2e53746f726167652e44656c657465616165c4016c766b00c30a63616e63656c54696d657e617c68124e656f2e53746f726167652e44656c6574656161516c766b53527ac46203006c766b53c3616c756653c56b6c766b00527ac46161682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e67536372697074486173686168194e656f2e426c6f636b636861696e2e4765744163636f756e746c766b51527ac46c766b51c36c766b00c3617c68164e656f2e4163636f756e742e47657442616c616e63656c766b52527ac46203006c766b52c3616c756652c56b6c766b00527ac4616165e3006c766b00c30762616c616e63657e617c680f4e656f2e53746f726167652e4765746c766b51527ac46203006c766b51c3616c756655c56b6c766b00527ac46c766b51527ac46c766b52527ac4616c766b00c361659eff6c766b53527ac46c766b52c36c766b54527ac46c766b54c3643a006161656d006c766b00c30762616c616e63657e6c766b53c36c766b51c393615272680f4e656f2e53746f726167652e507574616162370061616536006c766b00c30762616c616e63657e6c766b53c36c766b51c394615272680f4e656f2e53746f726167652e5075746161616c756600c56b6168164e656f2e53746f726167652e476574436f6e74657874616c756600c56b6114d6b7ecf58552465c0d8184d4964067b93d3497b56168184e656f2e52756e74696d652e436865636b5769746e657373616c756600c56b6165a4ff057374617465617c680f4e656f2e53746f726167652e476574616c756653c56b6c766b00527ac4616c766b00c361209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc59c6c766b51527ac46c766b51c36412000400e1f5056c766b52527ac4620e00516c766b52527ac46203006c766b52c3616c7566", - "version": 0, - }, - ], -] -`; - -exports[`execute Mystery invoke deploy - invalid contract paramter ignored 5`] = `"storageItem.add"`; - -exports[`execute Mystery invoke deploy - invalid contract paramter ignored 6`] = `Array []`; - -exports[`execute Mystery invoke deploy - invalid contract paramter ignored 7`] = `"storageItem.update"`; - -exports[`execute Mystery invoke deploy - invalid contract paramter ignored 8`] = `Array []`; - -exports[`execute Mystery invoke deploy - invalid contract paramter ignored 9`] = `"storageItem.get"`; - -exports[`execute Mystery invoke deploy - invalid contract paramter ignored 10`] = `Array []`; - -exports[`execute Mystery invoke deploy - invalid contract paramter ignored 11`] = `"storageItem.tryGet"`; - -exports[`execute Mystery invoke deploy - invalid contract paramter ignored 12`] = `Array []`; - -exports[`execute Mystery invoke deploy - invalid contract paramter ignored 13`] = `"storageItem.delete"`; - -exports[`execute Mystery invoke deploy - invalid contract paramter ignored 14`] = `Array []`; - -exports[`execute Mystery invoke deploy - invalid contract paramter ignored 15`] = `"action.add"`; - -exports[`execute Mystery invoke deploy - invalid contract paramter ignored 16`] = `Array []`; - -exports[`execute Mystery invoke deploy - invalid contract paramter ignored 17`] = `Array []`; - -exports[`execute Mystery invoke deploy - invalid contract paramter ignored 18`] = `Array []`; - -exports[`execute Mystery invoke deploy - invalid contract paramter ignored 19`] = `Array []`; - -exports[`execute Mystery invoke deploy - invalid contract paramter ignored 20`] = `Array []`; - -exports[`execute NEX Token transfer 1`] = `"149300000"`; - -exports[`execute NEX Token transfer 2`] = `"contract.get"`; - -exports[`execute NEX Token transfer 3`] = ` -Array [ - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], -] -`; - -exports[`execute NEX Token transfer 4`] = `"contract.tryGet"`; - -exports[`execute NEX Token transfer 5`] = `Array []`; - -exports[`execute NEX Token transfer 6`] = `"storageItem.add"`; - -exports[`execute NEX Token transfer 7`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657231", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "507dd1f00e30e7955ab8b349707f42fa2b65376b", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657232", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "51b824a566a64543759cd5c958c193afa4d0b8fb", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657233", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "993e3a81002d4b5a56ac9808ceec1fefcb2ebcf5", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657234", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "edcfa803566c0600a682d6c89ab4d035e13346ba", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657235", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e39c5a9e04751bfb85dfd0b607766cdcb995719f", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572314d696e746564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572324d696e746564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572334d696e746564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572344d696e746564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572354d696e746564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572735f696e697469616c697a6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], -] -`; - -exports[`execute NEX Token transfer 8`] = `"storageItem.update"`; - -exports[`execute NEX Token transfer 9`] = `Array []`; - -exports[`execute NEX Token transfer 10`] = `"storageItem.get"`; - -exports[`execute NEX Token transfer 11`] = `Array []`; - -exports[`execute NEX Token transfer 12`] = `"storageItem.tryGet"`; - -exports[`execute NEX Token transfer 13`] = ` -Array [ - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572735f696e697469616c697a6564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657231", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657232", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657233", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657234", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657235", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572314d696e746564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572324d696e746564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572334d696e746564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572344d696e746564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572354d696e746564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572735f696e697469616c697a6564", - }, - ], -] -`; - -exports[`execute NEX Token transfer 14`] = `"storageItem.delete"`; - -exports[`execute NEX Token transfer 15`] = `Array []`; - -exports[`execute NEX Token transfer 16`] = `"action.add"`; - -exports[`execute NEX Token transfer 17`] = `Array []`; - -exports[`execute NEX Token transfer 18`] = `"0"`; - -exports[`execute NEX Token transfer 19`] = `"contract.get"`; - -exports[`execute NEX Token transfer 20`] = ` -Array [ - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], -] -`; - -exports[`execute NEX Token transfer 21`] = `"contract.tryGet"`; - -exports[`execute NEX Token transfer 22`] = `Array []`; - -exports[`execute NEX Token transfer 23`] = `"storageItem.add"`; - -exports[`execute NEX Token transfer 24`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657231", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "507dd1f00e30e7955ab8b349707f42fa2b65376b", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657232", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "51b824a566a64543759cd5c958c193afa4d0b8fb", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657233", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "993e3a81002d4b5a56ac9808ceec1fefcb2ebcf5", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657234", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "edcfa803566c0600a682d6c89ab4d035e13346ba", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657235", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e39c5a9e04751bfb85dfd0b607766cdcb995719f", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572314d696e746564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572324d696e746564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572334d696e746564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572344d696e746564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572354d696e746564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572735f696e697469616c697a6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "696e697469616c697a6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "62616c616e63652911176a2e804903ac8a39447c6e084736cd4a3a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c029f73d5405", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "696e5f63697263756c6174696f6e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c029f73d5405", - }, - ], -] -`; - -exports[`execute NEX Token transfer 25`] = `"storageItem.update"`; - -exports[`execute NEX Token transfer 26`] = `Array []`; - -exports[`execute NEX Token transfer 27`] = `"storageItem.get"`; - -exports[`execute NEX Token transfer 28`] = `Array []`; - -exports[`execute NEX Token transfer 29`] = `"storageItem.tryGet"`; - -exports[`execute NEX Token transfer 30`] = ` -Array [ - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572735f696e697469616c697a6564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657231", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657232", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657233", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657234", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657235", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572314d696e746564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572324d696e746564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572334d696e746564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572344d696e746564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572354d696e746564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572735f696e697469616c697a6564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572735f696e697469616c697a6564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657231", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657232", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657233", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657234", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657235", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "696e697469616c697a6564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "696e697469616c697a6564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "62616c616e63652911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "696e5f63697263756c6174696f6e", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "696e5f63697263756c6174696f6e", - }, - ], -] -`; - -exports[`execute NEX Token transfer 31`] = `"storageItem.delete"`; - -exports[`execute NEX Token transfer 32`] = `Array []`; - -exports[`execute NEX Token transfer 33`] = `"action.add"`; - -exports[`execute NEX Token transfer 34`] = `Array []`; - -exports[`execute NEX Token transfer 35`] = `"0"`; - -exports[`execute NEX Token transfer 36`] = `"contract.get"`; - -exports[`execute NEX Token transfer 37`] = ` -Array [ - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], -] -`; - -exports[`execute NEX Token transfer 38`] = `"contract.tryGet"`; - -exports[`execute NEX Token transfer 39`] = `Array []`; - -exports[`execute NEX Token transfer 40`] = `"storageItem.add"`; - -exports[`execute NEX Token transfer 41`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657231", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "507dd1f00e30e7955ab8b349707f42fa2b65376b", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657232", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "51b824a566a64543759cd5c958c193afa4d0b8fb", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657233", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "993e3a81002d4b5a56ac9808ceec1fefcb2ebcf5", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657234", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "edcfa803566c0600a682d6c89ab4d035e13346ba", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657235", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e39c5a9e04751bfb85dfd0b607766cdcb995719f", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572314d696e746564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572324d696e746564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572334d696e746564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572344d696e746564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572354d696e746564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572735f696e697469616c697a6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "696e697469616c697a6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "62616c616e63652911176a2e804903ac8a39447c6e084736cd4a3a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c029f73d5405", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "696e5f63697263756c6174696f6e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c029f73d5405", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "62616c616e6365507dd1f00e30e7955ab8b349707f42fa2b65376b", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0080f420e6b500", - }, - ], -] -`; - -exports[`execute NEX Token transfer 42`] = `"storageItem.update"`; - -exports[`execute NEX Token transfer 43`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572314d696e746564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "696e5f63697263756c6174696f6e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c029f73d5405", - }, - Object { - "flags": 0, - "value": "00401e18240a06", - }, - ], -] -`; - -exports[`execute NEX Token transfer 44`] = `"storageItem.get"`; - -exports[`execute NEX Token transfer 45`] = `Array []`; - -exports[`execute NEX Token transfer 46`] = `"storageItem.tryGet"`; - -exports[`execute NEX Token transfer 47`] = ` -Array [ - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572735f696e697469616c697a6564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657231", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657232", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657233", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657234", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657235", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572314d696e746564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572324d696e746564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572334d696e746564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572344d696e746564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572354d696e746564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572735f696e697469616c697a6564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572735f696e697469616c697a6564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657231", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657232", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657233", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657234", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657235", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "696e697469616c697a6564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "696e697469616c697a6564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "62616c616e63652911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "696e5f63697263756c6174696f6e", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "696e5f63697263756c6174696f6e", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657231", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572314d696e746564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572314d696e746564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "696e5f63697263756c6174696f6e", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "696e5f63697263756c6174696f6e", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "62616c616e6365507dd1f00e30e7955ab8b349707f42fa2b65376b", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "62616c616e6365507dd1f00e30e7955ab8b349707f42fa2b65376b", - }, - ], -] -`; - -exports[`execute NEX Token transfer 48`] = `"storageItem.delete"`; - -exports[`execute NEX Token transfer 49`] = `Array []`; - -exports[`execute NEX Token transfer 50`] = `"action.add"`; - -exports[`execute NEX Token transfer 51`] = `Array []`; - -exports[`execute NEX Token transfer 52`] = `"0"`; - -exports[`execute NEX Token transfer 53`] = `"contract.get"`; - -exports[`execute NEX Token transfer 54`] = ` -Array [ - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], -] -`; - -exports[`execute NEX Token transfer 55`] = `"contract.tryGet"`; - -exports[`execute NEX Token transfer 56`] = `Array []`; - -exports[`execute NEX Token transfer 57`] = `"storageItem.add"`; - -exports[`execute NEX Token transfer 58`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657231", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "507dd1f00e30e7955ab8b349707f42fa2b65376b", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657232", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "51b824a566a64543759cd5c958c193afa4d0b8fb", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657233", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "993e3a81002d4b5a56ac9808ceec1fefcb2ebcf5", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657234", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "edcfa803566c0600a682d6c89ab4d035e13346ba", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657235", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e39c5a9e04751bfb85dfd0b607766cdcb995719f", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572314d696e746564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572324d696e746564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572334d696e746564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572344d696e746564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572354d696e746564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572735f696e697469616c697a6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "696e697469616c697a6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "62616c616e63652911176a2e804903ac8a39447c6e084736cd4a3a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c029f73d5405", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "696e5f63697263756c6174696f6e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c029f73d5405", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "62616c616e6365507dd1f00e30e7955ab8b349707f42fa2b65376b", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0080f420e6b500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "62616c616e636551b824a566a64543759cd5c958c193afa4d0b8fb", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "05", - }, - ], -] -`; - -exports[`execute NEX Token transfer 59`] = `"storageItem.update"`; - -exports[`execute NEX Token transfer 60`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572314d696e746564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "696e5f63697263756c6174696f6e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c029f73d5405", - }, - Object { - "flags": 0, - "value": "00401e18240a06", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "62616c616e6365507dd1f00e30e7955ab8b349707f42fa2b65376b", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0080f420e6b500", - }, - Object { - "flags": 0, - "value": "fb7ff420e6b500", - }, - ], -] -`; - -exports[`execute NEX Token transfer 61`] = `"storageItem.get"`; - -exports[`execute NEX Token transfer 62`] = `Array []`; - -exports[`execute NEX Token transfer 63`] = `"storageItem.tryGet"`; - -exports[`execute NEX Token transfer 64`] = ` -Array [ - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572735f696e697469616c697a6564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657231", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657232", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657233", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657234", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657235", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572314d696e746564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572324d696e746564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572334d696e746564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572344d696e746564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572354d696e746564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572735f696e697469616c697a6564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572735f696e697469616c697a6564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657231", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657232", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657233", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657234", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657235", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "696e697469616c697a6564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "696e697469616c697a6564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "62616c616e63652911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "696e5f63697263756c6174696f6e", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "696e5f63697263756c6174696f6e", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657231", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572314d696e746564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e6572314d696e746564", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "696e5f63697263756c6174696f6e", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "696e5f63697263756c6174696f6e", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "62616c616e6365507dd1f00e30e7955ab8b349707f42fa2b65376b", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "62616c616e6365507dd1f00e30e7955ab8b349707f42fa2b65376b", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657231", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657232", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657233", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657234", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "6f776e657235", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "62616c616e6365507dd1f00e30e7955ab8b349707f42fa2b65376b", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "62616c616e6365507dd1f00e30e7955ab8b349707f42fa2b65376b", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "62616c616e636551b824a566a64543759cd5c958c193afa4d0b8fb", - }, - ], - Array [ - Object { - "hash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - "key": "62616c616e636551b824a566a64543759cd5c958c193afa4d0b8fb", - }, - ], -] -`; - -exports[`execute NEX Token transfer 65`] = `"storageItem.delete"`; - -exports[`execute NEX Token transfer 66`] = `Array []`; - -exports[`execute NEX Token transfer 67`] = `"action.add"`; - -exports[`execute NEX Token transfer 68`] = `Array []`; - -exports[`execute NEX Token transfer 69`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c029f73d5405", - }, - ], - "scriptHash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "507dd1f00e30e7955ab8b349707f42fa2b65376b", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0080f420e6b500", - }, - ], - "scriptHash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "507dd1f00e30e7955ab8b349707f42fa2b65376b", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "51b824a566a64543759cd5c958c193afa4d0b8fb", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "5", - }, - ], - "scriptHash": "2911176a2e804903ac8a39447c6e084736cd4a3a", - }, - ], -] -`; - -exports[`execute NEX Token transfer 70`] = `Array []`; - -exports[`execute NEX Token transfer 71`] = `Array []`; - -exports[`execute NEX Token transfer 72`] = `Array []`; - -exports[`execute Switcheo V3.1 atomic swap 1`] = `"0"`; - -exports[`execute Switcheo V3.1 atomic swap 2`] = `"contract.get"`; - -exports[`execute Switcheo V3.1 atomic swap 3`] = ` -Array [ - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 atomic swap 4`] = `"contract.tryGet"`; - -exports[`execute Switcheo V3.1 atomic swap 5`] = `Array []`; - -exports[`execute Switcheo V3.1 atomic swap 6`] = `"storageItem.add"`; - -exports[`execute Switcheo V3.1 atomic swap 7`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c202200f681f5d3b933c956cfedec18ee635bf5c", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7335f929546270b8f811a0f9427b5712457107e7", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "b7634295e58c6d7513c22d5881ba116db154e8de", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "616e6e6f756e636544656c6179", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "803a09", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 atomic swap 8`] = `"storageItem.update"`; - -exports[`execute Switcheo V3.1 atomic swap 9`] = `Array []`; - -exports[`execute Switcheo V3.1 atomic swap 10`] = `"storageItem.get"`; - -exports[`execute Switcheo V3.1 atomic swap 11`] = `Array []`; - -exports[`execute Switcheo V3.1 atomic swap 12`] = `"storageItem.tryGet"`; - -exports[`execute Switcheo V3.1 atomic swap 13`] = ` -Array [ - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "616e6e6f756e636544656c6179", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 atomic swap 14`] = `"storageItem.delete"`; - -exports[`execute Switcheo V3.1 atomic swap 15`] = `Array []`; - -exports[`execute Switcheo V3.1 atomic swap 16`] = `"action.add"`; - -exports[`execute Switcheo V3.1 atomic swap 17`] = `Array []`; - -exports[`execute Switcheo V3.1 atomic swap 18`] = `"output.get"`; - -exports[`execute Switcheo V3.1 atomic swap 19`] = `Array []`; - -exports[`execute Switcheo V3.1 atomic swap 20`] = `"header.get"`; - -exports[`execute Switcheo V3.1 atomic swap 21`] = `Array []`; - -exports[`execute Switcheo V3.1 atomic swap 22`] = `"0"`; - -exports[`execute Switcheo V3.1 atomic swap 23`] = `"contract.get"`; - -exports[`execute Switcheo V3.1 atomic swap 24`] = ` -Array [ - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 atomic swap 25`] = `"contract.tryGet"`; - -exports[`execute Switcheo V3.1 atomic swap 26`] = `Array []`; - -exports[`execute Switcheo V3.1 atomic swap 27`] = `"storageItem.add"`; - -exports[`execute Switcheo V3.1 atomic swap 28`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c202200f681f5d3b933c956cfedec18ee635bf5c", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7335f929546270b8f811a0f9427b5712457107e7", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "b7634295e58c6d7513c22d5881ba116db154e8de", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "616e6e6f756e636544656c6179", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "803a09", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e63657378fb1102d1dfef0d2b7a1fc6a29592c39ad3a674", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "820100209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5020500e8764817", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6465706f73697465644adb05cf8ada3842c6b85178b6c05e214df569eeade5298fc48cda3b96b3c3e8", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 atomic swap 29`] = `"storageItem.update"`; - -exports[`execute Switcheo V3.1 atomic swap 30`] = `Array []`; - -exports[`execute Switcheo V3.1 atomic swap 31`] = `"storageItem.get"`; - -exports[`execute Switcheo V3.1 atomic swap 32`] = `Array []`; - -exports[`execute Switcheo V3.1 atomic swap 33`] = `"storageItem.tryGet"`; - -exports[`execute Switcheo V3.1 atomic swap 34`] = ` -Array [ - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "616e6e6f756e636544656c6179", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6465706f73697465644adb05cf8ada3842c6b85178b6c05e214df569eeade5298fc48cda3b96b3c3e8", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e63657378fb1102d1dfef0d2b7a1fc6a29592c39ad3a674", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e63657378fb1102d1dfef0d2b7a1fc6a29592c39ad3a674", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6465706f73697465644adb05cf8ada3842c6b85178b6c05e214df569eeade5298fc48cda3b96b3c3e8", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 atomic swap 35`] = `"storageItem.delete"`; - -exports[`execute Switcheo V3.1 atomic swap 36`] = `Array []`; - -exports[`execute Switcheo V3.1 atomic swap 37`] = `"action.add"`; - -exports[`execute Switcheo V3.1 atomic swap 38`] = `Array []`; - -exports[`execute Switcheo V3.1 atomic swap 39`] = `"output.get"`; - -exports[`execute Switcheo V3.1 atomic swap 40`] = ` -Array [ - Array [ - Object { - "__$type": "Input", - "hash": "0505050505050505050505050505050505050505050505050505050505050505", - "hashHex": "0x0505050505050505050505050505050505050505050505050505050505050505", - "index": 0, - "size": 34, - }, - ], -] -`; - -exports[`execute Switcheo V3.1 atomic swap 41`] = `"header.get"`; - -exports[`execute Switcheo V3.1 atomic swap 42`] = `Array []`; - -exports[`execute Switcheo V3.1 atomic swap 43`] = `"0"`; - -exports[`execute Switcheo V3.1 atomic swap 44`] = `"contract.get"`; - -exports[`execute Switcheo V3.1 atomic swap 45`] = ` -Array [ - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 atomic swap 46`] = `"contract.tryGet"`; - -exports[`execute Switcheo V3.1 atomic swap 47`] = `Array []`; - -exports[`execute Switcheo V3.1 atomic swap 48`] = `"storageItem.add"`; - -exports[`execute Switcheo V3.1 atomic swap 49`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c202200f681f5d3b933c956cfedec18ee635bf5c", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7335f929546270b8f811a0f9427b5712457107e7", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "b7634295e58c6d7513c22d5881ba116db154e8de", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "616e6e6f756e636544656c6179", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "803a09", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e63657378fb1102d1dfef0d2b7a1fc6a29592c39ad3a674", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "820100209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5020500e8764817", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6465706f73697465644adb05cf8ada3842c6b85178b6c05e214df569eeade5298fc48cda3b96b3c3e8", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7377617073d1a2ce56d5e119bc3a8893305e371cf3a9a6da9c9472b69d56081d7755d26207", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "8109001478fb1102d1dfef0d2b7a1fc6a29592c39ad3a674001469cc2943e9523cd2e63e815b2f510a58162e995d00209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50004e033c00d0004e5a6ad5c00209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500000000020101", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 atomic swap 50`] = `"storageItem.update"`; - -exports[`execute Switcheo V3.1 atomic swap 51`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e63657378fb1102d1dfef0d2b7a1fc6a29592c39ad3a674", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "820100209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5020500e8764817", - }, - Object { - "flags": 0, - "value": "820100209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5020520b4b63a17", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 atomic swap 52`] = `"storageItem.get"`; - -exports[`execute Switcheo V3.1 atomic swap 53`] = `Array []`; - -exports[`execute Switcheo V3.1 atomic swap 54`] = `"storageItem.tryGet"`; - -exports[`execute Switcheo V3.1 atomic swap 55`] = ` -Array [ - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "616e6e6f756e636544656c6179", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6465706f73697465644adb05cf8ada3842c6b85178b6c05e214df569eeade5298fc48cda3b96b3c3e8", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e63657378fb1102d1dfef0d2b7a1fc6a29592c39ad3a674", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e63657378fb1102d1dfef0d2b7a1fc6a29592c39ad3a674", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6465706f73697465644adb05cf8ada3842c6b85178b6c05e214df569eeade5298fc48cda3b96b3c3e8", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7377617073d1a2ce56d5e119bc3a8893305e371cf3a9a6da9c9472b69d56081d7755d26207", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e63657378fb1102d1dfef0d2b7a1fc6a29592c39ad3a674", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e63657378fb1102d1dfef0d2b7a1fc6a29592c39ad3a674", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7377617073d1a2ce56d5e119bc3a8893305e371cf3a9a6da9c9472b69d56081d7755d26207", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 atomic swap 56`] = `"storageItem.delete"`; - -exports[`execute Switcheo V3.1 atomic swap 57`] = `Array []`; - -exports[`execute Switcheo V3.1 atomic swap 58`] = `"action.add"`; - -exports[`execute Switcheo V3.1 atomic swap 59`] = `Array []`; - -exports[`execute Switcheo V3.1 atomic swap 60`] = `"output.get"`; - -exports[`execute Switcheo V3.1 atomic swap 61`] = ` -Array [ - Array [ - Object { - "__$type": "Input", - "hash": "0505050505050505050505050505050505050505050505050505050505050505", - "hashHex": "0x0505050505050505050505050505050505050505050505050505050505050505", - "index": 0, - "size": 34, - }, - ], -] -`; - -exports[`execute Switcheo V3.1 atomic swap 62`] = `"header.get"`; - -exports[`execute Switcheo V3.1 atomic swap 63`] = `Array []`; - -exports[`execute Switcheo V3.1 atomic swap 64`] = `"0"`; - -exports[`execute Switcheo V3.1 atomic swap 65`] = `"contract.get"`; - -exports[`execute Switcheo V3.1 atomic swap 66`] = ` -Array [ - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 atomic swap 67`] = `"contract.tryGet"`; - -exports[`execute Switcheo V3.1 atomic swap 68`] = `Array []`; - -exports[`execute Switcheo V3.1 atomic swap 69`] = `"storageItem.add"`; - -exports[`execute Switcheo V3.1 atomic swap 70`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c202200f681f5d3b933c956cfedec18ee635bf5c", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7335f929546270b8f811a0f9427b5712457107e7", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "b7634295e58c6d7513c22d5881ba116db154e8de", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "616e6e6f756e636544656c6179", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "803a09", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e63657378fb1102d1dfef0d2b7a1fc6a29592c39ad3a674", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "820100209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5020500e8764817", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6465706f73697465644adb05cf8ada3842c6b85178b6c05e214df569eeade5298fc48cda3b96b3c3e8", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7377617073d1a2ce56d5e119bc3a8893305e371cf3a9a6da9c9472b69d56081d7755d26207", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "8109001478fb1102d1dfef0d2b7a1fc6a29592c39ad3a674001469cc2943e9523cd2e63e815b2f510a58162e995d00209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50004e033c00d0004e5a6ad5c00209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500000000020101", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e63657369cc2943e9523cd2e63e815b2f510a58162e995d", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "820100209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50204e033c00d", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 atomic swap 71`] = `"storageItem.update"`; - -exports[`execute Switcheo V3.1 atomic swap 72`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e63657378fb1102d1dfef0d2b7a1fc6a29592c39ad3a674", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "820100209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5020500e8764817", - }, - Object { - "flags": 0, - "value": "820100209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5020520b4b63a17", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7377617073d1a2ce56d5e119bc3a8893305e371cf3a9a6da9c9472b69d56081d7755d26207", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "8109001478fb1102d1dfef0d2b7a1fc6a29592c39ad3a674001469cc2943e9523cd2e63e815b2f510a58162e995d00209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50004e033c00d0004e5a6ad5c00209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500000000020101", - }, - Object { - "flags": 0, - "value": "8109001478fb1102d1dfef0d2b7a1fc6a29592c39ad3a674001469cc2943e9523cd2e63e815b2f510a58162e995d00209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50004e033c00d0004e5a6ad5c00209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5000000000000", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 atomic swap 73`] = `"storageItem.get"`; - -exports[`execute Switcheo V3.1 atomic swap 74`] = `Array []`; - -exports[`execute Switcheo V3.1 atomic swap 75`] = `"storageItem.tryGet"`; - -exports[`execute Switcheo V3.1 atomic swap 76`] = ` -Array [ - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "616e6e6f756e636544656c6179", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6465706f73697465644adb05cf8ada3842c6b85178b6c05e214df569eeade5298fc48cda3b96b3c3e8", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e63657378fb1102d1dfef0d2b7a1fc6a29592c39ad3a674", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e63657378fb1102d1dfef0d2b7a1fc6a29592c39ad3a674", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6465706f73697465644adb05cf8ada3842c6b85178b6c05e214df569eeade5298fc48cda3b96b3c3e8", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7377617073d1a2ce56d5e119bc3a8893305e371cf3a9a6da9c9472b69d56081d7755d26207", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e63657378fb1102d1dfef0d2b7a1fc6a29592c39ad3a674", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e63657378fb1102d1dfef0d2b7a1fc6a29592c39ad3a674", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7377617073d1a2ce56d5e119bc3a8893305e371cf3a9a6da9c9472b69d56081d7755d26207", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7377617073d1a2ce56d5e119bc3a8893305e371cf3a9a6da9c9472b69d56081d7755d26207", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e63657369cc2943e9523cd2e63e815b2f510a58162e995d", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e63657369cc2943e9523cd2e63e815b2f510a58162e995d", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7377617073d1a2ce56d5e119bc3a8893305e371cf3a9a6da9c9472b69d56081d7755d26207", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 atomic swap 77`] = `"storageItem.delete"`; - -exports[`execute Switcheo V3.1 atomic swap 78`] = `Array []`; - -exports[`execute Switcheo V3.1 atomic swap 79`] = `"action.add"`; - -exports[`execute Switcheo V3.1 atomic swap 80`] = `Array []`; - -exports[`execute Switcheo V3.1 atomic swap 81`] = `"output.get"`; - -exports[`execute Switcheo V3.1 atomic swap 82`] = ` -Array [ - Array [ - Object { - "__$type": "Input", - "hash": "0505050505050505050505050505050505050505050505050505050505050505", - "hashHex": "0x0505050505050505050505050505050505050505050505050505050505050505", - "index": 0, - "size": 34, - }, - ], -] -`; - -exports[`execute Switcheo V3.1 atomic swap 83`] = `"header.get"`; - -exports[`execute Switcheo V3.1 atomic swap 84`] = `Array []`; - -exports[`execute Switcheo V3.1 atomic swap 85`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "66656541646472657373536574", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "c202200f681f5d3b933c956cfedec18ee635bf5c", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "636f6f7264696e61746f72536574", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7335f929546270b8f811a0f9427b5712457107e7", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7769746864726177436f6f7264696e61746f72536574", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "b7634295e58c6d7513c22d5881ba116db154e8de", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "616e6e6f756e636544656c6179536574", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "803a09", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "696e697469616c697a6564", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6465706f7369746564", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "78fb1102d1dfef0d2b7a1fc6a29592c39ad3a674", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "100000000000", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572726564", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "78fb1102d1dfef0d2b7a1fc6a29592c39ad3a674", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "100000000000", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "01", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572726564", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "78fb1102d1dfef0d2b7a1fc6a29592c39ad3a674", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "-230700000", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "30", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7377617043726561746564", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "78fb1102d1dfef0d2b7a1fc6a29592c39ad3a674", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "69cc2943e9523cd2e63e815b2f510a58162e995d", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "e033c00d", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "d1a2ce56d5e119bc3a8893305e371cf3a9a6da9c9472b69d56081d7755d26207", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "e5a6ad5c", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572726564", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "69cc2943e9523cd2e63e815b2f510a58162e995d", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "230700000", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "35", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "737761704578656375746564", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "d1a2ce56d5e119bc3a8893305e371cf3a9a6da9c9472b69d56081d7755d26207", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 atomic swap 86`] = `Array []`; - -exports[`execute Switcheo V3.1 atomic swap 87`] = `Array []`; - -exports[`execute Switcheo V3.1 atomic swap 88`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 1`] = `"0"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 2`] = `"contract.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 3`] = ` -Array [ - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 4`] = `"contract.tryGet"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 5`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 6`] = `"storageItem.add"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 7`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00008a5d78456301", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00008a5d78456301", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "88c132e98e00", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 8`] = `"storageItem.update"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 9`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00008a5d78456301", - }, - Object { - "flags": 0, - "value": "783e5774e9446301", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 10`] = `"storageItem.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 11`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 12`] = `"storageItem.tryGet"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 13`] = ` -Array [ - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 14`] = `"storageItem.delete"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 15`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 16`] = `"action.add"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 17`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 18`] = `"header.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 19`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 20`] = `"0"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 21`] = `"contract.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 22`] = ` -Array [ - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 23`] = `"contract.tryGet"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 24`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 25`] = `"storageItem.add"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 26`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00008a5d78456301", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00008a5d78456301", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "88c132e98e00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c202200f681f5d3b933c956cfedec18ee635bf5c", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7335f929546270b8f811a0f9427b5712457107e7", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "b7634295e58c6d7513c22d5881ba116db154e8de", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "616e6e6f756e636544656c6179", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "803a09", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 27`] = `"storageItem.update"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 28`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00008a5d78456301", - }, - Object { - "flags": 0, - "value": "783e5774e9446301", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 29`] = `"storageItem.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 30`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 31`] = `"storageItem.tryGet"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 32`] = ` -Array [ - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "616e6e6f756e636544656c6179", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 33`] = `"storageItem.delete"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 34`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 35`] = `"action.add"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 36`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 37`] = `"header.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 38`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 39`] = `"0"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 40`] = `"contract.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 41`] = ` -Array [ - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 42`] = `"contract.tryGet"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 43`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 44`] = `"storageItem.add"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 45`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00008a5d78456301", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00008a5d78456301", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "88c132e98e00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c202200f681f5d3b933c956cfedec18ee635bf5c", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7335f929546270b8f811a0f9427b5712457107e7", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "b7634295e58c6d7513c22d5881ba116db154e8de", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "616e6e6f756e636544656c6179", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "803a09", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6f6c644e45503557686974656c69737432e125258b7db0a0dffde5bd03b2b859253538ab", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 46`] = `"storageItem.update"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 47`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00008a5d78456301", - }, - Object { - "flags": 0, - "value": "783e5774e9446301", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 48`] = `"storageItem.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 49`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 50`] = `"storageItem.tryGet"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 51`] = ` -Array [ - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "616e6e6f756e636544656c6179", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6f6c644e45503557686974656c6973745365616c6564", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6f6c644e45503557686974656c69737432e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 52`] = `"storageItem.delete"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 53`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 54`] = `"action.add"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 55`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 56`] = `"header.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 57`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 58`] = `"0"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 59`] = `"contract.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 60`] = ` -Array [ - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 61`] = `"contract.tryGet"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 62`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 63`] = `"storageItem.add"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 64`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00008a5d78456301", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00008a5d78456301", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "88c132e98e00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c202200f681f5d3b933c956cfedec18ee635bf5c", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7335f929546270b8f811a0f9427b5712457107e7", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "b7634295e58c6d7513c22d5881ba116db154e8de", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "616e6e6f756e636544656c6179", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "803a09", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6f6c644e45503557686974656c69737432e125258b7db0a0dffde5bd03b2b859253538ab", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e6365732fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "8201001432e125258b7db0a0dffde5bd03b2b859253538ab020688c132e98e00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "88c132e98e00", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 65`] = `"storageItem.update"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 66`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00008a5d78456301", - }, - Object { - "flags": 0, - "value": "783e5774e9446301", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 67`] = `"storageItem.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 68`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 69`] = `"storageItem.tryGet"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 70`] = ` -Array [ - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "616e6e6f756e636544656c6179", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6f6c644e45503557686974656c6973745365616c6564", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6f6c644e45503557686974656c69737432e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e6365732fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e6365732fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 71`] = `"storageItem.delete"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 72`] = ` -Array [ - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 73`] = `"action.add"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 74`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 75`] = `"header.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 76`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 77`] = `"0"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 78`] = `"contract.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 79`] = ` -Array [ - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 80`] = `"contract.tryGet"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 81`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 82`] = `"storageItem.add"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 83`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00008a5d78456301", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00008a5d78456301", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "88c132e98e00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c202200f681f5d3b933c956cfedec18ee635bf5c", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7335f929546270b8f811a0f9427b5712457107e7", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "b7634295e58c6d7513c22d5881ba116db154e8de", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "616e6e6f756e636544656c6179", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "803a09", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6f6c644e45503557686974656c69737432e125258b7db0a0dffde5bd03b2b859253538ab", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e6365732fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "8201001432e125258b7db0a0dffde5bd03b2b859253538ab020688c132e98e00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "88c132e98e00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "8023bce88e00", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 84`] = `"storageItem.update"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 85`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00008a5d78456301", - }, - Object { - "flags": 0, - "value": "783e5774e9446301", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "88c132e98e00", - }, - Object { - "flags": 0, - "value": "089e76", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e6365732fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "8201001432e125258b7db0a0dffde5bd03b2b859253538ab020688c132e98e00", - }, - Object { - "flags": 0, - "value": "8201001432e125258b7db0a0dffde5bd03b2b859253538ab0203089e76", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 86`] = `"storageItem.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 87`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 88`] = `"storageItem.tryGet"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 89`] = ` -Array [ - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "616e6e6f756e636544656c6179", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6f6c644e45503557686974656c6973745365616c6564", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6f6c644e45503557686974656c69737432e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e6365732fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e6365732fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e6365732fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e6365732fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6f6c644e45503557686974656c69737432e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e6365732fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e6365732fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 90`] = `"storageItem.delete"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 91`] = ` -Array [ - Array [ - Object { - "hash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - "key": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 92`] = `"action.add"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 93`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 94`] = `"header.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 95`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 96`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00008a5d78456301", - }, - ], - "scriptHash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "88c132e98e00", - }, - ], - "scriptHash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "66656541646472657373536574", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "c202200f681f5d3b933c956cfedec18ee635bf5c", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "636f6f7264696e61746f72536574", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7335f929546270b8f811a0f9427b5712457107e7", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7769746864726177436f6f7264696e61746f72536574", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "b7634295e58c6d7513c22d5881ba116db154e8de", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "616e6e6f756e636544656c6179536574", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "803a09", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "696e697469616c697a6564", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6164646564546f57686974656c697374", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572726564", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "88c132e98e00", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "01", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6465706f7369746564", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "88c132e98e00", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "88c132e98e00", - }, - ], - "scriptHash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "8023bce88e00000000000000000000000000000000000000000000000000000000", - }, - ], - "scriptHash": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572726564", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "-613790000000", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "09", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7769746864726177696e67", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "8023bce88e00000000000000000000000000000000000000000000000000000000", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "77697468647261776e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "32e125258b7db0a0dffde5bd03b2b859253538ab", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "8023bce88e00000000000000000000000000000000000000000000000000000000", - }, - Object { - "__$type": "Hash256ContractParameter", - "type": 4, - "value": "52c7d04d5ca2f31e2d74c3c3fa96481144095f83669be2f3bc001e25df469b47", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 97`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 98`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw SWTH tokens 99`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 1`] = `"contract.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 2`] = ` -Array [ - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 3`] = `"contract.tryGet"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 4`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 5`] = `"storageItem.add"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 6`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "a05ada61", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0080c6a47e8d03", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "546f6b656e546f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c052b31ab361", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e747261637441646d696e4b6579", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "ac5dcfb1298d08af13dd5aeee94336cc2fe83e39", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c6973745472616e7366657246726f6d53657474696e67436865636b6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 7`] = `"storageItem.update"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 8`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 9`] = `"storageItem.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 10`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 11`] = `"storageItem.tryGet"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 12`] = ` -Array [ - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "546f6b656e546f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "546f6b656e546f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e747261637441646d696e4b6579", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c6973745472616e7366657246726f6d53657474696e67436865636b6564", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 13`] = `"storageItem.delete"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 14`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 15`] = `"action.add"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 16`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 17`] = `"header.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 18`] = ` -Array [ - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 19`] = `"0"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 20`] = `"contract.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 21`] = ` -Array [ - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 22`] = `"contract.tryGet"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 23`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 24`] = `"storageItem.add"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 25`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "a05ada61", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0080c6a47e8d03", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "546f6b656e546f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c052b31ab361", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e747261637441646d696e4b6579", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "ac5dcfb1298d08af13dd5aeee94336cc2fe83e39", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c6973745472616e7366657246726f6d53657474696e67436865636b6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c69737465645472616e7366657246726f6d4c69737400d4c357a466cf12e8167b00a440f782705dcf2ba3", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 26`] = `"storageItem.update"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 27`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 28`] = `"storageItem.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 29`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 30`] = `"storageItem.tryGet"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 31`] = ` -Array [ - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "546f6b656e546f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "546f6b656e546f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e747261637441646d696e4b6579", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c6973745472616e7366657246726f6d53657474696e67436865636b6564", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e747261637441646d696e4b6579", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c69737465645472616e7366657246726f6d4c69737400d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 32`] = `"storageItem.delete"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 33`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 34`] = `"action.add"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 35`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 36`] = `"header.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 37`] = ` -Array [ - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 38`] = `"0"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 39`] = `"contract.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 40`] = ` -Array [ - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 41`] = `"contract.tryGet"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 42`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 43`] = `"storageItem.add"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 44`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "a05ada61", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0080c6a47e8d03", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "546f6b656e546f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c052b31ab361", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e747261637441646d696e4b6579", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "ac5dcfb1298d08af13dd5aeee94336cc2fe83e39", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c6973745472616e7366657246726f6d53657474696e67436865636b6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c69737465645472616e7366657246726f6d4c69737400d4c357a466cf12e8167b00a440f782705dcf2ba3", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "88c132e98e00", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 45`] = `"storageItem.update"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 46`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0080c6a47e8d03", - }, - Object { - "flags": 0, - "value": "78be93bbef8c03", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 47`] = `"storageItem.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 48`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 49`] = `"storageItem.tryGet"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 50`] = ` -Array [ - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "546f6b656e546f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "546f6b656e546f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e747261637441646d696e4b6579", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c6973745472616e7366657246726f6d53657474696e67436865636b6564", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e747261637441646d696e4b6579", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c69737465645472616e7366657246726f6d4c69737400d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 51`] = `"storageItem.delete"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 52`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 53`] = `"action.add"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 54`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 55`] = `"header.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 56`] = ` -Array [ - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 57`] = `"0"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 58`] = `"contract.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 59`] = ` -Array [ - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 60`] = `"contract.tryGet"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 61`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 62`] = `"storageItem.add"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 63`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "a05ada61", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0080c6a47e8d03", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "546f6b656e546f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c052b31ab361", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e747261637441646d696e4b6579", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "ac5dcfb1298d08af13dd5aeee94336cc2fe83e39", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c6973745472616e7366657246726f6d53657474696e67436865636b6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c69737465645472616e7366657246726f6d4c69737400d4c357a466cf12e8167b00a440f782705dcf2ba3", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "88c132e98e00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c202200f681f5d3b933c956cfedec18ee635bf5c", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7335f929546270b8f811a0f9427b5712457107e7", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "b7634295e58c6d7513c22d5881ba116db154e8de", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "616e6e6f756e636544656c6179", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "803a09", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 64`] = `"storageItem.update"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 65`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0080c6a47e8d03", - }, - Object { - "flags": 0, - "value": "78be93bbef8c03", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 66`] = `"storageItem.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 67`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 68`] = `"storageItem.tryGet"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 69`] = ` -Array [ - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "546f6b656e546f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "546f6b656e546f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e747261637441646d696e4b6579", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c6973745472616e7366657246726f6d53657474696e67436865636b6564", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e747261637441646d696e4b6579", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c69737465645472616e7366657246726f6d4c69737400d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "616e6e6f756e636544656c6179", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 70`] = `"storageItem.delete"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 71`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 72`] = `"action.add"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 73`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 74`] = `"header.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 75`] = ` -Array [ - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 76`] = `"0"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 77`] = `"contract.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 78`] = ` -Array [ - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 79`] = `"contract.tryGet"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 80`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 81`] = `"storageItem.add"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 82`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "a05ada61", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0080c6a47e8d03", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "546f6b656e546f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c052b31ab361", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e747261637441646d696e4b6579", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "ac5dcfb1298d08af13dd5aeee94336cc2fe83e39", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c6973745472616e7366657246726f6d53657474696e67436865636b6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c69737465645472616e7366657246726f6d4c69737400d4c357a466cf12e8167b00a440f782705dcf2ba3", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "88c132e98e00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c202200f681f5d3b933c956cfedec18ee635bf5c", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7335f929546270b8f811a0f9427b5712457107e7", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "b7634295e58c6d7513c22d5881ba116db154e8de", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "616e6e6f756e636544656c6179", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "803a09", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6f6c644e45503557686974656c6973748d085e441a6e2e751e60146b9da2662b5afcc0c9", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 83`] = `"storageItem.update"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 84`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0080c6a47e8d03", - }, - Object { - "flags": 0, - "value": "78be93bbef8c03", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 85`] = `"storageItem.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 86`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 87`] = `"storageItem.tryGet"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 88`] = ` -Array [ - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "546f6b656e546f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "546f6b656e546f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e747261637441646d696e4b6579", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c6973745472616e7366657246726f6d53657474696e67436865636b6564", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e747261637441646d696e4b6579", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c69737465645472616e7366657246726f6d4c69737400d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "616e6e6f756e636544656c6179", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6f6c644e45503557686974656c6973745365616c6564", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6f6c644e45503557686974656c6973748d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 89`] = `"storageItem.delete"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 90`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 91`] = `"action.add"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 92`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 93`] = `"header.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 94`] = ` -Array [ - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 95`] = `"0"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 96`] = `"contract.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 97`] = ` -Array [ - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 98`] = `"contract.tryGet"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 99`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 100`] = `"storageItem.add"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 101`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "a05ada61", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0080c6a47e8d03", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "546f6b656e546f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c052b31ab361", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e747261637441646d696e4b6579", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "ac5dcfb1298d08af13dd5aeee94336cc2fe83e39", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c6973745472616e7366657246726f6d53657474696e67436865636b6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c69737465645472616e7366657246726f6d4c69737400d4c357a466cf12e8167b00a440f782705dcf2ba3", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "88c132e98e00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c202200f681f5d3b933c956cfedec18ee635bf5c", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7335f929546270b8f811a0f9427b5712457107e7", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "b7634295e58c6d7513c22d5881ba116db154e8de", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "616e6e6f756e636544656c6179", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "803a09", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6f6c644e45503557686974656c6973748d085e441a6e2e751e60146b9da2662b5afcc0c9", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e6365732fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "820100148d085e441a6e2e751e60146b9da2662b5afcc0c9020688c132e98e00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00d4c357a466cf12e8167b00a440f782705dcf2ba3", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "88c132e98e00", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 102`] = `"storageItem.update"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 103`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0080c6a47e8d03", - }, - Object { - "flags": 0, - "value": "78be93bbef8c03", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 104`] = `"storageItem.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 105`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 106`] = `"storageItem.tryGet"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 107`] = ` -Array [ - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "546f6b656e546f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "546f6b656e546f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e747261637441646d696e4b6579", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c6973745472616e7366657246726f6d53657474696e67436865636b6564", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e747261637441646d696e4b6579", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c69737465645472616e7366657246726f6d4c69737400d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "616e6e6f756e636544656c6179", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6f6c644e45503557686974656c6973745365616c6564", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6f6c644e45503557686974656c6973748d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e6365732fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e6365732fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c6973745472616e7366657246726f6d53657474696e67436865636b6564", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c69737465645472616e7366657246726f6d4c69737400d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f00d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f00d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 108`] = `"storageItem.delete"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 109`] = ` -Array [ - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 110`] = `"action.add"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 111`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 112`] = `"header.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 113`] = ` -Array [ - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 114`] = `"0"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 115`] = `"contract.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 116`] = ` -Array [ - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 117`] = `"contract.tryGet"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 118`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 119`] = `"storageItem.add"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 120`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "a05ada61", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0080c6a47e8d03", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "546f6b656e546f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c052b31ab361", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e747261637441646d696e4b6579", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "ac5dcfb1298d08af13dd5aeee94336cc2fe83e39", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c6973745472616e7366657246726f6d53657474696e67436865636b6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c69737465645472616e7366657246726f6d4c69737400d4c357a466cf12e8167b00a440f782705dcf2ba3", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "88c132e98e00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c202200f681f5d3b933c956cfedec18ee635bf5c", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7335f929546270b8f811a0f9427b5712457107e7", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "b7634295e58c6d7513c22d5881ba116db154e8de", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "616e6e6f756e636544656c6179", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "803a09", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6f6c644e45503557686974656c6973748d085e441a6e2e751e60146b9da2662b5afcc0c9", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e6365732fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "820100148d085e441a6e2e751e60146b9da2662b5afcc0c9020688c132e98e00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00d4c357a466cf12e8167b00a440f782705dcf2ba3", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "88c132e98e00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "8023bce88e00", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 121`] = `"storageItem.update"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 122`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0080c6a47e8d03", - }, - Object { - "flags": 0, - "value": "78be93bbef8c03", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00d4c357a466cf12e8167b00a440f782705dcf2ba3", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "88c132e98e00", - }, - Object { - "flags": 0, - "value": "089e76", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e6365732fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "820100148d085e441a6e2e751e60146b9da2662b5afcc0c9020688c132e98e00", - }, - Object { - "flags": 0, - "value": "820100148d085e441a6e2e751e60146b9da2662b5afcc0c90203089e76", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 123`] = `"storageItem.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 124`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 125`] = `"storageItem.tryGet"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 126`] = ` -Array [ - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "546f6b656e546f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "546f6b656e546f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e747261637441646d696e4b6579", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c6973745472616e7366657246726f6d53657474696e67436865636b6564", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e747261637441646d696e4b6579", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c69737465645472616e7366657246726f6d4c69737400d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "616e6e6f756e636544656c6179", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6f6c644e45503557686974656c6973745365616c6564", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6f6c644e45503557686974656c6973748d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "636f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e6365732fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e6365732fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c6973745472616e7366657246726f6d53657474696e67436865636b6564", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "57686974654c69737465645472616e7366657246726f6d4c69737400d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f00d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f00d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e6365732fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e6365732fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "6f6c644e45503557686974656c6973748d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "7769746864726177436f6f7264696e61746f7241646472657373", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "436f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f00d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "566573746564546f6b656e5072656669785f00d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f00d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e6365732fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], - Array [ - Object { - "hash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - "key": "62616c616e6365732fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 127`] = `"storageItem.delete"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 128`] = ` -Array [ - Array [ - Object { - "hash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - "key": "42616c616e63655072656669785f002fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 129`] = `"action.add"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 130`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 131`] = `"header.get"`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 132`] = ` -Array [ - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], - Array [ - Object { - "hashOrIndex": 2900000, - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 133`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "53657442616c616e63654f6628292073657474696e672062616c616e6365", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1000000000000000", - }, - ], - "scriptHash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1000000000000000", - }, - ], - "scriptHash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "536574546f74616c537570706c7928292073657474696e67206e657720746f74616c537570706c79", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "27500000000000000", - }, - ], - "scriptHash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "57686974656c6973745472616e7366657246726f6d416464282920616464656420636f6e747261637420746f2077686974656c697374", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - "scriptHash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "53657442616c616e63654f6628292073657474696e672062616c616e6365", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "999386202226296", - }, - ], - "scriptHash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "53657442616c616e63654f6628292073657474696e672062616c616e6365", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "613797773704", - }, - ], - "scriptHash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "a34ef9ba9549f2a5ffae1966ea8fbdde47839f20", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "88c132e98e00", - }, - ], - "scriptHash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "66656541646472657373536574", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "c202200f681f5d3b933c956cfedec18ee635bf5c", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "636f6f7264696e61746f72536574", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7335f929546270b8f811a0f9427b5712457107e7", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7769746864726177436f6f7264696e61746f72536574", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "b7634295e58c6d7513c22d5881ba116db154e8de", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "616e6e6f756e636544656c6179536574", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "803a09", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "696e697469616c697a6564", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6164646564546f57686974656c697374", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572726564", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "88c132e98e00", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "01", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6465706f7369746564", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "88c132e98e00", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "49735472616e7366657246726f6d57686974656c697374696e67456e61626c6564206973456e61626c6564", - }, - Object { - "__$type": "BooleanContractParameter", - "type": 1, - "value": true, - }, - ], - "scriptHash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "4973436f6e747261637457686974656c69737465645472616e7366657246726f6d282920616464726573732c20697357686974654c6973746564", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - Object { - "__$type": "BooleanContractParameter", - "type": 1, - "value": true, - }, - ], - "scriptHash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "53657442616c616e63654f6628292073657474696e672062616c616e6365", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "613797773704", - }, - ], - "scriptHash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "88c132e98e00", - }, - ], - "scriptHash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "53657442616c616e63654f6628292073657474696e672062616c616e6365", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "7773704", - }, - ], - "scriptHash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "53657442616c616e63654f6628292073657474696e672062616c616e6365", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "613790000000", - }, - ], - "scriptHash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "8023bce88e00000000000000000000000000000000000000000000000000000000", - }, - ], - "scriptHash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572726564", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "-613790000000", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "09", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7769746864726177696e67", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "8023bce88e00000000000000000000000000000000000000000000000000000000", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "77697468647261776e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "8023bce88e00000000000000000000000000000000000000000000000000000000", - }, - Object { - "__$type": "Hash256ContractParameter", - "type": 4, - "value": "679ace53c89b16302689959f2acd0c4d9e079f3e16ca3380ed394076c9e125ae", - }, - ], - "scriptHash": "d4c357a466cf12e8167b00a440f782705dcf2ba3", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 134`] = ` -Array [ - Array [ - Object { - "message": "InitSmartContract() contract initialisation complete", - "scriptHash": "8d085e441a6e2e751e60146b9da2662b5afcc0c9", - }, - ], -] -`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 135`] = `Array []`; - -exports[`execute Switcheo V3.1 deposit & withdraw n0S tokens 136`] = `Array []`; - -exports[`execute Time Coin deploy & transfer 1`] = `"0"`; - -exports[`execute Time Coin deploy & transfer 2`] = `"contract.get"`; - -exports[`execute Time Coin deploy & transfer 3`] = ` -Array [ - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 4`] = `"contract.tryGet"`; - -exports[`execute Time Coin deploy & transfer 5`] = `Array []`; - -exports[`execute Time Coin deploy & transfer 6`] = `"storageItem.add"`; - -exports[`execute Time Coin deploy & transfer 7`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "746f74616c546f6b656e537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00006c98fdf0e107", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e747261637441646d696e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00006c98fdf0e107", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 8`] = `"storageItem.update"`; - -exports[`execute Time Coin deploy & transfer 9`] = `Array []`; - -exports[`execute Time Coin deploy & transfer 10`] = `"storageItem.get"`; - -exports[`execute Time Coin deploy & transfer 11`] = `Array []`; - -exports[`execute Time Coin deploy & transfer 12`] = `"storageItem.tryGet"`; - -exports[`execute Time Coin deploy & transfer 13`] = ` -Array [ - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "746f74616c546f6b656e537570706c79", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e747261637441646d696e", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e747261637441646d696e", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 14`] = `"storageItem.delete"`; - -exports[`execute Time Coin deploy & transfer 15`] = `Array []`; - -exports[`execute Time Coin deploy & transfer 16`] = `"storageItem.getAll$"`; - -exports[`execute Time Coin deploy & transfer 17`] = `Array []`; - -exports[`execute Time Coin deploy & transfer 18`] = `"action.add"`; - -exports[`execute Time Coin deploy & transfer 19`] = `Array []`; - -exports[`execute Time Coin deploy & transfer 20`] = `"header.get"`; - -exports[`execute Time Coin deploy & transfer 21`] = ` -Array [ - Array [ - Object { - "hashOrIndex": 0, - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 22`] = `"0"`; - -exports[`execute Time Coin deploy & transfer 23`] = `"contract.get"`; - -exports[`execute Time Coin deploy & transfer 24`] = ` -Array [ - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 25`] = `"contract.tryGet"`; - -exports[`execute Time Coin deploy & transfer 26`] = `Array []`; - -exports[`execute Time Coin deploy & transfer 27`] = `"storageItem.add"`; - -exports[`execute Time Coin deploy & transfer 28`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "746f74616c546f6b656e537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00006c98fdf0e107", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e747261637441646d696e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00006c98fdf0e107", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 29`] = `"storageItem.update"`; - -exports[`execute Time Coin deploy & transfer 30`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - Object { - "flags": 0, - "value": "01", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 31`] = `"storageItem.get"`; - -exports[`execute Time Coin deploy & transfer 32`] = `Array []`; - -exports[`execute Time Coin deploy & transfer 33`] = `"storageItem.tryGet"`; - -exports[`execute Time Coin deploy & transfer 34`] = ` -Array [ - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "746f74616c546f6b656e537570706c79", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e747261637441646d696e", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e747261637441646d696e", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e747261637441646d696e", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 35`] = `"storageItem.delete"`; - -exports[`execute Time Coin deploy & transfer 36`] = `Array []`; - -exports[`execute Time Coin deploy & transfer 37`] = `"storageItem.getAll$"`; - -exports[`execute Time Coin deploy & transfer 38`] = `Array []`; - -exports[`execute Time Coin deploy & transfer 39`] = `"action.add"`; - -exports[`execute Time Coin deploy & transfer 40`] = `Array []`; - -exports[`execute Time Coin deploy & transfer 41`] = `"header.get"`; - -exports[`execute Time Coin deploy & transfer 42`] = ` -Array [ - Array [ - Object { - "hashOrIndex": 0, - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 43`] = `"0"`; - -exports[`execute Time Coin deploy & transfer 44`] = `"contract.get"`; - -exports[`execute Time Coin deploy & transfer 45`] = ` -Array [ - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 46`] = `"contract.tryGet"`; - -exports[`execute Time Coin deploy & transfer 47`] = `Array []`; - -exports[`execute Time Coin deploy & transfer 48`] = `"storageItem.add"`; - -exports[`execute Time Coin deploy & transfer 49`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "746f74616c546f6b656e537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00006c98fdf0e107", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e747261637441646d696e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00006c98fdf0e107", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00ac23fc06", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802b71403", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "800400000203b71403020500ac23fc06820102010d000500ac23fc06", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 50`] = `"storageItem.update"`; - -exports[`execute Time Coin deploy & transfer 51`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00006c98fdf0e107", - }, - Object { - "flags": 0, - "value": "0054489cf6f0e107", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 52`] = `"storageItem.get"`; - -exports[`execute Time Coin deploy & transfer 53`] = `Array []`; - -exports[`execute Time Coin deploy & transfer 54`] = `"storageItem.tryGet"`; - -exports[`execute Time Coin deploy & transfer 55`] = ` -Array [ - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "746f74616c546f6b656e537570706c79", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e747261637441646d696e", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e747261637441646d696e", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e747261637441646d696e", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802b71403", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802b71403", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 56`] = `"storageItem.delete"`; - -exports[`execute Time Coin deploy & transfer 57`] = `Array []`; - -exports[`execute Time Coin deploy & transfer 58`] = `"storageItem.getAll$"`; - -exports[`execute Time Coin deploy & transfer 59`] = ` -Array [ - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "prefix": "6c6f636b7570735f7d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "prefix": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 60`] = `"action.add"`; - -exports[`execute Time Coin deploy & transfer 61`] = `Array []`; - -exports[`execute Time Coin deploy & transfer 62`] = `"header.get"`; - -exports[`execute Time Coin deploy & transfer 63`] = ` -Array [ - Array [ - Object { - "hashOrIndex": 0, - }, - ], - Array [ - Object { - "hashOrIndex": 0, - }, - ], - Array [ - Object { - "hashOrIndex": 0, - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 64`] = `"0"`; - -exports[`execute Time Coin deploy & transfer 65`] = `"contract.get"`; - -exports[`execute Time Coin deploy & transfer 66`] = ` -Array [ - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 67`] = `"contract.tryGet"`; - -exports[`execute Time Coin deploy & transfer 68`] = `Array []`; - -exports[`execute Time Coin deploy & transfer 69`] = `"storageItem.add"`; - -exports[`execute Time Coin deploy & transfer 70`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "746f74616c546f6b656e537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00006c98fdf0e107", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e747261637441646d696e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00006c98fdf0e107", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00ac23fc06", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802b71403", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "800400000203b71403020500ac23fc06820102010d000500ac23fc06", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802121503", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "800400000203121503020500902f5009820102010d000500902f5009", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 71`] = `"storageItem.update"`; - -exports[`execute Time Coin deploy & transfer 72`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00006c98fdf0e107", - }, - Object { - "flags": 0, - "value": "0054489cf6f0e107", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0054489cf6f0e107", - }, - Object { - "flags": 0, - "value": "00c4184cedf0e107", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00ac23fc06", - }, - Object { - "flags": 0, - "value": "003c534c10", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 73`] = `"storageItem.get"`; - -exports[`execute Time Coin deploy & transfer 74`] = `Array []`; - -exports[`execute Time Coin deploy & transfer 75`] = `"storageItem.tryGet"`; - -exports[`execute Time Coin deploy & transfer 76`] = ` -Array [ - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "746f74616c546f6b656e537570706c79", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e747261637441646d696e", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e747261637441646d696e", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e747261637441646d696e", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802b71403", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802b71403", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802121503", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802121503", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 77`] = `"storageItem.delete"`; - -exports[`execute Time Coin deploy & transfer 78`] = `Array []`; - -exports[`execute Time Coin deploy & transfer 79`] = `"storageItem.getAll$"`; - -exports[`execute Time Coin deploy & transfer 80`] = ` -Array [ - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "prefix": "6c6f636b7570735f7d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "prefix": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "prefix": "6c6f636b7570735f7d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "prefix": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 81`] = `"action.add"`; - -exports[`execute Time Coin deploy & transfer 82`] = `Array []`; - -exports[`execute Time Coin deploy & transfer 83`] = `"header.get"`; - -exports[`execute Time Coin deploy & transfer 84`] = ` -Array [ - Array [ - Object { - "hashOrIndex": 0, - }, - ], - Array [ - Object { - "hashOrIndex": 0, - }, - ], - Array [ - Object { - "hashOrIndex": 0, - }, - ], - Array [ - Object { - "hashOrIndex": 0, - }, - ], - Array [ - Object { - "hashOrIndex": 0, - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 85`] = `"0"`; - -exports[`execute Time Coin deploy & transfer 86`] = `"contract.get"`; - -exports[`execute Time Coin deploy & transfer 87`] = ` -Array [ - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 88`] = `"contract.tryGet"`; - -exports[`execute Time Coin deploy & transfer 89`] = `Array []`; - -exports[`execute Time Coin deploy & transfer 90`] = `"storageItem.add"`; - -exports[`execute Time Coin deploy & transfer 91`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "746f74616c546f6b656e537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00006c98fdf0e107", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e747261637441646d696e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00006c98fdf0e107", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00ac23fc06", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802b71403", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "800400000203b71403020500ac23fc06820102010d000500ac23fc06", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802121503", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "800400000203121503020500902f5009820102010d000500902f5009", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802b61403", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "800400000203b61403020500743ba40b820102010d000500743ba40b", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 92`] = `"storageItem.update"`; - -exports[`execute Time Coin deploy & transfer 93`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00006c98fdf0e107", - }, - Object { - "flags": 0, - "value": "0054489cf6f0e107", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0054489cf6f0e107", - }, - Object { - "flags": 0, - "value": "00c4184cedf0e107", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00ac23fc06", - }, - Object { - "flags": 0, - "value": "003c534c10", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c4184cedf0e107", - }, - Object { - "flags": 0, - "value": "0050dda7e1f0e107", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "003c534c10", - }, - Object { - "flags": 0, - "value": "00b08ef01b", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 94`] = `"storageItem.get"`; - -exports[`execute Time Coin deploy & transfer 95`] = `Array []`; - -exports[`execute Time Coin deploy & transfer 96`] = `"storageItem.tryGet"`; - -exports[`execute Time Coin deploy & transfer 97`] = ` -Array [ - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "746f74616c546f6b656e537570706c79", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e747261637441646d696e", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e747261637441646d696e", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e747261637441646d696e", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802b71403", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802b71403", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802121503", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802121503", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802b61403", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802b61403", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 98`] = `"storageItem.delete"`; - -exports[`execute Time Coin deploy & transfer 99`] = `Array []`; - -exports[`execute Time Coin deploy & transfer 100`] = `"storageItem.getAll$"`; - -exports[`execute Time Coin deploy & transfer 101`] = ` -Array [ - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "prefix": "6c6f636b7570735f7d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "prefix": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "prefix": "6c6f636b7570735f7d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "prefix": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "prefix": "6c6f636b7570735f7d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "prefix": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 102`] = `"action.add"`; - -exports[`execute Time Coin deploy & transfer 103`] = `Array []`; - -exports[`execute Time Coin deploy & transfer 104`] = `"header.get"`; - -exports[`execute Time Coin deploy & transfer 105`] = ` -Array [ - Array [ - Object { - "hashOrIndex": 0, - }, - ], - Array [ - Object { - "hashOrIndex": 0, - }, - ], - Array [ - Object { - "hashOrIndex": 0, - }, - ], - Array [ - Object { - "hashOrIndex": 0, - }, - ], - Array [ - Object { - "hashOrIndex": 0, - }, - ], - Array [ - Object { - "hashOrIndex": 0, - }, - ], - Array [ - Object { - "hashOrIndex": 0, - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 106`] = `"0"`; - -exports[`execute Time Coin deploy & transfer 107`] = `"contract.get"`; - -exports[`execute Time Coin deploy & transfer 108`] = ` -Array [ - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 109`] = `"contract.tryGet"`; - -exports[`execute Time Coin deploy & transfer 110`] = `Array []`; - -exports[`execute Time Coin deploy & transfer 111`] = `"storageItem.add"`; - -exports[`execute Time Coin deploy & transfer 112`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "746f74616c546f6b656e537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00006c98fdf0e107", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e747261637441646d696e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00006c98fdf0e107", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00ac23fc06", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802b71403", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "800400000203b71403020500ac23fc06820102010d000500ac23fc06", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802121503", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "800400000203121503020500902f5009820102010d000500902f5009", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802b61403", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "800400000203b61403020500743ba40b820102010d000500743ba40b", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 113`] = `"storageItem.update"`; - -exports[`execute Time Coin deploy & transfer 114`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00006c98fdf0e107", - }, - Object { - "flags": 0, - "value": "0054489cf6f0e107", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0054489cf6f0e107", - }, - Object { - "flags": 0, - "value": "00c4184cedf0e107", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00ac23fc06", - }, - Object { - "flags": 0, - "value": "003c534c10", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c4184cedf0e107", - }, - Object { - "flags": 0, - "value": "0050dda7e1f0e107", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "003c534c10", - }, - Object { - "flags": 0, - "value": "00b08ef01b", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0050dda7e1f0e107", - }, - Object { - "flags": 0, - "value": "00006c98fdf0e107", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 115`] = `"storageItem.get"`; - -exports[`execute Time Coin deploy & transfer 116`] = `Array []`; - -exports[`execute Time Coin deploy & transfer 117`] = `"storageItem.tryGet"`; - -exports[`execute Time Coin deploy & transfer 118`] = ` -Array [ - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "746f74616c546f6b656e537570706c79", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e747261637441646d696e", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e747261637441646d696e", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e7472616374496e697454696d65", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "636f6e747261637441646d696e", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802b71403", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802b71403", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802121503", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802121503", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802b61403", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802b61403", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6f7463417070726f7665645f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802b71403", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802121503", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802b61403", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f007d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 119`] = `"storageItem.delete"`; - -exports[`execute Time Coin deploy & transfer 120`] = ` -Array [ - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802b71403", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802121503", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802b61403", - }, - ], - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "key": "62616c616e63655f00a48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 121`] = `"storageItem.getAll$"`; - -exports[`execute Time Coin deploy & transfer 122`] = ` -Array [ - Array [ - Object { - "hash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - "prefix": "6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 123`] = `"action.add"`; - -exports[`execute Time Coin deploy & transfer 124`] = `Array []`; - -exports[`execute Time Coin deploy & transfer 125`] = `"header.get"`; - -exports[`execute Time Coin deploy & transfer 126`] = ` -Array [ - Array [ - Object { - "hashOrIndex": 0, - }, - ], - Array [ - Object { - "hashOrIndex": 0, - }, - ], - Array [ - Object { - "hashOrIndex": 0, - }, - ], - Array [ - Object { - "hashOrIndex": 0, - }, - ], - Array [ - Object { - "hashOrIndex": 0, - }, - ], - Array [ - Object { - "hashOrIndex": 0, - }, - ], - Array [ - Object { - "hashOrIndex": 0, - }, - ], - Array [ - Object { - "hashOrIndex": 0, - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 127`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00006c98fdf0e107", - }, - ], - "scriptHash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "a48c1ae6617e509347e5a385624b15f8872c8802", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00ac23fc06", - }, - ], - "scriptHash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "a48c1ae6617e509347e5a385624b15f8872c8802", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00902f5009", - }, - ], - "scriptHash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "a48c1ae6617e509347e5a385624b15f8872c8802", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00743ba40b", - }, - ], - "scriptHash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "a48c1ae6617e509347e5a385624b15f8872c8802", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7d2185c97fa43cb41c5617941c6b68d146a84ae5", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00b08ef01b", - }, - ], - "scriptHash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 128`] = ` -Array [ - Array [ - Object { - "message": "ContractDeploy is success.", - "scriptHash": "d471621ecc3fb072a3a754254ba00b8ed0affa2f", - }, - ], -] -`; - -exports[`execute Time Coin deploy & transfer 129`] = `Array []`; - -exports[`execute Time Coin deploy & transfer 130`] = `Array []`; - -exports[`execute Wowbit token deploy - negative buffer conversion works properly 1`] = `"contract.get"`; - -exports[`execute Wowbit token deploy - negative buffer conversion works properly 2`] = ` -Array [ - Array [ - Object { - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - }, - ], - Array [ - Object { - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - }, - ], - Array [ - Object { - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - }, - ], - Array [ - Object { - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - }, - ], - Array [ - Object { - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - }, - ], - Array [ - Object { - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - }, - ], - Array [ - Object { - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - }, - ], - Array [ - Object { - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - }, - ], - Array [ - Object { - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - }, - ], - Array [ - Object { - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - }, - ], - Array [ - Object { - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - }, - ], - Array [ - Object { - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - }, - ], - Array [ - Object { - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - }, - ], - Array [ - Object { - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - }, - ], -] -`; - -exports[`execute Wowbit token deploy - negative buffer conversion works properly 3`] = `"contract.tryGet"`; - -exports[`execute Wowbit token deploy - negative buffer conversion works properly 4`] = `Array []`; - -exports[`execute Wowbit token deploy - negative buffer conversion works properly 5`] = `"storageItem.add"`; - -exports[`execute Wowbit token deploy - negative buffer conversion works properly 6`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - "key": "73616c655374617274", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40fba55a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - "key": "73616c65456e64", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e4fca55a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - "key": "746f6b656e735065726e656f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "64", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - "key": "746f6b656e73506572676173", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "19", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - "key": "6d696e5075726368617365416d6f756e74", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c836b2fe", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - "key": "6d61785075726368617365416d6f756e74", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0080c6a47e8d03", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e7b683f7be8a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - "key": "0c3d1f1df081e3c674cb07d5bb19a7592dcf7f9162616c616e6365", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e7b683f7be8a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - "key": "6465706c6f79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - "key": "616374697665", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], -] -`; - -exports[`execute Wowbit token deploy - negative buffer conversion works properly 7`] = `"storageItem.update"`; - -exports[`execute Wowbit token deploy - negative buffer conversion works properly 8`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e7b683f7be8a01", - }, - Object { - "flags": 0, - "value": "000007d4512b4b8ade3009", - }, - ], -] -`; - -exports[`execute Wowbit token deploy - negative buffer conversion works properly 9`] = `"storageItem.get"`; - -exports[`execute Wowbit token deploy - negative buffer conversion works properly 10`] = `Array []`; - -exports[`execute Wowbit token deploy - negative buffer conversion works properly 11`] = `"storageItem.tryGet"`; - -exports[`execute Wowbit token deploy - negative buffer conversion works properly 12`] = ` -Array [ - Array [ - Object { - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - "key": "6465706c6f79", - }, - ], - Array [ - Object { - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - "key": "73616c655374617274", - }, - ], - Array [ - Object { - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - "key": "73616c65456e64", - }, - ], - Array [ - Object { - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - "key": "746f6b656e735065726e656f", - }, - ], - Array [ - Object { - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - "key": "746f6b656e73506572676173", - }, - ], - Array [ - Object { - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - "key": "6d696e5075726368617365416d6f756e74", - }, - ], - Array [ - Object { - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - "key": "6d61785075726368617365416d6f756e74", - }, - ], - Array [ - Object { - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - "key": "0c3d1f1df081e3c674cb07d5bb19a7592dcf7f9162616c616e6365", - }, - ], - Array [ - Object { - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - "key": "6465706c6f79", - }, - ], - Array [ - Object { - "hash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - "key": "616374697665", - }, - ], -] -`; - -exports[`execute Wowbit token deploy - negative buffer conversion works properly 13`] = `"storageItem.delete"`; - -exports[`execute Wowbit token deploy - negative buffer conversion works properly 14`] = `Array []`; - -exports[`execute Wowbit token deploy - negative buffer conversion works properly 15`] = `"action.add"`; - -exports[`execute Wowbit token deploy - negative buffer conversion works properly 16`] = `Array []`; - -exports[`execute Wowbit token deploy - negative buffer conversion works properly 17`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0c3d1f1df081e3c674cb07d5bb19a7592dcf7f91", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00e7b683f7be8a01", - }, - ], - "scriptHash": "4884e5000948c6fba7dfffb67288f24ba536bb40", - }, - ], -] -`; - -exports[`execute Wowbit token deploy - negative buffer conversion works properly 18`] = `Array []`; - -exports[`execute Wowbit token deploy - negative buffer conversion works properly 19`] = `Array []`; - -exports[`execute Wowbit token deploy - negative buffer conversion works properly 20`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when pre sale sale period and rate not set 1`] = `"0"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when pre sale sale period and rate not set 2`] = `"contract.get"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when pre sale sale period and rate not set 3`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when pre sale sale period and rate not set 4`] = `"contract.tryGet"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when pre sale sale period and rate not set 5`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when pre sale sale period and rate not set 6`] = `"storageItem.add"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when pre sale sale period and rate not set 7`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], -] -`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when pre sale sale period and rate not set 8`] = `"storageItem.update"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when pre sale sale period and rate not set 9`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when pre sale sale period and rate not set 10`] = `"storageItem.get"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when pre sale sale period and rate not set 11`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when pre sale sale period and rate not set 12`] = `"storageItem.tryGet"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when pre sale sale period and rate not set 13`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], -] -`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when pre sale sale period and rate not set 14`] = `"storageItem.delete"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when pre sale sale period and rate not set 15`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when pre sale sale period and rate not set 16`] = `"action.add"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when pre sale sale period and rate not set 17`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when pre sale sale period and rate not set 18`] = `"output.get"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when pre sale sale period and rate not set 19`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when pre sale sale period and rate not set 20`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "726566756e64", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when pre sale sale period and rate not set 21`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when pre sale sale period and rate not set 22`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when pre sale sale period and rate not set 23`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted 1`] = `"0"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted 2`] = `"contract.get"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted 3`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted 4`] = `"contract.tryGet"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted 5`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted 6`] = `"storageItem.add"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted 7`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], -] -`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted 8`] = `"storageItem.update"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted 9`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted 10`] = `"storageItem.get"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted 11`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted 12`] = `"storageItem.tryGet"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted 13`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a31", - }, - ], -] -`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted 14`] = `"storageItem.delete"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted 15`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted 16`] = `"action.add"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted 17`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted 18`] = `"output.get"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted 19`] = ` -Array [ - Array [ - Object { - "__$type": "Input", - "hash": "0505050505050505050505050505050505050505050505050505050505050505", - "hashHex": "0x0505050505050505050505050505050505050505050505050505050505050505", - "index": 0, - "size": 34, - }, - ], -] -`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted 20`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "726566756e64", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted 21`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted 22`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted 23`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted real world 1`] = `"0"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted real world 2`] = `"contract.get"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted real world 3`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted real world 4`] = `"contract.tryGet"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted real world 5`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted real world 6`] = `"storageItem.add"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted real world 7`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], -] -`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted real world 8`] = `"storageItem.update"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted real world 9`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - Object { - "flags": 0, - "value": "f2a8825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - Object { - "flags": 0, - "value": "72fa835a", - }, - ], -] -`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted real world 10`] = `"storageItem.get"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted real world 11`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted real world 12`] = `"storageItem.tryGet"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted real world 13`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a31", - }, - ], -] -`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted real world 14`] = `"storageItem.delete"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted real world 15`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted real world 16`] = `"action.add"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted real world 17`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted real world 18`] = `"output.get"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted real world 19`] = ` -Array [ - Array [ - Object { - "__$type": "Input", - "hash": "0505050505050505050505050505050505050505050505050505050505050505", - "hashHex": "0x0505050505050505050505050505050505050505050505050505050505050505", - "index": 0, - "size": 34, - }, - ], -] -`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted real world 20`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "726566756e64", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "100000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted real world 21`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted real world 22`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and not whitelisted real world 23`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and rate not set 1`] = `"0"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and rate not set 2`] = `"contract.get"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and rate not set 3`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and rate not set 4`] = `"contract.tryGet"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and rate not set 5`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and rate not set 6`] = `"storageItem.add"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and rate not set 7`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a31", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], -] -`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and rate not set 8`] = `"storageItem.update"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and rate not set 9`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and rate not set 10`] = `"storageItem.get"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and rate not set 11`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and rate not set 12`] = `"storageItem.tryGet"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and rate not set 13`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a31", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a31", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f524154455f4e454f", - }, - ], -] -`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and rate not set 14`] = `"storageItem.delete"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and rate not set 15`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and rate not set 16`] = `"action.add"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and rate not set 17`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and rate not set 18`] = `"output.get"`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and rate not set 19`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and rate not set 20`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "726566756e64", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and rate not set 21`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and rate not set 22`] = `Array []`; - -exports[`execute concierge mintTokens should fail if current exchange rate is 0 when whitelist sale period and rate not set 23`] = `Array []`; - -exports[`execute concierge mintTokens should fail without a sender 1`] = `"0"`; - -exports[`execute concierge mintTokens should fail without a sender 2`] = `"contract.get"`; - -exports[`execute concierge mintTokens should fail without a sender 3`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge mintTokens should fail without a sender 4`] = `"contract.tryGet"`; - -exports[`execute concierge mintTokens should fail without a sender 5`] = `Array []`; - -exports[`execute concierge mintTokens should fail without a sender 6`] = `"storageItem.add"`; - -exports[`execute concierge mintTokens should fail without a sender 7`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], -] -`; - -exports[`execute concierge mintTokens should fail without a sender 8`] = `"storageItem.update"`; - -exports[`execute concierge mintTokens should fail without a sender 9`] = `Array []`; - -exports[`execute concierge mintTokens should fail without a sender 10`] = `"storageItem.get"`; - -exports[`execute concierge mintTokens should fail without a sender 11`] = `Array []`; - -exports[`execute concierge mintTokens should fail without a sender 12`] = `"storageItem.tryGet"`; - -exports[`execute concierge mintTokens should fail without a sender 13`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], -] -`; - -exports[`execute concierge mintTokens should fail without a sender 14`] = `"storageItem.delete"`; - -exports[`execute concierge mintTokens should fail without a sender 15`] = `Array []`; - -exports[`execute concierge mintTokens should fail without a sender 16`] = `"action.add"`; - -exports[`execute concierge mintTokens should fail without a sender 17`] = `Array []`; - -exports[`execute concierge mintTokens should fail without a sender 18`] = `"output.get"`; - -exports[`execute concierge mintTokens should fail without a sender 19`] = `Array []`; - -exports[`execute concierge mintTokens should fail without a sender 20`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge mintTokens should fail without a sender 21`] = `Array []`; - -exports[`execute concierge mintTokens should fail without a sender 22`] = `Array []`; - -exports[`execute concierge mintTokens should fail without a sender 23`] = `Array []`; - -exports[`execute concierge mintTokens should mint tokens during main sale based on exchange rate with total supply cap 1`] = `"0"`; - -exports[`execute concierge mintTokens should mint tokens during main sale based on exchange rate with total supply cap 2`] = `"contract.get"`; - -exports[`execute concierge mintTokens should mint tokens during main sale based on exchange rate with total supply cap 3`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge mintTokens should mint tokens during main sale based on exchange rate with total supply cap 4`] = `"contract.tryGet"`; - -exports[`execute concierge mintTokens should mint tokens during main sale based on exchange rate with total supply cap 5`] = `Array []`; - -exports[`execute concierge mintTokens should mint tokens during main sale based on exchange rate with total supply cap 6`] = `"storageItem.add"`; - -exports[`execute concierge mintTokens should mint tokens during main sale based on exchange rate with total supply cap 7`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f5745454b325f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], -] -`; - -exports[`execute concierge mintTokens should mint tokens during main sale based on exchange rate with total supply cap 8`] = `"storageItem.update"`; - -exports[`execute concierge mintTokens should mint tokens during main sale based on exchange rate with total supply cap 9`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - Object { - "flags": 0, - "value": "f2175302", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00b2a5ac08db0d", - }, - ], -] -`; - -exports[`execute concierge mintTokens should mint tokens during main sale based on exchange rate with total supply cap 10`] = `"storageItem.get"`; - -exports[`execute concierge mintTokens should mint tokens during main sale based on exchange rate with total supply cap 11`] = `Array []`; - -exports[`execute concierge mintTokens should mint tokens during main sale based on exchange rate with total supply cap 12`] = `"storageItem.tryGet"`; - -exports[`execute concierge mintTokens should mint tokens during main sale based on exchange rate with total supply cap 13`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f5745454b325f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f5745454b325f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], -] -`; - -exports[`execute concierge mintTokens should mint tokens during main sale based on exchange rate with total supply cap 14`] = `"storageItem.delete"`; - -exports[`execute concierge mintTokens should mint tokens during main sale based on exchange rate with total supply cap 15`] = `Array []`; - -exports[`execute concierge mintTokens should mint tokens during main sale based on exchange rate with total supply cap 16`] = `"action.add"`; - -exports[`execute concierge mintTokens should mint tokens during main sale based on exchange rate with total supply cap 17`] = `Array []`; - -exports[`execute concierge mintTokens should mint tokens during main sale based on exchange rate with total supply cap 18`] = `"output.get"`; - -exports[`execute concierge mintTokens should mint tokens during main sale based on exchange rate with total supply cap 19`] = `Array []`; - -exports[`execute concierge mintTokens should mint tokens during main sale based on exchange rate with total supply cap 20`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "726566756e64", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "500000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "5000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge mintTokens should mint tokens during main sale based on exchange rate with total supply cap 21`] = `Array []`; - -exports[`execute concierge mintTokens should mint tokens during main sale based on exchange rate with total supply cap 22`] = `Array []`; - -exports[`execute concierge mintTokens should mint tokens during main sale based on exchange rate with total supply cap 23`] = `Array []`; - -exports[`execute concierge mintTokens should mint tokens during pre sale based on exchange rate with max tokens 1`] = `"0"`; - -exports[`execute concierge mintTokens should mint tokens during pre sale based on exchange rate with max tokens 2`] = `"contract.get"`; - -exports[`execute concierge mintTokens should mint tokens during pre sale based on exchange rate with max tokens 3`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge mintTokens should mint tokens during pre sale based on exchange rate with max tokens 4`] = `"contract.tryGet"`; - -exports[`execute concierge mintTokens should mint tokens during pre sale based on exchange rate with max tokens 5`] = `Array []`; - -exports[`execute concierge mintTokens should mint tokens during pre sale based on exchange rate with max tokens 6`] = `"storageItem.add"`; - -exports[`execute concierge mintTokens should mint tokens during pre sale based on exchange rate with max tokens 7`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], -] -`; - -exports[`execute concierge mintTokens should mint tokens during pre sale based on exchange rate with max tokens 8`] = `"storageItem.update"`; - -exports[`execute concierge mintTokens should mint tokens during pre sale based on exchange rate with max tokens 9`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "05", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00b2a5ac08db0d", - }, - ], -] -`; - -exports[`execute concierge mintTokens should mint tokens during pre sale based on exchange rate with max tokens 10`] = `"storageItem.get"`; - -exports[`execute concierge mintTokens should mint tokens during pre sale based on exchange rate with max tokens 11`] = `Array []`; - -exports[`execute concierge mintTokens should mint tokens during pre sale based on exchange rate with max tokens 12`] = `"storageItem.tryGet"`; - -exports[`execute concierge mintTokens should mint tokens during pre sale based on exchange rate with max tokens 13`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], -] -`; - -exports[`execute concierge mintTokens should mint tokens during pre sale based on exchange rate with max tokens 14`] = `"storageItem.delete"`; - -exports[`execute concierge mintTokens should mint tokens during pre sale based on exchange rate with max tokens 15`] = `Array []`; - -exports[`execute concierge mintTokens should mint tokens during pre sale based on exchange rate with max tokens 16`] = `"action.add"`; - -exports[`execute concierge mintTokens should mint tokens during pre sale based on exchange rate with max tokens 17`] = `Array []`; - -exports[`execute concierge mintTokens should mint tokens during pre sale based on exchange rate with max tokens 18`] = `"output.get"`; - -exports[`execute concierge mintTokens should mint tokens during pre sale based on exchange rate with max tokens 19`] = `Array []`; - -exports[`execute concierge mintTokens should mint tokens during pre sale based on exchange rate with max tokens 20`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "726566756e64", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "500000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "5000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge mintTokens should mint tokens during pre sale based on exchange rate with max tokens 21`] = `Array []`; - -exports[`execute concierge mintTokens should mint tokens during pre sale based on exchange rate with max tokens 22`] = `Array []`; - -exports[`execute concierge mintTokens should mint tokens during pre sale based on exchange rate with max tokens 23`] = `Array []`; - -exports[`execute concierge mintTokens should mint tokens during whitelist based on exchange rate 1`] = `"0"`; - -exports[`execute concierge mintTokens should mint tokens during whitelist based on exchange rate 2`] = `"contract.get"`; - -exports[`execute concierge mintTokens should mint tokens during whitelist based on exchange rate 3`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge mintTokens should mint tokens during whitelist based on exchange rate 4`] = `"contract.tryGet"`; - -exports[`execute concierge mintTokens should mint tokens during whitelist based on exchange rate 5`] = `Array []`; - -exports[`execute concierge mintTokens should mint tokens during whitelist based on exchange rate 6`] = `"storageItem.add"`; - -exports[`execute concierge mintTokens should mint tokens during whitelist based on exchange rate 7`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a31", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "16", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "005c4d1f05", - }, - ], -] -`; - -exports[`execute concierge mintTokens should mint tokens during whitelist based on exchange rate 8`] = `"storageItem.update"`; - -exports[`execute concierge mintTokens should mint tokens during whitelist based on exchange rate 9`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "001ceda10cdb0d", - }, - ], -] -`; - -exports[`execute concierge mintTokens should mint tokens during whitelist based on exchange rate 10`] = `"storageItem.get"`; - -exports[`execute concierge mintTokens should mint tokens during whitelist based on exchange rate 11`] = `Array []`; - -exports[`execute concierge mintTokens should mint tokens during whitelist based on exchange rate 12`] = `"storageItem.tryGet"`; - -exports[`execute concierge mintTokens should mint tokens during whitelist based on exchange rate 13`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a31", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a31", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], -] -`; - -exports[`execute concierge mintTokens should mint tokens during whitelist based on exchange rate 14`] = `"storageItem.delete"`; - -exports[`execute concierge mintTokens should mint tokens during whitelist based on exchange rate 15`] = `Array []`; - -exports[`execute concierge mintTokens should mint tokens during whitelist based on exchange rate 16`] = `"action.add"`; - -exports[`execute concierge mintTokens should mint tokens during whitelist based on exchange rate 17`] = `Array []`; - -exports[`execute concierge mintTokens should mint tokens during whitelist based on exchange rate 18`] = `"output.get"`; - -exports[`execute concierge mintTokens should mint tokens during whitelist based on exchange rate 19`] = `Array []`; - -exports[`execute concierge mintTokens should mint tokens during whitelist based on exchange rate 20`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "22000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge mintTokens should mint tokens during whitelist based on exchange rate 21`] = `Array []`; - -exports[`execute concierge mintTokens should mint tokens during whitelist based on exchange rate 22`] = `Array []`; - -exports[`execute concierge mintTokens should mint tokens during whitelist based on exchange rate 23`] = `Array []`; - -exports[`execute concierge should add to storage in deploy 1`] = `"contract.get"`; - -exports[`execute concierge should add to storage in deploy 2`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge should add to storage in deploy 3`] = `"contract.tryGet"`; - -exports[`execute concierge should add to storage in deploy 4`] = `Array []`; - -exports[`execute concierge should add to storage in deploy 5`] = `"storageItem.add"`; - -exports[`execute concierge should add to storage in deploy 6`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], -] -`; - -exports[`execute concierge should add to storage in deploy 7`] = `"storageItem.update"`; - -exports[`execute concierge should add to storage in deploy 8`] = `Array []`; - -exports[`execute concierge should add to storage in deploy 9`] = `"storageItem.get"`; - -exports[`execute concierge should add to storage in deploy 10`] = `Array []`; - -exports[`execute concierge should add to storage in deploy 11`] = `"storageItem.tryGet"`; - -exports[`execute concierge should add to storage in deploy 12`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], -] -`; - -exports[`execute concierge should add to storage in deploy 13`] = `"storageItem.delete"`; - -exports[`execute concierge should add to storage in deploy 14`] = `Array []`; - -exports[`execute concierge should add to storage in deploy 15`] = `"action.add"`; - -exports[`execute concierge should add to storage in deploy 16`] = `Array []`; - -exports[`execute concierge should add to storage in deploy 17`] = `"output.get"`; - -exports[`execute concierge should add to storage in deploy 18`] = `Array []`; - -exports[`execute concierge should add to storage in deploy 19`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge should add to storage in deploy 20`] = `Array []`; - -exports[`execute concierge should add to storage in deploy 21`] = `Array []`; - -exports[`execute concierge should add to storage in deploy 22`] = `Array []`; - -exports[`execute concierge should fail on multiple deploy 1`] = `"contract.get"`; - -exports[`execute concierge should fail on multiple deploy 2`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge should fail on multiple deploy 3`] = `"contract.tryGet"`; - -exports[`execute concierge should fail on multiple deploy 4`] = `Array []`; - -exports[`execute concierge should fail on multiple deploy 5`] = `"storageItem.add"`; - -exports[`execute concierge should fail on multiple deploy 6`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], -] -`; - -exports[`execute concierge should fail on multiple deploy 7`] = `"storageItem.update"`; - -exports[`execute concierge should fail on multiple deploy 8`] = `Array []`; - -exports[`execute concierge should fail on multiple deploy 9`] = `"storageItem.get"`; - -exports[`execute concierge should fail on multiple deploy 10`] = `Array []`; - -exports[`execute concierge should fail on multiple deploy 11`] = `"storageItem.tryGet"`; - -exports[`execute concierge should fail on multiple deploy 12`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], -] -`; - -exports[`execute concierge should fail on multiple deploy 13`] = `"storageItem.delete"`; - -exports[`execute concierge should fail on multiple deploy 14`] = `Array []`; - -exports[`execute concierge should fail on multiple deploy 15`] = `"action.add"`; - -exports[`execute concierge should fail on multiple deploy 16`] = `Array []`; - -exports[`execute concierge should fail on multiple deploy 17`] = `"output.get"`; - -exports[`execute concierge should fail on multiple deploy 18`] = `Array []`; - -exports[`execute concierge should fail on multiple deploy 19`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge should fail on multiple deploy 20`] = `Array []`; - -exports[`execute concierge should fail on multiple deploy 21`] = `Array []`; - -exports[`execute concierge should fail on multiple deploy 22`] = `Array []`; - -exports[`execute concierge transfer should add malformed address to storage 1`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1000000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should add malformed address to storage 2`] = `Array []`; - -exports[`execute concierge transfer should add malformed address to storage 3`] = `Array []`; - -exports[`execute concierge transfer should add malformed address to storage 4`] = `Array []`; - -exports[`execute concierge transfer should add malformed address to storage 5`] = `"0"`; - -exports[`execute concierge transfer should add malformed address to storage 6`] = `"contract.get"`; - -exports[`execute concierge transfer should add malformed address to storage 7`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should add malformed address to storage 8`] = `"contract.tryGet"`; - -exports[`execute concierge transfer should add malformed address to storage 9`] = `Array []`; - -exports[`execute concierge transfer should add malformed address to storage 10`] = `"storageItem.add"`; - -exports[`execute concierge transfer should add malformed address to storage 11`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0010a5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4164636f57696a714c756a4a4a626b69344776696a5a5053726d37534a6b5551394d2020e4bda0e79a845549443a204a5953364e41", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], -] -`; - -exports[`execute concierge transfer should add malformed address to storage 12`] = `"storageItem.update"`; - -exports[`execute concierge transfer should add malformed address to storage 13`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "e803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00d04457f0db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0010a5d4e800", - }, - Object { - "flags": 0, - "value": "f60fa5d4e800", - }, - ], -] -`; - -exports[`execute concierge transfer should add malformed address to storage 14`] = `"storageItem.get"`; - -exports[`execute concierge transfer should add malformed address to storage 15`] = `Array []`; - -exports[`execute concierge transfer should add malformed address to storage 16`] = `"storageItem.tryGet"`; - -exports[`execute concierge transfer should add malformed address to storage 17`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4164636f57696a714c756a4a4a626b69344776696a5a5053726d37534a6b5551394d2020e4bda0e79a845549443a204a5953364e41", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4164636f57696a714c756a4a4a626b69344776696a5a5053726d37534a6b5551394d2020e4bda0e79a845549443a204a5953364e41", - }, - ], -] -`; - -exports[`execute concierge transfer should add malformed address to storage 18`] = `"storageItem.delete"`; - -exports[`execute concierge transfer should add malformed address to storage 19`] = `Array []`; - -exports[`execute concierge transfer should add malformed address to storage 20`] = `"action.add"`; - -exports[`execute concierge transfer should add malformed address to storage 21`] = `Array []`; - -exports[`execute concierge transfer should add malformed address to storage 22`] = `"output.get"`; - -exports[`execute concierge transfer should add malformed address to storage 23`] = `Array []`; - -exports[`execute concierge transfer should handle 1 transfers 1`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1000000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 1 transfers 2`] = `Array []`; - -exports[`execute concierge transfer should handle 1 transfers 3`] = `Array []`; - -exports[`execute concierge transfer should handle 1 transfers 4`] = `Array []`; - -exports[`execute concierge transfer should handle 1 transfers 5`] = `"0"`; - -exports[`execute concierge transfer should handle 1 transfers 6`] = `"contract.get"`; - -exports[`execute concierge transfer should handle 1 transfers 7`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 1 transfers 8`] = `"contract.tryGet"`; - -exports[`execute concierge transfer should handle 1 transfers 9`] = `Array []`; - -exports[`execute concierge transfer should handle 1 transfers 10`] = `"storageItem.add"`; - -exports[`execute concierge transfer should handle 1 transfers 11`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0010a5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 1 transfers 12`] = `"storageItem.update"`; - -exports[`execute concierge transfer should handle 1 transfers 13`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "e803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00d04457f0db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0010a5d4e800", - }, - Object { - "flags": 0, - "value": "f60fa5d4e800", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 1 transfers 14`] = `"storageItem.get"`; - -exports[`execute concierge transfer should handle 1 transfers 15`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 1 transfers 16`] = `"storageItem.tryGet"`; - -exports[`execute concierge transfer should handle 1 transfers 17`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 1 transfers 18`] = `"storageItem.delete"`; - -exports[`execute concierge transfer should handle 1 transfers 19`] = `Array []`; - -exports[`execute concierge transfer should handle 1 transfers 20`] = `"action.add"`; - -exports[`execute concierge transfer should handle 1 transfers 21`] = `Array []`; - -exports[`execute concierge transfer should handle 1 transfers 22`] = `"output.get"`; - -exports[`execute concierge transfer should handle 1 transfers 23`] = `Array []`; - -exports[`execute concierge transfer should handle 1 transfers 24`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1000000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 1 transfers 25`] = `Array []`; - -exports[`execute concierge transfer should handle 1 transfers 26`] = `Array []`; - -exports[`execute concierge transfer should handle 1 transfers 27`] = `Array []`; - -exports[`execute concierge transfer should handle 2 transfers 1`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1000000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 2 transfers 2`] = `Array []`; - -exports[`execute concierge transfer should handle 2 transfers 3`] = `Array []`; - -exports[`execute concierge transfer should handle 2 transfers 4`] = `Array []`; - -exports[`execute concierge transfer should handle 2 transfers 5`] = `"0"`; - -exports[`execute concierge transfer should handle 2 transfers 6`] = `"contract.get"`; - -exports[`execute concierge transfer should handle 2 transfers 7`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 2 transfers 8`] = `"contract.tryGet"`; - -exports[`execute concierge transfer should handle 2 transfers 9`] = `Array []`; - -exports[`execute concierge transfer should handle 2 transfers 10`] = `"storageItem.add"`; - -exports[`execute concierge transfer should handle 2 transfers 11`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0010a5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 2 transfers 12`] = `"storageItem.update"`; - -exports[`execute concierge transfer should handle 2 transfers 13`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "e803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00d04457f0db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0010a5d4e800", - }, - Object { - "flags": 0, - "value": "f60fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "f60fa5d4e800", - }, - Object { - "flags": 0, - "value": "ec0fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - Object { - "flags": 0, - "value": "14", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 2 transfers 14`] = `"storageItem.get"`; - -exports[`execute concierge transfer should handle 2 transfers 15`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 2 transfers 16`] = `"storageItem.tryGet"`; - -exports[`execute concierge transfer should handle 2 transfers 17`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 2 transfers 18`] = `"storageItem.delete"`; - -exports[`execute concierge transfer should handle 2 transfers 19`] = `Array []`; - -exports[`execute concierge transfer should handle 2 transfers 20`] = `"action.add"`; - -exports[`execute concierge transfer should handle 2 transfers 21`] = `Array []`; - -exports[`execute concierge transfer should handle 2 transfers 22`] = `"output.get"`; - -exports[`execute concierge transfer should handle 2 transfers 23`] = `Array []`; - -exports[`execute concierge transfer should handle 2 transfers 24`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1000000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 2 transfers 25`] = `Array []`; - -exports[`execute concierge transfer should handle 2 transfers 26`] = `Array []`; - -exports[`execute concierge transfer should handle 2 transfers 27`] = `Array []`; - -exports[`execute concierge transfer should handle 3 transfers 1`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1000000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 3 transfers 2`] = `Array []`; - -exports[`execute concierge transfer should handle 3 transfers 3`] = `Array []`; - -exports[`execute concierge transfer should handle 3 transfers 4`] = `Array []`; - -exports[`execute concierge transfer should handle 3 transfers 5`] = `"0"`; - -exports[`execute concierge transfer should handle 3 transfers 6`] = `"contract.get"`; - -exports[`execute concierge transfer should handle 3 transfers 7`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 3 transfers 8`] = `"contract.tryGet"`; - -exports[`execute concierge transfer should handle 3 transfers 9`] = `Array []`; - -exports[`execute concierge transfer should handle 3 transfers 10`] = `"storageItem.add"`; - -exports[`execute concierge transfer should handle 3 transfers 11`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0010a5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 3 transfers 12`] = `"storageItem.update"`; - -exports[`execute concierge transfer should handle 3 transfers 13`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "e803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00d04457f0db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0010a5d4e800", - }, - Object { - "flags": 0, - "value": "f60fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "f60fa5d4e800", - }, - Object { - "flags": 0, - "value": "ec0fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - Object { - "flags": 0, - "value": "14", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "ec0fa5d4e800", - }, - Object { - "flags": 0, - "value": "e20fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "14", - }, - Object { - "flags": 0, - "value": "1e", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 3 transfers 14`] = `"storageItem.get"`; - -exports[`execute concierge transfer should handle 3 transfers 15`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 3 transfers 16`] = `"storageItem.tryGet"`; - -exports[`execute concierge transfer should handle 3 transfers 17`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 3 transfers 18`] = `"storageItem.delete"`; - -exports[`execute concierge transfer should handle 3 transfers 19`] = `Array []`; - -exports[`execute concierge transfer should handle 3 transfers 20`] = `"action.add"`; - -exports[`execute concierge transfer should handle 3 transfers 21`] = `Array []`; - -exports[`execute concierge transfer should handle 3 transfers 22`] = `"output.get"`; - -exports[`execute concierge transfer should handle 3 transfers 23`] = `Array []`; - -exports[`execute concierge transfer should handle 3 transfers 24`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1000000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 3 transfers 25`] = `Array []`; - -exports[`execute concierge transfer should handle 3 transfers 26`] = `Array []`; - -exports[`execute concierge transfer should handle 3 transfers 27`] = `Array []`; - -exports[`execute concierge transfer should handle 4 transfers with 10 gas 1`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1000000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 4 transfers with 10 gas 2`] = `Array []`; - -exports[`execute concierge transfer should handle 4 transfers with 10 gas 3`] = `Array []`; - -exports[`execute concierge transfer should handle 4 transfers with 10 gas 4`] = `Array []`; - -exports[`execute concierge transfer should handle 4 transfers with 10 gas 5`] = `"118300000"`; - -exports[`execute concierge transfer should handle 4 transfers with 10 gas 6`] = `"contract.get"`; - -exports[`execute concierge transfer should handle 4 transfers with 10 gas 7`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 4 transfers with 10 gas 8`] = `"contract.tryGet"`; - -exports[`execute concierge transfer should handle 4 transfers with 10 gas 9`] = `Array []`; - -exports[`execute concierge transfer should handle 4 transfers with 10 gas 10`] = `"storageItem.add"`; - -exports[`execute concierge transfer should handle 4 transfers with 10 gas 11`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0010a5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 4 transfers with 10 gas 12`] = `"storageItem.update"`; - -exports[`execute concierge transfer should handle 4 transfers with 10 gas 13`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "e803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00d04457f0db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0010a5d4e800", - }, - Object { - "flags": 0, - "value": "f60fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "f60fa5d4e800", - }, - Object { - "flags": 0, - "value": "ec0fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - Object { - "flags": 0, - "value": "14", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "ec0fa5d4e800", - }, - Object { - "flags": 0, - "value": "e20fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "14", - }, - Object { - "flags": 0, - "value": "1e", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e20fa5d4e800", - }, - Object { - "flags": 0, - "value": "d80fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "1e", - }, - Object { - "flags": 0, - "value": "28", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 4 transfers with 10 gas 14`] = `"storageItem.get"`; - -exports[`execute concierge transfer should handle 4 transfers with 10 gas 15`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 4 transfers with 10 gas 16`] = `"storageItem.tryGet"`; - -exports[`execute concierge transfer should handle 4 transfers with 10 gas 17`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 4 transfers with 10 gas 18`] = `"storageItem.delete"`; - -exports[`execute concierge transfer should handle 4 transfers with 10 gas 19`] = `Array []`; - -exports[`execute concierge transfer should handle 4 transfers with 10 gas 20`] = `"action.add"`; - -exports[`execute concierge transfer should handle 4 transfers with 10 gas 21`] = `Array []`; - -exports[`execute concierge transfer should handle 4 transfers with 10 gas 22`] = `"output.get"`; - -exports[`execute concierge transfer should handle 4 transfers with 10 gas 23`] = `Array []`; - -exports[`execute concierge transfer should handle 4 transfers with 10 gas 24`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1000000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 4 transfers with 10 gas 25`] = `Array []`; - -exports[`execute concierge transfer should handle 4 transfers with 10 gas 26`] = `Array []`; - -exports[`execute concierge transfer should handle 4 transfers with 10 gas 27`] = `Array []`; - -exports[`execute concierge transfer should handle 5 transfers with 10 gas 1`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1000000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 5 transfers with 10 gas 2`] = `Array []`; - -exports[`execute concierge transfer should handle 5 transfers with 10 gas 3`] = `Array []`; - -exports[`execute concierge transfer should handle 5 transfers with 10 gas 4`] = `Array []`; - -exports[`execute concierge transfer should handle 5 transfers with 10 gas 5`] = `"397900000"`; - -exports[`execute concierge transfer should handle 5 transfers with 10 gas 6`] = `"contract.get"`; - -exports[`execute concierge transfer should handle 5 transfers with 10 gas 7`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 5 transfers with 10 gas 8`] = `"contract.tryGet"`; - -exports[`execute concierge transfer should handle 5 transfers with 10 gas 9`] = `Array []`; - -exports[`execute concierge transfer should handle 5 transfers with 10 gas 10`] = `"storageItem.add"`; - -exports[`execute concierge transfer should handle 5 transfers with 10 gas 11`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0010a5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 5 transfers with 10 gas 12`] = `"storageItem.update"`; - -exports[`execute concierge transfer should handle 5 transfers with 10 gas 13`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "e803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00d04457f0db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0010a5d4e800", - }, - Object { - "flags": 0, - "value": "f60fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "f60fa5d4e800", - }, - Object { - "flags": 0, - "value": "ec0fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - Object { - "flags": 0, - "value": "14", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "ec0fa5d4e800", - }, - Object { - "flags": 0, - "value": "e20fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "14", - }, - Object { - "flags": 0, - "value": "1e", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e20fa5d4e800", - }, - Object { - "flags": 0, - "value": "d80fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "1e", - }, - Object { - "flags": 0, - "value": "28", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "d80fa5d4e800", - }, - Object { - "flags": 0, - "value": "ce0fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "28", - }, - Object { - "flags": 0, - "value": "32", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 5 transfers with 10 gas 14`] = `"storageItem.get"`; - -exports[`execute concierge transfer should handle 5 transfers with 10 gas 15`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 5 transfers with 10 gas 16`] = `"storageItem.tryGet"`; - -exports[`execute concierge transfer should handle 5 transfers with 10 gas 17`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 5 transfers with 10 gas 18`] = `"storageItem.delete"`; - -exports[`execute concierge transfer should handle 5 transfers with 10 gas 19`] = `Array []`; - -exports[`execute concierge transfer should handle 5 transfers with 10 gas 20`] = `"action.add"`; - -exports[`execute concierge transfer should handle 5 transfers with 10 gas 21`] = `Array []`; - -exports[`execute concierge transfer should handle 5 transfers with 10 gas 22`] = `"output.get"`; - -exports[`execute concierge transfer should handle 5 transfers with 10 gas 23`] = `Array []`; - -exports[`execute concierge transfer should handle 5 transfers with 10 gas 24`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1000000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 5 transfers with 10 gas 25`] = `Array []`; - -exports[`execute concierge transfer should handle 5 transfers with 10 gas 26`] = `Array []`; - -exports[`execute concierge transfer should handle 5 transfers with 10 gas 27`] = `Array []`; - -exports[`execute concierge transfer should handle 6 transfers with 10 gas 1`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1000000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 6 transfers with 10 gas 2`] = `Array []`; - -exports[`execute concierge transfer should handle 6 transfers with 10 gas 3`] = `Array []`; - -exports[`execute concierge transfer should handle 6 transfers with 10 gas 4`] = `Array []`; - -exports[`execute concierge transfer should handle 6 transfers with 10 gas 5`] = `"677500000"`; - -exports[`execute concierge transfer should handle 6 transfers with 10 gas 6`] = `"contract.get"`; - -exports[`execute concierge transfer should handle 6 transfers with 10 gas 7`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 6 transfers with 10 gas 8`] = `"contract.tryGet"`; - -exports[`execute concierge transfer should handle 6 transfers with 10 gas 9`] = `Array []`; - -exports[`execute concierge transfer should handle 6 transfers with 10 gas 10`] = `"storageItem.add"`; - -exports[`execute concierge transfer should handle 6 transfers with 10 gas 11`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0010a5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 6 transfers with 10 gas 12`] = `"storageItem.update"`; - -exports[`execute concierge transfer should handle 6 transfers with 10 gas 13`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "e803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00d04457f0db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0010a5d4e800", - }, - Object { - "flags": 0, - "value": "f60fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "f60fa5d4e800", - }, - Object { - "flags": 0, - "value": "ec0fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - Object { - "flags": 0, - "value": "14", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "ec0fa5d4e800", - }, - Object { - "flags": 0, - "value": "e20fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "14", - }, - Object { - "flags": 0, - "value": "1e", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e20fa5d4e800", - }, - Object { - "flags": 0, - "value": "d80fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "1e", - }, - Object { - "flags": 0, - "value": "28", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "d80fa5d4e800", - }, - Object { - "flags": 0, - "value": "ce0fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "28", - }, - Object { - "flags": 0, - "value": "32", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "ce0fa5d4e800", - }, - Object { - "flags": 0, - "value": "c40fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "32", - }, - Object { - "flags": 0, - "value": "3c", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 6 transfers with 10 gas 14`] = `"storageItem.get"`; - -exports[`execute concierge transfer should handle 6 transfers with 10 gas 15`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 6 transfers with 10 gas 16`] = `"storageItem.tryGet"`; - -exports[`execute concierge transfer should handle 6 transfers with 10 gas 17`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 6 transfers with 10 gas 18`] = `"storageItem.delete"`; - -exports[`execute concierge transfer should handle 6 transfers with 10 gas 19`] = `Array []`; - -exports[`execute concierge transfer should handle 6 transfers with 10 gas 20`] = `"action.add"`; - -exports[`execute concierge transfer should handle 6 transfers with 10 gas 21`] = `Array []`; - -exports[`execute concierge transfer should handle 6 transfers with 10 gas 22`] = `"output.get"`; - -exports[`execute concierge transfer should handle 6 transfers with 10 gas 23`] = `Array []`; - -exports[`execute concierge transfer should handle 6 transfers with 10 gas 24`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1000000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 6 transfers with 10 gas 25`] = `Array []`; - -exports[`execute concierge transfer should handle 6 transfers with 10 gas 26`] = `Array []`; - -exports[`execute concierge transfer should handle 6 transfers with 10 gas 27`] = `Array []`; - -exports[`execute concierge transfer should handle 7 transfers with 10 gas 1`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1000000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 7 transfers with 10 gas 2`] = `Array []`; - -exports[`execute concierge transfer should handle 7 transfers with 10 gas 3`] = `Array []`; - -exports[`execute concierge transfer should handle 7 transfers with 10 gas 4`] = `Array []`; - -exports[`execute concierge transfer should handle 7 transfers with 10 gas 5`] = `"957100000"`; - -exports[`execute concierge transfer should handle 7 transfers with 10 gas 6`] = `"contract.get"`; - -exports[`execute concierge transfer should handle 7 transfers with 10 gas 7`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 7 transfers with 10 gas 8`] = `"contract.tryGet"`; - -exports[`execute concierge transfer should handle 7 transfers with 10 gas 9`] = `Array []`; - -exports[`execute concierge transfer should handle 7 transfers with 10 gas 10`] = `"storageItem.add"`; - -exports[`execute concierge transfer should handle 7 transfers with 10 gas 11`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0010a5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 7 transfers with 10 gas 12`] = `"storageItem.update"`; - -exports[`execute concierge transfer should handle 7 transfers with 10 gas 13`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "e803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00d04457f0db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0010a5d4e800", - }, - Object { - "flags": 0, - "value": "f60fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "f60fa5d4e800", - }, - Object { - "flags": 0, - "value": "ec0fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - Object { - "flags": 0, - "value": "14", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "ec0fa5d4e800", - }, - Object { - "flags": 0, - "value": "e20fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "14", - }, - Object { - "flags": 0, - "value": "1e", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e20fa5d4e800", - }, - Object { - "flags": 0, - "value": "d80fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "1e", - }, - Object { - "flags": 0, - "value": "28", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "d80fa5d4e800", - }, - Object { - "flags": 0, - "value": "ce0fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "28", - }, - Object { - "flags": 0, - "value": "32", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "ce0fa5d4e800", - }, - Object { - "flags": 0, - "value": "c40fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "32", - }, - Object { - "flags": 0, - "value": "3c", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c40fa5d4e800", - }, - Object { - "flags": 0, - "value": "ba0fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "3c", - }, - Object { - "flags": 0, - "value": "46", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 7 transfers with 10 gas 14`] = `"storageItem.get"`; - -exports[`execute concierge transfer should handle 7 transfers with 10 gas 15`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 7 transfers with 10 gas 16`] = `"storageItem.tryGet"`; - -exports[`execute concierge transfer should handle 7 transfers with 10 gas 17`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 7 transfers with 10 gas 18`] = `"storageItem.delete"`; - -exports[`execute concierge transfer should handle 7 transfers with 10 gas 19`] = `Array []`; - -exports[`execute concierge transfer should handle 7 transfers with 10 gas 20`] = `"action.add"`; - -exports[`execute concierge transfer should handle 7 transfers with 10 gas 21`] = `Array []`; - -exports[`execute concierge transfer should handle 7 transfers with 10 gas 22`] = `"output.get"`; - -exports[`execute concierge transfer should handle 7 transfers with 10 gas 23`] = `Array []`; - -exports[`execute concierge transfer should handle 7 transfers with 10 gas 24`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1000000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should handle 7 transfers with 10 gas 25`] = `Array []`; - -exports[`execute concierge transfer should handle 7 transfers with 10 gas 26`] = `Array []`; - -exports[`execute concierge transfer should handle 7 transfers with 10 gas 27`] = `Array []`; - -exports[`execute concierge transfer should not handle 4 transfers 1`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1000000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should not handle 4 transfers 2`] = `Array []`; - -exports[`execute concierge transfer should not handle 4 transfers 3`] = `Array []`; - -exports[`execute concierge transfer should not handle 4 transfers 4`] = `Array []`; - -exports[`execute concierge transfer should not handle 4 transfers 5`] = `"Out of GAS"`; - -exports[`execute concierge transfer should not handle 4 transfers 6`] = `"0"`; - -exports[`execute concierge transfer should not handle 4 transfers 7`] = `"contract.get"`; - -exports[`execute concierge transfer should not handle 4 transfers 8`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should not handle 4 transfers 9`] = `"contract.tryGet"`; - -exports[`execute concierge transfer should not handle 4 transfers 10`] = `Array []`; - -exports[`execute concierge transfer should not handle 4 transfers 11`] = `"storageItem.add"`; - -exports[`execute concierge transfer should not handle 4 transfers 12`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0010a5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], -] -`; - -exports[`execute concierge transfer should not handle 4 transfers 13`] = `"storageItem.update"`; - -exports[`execute concierge transfer should not handle 4 transfers 14`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "e803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00d04457f0db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0010a5d4e800", - }, - Object { - "flags": 0, - "value": "f60fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "f60fa5d4e800", - }, - Object { - "flags": 0, - "value": "ec0fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - Object { - "flags": 0, - "value": "14", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "ec0fa5d4e800", - }, - Object { - "flags": 0, - "value": "e20fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "14", - }, - Object { - "flags": 0, - "value": "1e", - }, - ], -] -`; - -exports[`execute concierge transfer should not handle 4 transfers 15`] = `"storageItem.get"`; - -exports[`execute concierge transfer should not handle 4 transfers 16`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], -] -`; - -exports[`execute concierge transfer should not handle 4 transfers 17`] = `"storageItem.tryGet"`; - -exports[`execute concierge transfer should not handle 4 transfers 18`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], -] -`; - -exports[`execute concierge transfer should not handle 4 transfers 19`] = `"storageItem.delete"`; - -exports[`execute concierge transfer should not handle 4 transfers 20`] = `Array []`; - -exports[`execute concierge transfer should not handle 4 transfers 21`] = `"action.add"`; - -exports[`execute concierge transfer should not handle 4 transfers 22`] = `Array []`; - -exports[`execute concierge transfer should not handle 4 transfers 23`] = `"output.get"`; - -exports[`execute concierge transfer should not handle 4 transfers 24`] = `Array []`; - -exports[`execute concierge transfer should not handle 4 transfers 25`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1000000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should not handle 4 transfers 26`] = `Array []`; - -exports[`execute concierge transfer should not handle 4 transfers 27`] = `Array []`; - -exports[`execute concierge transfer should not handle 4 transfers 28`] = `Array []`; - -exports[`execute concierge transfer should not handle 5 transfers 1`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1000000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should not handle 5 transfers 2`] = `Array []`; - -exports[`execute concierge transfer should not handle 5 transfers 3`] = `Array []`; - -exports[`execute concierge transfer should not handle 5 transfers 4`] = `Array []`; - -exports[`execute concierge transfer should not handle 5 transfers 5`] = `"Out of GAS"`; - -exports[`execute concierge transfer should not handle 5 transfers 6`] = `"0"`; - -exports[`execute concierge transfer should not handle 5 transfers 7`] = `"contract.get"`; - -exports[`execute concierge transfer should not handle 5 transfers 8`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should not handle 5 transfers 9`] = `"contract.tryGet"`; - -exports[`execute concierge transfer should not handle 5 transfers 10`] = `Array []`; - -exports[`execute concierge transfer should not handle 5 transfers 11`] = `"storageItem.add"`; - -exports[`execute concierge transfer should not handle 5 transfers 12`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0010a5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], -] -`; - -exports[`execute concierge transfer should not handle 5 transfers 13`] = `"storageItem.update"`; - -exports[`execute concierge transfer should not handle 5 transfers 14`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "e803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00d04457f0db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0010a5d4e800", - }, - Object { - "flags": 0, - "value": "f60fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "f60fa5d4e800", - }, - Object { - "flags": 0, - "value": "ec0fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - Object { - "flags": 0, - "value": "14", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "ec0fa5d4e800", - }, - Object { - "flags": 0, - "value": "e20fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "14", - }, - Object { - "flags": 0, - "value": "1e", - }, - ], -] -`; - -exports[`execute concierge transfer should not handle 5 transfers 15`] = `"storageItem.get"`; - -exports[`execute concierge transfer should not handle 5 transfers 16`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], -] -`; - -exports[`execute concierge transfer should not handle 5 transfers 17`] = `"storageItem.tryGet"`; - -exports[`execute concierge transfer should not handle 5 transfers 18`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], -] -`; - -exports[`execute concierge transfer should not handle 5 transfers 19`] = `"storageItem.delete"`; - -exports[`execute concierge transfer should not handle 5 transfers 20`] = `Array []`; - -exports[`execute concierge transfer should not handle 5 transfers 21`] = `"action.add"`; - -exports[`execute concierge transfer should not handle 5 transfers 22`] = `Array []`; - -exports[`execute concierge transfer should not handle 5 transfers 23`] = `"output.get"`; - -exports[`execute concierge transfer should not handle 5 transfers 24`] = `Array []`; - -exports[`execute concierge transfer should not handle 5 transfers 25`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1000000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should not handle 5 transfers 26`] = `Array []`; - -exports[`execute concierge transfer should not handle 5 transfers 27`] = `Array []`; - -exports[`execute concierge transfer should not handle 5 transfers 28`] = `Array []`; - -exports[`execute concierge transfer should not handle 8 transfers with 10 gas 1`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1000000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should not handle 8 transfers with 10 gas 2`] = `Array []`; - -exports[`execute concierge transfer should not handle 8 transfers with 10 gas 3`] = `Array []`; - -exports[`execute concierge transfer should not handle 8 transfers with 10 gas 4`] = `Array []`; - -exports[`execute concierge transfer should not handle 8 transfers with 10 gas 5`] = `"Out of GAS"`; - -exports[`execute concierge transfer should not handle 8 transfers with 10 gas 6`] = `"980500000"`; - -exports[`execute concierge transfer should not handle 8 transfers with 10 gas 7`] = `"contract.get"`; - -exports[`execute concierge transfer should not handle 8 transfers with 10 gas 8`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should not handle 8 transfers with 10 gas 9`] = `"contract.tryGet"`; - -exports[`execute concierge transfer should not handle 8 transfers with 10 gas 10`] = `Array []`; - -exports[`execute concierge transfer should not handle 8 transfers with 10 gas 11`] = `"storageItem.add"`; - -exports[`execute concierge transfer should not handle 8 transfers with 10 gas 12`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0010a5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], -] -`; - -exports[`execute concierge transfer should not handle 8 transfers with 10 gas 13`] = `"storageItem.update"`; - -exports[`execute concierge transfer should not handle 8 transfers with 10 gas 14`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "e803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00d04457f0db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0010a5d4e800", - }, - Object { - "flags": 0, - "value": "f60fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "f60fa5d4e800", - }, - Object { - "flags": 0, - "value": "ec0fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - Object { - "flags": 0, - "value": "14", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "ec0fa5d4e800", - }, - Object { - "flags": 0, - "value": "e20fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "14", - }, - Object { - "flags": 0, - "value": "1e", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e20fa5d4e800", - }, - Object { - "flags": 0, - "value": "d80fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "1e", - }, - Object { - "flags": 0, - "value": "28", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "d80fa5d4e800", - }, - Object { - "flags": 0, - "value": "ce0fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "28", - }, - Object { - "flags": 0, - "value": "32", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "ce0fa5d4e800", - }, - Object { - "flags": 0, - "value": "c40fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "32", - }, - Object { - "flags": 0, - "value": "3c", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c40fa5d4e800", - }, - Object { - "flags": 0, - "value": "ba0fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "3c", - }, - Object { - "flags": 0, - "value": "46", - }, - ], -] -`; - -exports[`execute concierge transfer should not handle 8 transfers with 10 gas 15`] = `"storageItem.get"`; - -exports[`execute concierge transfer should not handle 8 transfers with 10 gas 16`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], -] -`; - -exports[`execute concierge transfer should not handle 8 transfers with 10 gas 17`] = `"storageItem.tryGet"`; - -exports[`execute concierge transfer should not handle 8 transfers with 10 gas 18`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], -] -`; - -exports[`execute concierge transfer should not handle 8 transfers with 10 gas 19`] = `"storageItem.delete"`; - -exports[`execute concierge transfer should not handle 8 transfers with 10 gas 20`] = `Array []`; - -exports[`execute concierge transfer should not handle 8 transfers with 10 gas 21`] = `"action.add"`; - -exports[`execute concierge transfer should not handle 8 transfers with 10 gas 22`] = `Array []`; - -exports[`execute concierge transfer should not handle 8 transfers with 10 gas 23`] = `"output.get"`; - -exports[`execute concierge transfer should not handle 8 transfers with 10 gas 24`] = `Array []`; - -exports[`execute concierge transfer should not handle 8 transfers with 10 gas 25`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1000000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should not handle 8 transfers with 10 gas 26`] = `Array []`; - -exports[`execute concierge transfer should not handle 8 transfers with 10 gas 27`] = `Array []`; - -exports[`execute concierge transfer should not handle 8 transfers with 10 gas 28`] = `Array []`; - -exports[`execute concierge transfer should not handle 9 transfers with 10 gas 1`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1000000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should not handle 9 transfers with 10 gas 2`] = `Array []`; - -exports[`execute concierge transfer should not handle 9 transfers with 10 gas 3`] = `Array []`; - -exports[`execute concierge transfer should not handle 9 transfers with 10 gas 4`] = `Array []`; - -exports[`execute concierge transfer should not handle 9 transfers with 10 gas 5`] = `"Out of GAS"`; - -exports[`execute concierge transfer should not handle 9 transfers with 10 gas 6`] = `"980500000"`; - -exports[`execute concierge transfer should not handle 9 transfers with 10 gas 7`] = `"contract.get"`; - -exports[`execute concierge transfer should not handle 9 transfers with 10 gas 8`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should not handle 9 transfers with 10 gas 9`] = `"contract.tryGet"`; - -exports[`execute concierge transfer should not handle 9 transfers with 10 gas 10`] = `Array []`; - -exports[`execute concierge transfer should not handle 9 transfers with 10 gas 11`] = `"storageItem.add"`; - -exports[`execute concierge transfer should not handle 9 transfers with 10 gas 12`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0010a5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], -] -`; - -exports[`execute concierge transfer should not handle 9 transfers with 10 gas 13`] = `"storageItem.update"`; - -exports[`execute concierge transfer should not handle 9 transfers with 10 gas 14`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "e803", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00d04457f0db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0010a5d4e800", - }, - Object { - "flags": 0, - "value": "f60fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "f60fa5d4e800", - }, - Object { - "flags": 0, - "value": "ec0fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - Object { - "flags": 0, - "value": "14", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "ec0fa5d4e800", - }, - Object { - "flags": 0, - "value": "e20fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "14", - }, - Object { - "flags": 0, - "value": "1e", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "e20fa5d4e800", - }, - Object { - "flags": 0, - "value": "d80fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "1e", - }, - Object { - "flags": 0, - "value": "28", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "d80fa5d4e800", - }, - Object { - "flags": 0, - "value": "ce0fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "28", - }, - Object { - "flags": 0, - "value": "32", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "ce0fa5d4e800", - }, - Object { - "flags": 0, - "value": "c40fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "32", - }, - Object { - "flags": 0, - "value": "3c", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c40fa5d4e800", - }, - Object { - "flags": 0, - "value": "ba0fa5d4e800", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "3c", - }, - Object { - "flags": 0, - "value": "46", - }, - ], -] -`; - -exports[`execute concierge transfer should not handle 9 transfers with 10 gas 15`] = `"storageItem.get"`; - -exports[`execute concierge transfer should not handle 9 transfers with 10 gas 16`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], -] -`; - -exports[`execute concierge transfer should not handle 9 transfers with 10 gas 17`] = `"storageItem.tryGet"`; - -exports[`execute concierge transfer should not handle 9 transfers with 10 gas 18`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0404040404040404040404040404040404040404", - }, - ], -] -`; - -exports[`execute concierge transfer should not handle 9 transfers with 10 gas 19`] = `"storageItem.delete"`; - -exports[`execute concierge transfer should not handle 9 transfers with 10 gas 20`] = `Array []`; - -exports[`execute concierge transfer should not handle 9 transfers with 10 gas 21`] = `"action.add"`; - -exports[`execute concierge transfer should not handle 9 transfers with 10 gas 22`] = `Array []`; - -exports[`execute concierge transfer should not handle 9 transfers with 10 gas 23`] = `"output.get"`; - -exports[`execute concierge transfer should not handle 9 transfers with 10 gas 24`] = `Array []`; - -exports[`execute concierge transfer should not handle 9 transfers with 10 gas 25`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1000000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0404040404040404040404040404040404040404", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "10", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute concierge transfer should not handle 9 transfers with 10 gas 26`] = `Array []`; - -exports[`execute concierge transfer should not handle 9 transfers with 10 gas 27`] = `Array []`; - -exports[`execute concierge transfer should not handle 9 transfers with 10 gas 28`] = `Array []`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 1`] = `"0"`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 2`] = `"contract.get"`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 3`] = ` -Array [ - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], -] -`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 4`] = `"contract.tryGet"`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 5`] = `Array []`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 6`] = `"storageItem.add"`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 7`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6f776e6572", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "f08ab37aa888a44a8abab51bb292727b093bb1df", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b23ba2703c53263e8d6e522dc32203339dcd8eee9", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], -] -`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 8`] = `"storageItem.update"`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 9`] = `Array []`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 10`] = `"storageItem.get"`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 11`] = `Array []`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 12`] = `"storageItem.tryGet"`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 13`] = ` -Array [ - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6f776e6572", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6f776e6572", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6f776e6572", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b23ba2703c53263e8d6e522dc32203339dcd8eee9", - }, - ], -] -`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 14`] = `"storageItem.delete"`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 15`] = `Array []`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 16`] = `"action.add"`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 17`] = `Array []`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 18`] = `"0"`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 19`] = `"contract.get"`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 20`] = ` -Array [ - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], -] -`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 21`] = `"contract.tryGet"`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 22`] = `Array []`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 23`] = `"storageItem.add"`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 24`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6f776e6572", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "f08ab37aa888a44a8abab51bb292727b093bb1df", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b23ba2703c53263e8d6e522dc32203339dcd8eee9", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], -] -`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 25`] = `"storageItem.update"`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 26`] = `Array []`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 27`] = `"storageItem.get"`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 28`] = `Array []`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 29`] = `"storageItem.tryGet"`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 30`] = ` -Array [ - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6f776e6572", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6f776e6572", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6f776e6572", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b23ba2703c53263e8d6e522dc32203339dcd8eee9", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6f776e6572", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b23ba2703c53263e8d6e522dc32203339dcd8eee9", - }, - ], -] -`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 31`] = `"storageItem.delete"`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 32`] = ` -Array [ - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b23ba2703c53263e8d6e522dc32203339dcd8eee9", - }, - ], -] -`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 33`] = `"action.add"`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 34`] = `Array []`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 35`] = `"0"`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 36`] = `"contract.get"`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 37`] = ` -Array [ - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], -] -`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 38`] = `"contract.tryGet"`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 39`] = `Array []`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 40`] = `"storageItem.add"`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 41`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6f776e6572", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "f08ab37aa888a44a8abab51bb292727b093bb1df", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b23ba2703c53263e8d6e522dc32203339dcd8eee9", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], -] -`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 42`] = `"storageItem.update"`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 43`] = `Array []`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 44`] = `"storageItem.get"`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 45`] = `Array []`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 46`] = `"storageItem.tryGet"`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 47`] = ` -Array [ - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6f776e6572", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6f776e6572", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6f776e6572", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b23ba2703c53263e8d6e522dc32203339dcd8eee9", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6f776e6572", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b23ba2703c53263e8d6e522dc32203339dcd8eee9", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6f776e6572", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6bdbfae7df8d49ad1319079604318ba12252ace7f1", - }, - ], -] -`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 48`] = `"storageItem.delete"`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 49`] = ` -Array [ - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b23ba2703c53263e8d6e522dc32203339dcd8eee9", - }, - ], -] -`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 50`] = `"action.add"`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 51`] = `Array []`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 52`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "23ba2703c53263e8d6e522dc32203339dcd8eee9", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f6465726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "23ba2703c53263e8d6e522dc32203339dcd8eee9", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f6465726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "dbfae7df8d49ad1319079604318ba12252ace7f1", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], -] -`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 53`] = `Array []`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 54`] = `Array []`; - -exports[`execute narrative token crowdsale deregister - does not log delete for nonexistent address 55`] = `Array []`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 1`] = `"0"`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 2`] = `"contract.get"`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 3`] = ` -Array [ - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], -] -`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 4`] = `"contract.tryGet"`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 5`] = `Array []`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 6`] = `"storageItem.add"`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 7`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6f776e6572", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "f08ab37aa888a44a8abab51bb292727b093bb1df", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b23ba2703c53263e8d6e522dc32203339dcd8eee9", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], -] -`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 8`] = `"storageItem.update"`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 9`] = `Array []`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 10`] = `"storageItem.get"`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 11`] = `Array []`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 12`] = `"storageItem.tryGet"`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 13`] = ` -Array [ - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6f776e6572", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6f776e6572", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6f776e6572", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b23ba2703c53263e8d6e522dc32203339dcd8eee9", - }, - ], -] -`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 14`] = `"storageItem.delete"`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 15`] = `Array []`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 16`] = `"action.add"`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 17`] = `Array []`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 18`] = `"Out of GAS"`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 19`] = `"0"`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 20`] = `"contract.get"`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 21`] = ` -Array [ - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], -] -`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 22`] = `"contract.tryGet"`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 23`] = `Array []`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 24`] = `"storageItem.add"`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 25`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6f776e6572", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "f08ab37aa888a44a8abab51bb292727b093bb1df", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b23ba2703c53263e8d6e522dc32203339dcd8eee9", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b5c2721a33bf665880fb2c1c0d504d92dcfe1616f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b03a8b007549dd4d19f367d6b71ed5c6fe9aa8272", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b98d3602f1e4f5ba179481398e55593862a0df92c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b62b9d04e2d8b2a989d72c3c9478c18f2ef714cf2", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6bc2c1bac70b182dbf8434323013c72d66c57591d8", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b49b197c38b07107c7ac4097ba47c1c9c39a04409", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6bdbfae7df8d49ad1319079604318ba12252ace7f1", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], -] -`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 26`] = `"storageItem.update"`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 27`] = `Array []`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 28`] = `"storageItem.get"`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 29`] = `Array []`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 30`] = `"storageItem.tryGet"`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 31`] = ` -Array [ - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6f776e6572", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6f776e6572", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6f776e6572", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b23ba2703c53263e8d6e522dc32203339dcd8eee9", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6f776e6572", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b5c2721a33bf665880fb2c1c0d504d92dcfe1616f", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b03a8b007549dd4d19f367d6b71ed5c6fe9aa8272", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b98d3602f1e4f5ba179481398e55593862a0df92c", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b62b9d04e2d8b2a989d72c3c9478c18f2ef714cf2", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6bc2c1bac70b182dbf8434323013c72d66c57591d8", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b49b197c38b07107c7ac4097ba47c1c9c39a04409", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6bdbfae7df8d49ad1319079604318ba12252ace7f1", - }, - ], -] -`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 32`] = `"storageItem.delete"`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 33`] = `Array []`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 34`] = `"action.add"`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 35`] = `Array []`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 36`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "23ba2703c53263e8d6e522dc32203339dcd8eee9", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "5c2721a33bf665880fb2c1c0d504d92dcfe1616f", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "03a8b007549dd4d19f367d6b71ed5c6fe9aa8272", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "98d3602f1e4f5ba179481398e55593862a0df92c", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "62b9d04e2d8b2a989d72c3c9478c18f2ef714cf2", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "c2c1bac70b182dbf8434323013c72d66c57591d8", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "49b197c38b07107c7ac4097ba47c1c9c39a04409", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "dbfae7df8d49ad1319079604318ba12252ace7f1", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], -] -`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 37`] = `Array []`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 38`] = `Array []`; - -exports[`execute narrative token crowdsale register - fails at free GAS limit for bulk addresses 39`] = `Array []`; - -exports[`execute should fail kyc transaction with insufficient gas 1`] = `"Out of GAS"`; - -exports[`execute should fail kyc transaction with insufficient gas 2`] = `"0"`; - -exports[`execute should fail kyc transaction with insufficient gas 3`] = `"contract.get"`; - -exports[`execute should fail kyc transaction with insufficient gas 4`] = ` -Array [ - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], -] -`; - -exports[`execute should fail kyc transaction with insufficient gas 5`] = `"storageItem.add"`; - -exports[`execute should fail kyc transaction with insufficient gas 6`] = `Array []`; - -exports[`execute should fail kyc transaction with insufficient gas 7`] = `"storageItem.get"`; - -exports[`execute should fail kyc transaction with insufficient gas 8`] = `Array []`; - -exports[`execute should fail kyc transaction with insufficient gas 9`] = `"storageItem.tryGet"`; - -exports[`execute should fail kyc transaction with insufficient gas 10`] = ` -Array [ - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6f776e6572", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b5c2721a33bf665880fb2c1c0d504d92dcfe1616f", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b03a8b007549dd4d19f367d6b71ed5c6fe9aa8272", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b98d3602f1e4f5ba179481398e55593862a0df92c", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b62b9d04e2d8b2a989d72c3c9478c18f2ef714cf2", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6bc2c1bac70b182dbf8434323013c72d66c57591d8", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b49b197c38b07107c7ac4097ba47c1c9c39a04409", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6bdbfae7df8d49ad1319079604318ba12252ace7f1", - }, - ], -] -`; - -exports[`execute should fail kyc transaction with insufficient gas 11`] = `"storageItem.update"`; - -exports[`execute should fail kyc transaction with insufficient gas 12`] = ` -Array [ - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], -] -`; - -exports[`execute should fail kyc transaction with insufficient gas 13`] = `"action.add"`; - -exports[`execute should fail kyc transaction with insufficient gas 14`] = `Array []`; - -exports[`execute should fail kyc transaction with insufficient gas 15`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "5c2721a33bf665880fb2c1c0d504d92dcfe1616f", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "03a8b007549dd4d19f367d6b71ed5c6fe9aa8272", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "98d3602f1e4f5ba179481398e55593862a0df92c", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "62b9d04e2d8b2a989d72c3c9478c18f2ef714cf2", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "c2c1bac70b182dbf8434323013c72d66c57591d8", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "49b197c38b07107c7ac4097ba47c1c9c39a04409", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "dbfae7df8d49ad1319079604318ba12252ace7f1", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], -] -`; - -exports[`execute should fail kyc transaction with insufficient gas 16`] = `Array []`; - -exports[`execute should fail kyc transaction with insufficient gas 17`] = `Array []`; - -exports[`execute should fail kyc transaction with insufficient gas 18`] = `Array []`; - -exports[`execute should not fail kyc transaction with sufficient gas 1`] = `"2716800000"`; - -exports[`execute should not fail kyc transaction with sufficient gas 2`] = `"contract.get"`; - -exports[`execute should not fail kyc transaction with sufficient gas 3`] = ` -Array [ - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], -] -`; - -exports[`execute should not fail kyc transaction with sufficient gas 4`] = `"storageItem.add"`; - -exports[`execute should not fail kyc transaction with sufficient gas 5`] = `Array []`; - -exports[`execute should not fail kyc transaction with sufficient gas 6`] = `"storageItem.get"`; - -exports[`execute should not fail kyc transaction with sufficient gas 7`] = `Array []`; - -exports[`execute should not fail kyc transaction with sufficient gas 8`] = `"storageItem.tryGet"`; - -exports[`execute should not fail kyc transaction with sufficient gas 9`] = ` -Array [ - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6f776e6572", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b5c2721a33bf665880fb2c1c0d504d92dcfe1616f", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b03a8b007549dd4d19f367d6b71ed5c6fe9aa8272", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b98d3602f1e4f5ba179481398e55593862a0df92c", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b62b9d04e2d8b2a989d72c3c9478c18f2ef714cf2", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6bc2c1bac70b182dbf8434323013c72d66c57591d8", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b49b197c38b07107c7ac4097ba47c1c9c39a04409", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6bdbfae7df8d49ad1319079604318ba12252ace7f1", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6bace575f6847bc025bb30d752d73892bbb875e8d2", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6bbaa6caaaf1b6efeb33744ace65f19fad05b26e12", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6bc1e347ae7770a182a4934e47332bebbd4cc84869", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b2cf5480980a6d99833e84fece90e31b196cbfe77", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b5ea2beb13b95ed41179becfb21dffcfbc3696d56", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6bdd270aa03397e5831c6b21f3542bfec1bf48fdaf", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6bc51b2a9364f1d85268737eb7421911f6f5817444", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b75ab2bec031da981f65df6372f0a9dabcc4d5a17", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b4cadc544894ee83981fc66021d33025579f4eec8", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b2b96c64588ff0def56e0b0304f584f0acfa9632d", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b6a3d3c88d3689b06954f57bcc860e78de1713d98", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b982fb2a042a9b9a973435b5d49ddaca01d707ae0", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b287bc0f0c2cceeb41a15131c5f98a6b690ca6c57", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b366d229bd2b2f266b5b240f2057f50eb43f41945", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6bd84f65776cc194dd408e2cbb12a665cd2b9502b5", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b76cd518f09f9eddec27374fe8c9978db7d50a814", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b4bb7dd13f517e8f0e1b4f90b20918f605fbcbfd6", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6bafa86a36b7555bfb9910128651af954dfa3a7de5", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b39949b4c0c4d28b55ac089e85cd8ec118f8ea34e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b2a7045b5d17a344b63f2dde9bef9a3ae624320d7", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b3875dff29fd7a4779f6dca2417e6f8c7f6b62d7f", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b8ee2d22a87228f0c8b456fb43dc9fdb047930444", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b93e9403daefed173a9e5a82acdfb7f40c4845419", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6bd360c06efe559805a52f4c554ff5d8de17ba8a28", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6bd815cbb32e904328d57179ef7282d5e33b546ee6", - }, - ], -] -`; - -exports[`execute should not fail kyc transaction with sufficient gas 10`] = `"storageItem.update"`; - -exports[`execute should not fail kyc transaction with sufficient gas 11`] = ` -Array [ - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], - Array [ - Object { - "value": "0000000000000000000000000000000000000000", - }, - Object { - "flags": 0, - "value": "01", - }, - ], -] -`; - -exports[`execute should not fail kyc transaction with sufficient gas 12`] = `"action.add"`; - -exports[`execute should not fail kyc transaction with sufficient gas 13`] = `Array []`; - -exports[`execute should not fail kyc transaction with sufficient gas 14`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "5c2721a33bf665880fb2c1c0d504d92dcfe1616f", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "03a8b007549dd4d19f367d6b71ed5c6fe9aa8272", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "98d3602f1e4f5ba179481398e55593862a0df92c", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "62b9d04e2d8b2a989d72c3c9478c18f2ef714cf2", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "c2c1bac70b182dbf8434323013c72d66c57591d8", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "49b197c38b07107c7ac4097ba47c1c9c39a04409", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "dbfae7df8d49ad1319079604318ba12252ace7f1", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "ace575f6847bc025bb30d752d73892bbb875e8d2", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "baa6caaaf1b6efeb33744ace65f19fad05b26e12", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "c1e347ae7770a182a4934e47332bebbd4cc84869", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "2cf5480980a6d99833e84fece90e31b196cbfe77", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "5ea2beb13b95ed41179becfb21dffcfbc3696d56", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "dd270aa03397e5831c6b21f3542bfec1bf48fdaf", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "c51b2a9364f1d85268737eb7421911f6f5817444", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "75ab2bec031da981f65df6372f0a9dabcc4d5a17", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "4cadc544894ee83981fc66021d33025579f4eec8", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "2b96c64588ff0def56e0b0304f584f0acfa9632d", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6a3d3c88d3689b06954f57bcc860e78de1713d98", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "982fb2a042a9b9a973435b5d49ddaca01d707ae0", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "287bc0f0c2cceeb41a15131c5f98a6b690ca6c57", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "366d229bd2b2f266b5b240f2057f50eb43f41945", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "d84f65776cc194dd408e2cbb12a665cd2b9502b5", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "76cd518f09f9eddec27374fe8c9978db7d50a814", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "4bb7dd13f517e8f0e1b4f90b20918f605fbcbfd6", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "afa86a36b7555bfb9910128651af954dfa3a7de5", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "39949b4c0c4d28b55ac089e85cd8ec118f8ea34e", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "2a7045b5d17a344b63f2dde9bef9a3ae624320d7", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "3875dff29fd7a4779f6dca2417e6f8c7f6b62d7f", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "8ee2d22a87228f0c8b456fb43dc9fdb047930444", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "93e9403daefed173a9e5a82acdfb7f40c4845419", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "d360c06efe559805a52f4c554ff5d8de17ba8a28", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "6b79635f726567697374726174696f6e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "d815cbb32e904328d57179ef7282d5e33b546ee6", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], -] -`; - -exports[`execute should not fail kyc transaction with sufficient gas 15`] = `Array []`; - -exports[`execute should not fail kyc transaction with sufficient gas 16`] = `Array []`; - -exports[`execute should not fail kyc transaction with sufficient gas 17`] = `Array []`; - -exports[`execute should refund on mintTokens with insufficient presale 1`] = `"0"`; - -exports[`execute should refund on mintTokens with insufficient presale 2`] = `"contract.get"`; - -exports[`execute should refund on mintTokens with insufficient presale 3`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], -] -`; - -exports[`execute should refund on mintTokens with insufficient presale 4`] = `"storageItem.tryGet"`; - -exports[`execute should refund on mintTokens with insufficient presale 5`] = ` -Array [ - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "73616c655f706175736564", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "6b79635f6f6b3775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "7072655f656e64", - }, - ], - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": "7075625f7374617274", - }, - ], -] -`; - -exports[`execute should refund on mintTokens with insufficient presale 6`] = `"storageItem.get"`; - -exports[`execute should refund on mintTokens with insufficient presale 7`] = `Array []`; - -exports[`execute should refund on mintTokens with insufficient presale 8`] = `"action.add"`; - -exports[`execute should refund on mintTokens with insufficient presale 9`] = `Array []`; - -exports[`execute should refund on mintTokens with insufficient presale 10`] = `"output.get"`; - -exports[`execute should refund on mintTokens with insufficient presale 11`] = ` -Array [ - Array [ - Object { - "__$type": "Input", - "hash": "0000000000000000000000000000000000000000000000000000000000000000", - "hashHex": "0x0000000000000000000000000000000000000000000000000000000000000000", - "index": 0, - "size": 34, - }, - ], -] -`; - -exports[`execute should refund on mintTokens with insufficient presale 12`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "726566756e64", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "5400000000", - }, - ], - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], -] -`; - -exports[`execute should refund on mintTokens with insufficient presale 13`] = ` -Array [ - Array [ - Object { - "message": "insufficient presale contribution", - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "message": "Cannot exchange value", - "scriptHash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], -] -`; - -exports[`execute should refund on mintTokens with insufficient presale 14`] = `Array []`; - -exports[`execute should refund on mintTokens with insufficient presale 15`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 1`] = `"0"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 2`] = `"contract.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 3`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 4`] = `"contract.tryGet"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 5`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 6`] = `"storageItem.add"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 7`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 8`] = `"storageItem.update"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 9`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "05", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00b2a5ac08db0d", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 10`] = `"storageItem.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 11`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 12`] = `"storageItem.tryGet"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 13`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 14`] = `"storageItem.delete"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 15`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 16`] = `"action.add"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 17`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 18`] = `"output.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 19`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 20`] = `"asset.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 21`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 22`] = `"0"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 23`] = `"contract.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 24`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 25`] = `"contract.tryGet"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 26`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 27`] = `"storageItem.add"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 28`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 29`] = `"storageItem.update"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 30`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "05", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00b2a5ac08db0d", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 31`] = `"storageItem.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 32`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 33`] = `"storageItem.tryGet"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 34`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 35`] = `"storageItem.delete"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 36`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 37`] = `"action.add"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 38`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 39`] = `"output.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 40`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 41`] = `"asset.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 42`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 43`] = `"0"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 44`] = `"contract.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 45`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 46`] = `"contract.tryGet"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 47`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 48`] = `"storageItem.add"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 49`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 50`] = `"storageItem.update"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 51`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "05", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00b2a5ac08db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - Object { - "flags": 0, - "value": "00f9029500", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 52`] = `"storageItem.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 53`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 54`] = `"storageItem.tryGet"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 55`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 56`] = `"storageItem.delete"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 57`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 58`] = `"action.add"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 59`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 60`] = `"output.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 61`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 62`] = `"asset.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 63`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 64`] = `"0"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 65`] = `"contract.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 66`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 67`] = `"contract.tryGet"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 68`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 69`] = `"storageItem.add"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 70`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e573451", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "8c46f5bdc98feb6f42408d9100cb68773b95278eced8788ff43eb996c4f1b838", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 71`] = `"storageItem.update"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 72`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "05", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00b2a5ac08db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - Object { - "flags": 0, - "value": "00f9029500", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 73`] = `"storageItem.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 74`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 75`] = `"storageItem.tryGet"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 76`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e573451", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e573451", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "8c46f5bdc98feb6f42408d9100cb68773b95278eced8788ff43eb996c4f1b838", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 77`] = `"storageItem.delete"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 78`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 79`] = `"action.add"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 80`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 81`] = `"output.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 82`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 83`] = `"asset.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 84`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 85`] = `"0"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 86`] = `"contract.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 87`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 88`] = `"contract.tryGet"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 89`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 90`] = `"storageItem.add"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 91`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e573451", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "8c46f5bdc98feb6f42408d9100cb68773b95278eced8788ff43eb996c4f1b838", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 92`] = `"storageItem.update"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 93`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "05", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00b2a5ac08db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - Object { - "flags": 0, - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - Object { - "flags": 0, - "value": "00f2052a01", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 94`] = `"storageItem.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 95`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 96`] = `"storageItem.tryGet"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 97`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e573451", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e573451", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "8c46f5bdc98feb6f42408d9100cb68773b95278eced8788ff43eb996c4f1b838", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0606060606060606060606060606060606060606060606060606060606060606", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e573451", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e573451", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 98`] = `"storageItem.delete"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 99`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e573451", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 100`] = `"action.add"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 101`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 102`] = `"output.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 103`] = ` -Array [ - Array [ - Object { - "__$type": "Input", - "hash": "0606060606060606060606060606060606060606060606060606060606060606", - "hashHex": "0x0606060606060606060606060606060606060606060606060606060606060606", - "index": 0, - "size": 34, - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 104`] = `"asset.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 105`] = ` -Array [ - Array [ - Object { - "hash": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 106`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0000087e93371c01", - }, - ], - "scriptHash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "726566756e64", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "500000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "5000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00f9029500", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7769746864726177696e67", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00f9029500", - }, - ], - "scriptHash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00f9029500", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "77697468647261776e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00f9029500", - }, - ], - "scriptHash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 107`] = ` -Array [ - Array [ - Object { - "message": "Contract initialized", - "scriptHash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "message": "Checking Last Mark..", - "scriptHash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "message": "Marking Withdrawal..", - "scriptHash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 108`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Concierge withdrawals 109`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 1`] = `"0"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 2`] = `"contract.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 3`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 4`] = `"contract.tryGet"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 5`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 6`] = `"storageItem.add"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 7`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 8`] = `"storageItem.update"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 9`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 10`] = `"storageItem.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 11`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 12`] = `"storageItem.tryGet"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 13`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 14`] = `"storageItem.delete"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 15`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 16`] = `"action.add"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 17`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 18`] = `"output.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 19`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 20`] = `"asset.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 21`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 22`] = `"0"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 23`] = `"contract.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 24`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 25`] = `"contract.tryGet"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 26`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 27`] = `"storageItem.add"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 28`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 29`] = `"storageItem.update"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 30`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 31`] = `"storageItem.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 32`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 33`] = `"storageItem.tryGet"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 34`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 35`] = `"storageItem.delete"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 36`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 37`] = `"action.add"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 38`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 39`] = `"output.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 40`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 41`] = `"asset.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 42`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 43`] = `"0"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 44`] = `"contract.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 45`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 46`] = `"contract.tryGet"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 47`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 48`] = `"storageItem.add"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 49`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7370656e74", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 50`] = `"storageItem.update"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 51`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - Object { - "flags": 0, - "value": "00f20da894371c01", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 52`] = `"storageItem.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 53`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 54`] = `"storageItem.tryGet"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 55`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374320707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737432746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 56`] = `"storageItem.delete"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 57`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 58`] = `"action.add"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 59`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 60`] = `"output.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 61`] = ` -Array [ - Array [ - Object { - "__$type": "Input", - "hash": "0707070707070707070707070707070707070707070707070707070707070707", - "hashHex": "0x0707070707070707070707070707070707070707070707070707070707070707", - "index": 0, - "size": 34, - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 62`] = `"asset.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 63`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 64`] = `"0"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 65`] = `"contract.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 66`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 67`] = `"contract.tryGet"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 68`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 69`] = `"storageItem.add"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 70`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7370656e74", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 71`] = `"storageItem.update"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 72`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - Object { - "flags": 0, - "value": "00f20da894371c01", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 73`] = `"storageItem.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 74`] = ` -Array [ - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 75`] = `"storageItem.tryGet"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 76`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374320707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737432746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 77`] = `"storageItem.delete"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 78`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 79`] = `"action.add"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 80`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 81`] = `"output.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 82`] = ` -Array [ - Array [ - Object { - "__$type": "Input", - "hash": "0707070707070707070707070707070707070707070707070707070707070707", - "hashHex": "0x0707070707070707070707070707070707070707070707070707070707070707", - "index": 0, - "size": 34, - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 83`] = `"asset.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 84`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 85`] = `"0"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 86`] = `"contract.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 87`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 88`] = `"contract.tryGet"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 89`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 90`] = `"storageItem.add"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 91`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7370656e74", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 92`] = `"storageItem.update"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 93`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - Object { - "flags": 0, - "value": "00f20da894371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - Object { - "flags": 0, - "value": "00f9029500", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 94`] = `"storageItem.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 95`] = ` -Array [ - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 96`] = `"storageItem.tryGet"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 97`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374320707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737432746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 98`] = `"storageItem.delete"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 99`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 100`] = `"action.add"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 101`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 102`] = `"output.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 103`] = ` -Array [ - Array [ - Object { - "__$type": "Input", - "hash": "0707070707070707070707070707070707070707070707070707070707070707", - "hashHex": "0x0707070707070707070707070707070707070707070707070707070707070707", - "index": 0, - "size": 34, - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 104`] = `"asset.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 105`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 106`] = `"0"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 107`] = `"contract.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 108`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 109`] = `"contract.tryGet"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 110`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 111`] = `"storageItem.add"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 112`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7370656e74", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e67851", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "ef3b29e7eaf65ea42fa4d66f565fcb37a308cd43705d0793c21f7c6641ea61ec", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0707070707070707070707070707070707070707", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 113`] = `"storageItem.update"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 114`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - Object { - "flags": 0, - "value": "00f20da894371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - Object { - "flags": 0, - "value": "00f9029500", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 115`] = `"storageItem.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 116`] = ` -Array [ - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 117`] = `"storageItem.tryGet"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 118`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374320707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737432746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e67851", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e67851", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "ef3b29e7eaf65ea42fa4d66f565fcb37a308cd43705d0793c21f7c6641ea61ec", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 119`] = `"storageItem.delete"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 120`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 121`] = `"action.add"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 122`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 123`] = `"output.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 124`] = ` -Array [ - Array [ - Object { - "__$type": "Input", - "hash": "0707070707070707070707070707070707070707070707070707070707070707", - "hashHex": "0x0707070707070707070707070707070707070707070707070707070707070707", - "index": 0, - "size": 34, - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 125`] = `"asset.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 126`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 127`] = `"0"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 128`] = `"contract.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 129`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 130`] = `"contract.tryGet"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 131`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 132`] = `"storageItem.add"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 133`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7370656e74", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e67851", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "ef3b29e7eaf65ea42fa4d66f565fcb37a308cd43705d0793c21f7c6641ea61ec", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0707070707070707070707070707070707070707", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 134`] = `"storageItem.update"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 135`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - Object { - "flags": 0, - "value": "00f20da894371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - Object { - "flags": 0, - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": undefined, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - Object { - "flags": 0, - "value": "00f2052a01", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 136`] = `"storageItem.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 137`] = ` -Array [ - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 138`] = `"storageItem.tryGet"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 139`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374320707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737432746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e67851", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e67851", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "ef3b29e7eaf65ea42fa4d66f565fcb37a308cd43705d0793c21f7c6641ea61ec", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0606060606060606060606060606060606060606060606060606060606060606", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e67851", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e67851", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 140`] = `"storageItem.delete"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 141`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e67851", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 142`] = `"action.add"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 143`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 144`] = `"output.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 145`] = ` -Array [ - Array [ - Object { - "__$type": "Input", - "hash": "0707070707070707070707070707070707070707070707070707070707070707", - "hashHex": "0x0707070707070707070707070707070707070707070707070707070707070707", - "index": 0, - "size": 34, - }, - ], - Array [ - Object { - "__$type": "Input", - "hash": "0606060606060606060606060606060606060606060606060606060606060606", - "hashHex": "0x0606060606060606060606060606060606060606060606060606060606060606", - "index": 0, - "size": 34, - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 146`] = `"asset.get"`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 147`] = ` -Array [ - Array [ - Object { - "hash": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 148`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0000087e93371c01", - }, - ], - "scriptHash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0707070707070707070707070707070707070707", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "5000000000", - }, - ], - "scriptHash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0707070707070707070707070707070707070707", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00f9029500", - }, - ], - "scriptHash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7769746864726177696e67", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0707070707070707070707070707070707070707", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00f9029500", - }, - ], - "scriptHash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0707070707070707070707070707070707070707", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00f9029500", - }, - ], - "scriptHash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "77697468647261776e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0707070707070707070707070707070707070707", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00f9029500", - }, - ], - "scriptHash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 149`] = ` -Array [ - Array [ - Object { - "message": "Contract initialized", - "scriptHash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "message": "Checking Last Mark..", - "scriptHash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "message": "Marking Withdrawal..", - "scriptHash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 150`] = `Array []`; - -exports[`execute switcheo withdraw should allow NEP5 Switcheo withdrawals 151`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 1`] = `"0"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 2`] = `"contract.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 3`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 4`] = `"contract.tryGet"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 5`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 6`] = `"storageItem.add"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 7`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 8`] = `"storageItem.update"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 9`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 10`] = `"storageItem.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 11`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 12`] = `"storageItem.tryGet"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 13`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 14`] = `"storageItem.delete"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 15`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 16`] = `"action.add"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 17`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 18`] = `"output.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 19`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 20`] = `"asset.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 21`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 22`] = `"0"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 23`] = `"contract.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 24`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 25`] = `"contract.tryGet"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 26`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 27`] = `"storageItem.add"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 28`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 29`] = `"storageItem.update"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 30`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "05", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00b2a5ac08db0d", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 31`] = `"storageItem.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 32`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 33`] = `"storageItem.tryGet"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 34`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 35`] = `"storageItem.delete"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 36`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 37`] = `"action.add"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 38`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 39`] = `"output.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 40`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 41`] = `"asset.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 42`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 43`] = `"0"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 44`] = `"contract.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 45`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 46`] = `"contract.tryGet"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 47`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 48`] = `"storageItem.add"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 49`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 50`] = `"storageItem.update"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 51`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "05", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00b2a5ac08db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - Object { - "flags": 0, - "value": "00f9029500", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 52`] = `"storageItem.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 53`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 54`] = `"storageItem.tryGet"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 55`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 56`] = `"storageItem.delete"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 57`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 58`] = `"action.add"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 59`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 60`] = `"output.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 61`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 62`] = `"asset.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 63`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 64`] = `"0"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 65`] = `"contract.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 66`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 67`] = `"contract.tryGet"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 68`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 69`] = `"storageItem.add"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 70`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 71`] = `"storageItem.update"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 72`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "05", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00b2a5ac08db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - Object { - "flags": 0, - "value": "00f9029500", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 73`] = `"storageItem.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 74`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 75`] = `"storageItem.tryGet"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 76`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 77`] = `"storageItem.delete"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 78`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 79`] = `"action.add"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 80`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 81`] = `"output.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 82`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 83`] = `"asset.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 84`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 85`] = `"0"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 86`] = `"contract.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 87`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 88`] = `"contract.tryGet"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 89`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 90`] = `"storageItem.add"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 91`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 92`] = `"storageItem.update"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 93`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "05", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00b2a5ac08db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - Object { - "flags": 0, - "value": "00f9029500", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 94`] = `"storageItem.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 95`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 96`] = `"storageItem.tryGet"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 97`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 98`] = `"storageItem.delete"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 99`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 100`] = `"action.add"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 101`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 102`] = `"output.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 103`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 104`] = `"asset.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 105`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 106`] = `"0"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 107`] = `"contract.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 108`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 109`] = `"contract.tryGet"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 110`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 111`] = `"storageItem.add"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 112`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 113`] = `"storageItem.update"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 114`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "05", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00b2a5ac08db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - Object { - "flags": 0, - "value": "00f9029500", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 115`] = `"storageItem.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 116`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 117`] = `"storageItem.tryGet"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 118`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 119`] = `"storageItem.delete"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 120`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 121`] = `"action.add"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 122`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 123`] = `"output.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 124`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 125`] = `"asset.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 126`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 127`] = `"0"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 128`] = `"contract.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 129`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 130`] = `"contract.tryGet"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 131`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 132`] = `"storageItem.add"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 133`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7370656e74", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 134`] = `"storageItem.update"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 135`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "05", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00b2a5ac08db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - Object { - "flags": 0, - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - Object { - "flags": 0, - "value": "00f20da894371c01", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 136`] = `"storageItem.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 137`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 138`] = `"storageItem.tryGet"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 139`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374320707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737432746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 140`] = `"storageItem.delete"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 141`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 142`] = `"action.add"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 143`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 144`] = `"output.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 145`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 146`] = `"asset.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 147`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 148`] = `"0"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 149`] = `"contract.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 150`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 151`] = `"contract.tryGet"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 152`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 153`] = `"storageItem.add"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 154`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7370656e74", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 155`] = `"storageItem.update"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 156`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "05", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00b2a5ac08db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - Object { - "flags": 0, - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - Object { - "flags": 0, - "value": "00f20da894371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - Object { - "flags": 0, - "value": "00f9029500", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 157`] = `"storageItem.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 158`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 159`] = `"storageItem.tryGet"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 160`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374320707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737432746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 161`] = `"storageItem.delete"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 162`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 163`] = `"action.add"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 164`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 165`] = `"output.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 166`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 167`] = `"asset.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 168`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 169`] = `"0"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 170`] = `"contract.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 171`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 172`] = `"contract.tryGet"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 173`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 174`] = `"storageItem.add"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 175`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7370656e74", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "8109001407070707070707070707070707070707070707070014dd2b538e2a0c1db1ae5061c15be14f916bd1e67800029800000500f90295000014dc6cc7701762e83d2d3795d27b1aac14469e573400029800000500f9029500000500f902950002010a", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 176`] = `"storageItem.update"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 177`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "05", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00b2a5ac08db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - Object { - "flags": 0, - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - Object { - "flags": 0, - "value": "00f20da894371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - Object { - "flags": 0, - "value": "00f9029500", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 178`] = `"storageItem.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 179`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 180`] = `"storageItem.tryGet"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 181`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374320707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737432746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 182`] = `"storageItem.delete"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 183`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 184`] = `"action.add"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 185`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 186`] = `"output.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 187`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 188`] = `"asset.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 189`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 190`] = `"0"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 191`] = `"contract.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 192`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 193`] = `"contract.tryGet"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 194`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 195`] = `"storageItem.add"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 196`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7370656e74", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "8109001407070707070707070707070707070707070707070014dd2b538e2a0c1db1ae5061c15be14f916bd1e67800029800000500f90295000014dc6cc7701762e83d2d3795d27b1aac14469e573400029800000500f9029500000500f902950002010a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "78e5029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "8813", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7472616465566f6c756d6500dc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "8102000500f9029500020500f9029500", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 197`] = `"storageItem.update"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 198`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "05", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00b2a5ac08db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - Object { - "flags": 0, - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - Object { - "flags": 0, - "value": "00f20da894371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - Object { - "flags": 0, - "value": "00f9029500", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 199`] = `"storageItem.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 200`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 201`] = `"storageItem.tryGet"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 202`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374320707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737432746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7472616465566f6c756d6500dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7472616465566f6c756d6500dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 203`] = `"storageItem.delete"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 204`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 205`] = `"action.add"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 206`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 207`] = `"output.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 208`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 209`] = `"asset.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 210`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 211`] = `"0"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 212`] = `"contract.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 213`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 214`] = `"contract.tryGet"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 215`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 216`] = `"storageItem.add"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 217`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7370656e74", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "8109001407070707070707070707070707070707070707070014dd2b538e2a0c1db1ae5061c15be14f916bd1e67800029800000500f90295000014dc6cc7701762e83d2d3795d27b1aac14469e573400029800000500f9029500000500f902950002010a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "78e5029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "8813", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7472616465566f6c756d6500dc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "8102000500f9029500020500f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e573451", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "78e5029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "450730a10ad57794463798664776d734ed22fbf6984e80a108a963dc3045944e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0707070707070707070707070707070707070707", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 218`] = `"storageItem.update"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 219`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "05", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00b2a5ac08db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - Object { - "flags": 0, - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - Object { - "flags": 0, - "value": "00f20da894371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - Object { - "flags": 0, - "value": "00f9029500", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 220`] = `"storageItem.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 221`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 222`] = `"storageItem.tryGet"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 223`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374320707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737432746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7472616465566f6c756d6500dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7472616465566f6c756d6500dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e573451", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e573451", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "450730a10ad57794463798664776d734ed22fbf6984e80a108a963dc3045944e", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 224`] = `"storageItem.delete"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 225`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 226`] = `"action.add"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 227`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 228`] = `"output.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 229`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 230`] = `"asset.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 231`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 232`] = `"0"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 233`] = `"contract.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 234`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 235`] = `"contract.tryGet"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 236`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 237`] = `"storageItem.add"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 238`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7370656e74", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "8109001407070707070707070707070707070707070707070014dd2b538e2a0c1db1ae5061c15be14f916bd1e67800029800000500f90295000014dc6cc7701762e83d2d3795d27b1aac14469e573400029800000500f9029500000500f902950002010a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "78e5029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "8813", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7472616465566f6c756d6500dc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "8102000500f9029500020500f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e573451", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "78e5029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "450730a10ad57794463798664776d734ed22fbf6984e80a108a963dc3045944e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0707070707070707070707070707070707070707", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "78e5029500", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 239`] = `"storageItem.update"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 240`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "05", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00b2a5ac08db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - Object { - "flags": 0, - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - Object { - "flags": 0, - "value": "00f20da894371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - Object { - "flags": 0, - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - Object { - "flags": 0, - "value": "8813", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 241`] = `"storageItem.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 242`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 243`] = `"storageItem.tryGet"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 244`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374320707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737432746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7472616465566f6c756d6500dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7472616465566f6c756d6500dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e573451", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e573451", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "450730a10ad57794463798664776d734ed22fbf6984e80a108a963dc3045944e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0606060606060606060606060606060606060606060606060606060606060606", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e573451", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e573451", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 245`] = `"storageItem.delete"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 246`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e573451", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 247`] = `"action.add"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 248`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 249`] = `"output.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 250`] = ` -Array [ - Array [ - Object { - "__$type": "Input", - "hash": "0606060606060606060606060606060606060606060606060606060606060606", - "hashHex": "0x0606060606060606060606060606060606060606060606060606060606060606", - "index": 0, - "size": 34, - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 251`] = `"asset.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 252`] = ` -Array [ - Array [ - Object { - "hash": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 253`] = `"0"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 254`] = `"contract.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 255`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 256`] = `"contract.tryGet"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 257`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 258`] = `"storageItem.add"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 259`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7370656e74", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "8109001407070707070707070707070707070707070707070014dd2b538e2a0c1db1ae5061c15be14f916bd1e67800029800000500f90295000014dc6cc7701762e83d2d3795d27b1aac14469e573400029800000500f9029500000500f902950002010a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "78e5029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "8813", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7472616465566f6c756d6500dc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "8102000500f9029500020500f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e573451", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "78e5029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "450730a10ad57794463798664776d734ed22fbf6984e80a108a963dc3045944e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0707070707070707070707070707070707070707", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "78e5029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e67851", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "abda598115e9bcef7d56691d56c446ea6e82d76b2f340867edbb1b72ed6e75a4", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 260`] = `"storageItem.update"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 261`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "05", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00b2a5ac08db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - Object { - "flags": 0, - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - Object { - "flags": 0, - "value": "00f20da894371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - Object { - "flags": 0, - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - Object { - "flags": 0, - "value": "8813", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 262`] = `"storageItem.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 263`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0707070707070707070707070707070707070707", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 264`] = `"storageItem.tryGet"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 265`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374320707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737432746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7472616465566f6c756d6500dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7472616465566f6c756d6500dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e573451", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e573451", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "450730a10ad57794463798664776d734ed22fbf6984e80a108a963dc3045944e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0606060606060606060606060606060606060606060606060606060606060606", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e573451", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e573451", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e67851", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e67851", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "abda598115e9bcef7d56691d56c446ea6e82d76b2f340867edbb1b72ed6e75a4", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 266`] = `"storageItem.delete"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 267`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e573451", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 268`] = `"action.add"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 269`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 270`] = `"output.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 271`] = ` -Array [ - Array [ - Object { - "__$type": "Input", - "hash": "0606060606060606060606060606060606060606060606060606060606060606", - "hashHex": "0x0606060606060606060606060606060606060606060606060606060606060606", - "index": 0, - "size": 34, - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 272`] = `"asset.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 273`] = ` -Array [ - Array [ - Object { - "hash": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 274`] = `"0"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 275`] = `"contract.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 276`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 277`] = `"contract.tryGet"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 278`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 279`] = `"storageItem.add"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 280`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "10a9825a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "40a5ae02", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "c03b4703", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "104ebf5a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00e1f505", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "31", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "90fa835a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0065cd1d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "7370656e74", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "8109001407070707070707070707070707070707070707070014dd2b538e2a0c1db1ae5061c15be14f916bd1e67800029800000500f90295000014dc6cc7701762e83d2d3795d27b1aac14469e573400029800000500f9029500000500f902950002010a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e678", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "78e5029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "8813", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7472616465566f6c756d6500dc6cc7701762e83d2d3795d27b1aac14469e5734", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "8102000500f9029500020500f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e573451", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "78e5029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "450730a10ad57794463798664776d734ed22fbf6984e80a108a963dc3045944e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0707070707070707070707070707070707070707", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "78e5029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e67851", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "abda598115e9bcef7d56691d56c446ea6e82d76b2f340867edbb1b72ed6e75a4", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 281`] = `"storageItem.update"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 282`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "fa00", - }, - Object { - "flags": 0, - "value": "05", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00c09f8207db0d", - }, - Object { - "flags": 0, - "value": "00b2a5ac08db0d", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - Object { - "flags": 0, - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000087e93371c01", - }, - Object { - "flags": 0, - "value": "00f20da894371c01", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f2052a01", - }, - Object { - "flags": 0, - "value": "00f9029500", - }, - ], - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00f9029500", - }, - Object { - "flags": 0, - "value": "8813", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 283`] = `"storageItem.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 284`] = ` -Array [ - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0707070707070707070707070707070707070707", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 285`] = `"storageItem.tryGet"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 286`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f5745454b315f524154455f4e454f", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "57484954454c4953545f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41494e5f53414c455f424547494e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "5052455f53414c455f484152445f434150", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "4d41585f4e454f5f5045525f5452414e53464552", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e65476173", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "fc1a35a54c864edc64730392496d84f59a1f5ec5b7a1d8facb204d320ad9650f9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f6b656e73466f724f6e654e656f", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374310707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c697374320707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737431746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "77686974656c69737432746f74616c", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "73616c65537461727454696d65", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "746f74616c537570706c79", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "66656541646472657373", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "6d616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "74616b6572466565", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7472616465566f6c756d6500dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7472616465566f6c756d6500dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e573451", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e573451", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "450730a10ad57794463798664776d734ed22fbf6984e80a108a963dc3045944e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0606060606060606060606060606060606060606060606060606060606060606", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e573451", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - "key": "0707070707070707070707070707070707070707", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e573451", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e67851", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e67851", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "abda598115e9bcef7d56691d56c446ea6e82d76b2f340867edbb1b72ed6e75a4", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0606060606060606060606060606060606060606060606060606060606060606", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e67851", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "7374617465436f6e747261637457686974656c697374", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "636f6e747261637457686974656c697374dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "7472616e7366657273456e61626c6564", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e67851", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 287`] = `"storageItem.delete"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 288`] = ` -Array [ - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0adc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678dc6cc7701762e83d2d3795d27b1aac14469e573432a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0707070707070707070707070707070707070707dc6cc7701762e83d2d3795d27b1aac14469e573451", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "hash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - "key": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "hash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - "key": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0add2b538e2a0c1db1ae5061c15be14f916bd1e67851", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 289`] = `"action.add"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 290`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 291`] = `"output.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 292`] = ` -Array [ - Array [ - Object { - "__$type": "Input", - "hash": "0606060606060606060606060606060606060606060606060606060606060606", - "hashHex": "0x0606060606060606060606060606060606060606060606060606060606060606", - "index": 0, - "size": 34, - }, - ], - Array [ - Object { - "__$type": "Input", - "hash": "0606060606060606060606060606060606060606060606060606060606060606", - "hashHex": "0x0606060606060606060606060606060606060606060606060606060606060606", - "index": 0, - "size": 34, - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 293`] = `"asset.get"`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 294`] = ` -Array [ - Array [ - Object { - "hash": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", - }, - ], - Array [ - Object { - "hash": "e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c60", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 295`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46098ed8eb1554fcb5a1a2ab3f40f30e35d2ba78", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00c09f8207db0d", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "46fca70ca7f0526d6955f915ce07cbe326fbadd0", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0000087e93371c01", - }, - ], - "scriptHash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "726566756e64", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "500000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "5000000000", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00f9029500", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "0707070707070707070707070707070707070707", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "5000000000", - }, - ], - "scriptHash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0707070707070707070707070707070707070707", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00f9029500", - }, - ], - "scriptHash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "63726561746564", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0707070707070707070707070707070707070707", - }, - Object { - "__$type": "Hash256ContractParameter", - "type": 4, - "value": "32a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00f9029500", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00f9029500", - }, - ], - "scriptHash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572726564", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "2500000000", - }, - ], - "scriptHash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572726564", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0707070707070707070707070707070707070707", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "2499995000", - }, - ], - "scriptHash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "66696c6c6564", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "32a90d54c1ae49abd2bb81915e95920e6d6cf41a0a21624934607279f190fc6f", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00f9029500", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00f9029500", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00f9029500", - }, - ], - "scriptHash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7769746864726177696e67", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0707070707070707070707070707070707070707", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "78e5029500", - }, - ], - "scriptHash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0707070707070707070707070707070707070707", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "78e5029500", - }, - ], - "scriptHash": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "77697468647261776e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0707070707070707070707070707070707070707", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "dc6cc7701762e83d2d3795d27b1aac14469e5734", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "78e5029500", - }, - ], - "scriptHash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7769746864726177696e67", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00f9029500", - }, - ], - "scriptHash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "7472616e73666572", - }, - Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00f9029500", - }, - ], - "scriptHash": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - ], - Array [ - Object { - "args": Array [ - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "77697468647261776e", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "dd2b538e2a0c1db1ae5061c15be14f916bd1e678", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00f9029500", - }, - ], - "scriptHash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 296`] = ` -Array [ - Array [ - Object { - "message": "Contract initialized", - "scriptHash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "message": "Serializing offer", - "scriptHash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "message": "Deserializing offer", - "scriptHash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "message": "Done serializing and storing", - "scriptHash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "message": "Checking Last Mark..", - "scriptHash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "message": "Marking Withdrawal..", - "scriptHash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "message": "Checking Last Mark..", - "scriptHash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], - Array [ - Object { - "message": "Marking Withdrawal..", - "scriptHash": "1f559d5eea8ca22910a3feb0e4637c0f2e71c50e", - }, - ], -] -`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 297`] = `Array []`; - -exports[`execute switcheo withdraw should allow withdrawing filled orders 298`] = `Array []`; diff --git a/packages/neo-one-node-vm/src/__tests__/__snapshots__/syscalls.test.ts.snap b/packages/neo-one-node-vm/src/__tests__/__snapshots__/syscalls.test.ts.snap deleted file mode 100644 index 457fe1d39c..0000000000 --- a/packages/neo-one-node-vm/src/__tests__/__snapshots__/syscalls.test.ts.snap +++ /dev/null @@ -1,2585 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`syscalls Neo.Account.GetBalance 1`] = `"account.tryGet"`; - -exports[`syscalls Neo.Account.GetBalance 2`] = ` -Array [ - Array [ - Object { - "hash": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], -] -`; - -exports[`syscalls Neo.Account.GetBalance 3`] = `"account.get"`; - -exports[`syscalls Neo.Account.GetBalance 4`] = ` -Array [ - Array [ - Object { - "hash": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], -] -`; - -exports[`syscalls Neo.Account.GetBalance 5`] = `Array []`; - -exports[`syscalls Neo.Account.GetBalance 6`] = `Array []`; - -exports[`syscalls Neo.Account.GetBalance 7`] = `Array []`; - -exports[`syscalls Neo.Account.GetBalance 8`] = `Array []`; - -exports[`syscalls Neo.Account.GetBalance 9`] = `"account.tryGet"`; - -exports[`syscalls Neo.Account.GetBalance 10`] = ` -Array [ - Array [ - Object { - "hash": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], -] -`; - -exports[`syscalls Neo.Account.GetBalance 11`] = `"account.get"`; - -exports[`syscalls Neo.Account.GetBalance 12`] = ` -Array [ - Array [ - Object { - "hash": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], -] -`; - -exports[`syscalls Neo.Account.GetBalance 13`] = `Array []`; - -exports[`syscalls Neo.Account.GetBalance 14`] = `Array []`; - -exports[`syscalls Neo.Account.GetBalance 15`] = `Array []`; - -exports[`syscalls Neo.Account.GetBalance 16`] = `Array []`; - -exports[`syscalls Neo.Account.GetScriptHash 1`] = `"account.tryGet"`; - -exports[`syscalls Neo.Account.GetScriptHash 2`] = ` -Array [ - Array [ - Object { - "hash": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], -] -`; - -exports[`syscalls Neo.Account.GetScriptHash 3`] = `Array []`; - -exports[`syscalls Neo.Account.GetScriptHash 4`] = `Array []`; - -exports[`syscalls Neo.Account.GetScriptHash 5`] = `Array []`; - -exports[`syscalls Neo.Account.GetScriptHash 6`] = `Array []`; - -exports[`syscalls Neo.Account.GetVotes 1`] = `"account.tryGet"`; - -exports[`syscalls Neo.Account.GetVotes 2`] = ` -Array [ - Array [ - Object { - "hash": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], -] -`; - -exports[`syscalls Neo.Account.GetVotes 3`] = `Array []`; - -exports[`syscalls Neo.Account.GetVotes 4`] = `Array []`; - -exports[`syscalls Neo.Account.GetVotes 5`] = `Array []`; - -exports[`syscalls Neo.Account.GetVotes 6`] = `Array []`; - -exports[`syscalls Neo.Account.SetVotes 1`] = `"account.tryGet"`; - -exports[`syscalls Neo.Account.SetVotes 2`] = ` -Array [ - Array [ - Object { - "hash": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], -] -`; - -exports[`syscalls Neo.Account.SetVotes 3`] = `"account.get"`; - -exports[`syscalls Neo.Account.SetVotes 4`] = ` -Array [ - Array [ - Object { - "hash": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], -] -`; - -exports[`syscalls Neo.Account.SetVotes 5`] = `"account.update"`; - -exports[`syscalls Neo.Account.SetVotes 6`] = ` -Array [ - Array [ - Object { - "__$type": "Account", - "balances": Object { - "0x0101010101010101010101010101010101010101010101010101010101010101": "10", - }, - "hash": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", - "hashHex": "0xcef0c0fdcfe7838eff6ff104f9cdec2922297537", - "isFrozen": false, - "version": 0, - "votes": Array [ - "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", - "031d8e1630ce640966967bc6d95223d21f44304133003140c3b52004dc981349c9", - ], - }, - Object { - "votes": Array [ - "02232ce8d2e2063dce0451131851d47421bfc4fc1da4db116fca5302c0756462fa", - ], - }, - ], -] -`; - -exports[`syscalls Neo.Account.SetVotes 7`] = `Array []`; - -exports[`syscalls Neo.Account.SetVotes 8`] = `Array []`; - -exports[`syscalls Neo.Account.SetVotes 9`] = `Array []`; - -exports[`syscalls Neo.Account.SetVotes 10`] = ` -Array [ - Array [ - Object { - "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", - "votes": Array [ - "02232ce8d2e2063dce0451131851d47421bfc4fc1da4db116fca5302c0756462fa", - ], - }, - ], -] -`; - -exports[`syscalls Neo.Account.SetVotes 11`] = `"account.tryGet"`; - -exports[`syscalls Neo.Account.SetVotes 12`] = ` -Array [ - Array [ - Object { - "hash": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], -] -`; - -exports[`syscalls Neo.Account.SetVotes 13`] = `"account.get"`; - -exports[`syscalls Neo.Account.SetVotes 14`] = ` -Array [ - Array [ - Object { - "hash": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], -] -`; - -exports[`syscalls Neo.Account.SetVotes 15`] = `"account.update"`; - -exports[`syscalls Neo.Account.SetVotes 16`] = ` -Array [ - Array [ - Object { - "__$type": "Account", - "balances": Object { - "0x0101010101010101010101010101010101010101010101010101010101010101": "10", - }, - "hash": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", - "hashHex": "0xcef0c0fdcfe7838eff6ff104f9cdec2922297537", - "isFrozen": false, - "version": 0, - "votes": Array [ - "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", - "031d8e1630ce640966967bc6d95223d21f44304133003140c3b52004dc981349c9", - ], - }, - Object { - "votes": Array [ - "02232ce8d2e2063dce0451131851d47421bfc4fc1da4db116fca5302c0756462fa", - ], - }, - ], -] -`; - -exports[`syscalls Neo.Account.SetVotes 17`] = `"account.delete"`; - -exports[`syscalls Neo.Account.SetVotes 18`] = ` -Array [ - Array [ - Object { - "hash": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], -] -`; - -exports[`syscalls Neo.Account.SetVotes 19`] = `Array []`; - -exports[`syscalls Neo.Account.SetVotes 20`] = `Array []`; - -exports[`syscalls Neo.Account.SetVotes 21`] = `Array []`; - -exports[`syscalls Neo.Account.SetVotes 22`] = ` -Array [ - Array [ - Object { - "address": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", - "votes": Array [ - "02232ce8d2e2063dce0451131851d47421bfc4fc1da4db116fca5302c0756462fa", - ], - }, - ], -] -`; - -exports[`syscalls Neo.Asset.Create 1`] = `"asset.add"`; - -exports[`syscalls Neo.Asset.Create 2`] = ` -Array [ - Array [ - Object { - "__$type": "Asset", - "admin": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", - "amount": "10", - "available": "0", - "expiration": 2, - "fee": "0", - "feeAddress": "0000000000000000000000000000000000000000", - "feeMode": 0, - "hash": "294e9c4a8f194f1a5a21f0adc0d3daf91950b029ebe2d38d8df226aa3ccd5968", - "hashHex": "0x6859cd3caa26f28d8dd3e2eb29b05019f9dad3c0adf0215a1a4f198f4a9c4e29", - "isFrozen": false, - "issuer": "35b20010db73bf86371075ddfba4e6596f1ff35d", - "name": "assetName", - "owner": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", - "precision": 8, - "type": 8, - "version": 0, - }, - ], -] -`; - -exports[`syscalls Neo.Asset.Create 3`] = `Array []`; - -exports[`syscalls Neo.Asset.Create 4`] = `Array []`; - -exports[`syscalls Neo.Asset.Create 5`] = `Array []`; - -exports[`syscalls Neo.Asset.Create 6`] = `Array []`; - -exports[`syscalls Neo.Asset.GetAdmin 1`] = `"asset.get"`; - -exports[`syscalls Neo.Asset.GetAdmin 2`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Asset.GetAdmin 3`] = `Array []`; - -exports[`syscalls Neo.Asset.GetAdmin 4`] = `Array []`; - -exports[`syscalls Neo.Asset.GetAdmin 5`] = `Array []`; - -exports[`syscalls Neo.Asset.GetAdmin 6`] = `Array []`; - -exports[`syscalls Neo.Asset.GetAmount 1`] = `"asset.get"`; - -exports[`syscalls Neo.Asset.GetAmount 2`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Asset.GetAmount 3`] = `Array []`; - -exports[`syscalls Neo.Asset.GetAmount 4`] = `Array []`; - -exports[`syscalls Neo.Asset.GetAmount 5`] = `Array []`; - -exports[`syscalls Neo.Asset.GetAmount 6`] = `Array []`; - -exports[`syscalls Neo.Asset.GetAssetId 1`] = `"asset.get"`; - -exports[`syscalls Neo.Asset.GetAssetId 2`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Asset.GetAssetId 3`] = `Array []`; - -exports[`syscalls Neo.Asset.GetAssetId 4`] = `Array []`; - -exports[`syscalls Neo.Asset.GetAssetId 5`] = `Array []`; - -exports[`syscalls Neo.Asset.GetAssetId 6`] = `Array []`; - -exports[`syscalls Neo.Asset.GetAssetType 1`] = `"asset.get"`; - -exports[`syscalls Neo.Asset.GetAssetType 2`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Asset.GetAssetType 3`] = `Array []`; - -exports[`syscalls Neo.Asset.GetAssetType 4`] = `Array []`; - -exports[`syscalls Neo.Asset.GetAssetType 5`] = `Array []`; - -exports[`syscalls Neo.Asset.GetAssetType 6`] = `Array []`; - -exports[`syscalls Neo.Asset.GetAvailable 1`] = `"asset.get"`; - -exports[`syscalls Neo.Asset.GetAvailable 2`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Asset.GetAvailable 3`] = `Array []`; - -exports[`syscalls Neo.Asset.GetAvailable 4`] = `Array []`; - -exports[`syscalls Neo.Asset.GetAvailable 5`] = `Array []`; - -exports[`syscalls Neo.Asset.GetAvailable 6`] = `Array []`; - -exports[`syscalls Neo.Asset.GetIssuer 1`] = `"asset.get"`; - -exports[`syscalls Neo.Asset.GetIssuer 2`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Asset.GetIssuer 3`] = `Array []`; - -exports[`syscalls Neo.Asset.GetIssuer 4`] = `Array []`; - -exports[`syscalls Neo.Asset.GetIssuer 5`] = `Array []`; - -exports[`syscalls Neo.Asset.GetIssuer 6`] = `Array []`; - -exports[`syscalls Neo.Asset.GetOwner 1`] = `"asset.get"`; - -exports[`syscalls Neo.Asset.GetOwner 2`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Asset.GetOwner 3`] = `Array []`; - -exports[`syscalls Neo.Asset.GetOwner 4`] = `Array []`; - -exports[`syscalls Neo.Asset.GetOwner 5`] = `Array []`; - -exports[`syscalls Neo.Asset.GetOwner 6`] = `Array []`; - -exports[`syscalls Neo.Asset.GetPrecision 1`] = `"asset.get"`; - -exports[`syscalls Neo.Asset.GetPrecision 2`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Asset.GetPrecision 3`] = `Array []`; - -exports[`syscalls Neo.Asset.GetPrecision 4`] = `Array []`; - -exports[`syscalls Neo.Asset.GetPrecision 5`] = `Array []`; - -exports[`syscalls Neo.Asset.GetPrecision 6`] = `Array []`; - -exports[`syscalls Neo.Asset.Renew 1`] = `"asset.get"`; - -exports[`syscalls Neo.Asset.Renew 2`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], - Array [ - Object { - "hash": "0000000000000000000000000000000000000000000000000000000000000000", - }, - ], -] -`; - -exports[`syscalls Neo.Asset.Renew 3`] = `"asset.update"`; - -exports[`syscalls Neo.Asset.Renew 4`] = ` -Array [ - Array [ - Object { - "__$type": "Asset", - "admin": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", - "amount": "10", - "available": "5", - "expiration": 2, - "fee": "0", - "feeAddress": "0000000000000000000000000000000000000000", - "feeMode": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000", - "hashHex": "0x0000000000000000000000000000000000000000000000000000000000000000", - "isFrozen": false, - "issuer": "35b20010db73bf86371075ddfba4e6596f1ff35d", - "name": "assetName", - "owner": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", - "precision": 8, - "type": 8, - "version": 0, - }, - Object { - "expiration": 4000002, - }, - ], -] -`; - -exports[`syscalls Neo.Asset.Renew 5`] = `Array []`; - -exports[`syscalls Neo.Asset.Renew 6`] = `Array []`; - -exports[`syscalls Neo.Asset.Renew 7`] = `Array []`; - -exports[`syscalls Neo.Asset.Renew 8`] = `Array []`; - -exports[`syscalls Neo.Asset.Renew 9`] = `"asset.get"`; - -exports[`syscalls Neo.Asset.Renew 10`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], - Array [ - Object { - "hash": "0000000000000000000000000000000000000000000000000000000000000000", - }, - ], -] -`; - -exports[`syscalls Neo.Asset.Renew 11`] = `"asset.update"`; - -exports[`syscalls Neo.Asset.Renew 12`] = ` -Array [ - Array [ - Object { - "__$type": "Asset", - "admin": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", - "amount": "10", - "available": "5", - "expiration": 0, - "fee": "0", - "feeAddress": "0000000000000000000000000000000000000000", - "feeMode": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000", - "hashHex": "0x0000000000000000000000000000000000000000000000000000000000000000", - "isFrozen": false, - "issuer": "35b20010db73bf86371075ddfba4e6596f1ff35d", - "name": "assetName", - "owner": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", - "precision": 8, - "type": 8, - "version": 0, - }, - Object { - "expiration": 4000002, - }, - ], -] -`; - -exports[`syscalls Neo.Asset.Renew 13`] = `Array []`; - -exports[`syscalls Neo.Asset.Renew 14`] = `Array []`; - -exports[`syscalls Neo.Asset.Renew 15`] = `Array []`; - -exports[`syscalls Neo.Asset.Renew 16`] = `Array []`; - -exports[`syscalls Neo.Asset.Renew 17`] = `"asset.get"`; - -exports[`syscalls Neo.Asset.Renew 18`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], - Array [ - Object { - "hash": "0000000000000000000000000000000000000000000000000000000000000000", - }, - ], -] -`; - -exports[`syscalls Neo.Asset.Renew 19`] = `"asset.update"`; - -exports[`syscalls Neo.Asset.Renew 20`] = ` -Array [ - Array [ - Object { - "__$type": "Asset", - "admin": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", - "amount": "10", - "available": "5", - "expiration": 4294967295, - "fee": "0", - "feeAddress": "0000000000000000000000000000000000000000", - "feeMode": 0, - "hash": "0000000000000000000000000000000000000000000000000000000000000000", - "hashHex": "0x0000000000000000000000000000000000000000000000000000000000000000", - "isFrozen": false, - "issuer": "35b20010db73bf86371075ddfba4e6596f1ff35d", - "name": "assetName", - "owner": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", - "precision": 8, - "type": 8, - "version": 0, - }, - Object { - "expiration": 4294967295, - }, - ], -] -`; - -exports[`syscalls Neo.Asset.Renew 21`] = `Array []`; - -exports[`syscalls Neo.Asset.Renew 22`] = `Array []`; - -exports[`syscalls Neo.Asset.Renew 23`] = `Array []`; - -exports[`syscalls Neo.Asset.Renew 24`] = `Array []`; - -exports[`syscalls Neo.Attribute.GetData 1`] = `"transaction.get"`; - -exports[`syscalls Neo.Attribute.GetData 2`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Attribute.GetData 3`] = `Array []`; - -exports[`syscalls Neo.Attribute.GetData 4`] = `Array []`; - -exports[`syscalls Neo.Attribute.GetData 5`] = `Array []`; - -exports[`syscalls Neo.Attribute.GetData 6`] = `Array []`; - -exports[`syscalls Neo.Attribute.GetUsage 1`] = `"transaction.get"`; - -exports[`syscalls Neo.Attribute.GetUsage 2`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Attribute.GetUsage 3`] = `Array []`; - -exports[`syscalls Neo.Attribute.GetUsage 4`] = `Array []`; - -exports[`syscalls Neo.Attribute.GetUsage 5`] = `Array []`; - -exports[`syscalls Neo.Attribute.GetUsage 6`] = `Array []`; - -exports[`syscalls Neo.Block.GetTransaction 1`] = `"block.get"`; - -exports[`syscalls Neo.Block.GetTransaction 2`] = ` -Array [ - Array [ - Object { - "hashOrIndex": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Block.GetTransaction 3`] = `Array []`; - -exports[`syscalls Neo.Block.GetTransaction 4`] = `Array []`; - -exports[`syscalls Neo.Block.GetTransaction 5`] = `Array []`; - -exports[`syscalls Neo.Block.GetTransaction 6`] = `Array []`; - -exports[`syscalls Neo.Block.GetTransactionCount 1`] = `"block.get"`; - -exports[`syscalls Neo.Block.GetTransactionCount 2`] = ` -Array [ - Array [ - Object { - "hashOrIndex": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Block.GetTransactionCount 3`] = `Array []`; - -exports[`syscalls Neo.Block.GetTransactionCount 4`] = `Array []`; - -exports[`syscalls Neo.Block.GetTransactionCount 5`] = `Array []`; - -exports[`syscalls Neo.Block.GetTransactionCount 6`] = `Array []`; - -exports[`syscalls Neo.Block.GetTransactions 1`] = `"block.get"`; - -exports[`syscalls Neo.Block.GetTransactions 2`] = ` -Array [ - Array [ - Object { - "hashOrIndex": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Block.GetTransactions 3`] = `Array []`; - -exports[`syscalls Neo.Block.GetTransactions 4`] = `Array []`; - -exports[`syscalls Neo.Block.GetTransactions 5`] = `Array []`; - -exports[`syscalls Neo.Block.GetTransactions 6`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetAccount 1`] = `"account.tryGet"`; - -exports[`syscalls Neo.Blockchain.GetAccount 2`] = ` -Array [ - Array [ - Object { - "hash": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], -] -`; - -exports[`syscalls Neo.Blockchain.GetAccount 3`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetAccount 4`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetAccount 5`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetAccount 6`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetAccount 7`] = `"account.tryGet"`; - -exports[`syscalls Neo.Blockchain.GetAccount 8`] = ` -Array [ - Array [ - Object { - "hash": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], -] -`; - -exports[`syscalls Neo.Blockchain.GetAccount 9`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetAccount 10`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetAccount 11`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetAccount 12`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetAsset 1`] = `"asset.get"`; - -exports[`syscalls Neo.Blockchain.GetAsset 2`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Blockchain.GetAsset 3`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetAsset 4`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetAsset 5`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetAsset 6`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetBlock 1`] = `"block.get"`; - -exports[`syscalls Neo.Blockchain.GetBlock 2`] = ` -Array [ - Array [ - Object { - "hashOrIndex": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Blockchain.GetBlock 3`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetBlock 4`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetBlock 5`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetBlock 6`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetContract 1`] = `"contract.tryGet"`; - -exports[`syscalls Neo.Blockchain.GetContract 2`] = ` -Array [ - Array [ - Object { - "hash": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], -] -`; - -exports[`syscalls Neo.Blockchain.GetContract 3`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetContract 4`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetContract 5`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetContract 6`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetContract 7`] = `"contract.tryGet"`; - -exports[`syscalls Neo.Blockchain.GetContract 8`] = ` -Array [ - Array [ - Object { - "hash": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], -] -`; - -exports[`syscalls Neo.Blockchain.GetContract 9`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetContract 10`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetContract 11`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetContract 12`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetHeader 1`] = `"header.get"`; - -exports[`syscalls Neo.Blockchain.GetHeader 2`] = ` -Array [ - Array [ - Object { - "hashOrIndex": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Blockchain.GetHeader 3`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetHeader 4`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetHeader 5`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetHeader 6`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetHeight 1`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetHeight 2`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetHeight 3`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetHeight 4`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetTransaction 1`] = `"transaction.get"`; - -exports[`syscalls Neo.Blockchain.GetTransaction 2`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Blockchain.GetTransaction 3`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetTransaction 4`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetTransaction 5`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetTransaction 6`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetTransactionHeight 1`] = `"transactionData.get"`; - -exports[`syscalls Neo.Blockchain.GetTransactionHeight 2`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Blockchain.GetTransactionHeight 3`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetTransactionHeight 4`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetTransactionHeight 5`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetTransactionHeight 6`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetValidators 1`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetValidators 2`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetValidators 3`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetValidators 4`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetValidators 5`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetValidators 6`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetValidators 7`] = `Array []`; - -exports[`syscalls Neo.Blockchain.GetValidators 8`] = `Array []`; - -exports[`syscalls Neo.Contract.Create 1`] = `"contract.tryGet"`; - -exports[`syscalls Neo.Contract.Create 2`] = ` -Array [ - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], -] -`; - -exports[`syscalls Neo.Contract.Create 3`] = `"contract.add"`; - -exports[`syscalls Neo.Contract.Create 4`] = ` -Array [ - Array [ - Object { - "__$type": "Contract", - "author": "", - "codeVersion": "", - "contractProperties": 5, - "description": "", - "email": "", - "hasDynamicInvoke": false, - "hasStorage": true, - "name": "", - "parameterList": Array [ - 7, - 16, - ], - "payable": true, - "returnType": 255, - "script": "013dc56b6c766b00527ac46c766b51527ac46168164e656f2e52756e74696d652e47657454726967676572616c766b52527ac46159c66b0f4e617272617469766520546f6b656e6c766b00527ac4034e52566c766b51527ac4586c766b52527ac414f08ab37aa888a44a8abab51bb292727b093bb1df6c766b53527ac4056f776e65726c766b54527ac4096e65775f6f776e65726c766b55527ac40b73616c655f7061757365646c766b56527ac40e696e5f63697263756c6174696f6e6c766b57527ac4070080e03779c3116c766b58527ac46c6c766b53527ac46c766b52c36165883a9c6457026151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b54527ac46c766b54c36c766b53c354c37c6165a5396c766b55527ac46c766b55c3642c006c766b55c36168184e656f2e52756e74696d652e436865636b5769746e6573736164370051666232006c766b53c353c36168184e656f2e52756e74696d652e436865636b5769746e65737361640c0062030051616c75666165dc346c766b56527ac4610119c66b066b79635f6f6b6c766b00527ac4077072655f656e646c766b51527ac40272316c766b52527ac40500b864d9456c766b53527ac40500902f50096c766b54527ac40500205fa0126c766b55527ac4070040f09bbce1086c766b56527ac402ad0e6c766b57527ac4097075625f73746172746c766b58527ac40272326c766b59527ac40500ac23fc066c766b5a527ac40500add5c0076c766b5b527ac40272336c766b5c527ac40500e87648176c766b5d527ac40500db8b55076c766b5e527ac40500ac23fc066c766b5f527ac40410e1b35a6c766b60527ac403f01e026c766b0111527ac40700008d49fd1a076c766b0112527ac40b7465616d5f746f6b656e736c766b0113527ac40480ad2a5c6c766b0114527ac407008053ee7ba80a6c766b0115527ac40e636f6d70616e795f746f6b656e736c766b0116527ac40700608fc692a3226c766b0117527ac40c726577617264735f66756e646c766b0118527ac46c6c766b57527ac46203006c766b57c36c766b53c36c766b56c36c766b54c35154795179567275517275537952795572755272756165a31900a0616c75666c766b52c361651b389c648e056c766b00c3009e6484056100c66b6c6c766b58527ac461006c766b5d527ac46c766b58c361654b316c766b5e527ac46c766b58c361653b3161c06c766b5c527ac4616c766b5dc36c766b5cc39f6461006c766b5ec36c766b5dc3c36c766b59527ac46c766b5dc351936c766b5d527ac46c766b00c36c766b59c39c64c6ff6c766b58c36c766b00c36c766b51c36c766b53c3537951795572755172755279527954727552727561655a2d666296ff616c766b00c3066465706c6f799c6413006203006c766b53c36165ea09616c75666c766b00c30b63697263756c6174696f6e9c6447006151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b54527ac46203006c766b53c36c766b54c37c6165f430616c7566610119c66b066b79635f6f6b6c766b00527ac4077072655f656e646c766b51527ac40272316c766b52527ac40500b864d9456c766b53527ac40500902f50096c766b54527ac40500205fa0126c766b55527ac4070040f09bbce1086c766b56527ac402ad0e6c766b57527ac4097075625f73746172746c766b58527ac40272326c766b59527ac40500ac23fc066c766b5a527ac40500add5c0076c766b5b527ac40272336c766b5c527ac40500e87648176c766b5d527ac40500db8b55076c766b5e527ac40500ac23fc066c766b5f527ac40410e1b35a6c766b60527ac403f01e026c766b0111527ac40700008d49fd1a076c766b0112527ac40b7465616d5f746f6b656e736c766b0113527ac40480ad2a5c6c766b0114527ac407008053ee7ba80a6c766b0115527ac40e636f6d70616e795f746f6b656e736c766b0116527ac40700608fc692a3226c766b0117527ac40c726577617264735f66756e646c766b0118527ac46c6c766b5a527ac46c766b00c30a6d696e74546f6b656e739c6419006203006c766b5ac36c766b53c37c6165e017616c75666c766b00c31263726f776473616c655f72656769737465729c641f006203006c766b5ac36c766b51c36c766b53c352726165501b616c75666c766b00c31463726f776473616c655f646572656769737465729c641f006203006c766b5ac36c766b51c36c766b53c352726165c819616c75666c766b00c31063726f776473616c655f7374617475739c6419006203006c766b5ac36c766b51c37c61651f19616c75666c766b00c31363726f776473616c655f617661696c61626c659c6413006203006c766b53c36165172f616c75666c766b00c3147472616e736665725f7465616d5f746f6b656e739c641f006203006c766b5ac36c766b53c36c766b51c352726165610d616c75666c766b00c3177472616e736665725f636f6d70616e795f746f6b656e739c641f006203006c766b5ac36c766b53c36c766b51c352726165150a616c75666c766b00c3136d696e745f726577617264735f746f6b656e739c641f006203006c766b5ac36c766b53c36c766b51c3527261655107616c75666c766b00c30c6368616e67655f6f776e65729c6427006c766b51c300c36c766b5b527ac46203006c766b53c36c766b5bc37c61652805616c75666c766b00c30c6163636570745f6f776e65729c6413006203006c766b53c361658602616c75666c766b00c31363616e63656c5f6368616e67655f6f776e65729c6413006203006c766b53c361658903616c75666c766b00c30c656e645f7072655f73616c659c6419006203006c766b5ac36c766b53c37c61659f1c616c75666c766b00c31173746172745f7075626c69635f73616c659c6419006203006c766b5ac36c766b53c37c6165db1a616c75666c766b00c30a70617573655f73616c659c6413006203006c766b53c361651201616c75666c766b00c30b726573756d655f73616c659c6413006203006c766b53c361652800616c756662030011756e6b6e6f776e206f7065726174696f6e616c756662030000616c756658c56b6c766b00527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b51527ac46c766b51c36c766b00c354c37c6165a7316c766b52527ac46c766b52c36168184e656f2e52756e74696d652e436865636b5769746e65737361633b001c4d757374206265206f776e657220746f20726573756d652073616c6561680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b00c356c37c6165b1307562030051616c756658c56b6c766b00527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b51527ac46c766b51c36c766b00c354c37c6165e2306c766b52527ac46c766b52c36168184e656f2e52756e74696d652e436865636b5769746e65737361633a001b4d757374206265206f776e657220746f2070617573652073616c6561680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b00c356c3515272616527307562030051616c75665cc56b6c766b00527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b51527ac46c766b51c36c766b00c355c37c61651c306c766b52527ac46c766b52c36349002a4d7573742063616c6c206368616e67655f6f776e6572206265666f7265206163636570745f6f776e657261680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b52c36168184e656f2e52756e74696d652e436865636b5769746e65737361634000214d757374206265206e65775f6f776e657220746f20616363657074206f776e657261680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b00c354c36c766b52c352726165092f756c766b51c36c766b00c355c37c6165bb2e7562030051616c75665cc56b6c766b00527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b51527ac46c766b51c36c766b00c355c37c6165ec2e6c766b52527ac46c766b52c36362004343616e27742063616e63656c5f6368616e67655f6f776e657220756e6c65737320616e206f776e6572206368616e676520697320616c72656164792070656e64696e6761680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b00c354c37c61656d2e6c766b53527ac46c766b53c36168184e656f2e52756e74696d652e436865636b5769746e65737361634300244d757374206265206f776e657220746f2063616e63656c206368616e67655f6f776e657261680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b00c355c37c61656f2d7562030051616c75665cc56b6c766b00527ac46c766b51527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b52527ac46c766b52c36c766b00c354c37c6165992d6c766b53527ac46c766b53c3634000214d757374206465706c6f79206265666f7265206368616e67696e67206f776e657261680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b53c36168184e656f2e52756e74696d652e436865636b5769746e65737361633c001d4d757374206265206f776e657220746f206368616e6765206f776e657261680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b52c36c766b00c355c36c766b51c352726165932c7562030051616c756659c56b6c766b00527ac46c766b00c353c36168184e656f2e52756e74696d652e436865636b5769746e65737361634000204d757374206265206f726967696e616c5f6f776e657220746f206465706c6f7961680f4e656f2e52756e74696d652e4c6f676162030000616c75666151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b51527ac46c766b51c36c766b00c354c37c6165262c640b0062030000616c75666c766b51c36c766b00c354c36c766b00c353c352726165bc2b7562030051616c75660122c56b6c766b00527ac46c766b51527ac46c766b52527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b53527ac46c766b53c36c766b51c354c37c6165a22b6c766b54527ac46c766b54c36168184e656f2e52756e74696d652e436865636b5769746e65737361630b0062030000616c75666c766b52c361c0529e640b0062030000616c75666c766b52c300c36c766b55527ac46c766b52c351c36c766b56527ac46c766b55c361c001149e640b0062030000616c75666c766b56c300a1640c0062030000616c7566616542166c766b57527ac46c766b57c36c766b00c360c39f6449002a63616e2774206d696e745f726577617264735f746f6b656e73206265666f72652073616c6520656e647361680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b53c36c766b00c30118c37c6165a52a6c766b58527ac46c766b58c36c766b56c3936c766b58527ac46c766b58c36c766b00c30117c3a06445002663616e277420657863656564206d696e745f726577617264735f746f6b656e73206c696d697461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b53c36c766b00c30118c36c766b58c352726165db29756165bd256c766b59527ac46c766b59c353c36c766b5a527ac46c766b55c36c766b5b527ac46c766b53c36c766b5bc37c6165ec296c766b5c527ac46c766b56c36c766b5cc3936c766b5d527ac46c766b53c36c766b5bc36c766b5dc3527261657829756c766b51c36c766b56c36c766b53c3527261656624756c766b5ac36c766b5bc36c766b56c3527261087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667962030051616c75660128c56b6c766b00527ac46c766b51527ac46c766b52527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b53527ac46c766b53c36c766b51c354c37c616517296c766b54527ac46c766b54c36168184e656f2e52756e74696d652e436865636b5769746e65737361630b0062030000616c75666c766b52c361c0529e640b0062030000616c75666c766b52c300c36c766b55527ac46c766b52c351c36c766b56527ac46c766b55c361c001149e640b0062030000616c75666c766b56c300a1640c0062030000616c75666165b7136c766b57527ac4048033e1016c766b58527ac46c766b57c36c766b00c360c39f644d002e63616e2774207472616e736665725f636f6d70616e795f746f6b656e73206265666f72652073616c6520656e647361680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b57c36c766b00c360c36c766b58c3939f6419006c766b00c30115c355955a966c766b59527ac46242006c766b57c36c766b00c360c3526c766b58c395939f641b006c766b00c30115c3014b950164966c766b59527ac46212006c766b00c30115c36c766b59527ac46c766b53c36c766b00c30116c37c61659f276c766b5a527ac46c766b5ac36c766b56c3936c766b5a527ac46c766b5ac36c766b59c3a06451003263616e277420657863656564207472616e736665725f636f6d70616e795f746f6b656e732076657374696e67206c696d697461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b53c36c766b00c30116c36c766b5ac352726165cc26756165ae226c766b5b527ac46c766b5bc353c36c766b5c527ac46c766b55c36c766b5d527ac46c766b53c36c766b5dc37c6165dd266c766b5e527ac46c766b56c36c766b5ec3936c766b5f527ac46c766b53c36c766b5dc36c766b5fc3527261656926756c766b51c36c766b56c36c766b53c3527261655721756c766b5cc36c766b5dc36c766b56c3527261087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667962030051616c7566012ac56b6c766b00527ac46c766b51527ac46c766b52527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b53527ac46c766b53c36c766b51c354c37c616508266c766b54527ac46c766b54c36168184e656f2e52756e74696d652e436865636b5769746e65737361630b0062030000616c75666c766b52c361c0529e640b0062030000616c75666c766b52c300c36c766b55527ac46c766b52c351c36c766b56527ac46c766b55c361c001149e640b0062030000616c75666c766b56c300a1640c0062030000616c75666165a8106c766b57527ac46c766b57c36c766b00c30114c39f644d002e63616e2774207472616e736665725f7465616d5f746f6b656e73206265666f72652076657374696e67206461746561680f4e656f2e52756e74696d652e4c6f676162030000616c7566048033e1016c766b58527ac46c766b57c36c766b00c30114c36c766b58c3939f6419006c766b00c30112c353955a966c766b59527ac46270006c766b57c36c766b00c30114c3526c766b58c395939f6419006c766b00c30112c356955a966c766b59527ac46241006c766b57c36c766b00c30114c3536c766b58c395939f6419006c766b00c30112c358955a966c766b59527ac46212006c766b00c30112c36c766b59527ac46c766b53c36c766b00c30113c37c616560246c766b5a527ac46c766b5ac36c766b56c3936c766b5a527ac46c766b5ac36c766b59c3a0644e002f63616e277420657863656564207472616e736665725f7465616d5f746f6b656e732076657374696e67206c696d697461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b53c36c766b00c30113c36c766b5ac3527261659023756165721f6c766b5b527ac46c766b5bc353c36c766b5c527ac46c766b55c36c766b5d527ac46c766b53c36c766b5dc37c6165a1236c766b5e527ac46c766b56c36c766b5ec3936c766b5f527ac46c766b53c36c766b5dc36c766b5fc3527261652d23756c766b51c36c766b56c36c766b53c3527261651b1e756c766b5cc36c766b5dc36c766b56c3527261087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667962030051616c75665bc56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac46c766b55c36c766b53c37c6165e7226c766b56527ac46c766b54c36c766b56c3936c766b57527ac46c766b55c36c766b53c36c766b57c3527261657322756c766b51c36c766b54c36c766b55c352726165611d756203006c766b52c36c766b53c36c766b54c3527261087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667900616c75660137c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46168184e656f2e426c6f636b636861696e2e476574486569676874616c766b55527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b56527ac46c766b51c358c36c766b57527ac46c766b56c36c766b00c351c37c6165d3216c766b58527ac46c766b56c36c766b00c358c37c6165bb216c766b59527ac46c766b58c3638b006c766b52c36c766b00c355c39f64400021696e73756666696369656e742070726573616c6520636f6e747269627574696f6e61680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b00c356c36c766b57527ac46c766b00c352c36c766b5a527ac46c766b00c353c36c766b5b527ac46c766b00c354c36c766b5c527ac46232016c766b59c36342002370726573616c65206f7665722c206d61696e2073616c65206e6f74207374617274656461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b55c36c766b59c36c766b00c30111c393a0642e000f63726f776473616c6520656e64656461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b55c36c766b59c3526c766b00c357c39593a0642400006c766b5a527ac44f6c766b5b527ac46c766b00c35fc36c766b5c527ac46270006c766b55c36c766b59c36c766b00c357c393a06430006c766b00c35cc36c766b5a527ac46c766b00c35dc36c766b5b527ac46c766b00c35ec36c766b5c527ac4622d006c766b00c359c36c766b5a527ac46c766b00c35ac36c766b5b527ac46c766b00c35bc36c766b5c527ac46c766b52c30400e1f505966c766b5cc3956c766b5d527ac46c766b56c36c766b51c357c37c6165cc1f6c766b5e527ac46c766b5ec36c766b5dc3936c766b5f527ac46c766b5fc36c766b57c3a064450026707572636861736520776f756c642065786365656420746f6b656e2073616c65206c696d697461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b5bc300a1640f006203006c766b5dc3616c75666c766b52c36c766b5bc3a164bb006c766b5ac36c766b53c3617e6c766b60527ac46c766b56c36c766b60c37c61651d1f6c766b0111527ac46c766b0111c36c766b52c3936c766b0111527ac46c766b0111c36c766b5bc3a1642e006c766b54c3631a006c766b56c36c766b60c36c766b0111c3527261658e1e756203006c766b5dc3616c756624636f6e747269627574696f6e206c696d697420657863656564656420696e20726f756e6461680f4e656f2e52756e74696d652e4c6f676162030000616c75661a746f6f206d75636820666f72206c696d6974656420726f756e6461680f4e656f2e52756e74696d652e4c6f676162030000616c756658c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b51c361c001149c6432006c766b00c300c36c766b51c3617e6c766b53527ac46c766b52c36c766b53c37c6165081e640b0062030051616c756662030000616c756660c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b53c36c766b51c356c37c6165be1d640b0062030000616c75666c766b52c300c3009c642e000f6e6f206e656f20617474616368656461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b00c36c766b52c352c36c766b53c35272616517ff6c766b55527ac46c766b55c3632f00106e6f74204b594320617070726f76656461680f4e656f2e52756e74696d652e4c6f676162030000616c7566006c766b56527ac46c766b00c36c766b51c36c766b52c300c36c766b52c352c36c766b54c35479517956727551727553795279557275527275616587fa616c75665dc56b6c766b00527ac46c766b51527ac4616575186c766b52527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b53527ac46c766b00c36c766b51c36c766b52c36c766b53c3005479517956727551727553795279557275527275616581fe6c766b54527ac46c766b54c300a164d7001543616e6e6f742065786368616e67652076616c756561680f4e656f2e52756e74696d652e4c6f67616c766b52c300c300a06430006c766b52c352c36c766b52c300c37c6106726566756e6453c168124e656f2e52756e74696d652e4e6f7469667962030000616c75666c766b00c36165cff86c766b51c36c766b52c353c36c766b52c352c36c766b54c36c766b53c36c766b00c36c766b51c36c766b52c353c36c766b52c352c36c766b54c36c766b53c355795179577275517275547952795672755272755379537955727553727561656ef86c766b00c36c766b51c36c766b52c353c36c766b52c352c36c766b54c36c766b53c355795179577275517275547952795672755272755379537955727553727561652af8756c766b52c352c36c766b52c300c36c766b54c35272610c636f6e747269627574696f6e54c168124e656f2e52756e74696d652e4e6f7469667962030051616c756657c56b6c766b00527ac46c766b51527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b52527ac46c766b51c361c000a0642a006c766b51c300c36c766b53527ac46c766b00c36c766b53c36c766b52c3527261654dfc616c756662030000616c75665fc56b6c766b00527ac46c766b51527ac46c766b52527ac4006c766b53527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b54527ac46c766b54c36c766b52c354c37c6165311a6c766b55527ac46c766b55c36168184e656f2e52756e74696d652e436865636b5769746e6573736164bc0061006c766b59527ac46c766b51c361c06c766b58527ac4616c766b59c36c766b58c39f6495006c766b51c36c766b59c3c36c766b56527ac46c766b59c351936c766b59527ac46c766b56c361c001149c64c7ff6c766b00c300c36c766b56c3617e6c766b57527ac46c766b54c36c766b57c37c61650d19756c766b56c361126b79635f6465726567697374726174696f6e52c168124e656f2e52756e74696d652e4e6f746966796c766b53c351936c766b53527ac46262ff616203006c766b53c3616c75660117c56b6c766b00527ac46c766b51527ac46c766b52527ac4006c766b53527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b54527ac46c766b54c36c766b52c354c37c6165e2186c766b55527ac46c766b55c36168184e656f2e52756e74696d652e436865636b5769746e6573736164290161006c766b5e527ac46c766b51c361c06c766b5d527ac4616c766b5ec36c766b5dc39f6402016c766b51c36c766b5ec3c36c766b56527ac46c766b5ec351936c766b5e527ac46c766b56c361c06c766b57527ac46c766b57c3011497009e64060062b6ff6c766b57c30114966c766b58527ac4006c766b59527ac4616c766b59c36c766b58c39f649a006c766b59c30114956c766b5a527ac46c766b56c36c766b5ac30114617f6c766b5b527ac46c766b00c300c36c766b5bc3617e6c766b5c527ac46c766b54c36c766b5cc351527261659d17756c766b5bc361106b79635f726567697374726174696f6e52c168124e656f2e52756e74696d652e4e6f746966796c766b53c351936c766b53527ac46c766b59c351936c766b59527ac4625eff6162f5fe616203006c766b53c3616c75660111c56b6c766b00527ac46c766b51527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b52527ac46c766b52c36c766b51c354c37c616535176c766b53527ac46c766b53c36168184e656f2e52756e74696d652e436865636b5769746e65737361630b0062030000616c75666c766b52c36c766b00c351c37c6165f1166c766b54527ac46c766b54c36353003463616e277420737461727420746865207075626c69632073616c6520756e74696c207072652d73616c652068617320656e64656461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b52c36c766b00c358c37c616581166c766b55527ac46c766b55c36441002163616e277420737461727420746865207075626c69632073616c6520747769636561680f4e656f2e52756e74696d652e4c6f676162030000616c75666168184e656f2e426c6f636b636861696e2e476574486569676874616c766b56527ac46c766b52c36c766b00c358c36c766b56c352726165b5157562030051616c75665dc56b6c766b00527ac46c766b51527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b52527ac46c766b52c36c766b51c354c37c6165a3156c766b53527ac46c766b53c36168184e656f2e52756e74696d652e436865636b5769746e65737361630b0062030000616c75666c766b52c36c766b00c351c37c61655f156c766b54527ac46c766b54c3643c001c63616e277420656e6420746865207072652d73616c6520747769636561680f4e656f2e52756e74696d652e4c6f676162030000616c75666168184e656f2e426c6f636b636861696e2e476574486569676874616c766b55527ac46c766b52c36c766b00c351c36c766b55c35272616598147562030051616c756653c56b6168184e656f2e426c6f636b636861696e2e476574486569676874616c766b00527ac46c766b00c36168184e656f2e426c6f636b636861696e2e476574486561646572616c766b51527ac46203006c766b51c36168174e656f2e4865616465722e47657454696d657374616d7061616c756654c56b6c766b00527ac46c766b51527ac46c766b52527ac462030000616c756652c56b6c766b00527ac462030000616c756651c56b62030000616c756652c56b6c766b00527ac46203006c766b00c361681e4e656f2e436f6e74726163742e47657453746f72616765436f6e7465787461616c756652c56b6c766b00527ac462030000616c756659c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac46c766b56527ac46c766b57527ac462030000616c756659c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac46c766b56527ac46c766b57527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac46203006c766b00c36168134e656f2e41737365742e47657449737375657261616c756653c56b6c766b00527ac46c766b51527ac462030000616c756658c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac46c766b56527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac46203006c766b00c36168144e656f2e4163636f756e742e476574566f74657361616c756653c56b6c766b00527ac46c766b51527ac462030000616c756653c56b6c766b00527ac46c766b51527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac46203006c766b00c361681b4e656f2e4865616465722e4765744e657874436f6e73656e73757361616c756653c56b6c766b00527ac46c766b51527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac46203006c766b00c361681b4e656f2e4865616465722e4765744e657874436f6e73656e73757361616c756652c56b6c766b00527ac46203006c766b00c36168124e656f2e4865616465722e4765744861736861616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756659c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b52c36c766b53c3617e6c766b54527ac46c766b54c361c001289e640b0062030000616c75666c766b51c36c766b54c37c6165860f6c766b55527ac46203006c766b55c3616c75660116c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b52c36168184e656f2e52756e74696d652e436865636b5769746e6573736163330014496e636f7272656374207065726d697373696f6e61680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b54c3009f642e000f4e6567617469766520616d6f756e7461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b52c37c6165b40e6c766b55527ac46c766b55c36c766b54c3a26496006c766b52c36c766b53c3617e6c766b56527ac46c766b56c361c001289e640b0062030000616c75666c766b54c3009c6416006c766b51c36c766b56c37c6165dc0d756219006c766b51c36c766b56c36c766b54c352726165ff0d756c766b52c36c766b53c36c766b54c352726107617070726f766554c168124e656f2e52756e74696d652e4e6f7469667962030051616c756662030000616c75660120c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b54c300a1640b0062030000616c75666c766b52c36c766b53c3617e6c766b55527ac46c766b55c361c001289e640b0062030000616c75666c766b51c36c766b55c37c6165940d6c766b56527ac46c766b56c36c766b54c39f643a001b496e73756666696369656e742066756e647320617070726f76656461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b52c37c6165390d6c766b57527ac46c766b57c36c766b54c39f64420023496e73756666696369656e7420746f6b656e7320696e2066726f6d2062616c616e636561680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b53c37c6165d60c6c766b58527ac46c766b57c36c766b54c3946c766b59527ac46c766b58c36c766b54c3936c766b5a527ac46c766b51c36c766b53c36c766b5ac352726165500c756c766b51c36c766b52c36c766b59c3527261653a0c75117472616e7366657220636f6d706c65746561680f4e656f2e52756e74696d652e4c6f67616c766b56c36c766b54c3946c766b5b527ac46c766b5bc3009c643e001472656d6f76696e6720616c6c2062616c616e636561680f4e656f2e52756e74696d652e4c6f67616c766b51c36c766b55c37c6165850b75625000237570646174696e6720616c6c6f77616e636520746f206e657720616c6c6f77616e636561680f4e656f2e52756e74696d652e4c6f67616c766b51c36c766b55c36c766b5bc352726165710b756c766b52c36c766b53c36c766b54c3527261087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667962030051616c7566011cc56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b54c300a1640b0062030000616c75666c766b53c361c001149e640b0062030000616c75666c766b52c36168184e656f2e52756e74696d652e436865636b5769746e657373616450016c766b52c36c766b53c39c643000117472616e7366657220746f2073656c662161680f4e656f2e52756e74696d652e4c6f676162030051616c75666c766b51c36c766b52c37c6165c10a6c766b55527ac46c766b55c36c766b54c39f64310012696e73756666696369656e742066756e647361680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b55c36c766b54c39c6416006c766b51c36c766b52c37c6165df0975622b006c766b55c36c766b54c3946c766b56527ac46c766b51c36c766b52c36c766b56c352726165f009756c766b51c36c766b53c37c6165260a6c766b57527ac46c766b57c36c766b54c3936c766b58527ac46c766b51c36c766b53c36c766b58c352726165b209756c766b52c36c766b53c36c766b54c3527261087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667962030051616c75662166726f6d2061646472657373206973206e6f74207468652074782073656e64657261680f4e656f2e52756e74696d652e4c6f676162030000616c75660131c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b51c3046e616d659c6411006203006c766b53c300c3616c75666c766b51c308646563696d616c739c6411006203006c766b53c352c3616c75666c766b51c30673796d626f6c9c6412006203006c766b53c351c3616c75666151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b54527ac414496e636f727265637420417267204c656e6774686c766b55527ac46c766b51c30b746f74616c537570706c799c6419006203006c766b53c36c766b54c37c61652c03616c75666c766b51c30962616c616e63654f669c6454006c766b52c361c0519c643c006c766b52c300c36c766b56527ac46c766b56c361c001149e640b0062030000616c75666203006c766b54c36c766b56c37c61653f08616c75666203006c766b55c3616c75666c766b51c3087472616e736665729c647a006c766b52c361c0539c6462006c766b52c300c36c766b57527ac46c766b52c351c36c766b58527ac46c766b52c352c36c766b59527ac46c766b00c36c766b54c36c766b57c36c766b58c36c766b59c3547951795672755172755379527955727552727561653cfc616c75666203006c766b55c3616c75666c766b51c30c7472616e7366657246726f6d9c647a006c766b52c361c0539c6462006c766b52c300c36c766b57527ac46c766b52c351c36c766b58527ac46c766b52c352c36c766b59527ac46c766b00c36c766b54c36c766b57c36c766b58c36c766b59c35479517956727551727553795279557275527275616528f9616c75666203006c766b55c3616c75666c766b51c307617070726f76659c647a006c766b52c361c0539c6462006c766b52c300c36c766b5a527ac46c766b52c351c36c766b5b527ac46c766b52c352c36c766b59527ac46c766b00c36c766b54c36c766b5ac36c766b5bc36c766b59c35479517956727551727553795279557275527275616531f7616c75666203006c766b55c3616c75666c766b51c309616c6c6f77616e63659c6467006c766b52c361c0529c644f006c766b52c300c36c766b5a527ac46c766b52c351c36c766b5b527ac46c766b00c36c766b54c36c766b5ac36c766b5bc35379517955727551727552795279547275527275616551f6616c75666203006c766b55c3616c756662030000616c756653c56b6c766b00527ac409616c6c6f77616e636507617070726f76650c7472616e7366657246726f6d087472616e736665720962616c616e63654f660b746f74616c537570706c7908646563696d616c730673796d626f6c046e616d6559c16c766b51527ac46203006c766b51c3616c756653c56b6c766b00527ac46c766b51527ac462030000616c756653c56b6c766b00527ac46c766b51527ac462030000616c756653c56b6c766b00527ac46c766b51527ac46203006c766b51c36c766b00c357c37c61654905616c756656c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b52c36c766b00c357c37c61651c056c766b53527ac46c766b53c36c766b51c3936c766b53527ac46203006c766b52c36c766b00c357c36c766b53c352726165a3047500616c756657c56b6c766b00527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b51527ac46c766b51c36c766b00c357c37c61659b046c766b52527ac46c766b00c358c36c766b52c3946c766b53527ac46c766b53c3009f640b0062030000616c75666203006c766b53c3616c75660112c56b6156c66b006c766b00527ac4006c766b51527ac4006c766b52527ac4006c766b53527ac4209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc56c766b54527ac420e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c606c766b55527ac46c6c766b00527ac461682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e6572616c766b51527ac46c766b51c361681d4e656f2e5472616e73616374696f6e2e4765745265666572656e636573616c766b52527ac461682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e6753637269707448617368616c766b00c3537bc46c766b52c361c000a064f2016c766b52c300c36c766b53527ac46c766b53c36168184e656f2e4f75747075742e47657453637269707448617368616c766b00c3527bc4006c766b54527ac4006c766b55527ac461006c766b58527ac46c766b51c361681a4e656f2e5472616e73616374696f6e2e4765744f757470757473616c766b59527ac46c766b51c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736161c06c766b57527ac4616c766b58c36c766b57c39f6422016c766b59c36c766b58c3c36c766b56527ac46c766b58c351936c766b58527ac46c766b56c36168184e656f2e4f75747075742e47657453637269707448617368616c766b00c353c39c6455006c766b56c36168154e656f2e4f75747075742e47657441737365744964616c766b00c354c39c642c006c766b54c36c766b56c36168134e656f2e4f75747075742e47657456616c756561936c766b54527ac46c766b56c36168184e656f2e4f75747075742e47657453637269707448617368616c766b00c353c39c642aff6c766b56c36168154e656f2e4f75747075742e47657441737365744964616c766b00c355c39c6401ff6c766b55c36c766b56c36168134e656f2e4f75747075742e47657456616c756561936c766b55527ac462d5fe616c766b54c36c766b00c3007bc46c766b55c36c766b00c3517bc46203006c766b00c3616c756652c56b6c766b00527ac46203006c766b00c36168184e656f2e4f75747075742e4765745363726970744861736861616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac46203006c766b00c361659fef616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756651c56b62030000616c756651c56b62030000616c756653c56b6c766b00527ac46c766b51527ac46203006c766b00c300c36c766b51c37c6168124e656f2e53746f726167652e44656c6574656100616c756654c56b6c766b00527ac46c766b51527ac46c766b52527ac46203006c766b00c300c36c766b51c36c766b52c3527261680f4e656f2e53746f726167652e5075746100616c756653c56b6c766b00527ac46c766b51527ac46203006c766b00c300c36c766b51c37c61680f4e656f2e53746f726167652e47657461616c756653c56b6c766b00527ac46c766b51527ac462030000616c756654c56b6c766b00527ac46c766b51527ac46c766b52527ac462030000616c756653c56b6c766b00527ac46c766b51527ac462030000616c756651c56b62030000616c756651c56b6203000110616c756651c56b6203000100616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756651c56b62030000616c7566", - "version": 0, - }, - ], -] -`; - -exports[`syscalls Neo.Contract.Create 5`] = `Array []`; - -exports[`syscalls Neo.Contract.Create 6`] = `Array []`; - -exports[`syscalls Neo.Contract.Create 7`] = `Array []`; - -exports[`syscalls Neo.Contract.Create 8`] = `Array []`; - -exports[`syscalls Neo.Contract.Destroy 1`] = `"contract.tryGet"`; - -exports[`syscalls Neo.Contract.Destroy 2`] = ` -Array [ - Array [ - Object { - "hash": "58f605b81e912a39237b77a71bba994902106bc2", - }, - ], -] -`; - -exports[`syscalls Neo.Contract.Destroy 3`] = `Array []`; - -exports[`syscalls Neo.Contract.Destroy 4`] = `Array []`; - -exports[`syscalls Neo.Contract.Destroy 5`] = `Array []`; - -exports[`syscalls Neo.Contract.Destroy 6`] = `Array []`; - -exports[`syscalls Neo.Contract.GetScript 1`] = `"contract.tryGet"`; - -exports[`syscalls Neo.Contract.GetScript 2`] = ` -Array [ - Array [ - Object { - "hash": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], -] -`; - -exports[`syscalls Neo.Contract.GetScript 3`] = `Array []`; - -exports[`syscalls Neo.Contract.GetScript 4`] = `Array []`; - -exports[`syscalls Neo.Contract.GetScript 5`] = `Array []`; - -exports[`syscalls Neo.Contract.GetScript 6`] = `Array []`; - -exports[`syscalls Neo.Contract.GetStorageContext 1`] = `Array []`; - -exports[`syscalls Neo.Contract.GetStorageContext 2`] = `Array []`; - -exports[`syscalls Neo.Contract.GetStorageContext 3`] = `Array []`; - -exports[`syscalls Neo.Contract.GetStorageContext 4`] = `Array []`; - -exports[`syscalls Neo.Contract.IsPayable 1`] = `"contract.tryGet"`; - -exports[`syscalls Neo.Contract.IsPayable 2`] = ` -Array [ - Array [ - Object { - "hash": "3775292229eccdf904f16fff8e83e7cffdc0f0ce", - }, - ], -] -`; - -exports[`syscalls Neo.Contract.IsPayable 3`] = `Array []`; - -exports[`syscalls Neo.Contract.IsPayable 4`] = `Array []`; - -exports[`syscalls Neo.Contract.IsPayable 5`] = `Array []`; - -exports[`syscalls Neo.Contract.IsPayable 6`] = `Array []`; - -exports[`syscalls Neo.Contract.Migrate 1`] = `"contract.tryGet"`; - -exports[`syscalls Neo.Contract.Migrate 2`] = ` -Array [ - Array [ - Object { - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], - Array [ - Object { - "hash": "316d480e6a8ce9c46b88bd99962e3bfb8693a132", - }, - ], -] -`; - -exports[`syscalls Neo.Contract.Migrate 3`] = `"contract.add"`; - -exports[`syscalls Neo.Contract.Migrate 4`] = ` -Array [ - Array [ - Object { - "__$type": "Contract", - "author": "", - "codeVersion": "", - "contractProperties": 5, - "description": "", - "email": "", - "hasDynamicInvoke": false, - "hasStorage": true, - "name": "", - "parameterList": Array [ - 7, - 16, - ], - "payable": true, - "returnType": 255, - "script": "013dc56b6c766b00527ac46c766b51527ac46168164e656f2e52756e74696d652e47657454726967676572616c766b52527ac46159c66b0f4e617272617469766520546f6b656e6c766b00527ac4034e52566c766b51527ac4586c766b52527ac414f08ab37aa888a44a8abab51bb292727b093bb1df6c766b53527ac4056f776e65726c766b54527ac4096e65775f6f776e65726c766b55527ac40b73616c655f7061757365646c766b56527ac40e696e5f63697263756c6174696f6e6c766b57527ac4070080e03779c3116c766b58527ac46c6c766b53527ac46c766b52c36165883a9c6457026151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b54527ac46c766b54c36c766b53c354c37c6165a5396c766b55527ac46c766b55c3642c006c766b55c36168184e656f2e52756e74696d652e436865636b5769746e6573736164370051666232006c766b53c353c36168184e656f2e52756e74696d652e436865636b5769746e65737361640c0062030051616c75666165dc346c766b56527ac4610119c66b066b79635f6f6b6c766b00527ac4077072655f656e646c766b51527ac40272316c766b52527ac40500b864d9456c766b53527ac40500902f50096c766b54527ac40500205fa0126c766b55527ac4070040f09bbce1086c766b56527ac402ad0e6c766b57527ac4097075625f73746172746c766b58527ac40272326c766b59527ac40500ac23fc066c766b5a527ac40500add5c0076c766b5b527ac40272336c766b5c527ac40500e87648176c766b5d527ac40500db8b55076c766b5e527ac40500ac23fc066c766b5f527ac40410e1b35a6c766b60527ac403f01e026c766b0111527ac40700008d49fd1a076c766b0112527ac40b7465616d5f746f6b656e736c766b0113527ac40480ad2a5c6c766b0114527ac407008053ee7ba80a6c766b0115527ac40e636f6d70616e795f746f6b656e736c766b0116527ac40700608fc692a3226c766b0117527ac40c726577617264735f66756e646c766b0118527ac46c6c766b57527ac46203006c766b57c36c766b53c36c766b56c36c766b54c35154795179567275517275537952795572755272756165a31900a0616c75666c766b52c361651b389c648e056c766b00c3009e6484056100c66b6c6c766b58527ac461006c766b5d527ac46c766b58c361654b316c766b5e527ac46c766b58c361653b3161c06c766b5c527ac4616c766b5dc36c766b5cc39f6461006c766b5ec36c766b5dc3c36c766b59527ac46c766b5dc351936c766b5d527ac46c766b00c36c766b59c39c64c6ff6c766b58c36c766b00c36c766b51c36c766b53c3537951795572755172755279527954727552727561655a2d666296ff616c766b00c3066465706c6f799c6413006203006c766b53c36165ea09616c75666c766b00c30b63697263756c6174696f6e9c6447006151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b54527ac46203006c766b53c36c766b54c37c6165f430616c7566610119c66b066b79635f6f6b6c766b00527ac4077072655f656e646c766b51527ac40272316c766b52527ac40500b864d9456c766b53527ac40500902f50096c766b54527ac40500205fa0126c766b55527ac4070040f09bbce1086c766b56527ac402ad0e6c766b57527ac4097075625f73746172746c766b58527ac40272326c766b59527ac40500ac23fc066c766b5a527ac40500add5c0076c766b5b527ac40272336c766b5c527ac40500e87648176c766b5d527ac40500db8b55076c766b5e527ac40500ac23fc066c766b5f527ac40410e1b35a6c766b60527ac403f01e026c766b0111527ac40700008d49fd1a076c766b0112527ac40b7465616d5f746f6b656e736c766b0113527ac40480ad2a5c6c766b0114527ac407008053ee7ba80a6c766b0115527ac40e636f6d70616e795f746f6b656e736c766b0116527ac40700608fc692a3226c766b0117527ac40c726577617264735f66756e646c766b0118527ac46c6c766b5a527ac46c766b00c30a6d696e74546f6b656e739c6419006203006c766b5ac36c766b53c37c6165e017616c75666c766b00c31263726f776473616c655f72656769737465729c641f006203006c766b5ac36c766b51c36c766b53c352726165501b616c75666c766b00c31463726f776473616c655f646572656769737465729c641f006203006c766b5ac36c766b51c36c766b53c352726165c819616c75666c766b00c31063726f776473616c655f7374617475739c6419006203006c766b5ac36c766b51c37c61651f19616c75666c766b00c31363726f776473616c655f617661696c61626c659c6413006203006c766b53c36165172f616c75666c766b00c3147472616e736665725f7465616d5f746f6b656e739c641f006203006c766b5ac36c766b53c36c766b51c352726165610d616c75666c766b00c3177472616e736665725f636f6d70616e795f746f6b656e739c641f006203006c766b5ac36c766b53c36c766b51c352726165150a616c75666c766b00c3136d696e745f726577617264735f746f6b656e739c641f006203006c766b5ac36c766b53c36c766b51c3527261655107616c75666c766b00c30c6368616e67655f6f776e65729c6427006c766b51c300c36c766b5b527ac46203006c766b53c36c766b5bc37c61652805616c75666c766b00c30c6163636570745f6f776e65729c6413006203006c766b53c361658602616c75666c766b00c31363616e63656c5f6368616e67655f6f776e65729c6413006203006c766b53c361658903616c75666c766b00c30c656e645f7072655f73616c659c6419006203006c766b5ac36c766b53c37c61659f1c616c75666c766b00c31173746172745f7075626c69635f73616c659c6419006203006c766b5ac36c766b53c37c6165db1a616c75666c766b00c30a70617573655f73616c659c6413006203006c766b53c361651201616c75666c766b00c30b726573756d655f73616c659c6413006203006c766b53c361652800616c756662030011756e6b6e6f776e206f7065726174696f6e616c756662030000616c756658c56b6c766b00527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b51527ac46c766b51c36c766b00c354c37c6165a7316c766b52527ac46c766b52c36168184e656f2e52756e74696d652e436865636b5769746e65737361633b001c4d757374206265206f776e657220746f20726573756d652073616c6561680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b00c356c37c6165b1307562030051616c756658c56b6c766b00527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b51527ac46c766b51c36c766b00c354c37c6165e2306c766b52527ac46c766b52c36168184e656f2e52756e74696d652e436865636b5769746e65737361633a001b4d757374206265206f776e657220746f2070617573652073616c6561680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b00c356c3515272616527307562030051616c75665cc56b6c766b00527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b51527ac46c766b51c36c766b00c355c37c61651c306c766b52527ac46c766b52c36349002a4d7573742063616c6c206368616e67655f6f776e6572206265666f7265206163636570745f6f776e657261680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b52c36168184e656f2e52756e74696d652e436865636b5769746e65737361634000214d757374206265206e65775f6f776e657220746f20616363657074206f776e657261680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b00c354c36c766b52c352726165092f756c766b51c36c766b00c355c37c6165bb2e7562030051616c75665cc56b6c766b00527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b51527ac46c766b51c36c766b00c355c37c6165ec2e6c766b52527ac46c766b52c36362004343616e27742063616e63656c5f6368616e67655f6f776e657220756e6c65737320616e206f776e6572206368616e676520697320616c72656164792070656e64696e6761680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b00c354c37c61656d2e6c766b53527ac46c766b53c36168184e656f2e52756e74696d652e436865636b5769746e65737361634300244d757374206265206f776e657220746f2063616e63656c206368616e67655f6f776e657261680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b00c355c37c61656f2d7562030051616c75665cc56b6c766b00527ac46c766b51527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b52527ac46c766b52c36c766b00c354c37c6165992d6c766b53527ac46c766b53c3634000214d757374206465706c6f79206265666f7265206368616e67696e67206f776e657261680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b53c36168184e656f2e52756e74696d652e436865636b5769746e65737361633c001d4d757374206265206f776e657220746f206368616e6765206f776e657261680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b52c36c766b00c355c36c766b51c352726165932c7562030051616c756659c56b6c766b00527ac46c766b00c353c36168184e656f2e52756e74696d652e436865636b5769746e65737361634000204d757374206265206f726967696e616c5f6f776e657220746f206465706c6f7961680f4e656f2e52756e74696d652e4c6f676162030000616c75666151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b51527ac46c766b51c36c766b00c354c37c6165262c640b0062030000616c75666c766b51c36c766b00c354c36c766b00c353c352726165bc2b7562030051616c75660122c56b6c766b00527ac46c766b51527ac46c766b52527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b53527ac46c766b53c36c766b51c354c37c6165a22b6c766b54527ac46c766b54c36168184e656f2e52756e74696d652e436865636b5769746e65737361630b0062030000616c75666c766b52c361c0529e640b0062030000616c75666c766b52c300c36c766b55527ac46c766b52c351c36c766b56527ac46c766b55c361c001149e640b0062030000616c75666c766b56c300a1640c0062030000616c7566616542166c766b57527ac46c766b57c36c766b00c360c39f6449002a63616e2774206d696e745f726577617264735f746f6b656e73206265666f72652073616c6520656e647361680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b53c36c766b00c30118c37c6165a52a6c766b58527ac46c766b58c36c766b56c3936c766b58527ac46c766b58c36c766b00c30117c3a06445002663616e277420657863656564206d696e745f726577617264735f746f6b656e73206c696d697461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b53c36c766b00c30118c36c766b58c352726165db29756165bd256c766b59527ac46c766b59c353c36c766b5a527ac46c766b55c36c766b5b527ac46c766b53c36c766b5bc37c6165ec296c766b5c527ac46c766b56c36c766b5cc3936c766b5d527ac46c766b53c36c766b5bc36c766b5dc3527261657829756c766b51c36c766b56c36c766b53c3527261656624756c766b5ac36c766b5bc36c766b56c3527261087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667962030051616c75660128c56b6c766b00527ac46c766b51527ac46c766b52527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b53527ac46c766b53c36c766b51c354c37c616517296c766b54527ac46c766b54c36168184e656f2e52756e74696d652e436865636b5769746e65737361630b0062030000616c75666c766b52c361c0529e640b0062030000616c75666c766b52c300c36c766b55527ac46c766b52c351c36c766b56527ac46c766b55c361c001149e640b0062030000616c75666c766b56c300a1640c0062030000616c75666165b7136c766b57527ac4048033e1016c766b58527ac46c766b57c36c766b00c360c39f644d002e63616e2774207472616e736665725f636f6d70616e795f746f6b656e73206265666f72652073616c6520656e647361680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b57c36c766b00c360c36c766b58c3939f6419006c766b00c30115c355955a966c766b59527ac46242006c766b57c36c766b00c360c3526c766b58c395939f641b006c766b00c30115c3014b950164966c766b59527ac46212006c766b00c30115c36c766b59527ac46c766b53c36c766b00c30116c37c61659f276c766b5a527ac46c766b5ac36c766b56c3936c766b5a527ac46c766b5ac36c766b59c3a06451003263616e277420657863656564207472616e736665725f636f6d70616e795f746f6b656e732076657374696e67206c696d697461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b53c36c766b00c30116c36c766b5ac352726165cc26756165ae226c766b5b527ac46c766b5bc353c36c766b5c527ac46c766b55c36c766b5d527ac46c766b53c36c766b5dc37c6165dd266c766b5e527ac46c766b56c36c766b5ec3936c766b5f527ac46c766b53c36c766b5dc36c766b5fc3527261656926756c766b51c36c766b56c36c766b53c3527261655721756c766b5cc36c766b5dc36c766b56c3527261087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667962030051616c7566012ac56b6c766b00527ac46c766b51527ac46c766b52527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b53527ac46c766b53c36c766b51c354c37c616508266c766b54527ac46c766b54c36168184e656f2e52756e74696d652e436865636b5769746e65737361630b0062030000616c75666c766b52c361c0529e640b0062030000616c75666c766b52c300c36c766b55527ac46c766b52c351c36c766b56527ac46c766b55c361c001149e640b0062030000616c75666c766b56c300a1640c0062030000616c75666165a8106c766b57527ac46c766b57c36c766b00c30114c39f644d002e63616e2774207472616e736665725f7465616d5f746f6b656e73206265666f72652076657374696e67206461746561680f4e656f2e52756e74696d652e4c6f676162030000616c7566048033e1016c766b58527ac46c766b57c36c766b00c30114c36c766b58c3939f6419006c766b00c30112c353955a966c766b59527ac46270006c766b57c36c766b00c30114c3526c766b58c395939f6419006c766b00c30112c356955a966c766b59527ac46241006c766b57c36c766b00c30114c3536c766b58c395939f6419006c766b00c30112c358955a966c766b59527ac46212006c766b00c30112c36c766b59527ac46c766b53c36c766b00c30113c37c616560246c766b5a527ac46c766b5ac36c766b56c3936c766b5a527ac46c766b5ac36c766b59c3a0644e002f63616e277420657863656564207472616e736665725f7465616d5f746f6b656e732076657374696e67206c696d697461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b53c36c766b00c30113c36c766b5ac3527261659023756165721f6c766b5b527ac46c766b5bc353c36c766b5c527ac46c766b55c36c766b5d527ac46c766b53c36c766b5dc37c6165a1236c766b5e527ac46c766b56c36c766b5ec3936c766b5f527ac46c766b53c36c766b5dc36c766b5fc3527261652d23756c766b51c36c766b56c36c766b53c3527261651b1e756c766b5cc36c766b5dc36c766b56c3527261087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667962030051616c75665bc56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac46c766b55c36c766b53c37c6165e7226c766b56527ac46c766b54c36c766b56c3936c766b57527ac46c766b55c36c766b53c36c766b57c3527261657322756c766b51c36c766b54c36c766b55c352726165611d756203006c766b52c36c766b53c36c766b54c3527261087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667900616c75660137c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46168184e656f2e426c6f636b636861696e2e476574486569676874616c766b55527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b56527ac46c766b51c358c36c766b57527ac46c766b56c36c766b00c351c37c6165d3216c766b58527ac46c766b56c36c766b00c358c37c6165bb216c766b59527ac46c766b58c3638b006c766b52c36c766b00c355c39f64400021696e73756666696369656e742070726573616c6520636f6e747269627574696f6e61680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b00c356c36c766b57527ac46c766b00c352c36c766b5a527ac46c766b00c353c36c766b5b527ac46c766b00c354c36c766b5c527ac46232016c766b59c36342002370726573616c65206f7665722c206d61696e2073616c65206e6f74207374617274656461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b55c36c766b59c36c766b00c30111c393a0642e000f63726f776473616c6520656e64656461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b55c36c766b59c3526c766b00c357c39593a0642400006c766b5a527ac44f6c766b5b527ac46c766b00c35fc36c766b5c527ac46270006c766b55c36c766b59c36c766b00c357c393a06430006c766b00c35cc36c766b5a527ac46c766b00c35dc36c766b5b527ac46c766b00c35ec36c766b5c527ac4622d006c766b00c359c36c766b5a527ac46c766b00c35ac36c766b5b527ac46c766b00c35bc36c766b5c527ac46c766b52c30400e1f505966c766b5cc3956c766b5d527ac46c766b56c36c766b51c357c37c6165cc1f6c766b5e527ac46c766b5ec36c766b5dc3936c766b5f527ac46c766b5fc36c766b57c3a064450026707572636861736520776f756c642065786365656420746f6b656e2073616c65206c696d697461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b5bc300a1640f006203006c766b5dc3616c75666c766b52c36c766b5bc3a164bb006c766b5ac36c766b53c3617e6c766b60527ac46c766b56c36c766b60c37c61651d1f6c766b0111527ac46c766b0111c36c766b52c3936c766b0111527ac46c766b0111c36c766b5bc3a1642e006c766b54c3631a006c766b56c36c766b60c36c766b0111c3527261658e1e756203006c766b5dc3616c756624636f6e747269627574696f6e206c696d697420657863656564656420696e20726f756e6461680f4e656f2e52756e74696d652e4c6f676162030000616c75661a746f6f206d75636820666f72206c696d6974656420726f756e6461680f4e656f2e52756e74696d652e4c6f676162030000616c756658c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b51c361c001149c6432006c766b00c300c36c766b51c3617e6c766b53527ac46c766b52c36c766b53c37c6165081e640b0062030051616c756662030000616c756660c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b53c36c766b51c356c37c6165be1d640b0062030000616c75666c766b52c300c3009c642e000f6e6f206e656f20617474616368656461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b00c36c766b52c352c36c766b53c35272616517ff6c766b55527ac46c766b55c3632f00106e6f74204b594320617070726f76656461680f4e656f2e52756e74696d652e4c6f676162030000616c7566006c766b56527ac46c766b00c36c766b51c36c766b52c300c36c766b52c352c36c766b54c35479517956727551727553795279557275527275616587fa616c75665dc56b6c766b00527ac46c766b51527ac4616575186c766b52527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b53527ac46c766b00c36c766b51c36c766b52c36c766b53c3005479517956727551727553795279557275527275616581fe6c766b54527ac46c766b54c300a164d7001543616e6e6f742065786368616e67652076616c756561680f4e656f2e52756e74696d652e4c6f67616c766b52c300c300a06430006c766b52c352c36c766b52c300c37c6106726566756e6453c168124e656f2e52756e74696d652e4e6f7469667962030000616c75666c766b00c36165cff86c766b51c36c766b52c353c36c766b52c352c36c766b54c36c766b53c36c766b00c36c766b51c36c766b52c353c36c766b52c352c36c766b54c36c766b53c355795179577275517275547952795672755272755379537955727553727561656ef86c766b00c36c766b51c36c766b52c353c36c766b52c352c36c766b54c36c766b53c355795179577275517275547952795672755272755379537955727553727561652af8756c766b52c352c36c766b52c300c36c766b54c35272610c636f6e747269627574696f6e54c168124e656f2e52756e74696d652e4e6f7469667962030051616c756657c56b6c766b00527ac46c766b51527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b52527ac46c766b51c361c000a0642a006c766b51c300c36c766b53527ac46c766b00c36c766b53c36c766b52c3527261654dfc616c756662030000616c75665fc56b6c766b00527ac46c766b51527ac46c766b52527ac4006c766b53527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b54527ac46c766b54c36c766b52c354c37c6165311a6c766b55527ac46c766b55c36168184e656f2e52756e74696d652e436865636b5769746e6573736164bc0061006c766b59527ac46c766b51c361c06c766b58527ac4616c766b59c36c766b58c39f6495006c766b51c36c766b59c3c36c766b56527ac46c766b59c351936c766b59527ac46c766b56c361c001149c64c7ff6c766b00c300c36c766b56c3617e6c766b57527ac46c766b54c36c766b57c37c61650d19756c766b56c361126b79635f6465726567697374726174696f6e52c168124e656f2e52756e74696d652e4e6f746966796c766b53c351936c766b53527ac46262ff616203006c766b53c3616c75660117c56b6c766b00527ac46c766b51527ac46c766b52527ac4006c766b53527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b54527ac46c766b54c36c766b52c354c37c6165e2186c766b55527ac46c766b55c36168184e656f2e52756e74696d652e436865636b5769746e6573736164290161006c766b5e527ac46c766b51c361c06c766b5d527ac4616c766b5ec36c766b5dc39f6402016c766b51c36c766b5ec3c36c766b56527ac46c766b5ec351936c766b5e527ac46c766b56c361c06c766b57527ac46c766b57c3011497009e64060062b6ff6c766b57c30114966c766b58527ac4006c766b59527ac4616c766b59c36c766b58c39f649a006c766b59c30114956c766b5a527ac46c766b56c36c766b5ac30114617f6c766b5b527ac46c766b00c300c36c766b5bc3617e6c766b5c527ac46c766b54c36c766b5cc351527261659d17756c766b5bc361106b79635f726567697374726174696f6e52c168124e656f2e52756e74696d652e4e6f746966796c766b53c351936c766b53527ac46c766b59c351936c766b59527ac4625eff6162f5fe616203006c766b53c3616c75660111c56b6c766b00527ac46c766b51527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b52527ac46c766b52c36c766b51c354c37c616535176c766b53527ac46c766b53c36168184e656f2e52756e74696d652e436865636b5769746e65737361630b0062030000616c75666c766b52c36c766b00c351c37c6165f1166c766b54527ac46c766b54c36353003463616e277420737461727420746865207075626c69632073616c6520756e74696c207072652d73616c652068617320656e64656461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b52c36c766b00c358c37c616581166c766b55527ac46c766b55c36441002163616e277420737461727420746865207075626c69632073616c6520747769636561680f4e656f2e52756e74696d652e4c6f676162030000616c75666168184e656f2e426c6f636b636861696e2e476574486569676874616c766b56527ac46c766b52c36c766b00c358c36c766b56c352726165b5157562030051616c75665dc56b6c766b00527ac46c766b51527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b52527ac46c766b52c36c766b51c354c37c6165a3156c766b53527ac46c766b53c36168184e656f2e52756e74696d652e436865636b5769746e65737361630b0062030000616c75666c766b52c36c766b00c351c37c61655f156c766b54527ac46c766b54c3643c001c63616e277420656e6420746865207072652d73616c6520747769636561680f4e656f2e52756e74696d652e4c6f676162030000616c75666168184e656f2e426c6f636b636861696e2e476574486569676874616c766b55527ac46c766b52c36c766b00c351c36c766b55c35272616598147562030051616c756653c56b6168184e656f2e426c6f636b636861696e2e476574486569676874616c766b00527ac46c766b00c36168184e656f2e426c6f636b636861696e2e476574486561646572616c766b51527ac46203006c766b51c36168174e656f2e4865616465722e47657454696d657374616d7061616c756654c56b6c766b00527ac46c766b51527ac46c766b52527ac462030000616c756652c56b6c766b00527ac462030000616c756651c56b62030000616c756652c56b6c766b00527ac46203006c766b00c361681e4e656f2e436f6e74726163742e47657453746f72616765436f6e7465787461616c756652c56b6c766b00527ac462030000616c756659c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac46c766b56527ac46c766b57527ac462030000616c756659c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac46c766b56527ac46c766b57527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac46203006c766b00c36168134e656f2e41737365742e47657449737375657261616c756653c56b6c766b00527ac46c766b51527ac462030000616c756658c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b55527ac46c766b56527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac46203006c766b00c36168144e656f2e4163636f756e742e476574566f74657361616c756653c56b6c766b00527ac46c766b51527ac462030000616c756653c56b6c766b00527ac46c766b51527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac46203006c766b00c361681b4e656f2e4865616465722e4765744e657874436f6e73656e73757361616c756653c56b6c766b00527ac46c766b51527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac46203006c766b00c361681b4e656f2e4865616465722e4765744e657874436f6e73656e73757361616c756652c56b6c766b00527ac46203006c766b00c36168124e656f2e4865616465722e4765744861736861616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756659c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b52c36c766b53c3617e6c766b54527ac46c766b54c361c001289e640b0062030000616c75666c766b51c36c766b54c37c6165860f6c766b55527ac46203006c766b55c3616c75660116c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b52c36168184e656f2e52756e74696d652e436865636b5769746e6573736163330014496e636f7272656374207065726d697373696f6e61680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b54c3009f642e000f4e6567617469766520616d6f756e7461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b52c37c6165b40e6c766b55527ac46c766b55c36c766b54c3a26496006c766b52c36c766b53c3617e6c766b56527ac46c766b56c361c001289e640b0062030000616c75666c766b54c3009c6416006c766b51c36c766b56c37c6165dc0d756219006c766b51c36c766b56c36c766b54c352726165ff0d756c766b52c36c766b53c36c766b54c352726107617070726f766554c168124e656f2e52756e74696d652e4e6f7469667962030051616c756662030000616c75660120c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b54c300a1640b0062030000616c75666c766b52c36c766b53c3617e6c766b55527ac46c766b55c361c001289e640b0062030000616c75666c766b51c36c766b55c37c6165940d6c766b56527ac46c766b56c36c766b54c39f643a001b496e73756666696369656e742066756e647320617070726f76656461680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b52c37c6165390d6c766b57527ac46c766b57c36c766b54c39f64420023496e73756666696369656e7420746f6b656e7320696e2066726f6d2062616c616e636561680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b51c36c766b53c37c6165d60c6c766b58527ac46c766b57c36c766b54c3946c766b59527ac46c766b58c36c766b54c3936c766b5a527ac46c766b51c36c766b53c36c766b5ac352726165500c756c766b51c36c766b52c36c766b59c3527261653a0c75117472616e7366657220636f6d706c65746561680f4e656f2e52756e74696d652e4c6f67616c766b56c36c766b54c3946c766b5b527ac46c766b5bc3009c643e001472656d6f76696e6720616c6c2062616c616e636561680f4e656f2e52756e74696d652e4c6f67616c766b51c36c766b55c37c6165850b75625000237570646174696e6720616c6c6f77616e636520746f206e657720616c6c6f77616e636561680f4e656f2e52756e74696d652e4c6f67616c766b51c36c766b55c36c766b5bc352726165710b756c766b52c36c766b53c36c766b54c3527261087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667962030051616c7566011cc56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b54527ac46c766b54c300a1640b0062030000616c75666c766b53c361c001149e640b0062030000616c75666c766b52c36168184e656f2e52756e74696d652e436865636b5769746e657373616450016c766b52c36c766b53c39c643000117472616e7366657220746f2073656c662161680f4e656f2e52756e74696d652e4c6f676162030051616c75666c766b51c36c766b52c37c6165c10a6c766b55527ac46c766b55c36c766b54c39f64310012696e73756666696369656e742066756e647361680f4e656f2e52756e74696d652e4c6f676162030000616c75666c766b55c36c766b54c39c6416006c766b51c36c766b52c37c6165df0975622b006c766b55c36c766b54c3946c766b56527ac46c766b51c36c766b52c36c766b56c352726165f009756c766b51c36c766b53c37c6165260a6c766b57527ac46c766b57c36c766b54c3936c766b58527ac46c766b51c36c766b53c36c766b58c352726165b209756c766b52c36c766b53c36c766b54c3527261087472616e7366657254c168124e656f2e52756e74696d652e4e6f7469667962030051616c75662166726f6d2061646472657373206973206e6f74207468652074782073656e64657261680f4e656f2e52756e74696d652e4c6f676162030000616c75660131c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b53527ac46c766b51c3046e616d659c6411006203006c766b53c300c3616c75666c766b51c308646563696d616c739c6411006203006c766b53c352c3616c75666c766b51c30673796d626f6c9c6412006203006c766b53c351c3616c75666151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b54527ac414496e636f727265637420417267204c656e6774686c766b55527ac46c766b51c30b746f74616c537570706c799c6419006203006c766b53c36c766b54c37c61652c03616c75666c766b51c30962616c616e63654f669c6454006c766b52c361c0519c643c006c766b52c300c36c766b56527ac46c766b56c361c001149e640b0062030000616c75666203006c766b54c36c766b56c37c61653f08616c75666203006c766b55c3616c75666c766b51c3087472616e736665729c647a006c766b52c361c0539c6462006c766b52c300c36c766b57527ac46c766b52c351c36c766b58527ac46c766b52c352c36c766b59527ac46c766b00c36c766b54c36c766b57c36c766b58c36c766b59c3547951795672755172755379527955727552727561653cfc616c75666203006c766b55c3616c75666c766b51c30c7472616e7366657246726f6d9c647a006c766b52c361c0539c6462006c766b52c300c36c766b57527ac46c766b52c351c36c766b58527ac46c766b52c352c36c766b59527ac46c766b00c36c766b54c36c766b57c36c766b58c36c766b59c35479517956727551727553795279557275527275616528f9616c75666203006c766b55c3616c75666c766b51c307617070726f76659c647a006c766b52c361c0539c6462006c766b52c300c36c766b5a527ac46c766b52c351c36c766b5b527ac46c766b52c352c36c766b59527ac46c766b00c36c766b54c36c766b5ac36c766b5bc36c766b59c35479517956727551727553795279557275527275616531f7616c75666203006c766b55c3616c75666c766b51c309616c6c6f77616e63659c6467006c766b52c361c0529c644f006c766b52c300c36c766b5a527ac46c766b52c351c36c766b5b527ac46c766b00c36c766b54c36c766b5ac36c766b5bc35379517955727551727552795279547275527275616551f6616c75666203006c766b55c3616c756662030000616c756653c56b6c766b00527ac409616c6c6f77616e636507617070726f76650c7472616e7366657246726f6d087472616e736665720962616c616e63654f660b746f74616c537570706c7908646563696d616c730673796d626f6c046e616d6559c16c766b51527ac46203006c766b51c3616c756653c56b6c766b00527ac46c766b51527ac462030000616c756653c56b6c766b00527ac46c766b51527ac462030000616c756653c56b6c766b00527ac46c766b51527ac46203006c766b51c36c766b00c357c37c61654905616c756656c56b6c766b00527ac46c766b51527ac46c766b52527ac46c766b52c36c766b00c357c37c61651c056c766b53527ac46c766b53c36c766b51c3936c766b53527ac46203006c766b52c36c766b00c357c36c766b53c352726165a3047500616c756657c56b6c766b00527ac46151c66b6168164e656f2e53746f726167652e476574436f6e74657874616c766b00527ac46c6c766b51527ac46c766b51c36c766b00c357c37c61659b046c766b52527ac46c766b00c358c36c766b52c3946c766b53527ac46c766b53c3009f640b0062030000616c75666203006c766b53c3616c75660112c56b6156c66b006c766b00527ac4006c766b51527ac4006c766b52527ac4006c766b53527ac4209b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc56c766b54527ac420e72d286979ee6cb1b7e65dfddfb2e384100b8d148e7758de42e4168b71792c606c766b55527ac46c6c766b00527ac461682953797374656d2e457865637574696f6e456e67696e652e476574536372697074436f6e7461696e6572616c766b51527ac46c766b51c361681d4e656f2e5472616e73616374696f6e2e4765745265666572656e636573616c766b52527ac461682d53797374656d2e457865637574696f6e456e67696e652e476574457865637574696e6753637269707448617368616c766b00c3537bc46c766b52c361c000a064f2016c766b52c300c36c766b53527ac46c766b53c36168184e656f2e4f75747075742e47657453637269707448617368616c766b00c3527bc4006c766b54527ac4006c766b55527ac461006c766b58527ac46c766b51c361681a4e656f2e5472616e73616374696f6e2e4765744f757470757473616c766b59527ac46c766b51c361681a4e656f2e5472616e73616374696f6e2e4765744f7574707574736161c06c766b57527ac4616c766b58c36c766b57c39f6422016c766b59c36c766b58c3c36c766b56527ac46c766b58c351936c766b58527ac46c766b56c36168184e656f2e4f75747075742e47657453637269707448617368616c766b00c353c39c6455006c766b56c36168154e656f2e4f75747075742e47657441737365744964616c766b00c354c39c642c006c766b54c36c766b56c36168134e656f2e4f75747075742e47657456616c756561936c766b54527ac46c766b56c36168184e656f2e4f75747075742e47657453637269707448617368616c766b00c353c39c642aff6c766b56c36168154e656f2e4f75747075742e47657441737365744964616c766b00c355c39c6401ff6c766b55c36c766b56c36168134e656f2e4f75747075742e47657456616c756561936c766b55527ac462d5fe616c766b54c36c766b00c3007bc46c766b55c36c766b00c3517bc46203006c766b00c3616c756652c56b6c766b00527ac46203006c766b00c36168184e656f2e4f75747075742e4765745363726970744861736861616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac46203006c766b00c361659fef616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756651c56b62030000616c756651c56b62030000616c756653c56b6c766b00527ac46c766b51527ac46203006c766b00c300c36c766b51c37c6168124e656f2e53746f726167652e44656c6574656100616c756654c56b6c766b00527ac46c766b51527ac46c766b52527ac46203006c766b00c300c36c766b51c36c766b52c3527261680f4e656f2e53746f726167652e5075746100616c756653c56b6c766b00527ac46c766b51527ac46203006c766b00c300c36c766b51c37c61680f4e656f2e53746f726167652e47657461616c756653c56b6c766b00527ac46c766b51527ac462030000616c756654c56b6c766b00527ac46c766b51527ac46c766b52527ac462030000616c756653c56b6c766b00527ac46c766b51527ac462030000616c756651c56b62030000616c756651c56b6203000110616c756651c56b6203000100616c756652c56b6c766b00527ac462030000616c756652c56b6c766b00527ac462030000616c756651c56b62030000616c7566", - "version": 0, - }, - ], -] -`; - -exports[`syscalls Neo.Contract.Migrate 5`] = `"storageItem.getAll$"`; - -exports[`syscalls Neo.Contract.Migrate 6`] = ` -Array [ - Array [ - Object { - "hash": "316d480e6a8ce9c46b88bd99962e3bfb8693a132", - }, - ], -] -`; - -exports[`syscalls Neo.Contract.Migrate 7`] = `"storageItem.add"`; - -exports[`syscalls Neo.Contract.Migrate 8`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "fcd7d436b2fe02473935afdec640027e12d2252e", - "key": undefined, - "serializeWire": [Function], - "sizeInternal": [Function], - "value": undefined, - }, - ], -] -`; - -exports[`syscalls Neo.Contract.Migrate 9`] = `Array []`; - -exports[`syscalls Neo.Contract.Migrate 10`] = `Array []`; - -exports[`syscalls Neo.Contract.Migrate 11`] = ` -Array [ - Array [ - Object { - "from": "316d480e6a8ce9c46b88bd99962e3bfb8693a132", - "to": "fcd7d436b2fe02473935afdec640027e12d2252e", - }, - ], -] -`; - -exports[`syscalls Neo.Contract.Migrate 12`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Next 1`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Next 2`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Next 3`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Next 4`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Next 5`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Next 6`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Next 7`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Next 8`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Next 9`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Next 10`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Next 11`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Next 12`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Next 13`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Next 14`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Next 15`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Next 16`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Next 17`] = `"contract.get"`; - -exports[`syscalls Neo.Enumerator.Next 18`] = ` -Array [ - Array [ - Object { - "hash": "686302f409a2f3a10c2a7e547703d5032b877c75", - }, - ], -] -`; - -exports[`syscalls Neo.Enumerator.Next 19`] = `"storageItem.getAll$"`; - -exports[`syscalls Neo.Enumerator.Next 20`] = ` -Array [ - Array [ - Object { - "hash": "686302f409a2f3a10c2a7e547703d5032b877c75", - "prefix": "01", - }, - ], -] -`; - -exports[`syscalls Neo.Enumerator.Next 21`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Next 22`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Next 23`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Next 24`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Next 25`] = `"contract.get"`; - -exports[`syscalls Neo.Enumerator.Next 26`] = ` -Array [ - Array [ - Object { - "hash": "686302f409a2f3a10c2a7e547703d5032b877c75", - }, - ], -] -`; - -exports[`syscalls Neo.Enumerator.Next 27`] = `"storageItem.getAll$"`; - -exports[`syscalls Neo.Enumerator.Next 28`] = ` -Array [ - Array [ - Object { - "hash": "686302f409a2f3a10c2a7e547703d5032b877c75", - "prefix": "01", - }, - ], -] -`; - -exports[`syscalls Neo.Enumerator.Next 29`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Next 30`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Next 31`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Next 32`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Value 1`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Value 2`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Value 3`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Value 4`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Value 5`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Value 6`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Value 7`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Value 8`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Value 9`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Value 10`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Value 11`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Value 12`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Value 13`] = `"contract.get"`; - -exports[`syscalls Neo.Enumerator.Value 14`] = ` -Array [ - Array [ - Object { - "hash": "fb29c2128c2a8645fe1a11e977363792c9cc696b", - }, - ], -] -`; - -exports[`syscalls Neo.Enumerator.Value 15`] = `"storageItem.getAll$"`; - -exports[`syscalls Neo.Enumerator.Value 16`] = ` -Array [ - Array [ - Object { - "hash": "fb29c2128c2a8645fe1a11e977363792c9cc696b", - "prefix": "01", - }, - ], -] -`; - -exports[`syscalls Neo.Enumerator.Value 17`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Value 18`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Value 19`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Value 20`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Value 21`] = `"contract.get"`; - -exports[`syscalls Neo.Enumerator.Value 22`] = ` -Array [ - Array [ - Object { - "hash": "c15282d46710612b313ee0e1fc642e12a237f861", - }, - ], -] -`; - -exports[`syscalls Neo.Enumerator.Value 23`] = `"storageItem.getAll$"`; - -exports[`syscalls Neo.Enumerator.Value 24`] = ` -Array [ - Array [ - Object { - "hash": "c15282d46710612b313ee0e1fc642e12a237f861", - "prefix": "01", - }, - ], -] -`; - -exports[`syscalls Neo.Enumerator.Value 25`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Value 26`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Value 27`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Value 28`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Value 29`] = `"contract.get"`; - -exports[`syscalls Neo.Enumerator.Value 30`] = ` -Array [ - Array [ - Object { - "hash": "f5d6309866e65fd8fb1622221c57851dd0cef6b4", - }, - ], -] -`; - -exports[`syscalls Neo.Enumerator.Value 31`] = `"storageItem.getAll$"`; - -exports[`syscalls Neo.Enumerator.Value 32`] = ` -Array [ - Array [ - Object { - "hash": "f5d6309866e65fd8fb1622221c57851dd0cef6b4", - "prefix": "01", - }, - ], -] -`; - -exports[`syscalls Neo.Enumerator.Value 33`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Value 34`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Value 35`] = `Array []`; - -exports[`syscalls Neo.Enumerator.Value 36`] = `Array []`; - -exports[`syscalls Neo.Header.GetConsensusData 1`] = `"header.get"`; - -exports[`syscalls Neo.Header.GetConsensusData 2`] = ` -Array [ - Array [ - Object { - "hashOrIndex": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Header.GetConsensusData 3`] = `Array []`; - -exports[`syscalls Neo.Header.GetConsensusData 4`] = `Array []`; - -exports[`syscalls Neo.Header.GetConsensusData 5`] = `Array []`; - -exports[`syscalls Neo.Header.GetConsensusData 6`] = `Array []`; - -exports[`syscalls Neo.Header.GetHash 1`] = `"header.get"`; - -exports[`syscalls Neo.Header.GetHash 2`] = ` -Array [ - Array [ - Object { - "hashOrIndex": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Header.GetHash 3`] = `Array []`; - -exports[`syscalls Neo.Header.GetHash 4`] = `Array []`; - -exports[`syscalls Neo.Header.GetHash 5`] = `Array []`; - -exports[`syscalls Neo.Header.GetHash 6`] = `Array []`; - -exports[`syscalls Neo.Header.GetIndex 1`] = `"header.get"`; - -exports[`syscalls Neo.Header.GetIndex 2`] = ` -Array [ - Array [ - Object { - "hashOrIndex": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Header.GetIndex 3`] = `Array []`; - -exports[`syscalls Neo.Header.GetIndex 4`] = `Array []`; - -exports[`syscalls Neo.Header.GetIndex 5`] = `Array []`; - -exports[`syscalls Neo.Header.GetIndex 6`] = `Array []`; - -exports[`syscalls Neo.Header.GetMerkleRoot 1`] = `"header.get"`; - -exports[`syscalls Neo.Header.GetMerkleRoot 2`] = ` -Array [ - Array [ - Object { - "hashOrIndex": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Header.GetMerkleRoot 3`] = `Array []`; - -exports[`syscalls Neo.Header.GetMerkleRoot 4`] = `Array []`; - -exports[`syscalls Neo.Header.GetMerkleRoot 5`] = `Array []`; - -exports[`syscalls Neo.Header.GetMerkleRoot 6`] = `Array []`; - -exports[`syscalls Neo.Header.GetNextConsensus 1`] = `"header.get"`; - -exports[`syscalls Neo.Header.GetNextConsensus 2`] = ` -Array [ - Array [ - Object { - "hashOrIndex": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Header.GetNextConsensus 3`] = `Array []`; - -exports[`syscalls Neo.Header.GetNextConsensus 4`] = `Array []`; - -exports[`syscalls Neo.Header.GetNextConsensus 5`] = `Array []`; - -exports[`syscalls Neo.Header.GetNextConsensus 6`] = `Array []`; - -exports[`syscalls Neo.Header.GetPrevHash 1`] = `"header.get"`; - -exports[`syscalls Neo.Header.GetPrevHash 2`] = ` -Array [ - Array [ - Object { - "hashOrIndex": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Header.GetPrevHash 3`] = `Array []`; - -exports[`syscalls Neo.Header.GetPrevHash 4`] = `Array []`; - -exports[`syscalls Neo.Header.GetPrevHash 5`] = `Array []`; - -exports[`syscalls Neo.Header.GetPrevHash 6`] = `Array []`; - -exports[`syscalls Neo.Header.GetTimestamp 1`] = `"header.get"`; - -exports[`syscalls Neo.Header.GetTimestamp 2`] = ` -Array [ - Array [ - Object { - "hashOrIndex": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Header.GetTimestamp 3`] = `Array []`; - -exports[`syscalls Neo.Header.GetTimestamp 4`] = `Array []`; - -exports[`syscalls Neo.Header.GetTimestamp 5`] = `Array []`; - -exports[`syscalls Neo.Header.GetTimestamp 6`] = `Array []`; - -exports[`syscalls Neo.Header.GetVersion 1`] = `"header.get"`; - -exports[`syscalls Neo.Header.GetVersion 2`] = ` -Array [ - Array [ - Object { - "hashOrIndex": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Header.GetVersion 3`] = `Array []`; - -exports[`syscalls Neo.Header.GetVersion 4`] = `Array []`; - -exports[`syscalls Neo.Header.GetVersion 5`] = `Array []`; - -exports[`syscalls Neo.Header.GetVersion 6`] = `Array []`; - -exports[`syscalls Neo.Input.GetHash 1`] = `"transaction.get"`; - -exports[`syscalls Neo.Input.GetHash 2`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Input.GetHash 3`] = `Array []`; - -exports[`syscalls Neo.Input.GetHash 4`] = `Array []`; - -exports[`syscalls Neo.Input.GetHash 5`] = `Array []`; - -exports[`syscalls Neo.Input.GetHash 6`] = `Array []`; - -exports[`syscalls Neo.Input.GetIndex 1`] = `"transaction.get"`; - -exports[`syscalls Neo.Input.GetIndex 2`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Input.GetIndex 3`] = `Array []`; - -exports[`syscalls Neo.Input.GetIndex 4`] = `Array []`; - -exports[`syscalls Neo.Input.GetIndex 5`] = `Array []`; - -exports[`syscalls Neo.Input.GetIndex 6`] = `Array []`; - -exports[`syscalls Neo.InvocationTransaction.GetScript 1`] = `"transaction.get"`; - -exports[`syscalls Neo.InvocationTransaction.GetScript 2`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.InvocationTransaction.GetScript 3`] = `Array []`; - -exports[`syscalls Neo.InvocationTransaction.GetScript 4`] = `Array []`; - -exports[`syscalls Neo.InvocationTransaction.GetScript 5`] = `Array []`; - -exports[`syscalls Neo.InvocationTransaction.GetScript 6`] = `Array []`; - -exports[`syscalls Neo.Iterator.Create 1`] = `Array []`; - -exports[`syscalls Neo.Iterator.Create 2`] = `Array []`; - -exports[`syscalls Neo.Iterator.Create 3`] = `Array []`; - -exports[`syscalls Neo.Iterator.Create 4`] = `Array []`; - -exports[`syscalls Neo.Iterator.Key 1`] = `Array []`; - -exports[`syscalls Neo.Iterator.Key 2`] = `Array []`; - -exports[`syscalls Neo.Iterator.Key 3`] = `Array []`; - -exports[`syscalls Neo.Iterator.Key 4`] = `Array []`; - -exports[`syscalls Neo.Iterator.Key 5`] = `"contract.get"`; - -exports[`syscalls Neo.Iterator.Key 6`] = ` -Array [ - Array [ - Object { - "hash": "fb29c2128c2a8645fe1a11e977363792c9cc696b", - }, - ], -] -`; - -exports[`syscalls Neo.Iterator.Key 7`] = `"storageItem.getAll$"`; - -exports[`syscalls Neo.Iterator.Key 8`] = ` -Array [ - Array [ - Object { - "hash": "fb29c2128c2a8645fe1a11e977363792c9cc696b", - "prefix": "01", - }, - ], -] -`; - -exports[`syscalls Neo.Iterator.Key 9`] = `Array []`; - -exports[`syscalls Neo.Iterator.Key 10`] = `Array []`; - -exports[`syscalls Neo.Iterator.Key 11`] = `Array []`; - -exports[`syscalls Neo.Iterator.Key 12`] = `Array []`; - -exports[`syscalls Neo.Output.GetAssetId 1`] = `"transaction.get"`; - -exports[`syscalls Neo.Output.GetAssetId 2`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Output.GetAssetId 3`] = `Array []`; - -exports[`syscalls Neo.Output.GetAssetId 4`] = `Array []`; - -exports[`syscalls Neo.Output.GetAssetId 5`] = `Array []`; - -exports[`syscalls Neo.Output.GetAssetId 6`] = `Array []`; - -exports[`syscalls Neo.Output.GetScriptHash 1`] = `"transaction.get"`; - -exports[`syscalls Neo.Output.GetScriptHash 2`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Output.GetScriptHash 3`] = `Array []`; - -exports[`syscalls Neo.Output.GetScriptHash 4`] = `Array []`; - -exports[`syscalls Neo.Output.GetScriptHash 5`] = `Array []`; - -exports[`syscalls Neo.Output.GetScriptHash 6`] = `Array []`; - -exports[`syscalls Neo.Output.GetValue 1`] = `"transaction.get"`; - -exports[`syscalls Neo.Output.GetValue 2`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Output.GetValue 3`] = `Array []`; - -exports[`syscalls Neo.Output.GetValue 4`] = `Array []`; - -exports[`syscalls Neo.Output.GetValue 5`] = `Array []`; - -exports[`syscalls Neo.Output.GetValue 6`] = `Array []`; - -exports[`syscalls Neo.Runtime.CheckWitness 1`] = `Array []`; - -exports[`syscalls Neo.Runtime.CheckWitness 2`] = `Array []`; - -exports[`syscalls Neo.Runtime.CheckWitness 3`] = `Array []`; - -exports[`syscalls Neo.Runtime.CheckWitness 4`] = `Array []`; - -exports[`syscalls Neo.Runtime.CheckWitness 5`] = `Array []`; - -exports[`syscalls Neo.Runtime.CheckWitness 6`] = `Array []`; - -exports[`syscalls Neo.Runtime.CheckWitness 7`] = `Array []`; - -exports[`syscalls Neo.Runtime.CheckWitness 8`] = `Array []`; - -exports[`syscalls Neo.Runtime.Deserialize 1`] = `Array []`; - -exports[`syscalls Neo.Runtime.Deserialize 2`] = `Array []`; - -exports[`syscalls Neo.Runtime.Deserialize 3`] = `Array []`; - -exports[`syscalls Neo.Runtime.Deserialize 4`] = `Array []`; - -exports[`syscalls Neo.Runtime.Deserialize 5`] = `Array []`; - -exports[`syscalls Neo.Runtime.Deserialize 6`] = `Array []`; - -exports[`syscalls Neo.Runtime.Deserialize 7`] = `Array []`; - -exports[`syscalls Neo.Runtime.Deserialize 8`] = `Array []`; - -exports[`syscalls Neo.Runtime.GetTime 1`] = `Array []`; - -exports[`syscalls Neo.Runtime.GetTime 2`] = `Array []`; - -exports[`syscalls Neo.Runtime.GetTime 3`] = `Array []`; - -exports[`syscalls Neo.Runtime.GetTime 4`] = `Array []`; - -exports[`syscalls Neo.Runtime.GetTime 5`] = `Array []`; - -exports[`syscalls Neo.Runtime.GetTime 6`] = `Array []`; - -exports[`syscalls Neo.Runtime.GetTime 7`] = `Array []`; - -exports[`syscalls Neo.Runtime.GetTime 8`] = `Array []`; - -exports[`syscalls Neo.Runtime.GetTrigger 1`] = `Array []`; - -exports[`syscalls Neo.Runtime.GetTrigger 2`] = `Array []`; - -exports[`syscalls Neo.Runtime.GetTrigger 3`] = `Array []`; - -exports[`syscalls Neo.Runtime.GetTrigger 4`] = `Array []`; - -exports[`syscalls Neo.Runtime.Log 1`] = `Array []`; - -exports[`syscalls Neo.Runtime.Log 2`] = ` -Array [ - Array [ - Object { - "message": "foo", - "scriptHash": "720f6e0afa42c0ba6b0a7a414ef94b10ac966c78", - }, - ], -] -`; - -exports[`syscalls Neo.Runtime.Log 3`] = `Array []`; - -exports[`syscalls Neo.Runtime.Log 4`] = `Array []`; - -exports[`syscalls Neo.Runtime.Notify 1`] = ` -Array [ - Array [ - Object { - "args": Array [ - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1", - }, - ], - "scriptHash": "20bdad340ffefc952c253989bb24ca0de4857a36", - }, - ], -] -`; - -exports[`syscalls Neo.Runtime.Notify 2`] = `Array []`; - -exports[`syscalls Neo.Runtime.Notify 3`] = `Array []`; - -exports[`syscalls Neo.Runtime.Notify 4`] = `Array []`; - -exports[`syscalls Neo.Runtime.Serialize 1`] = `Array []`; - -exports[`syscalls Neo.Runtime.Serialize 2`] = `Array []`; - -exports[`syscalls Neo.Runtime.Serialize 3`] = `Array []`; - -exports[`syscalls Neo.Runtime.Serialize 4`] = `Array []`; - -exports[`syscalls Neo.Runtime.Serialize 5`] = `Array []`; - -exports[`syscalls Neo.Runtime.Serialize 6`] = `Array []`; - -exports[`syscalls Neo.Runtime.Serialize 7`] = `Array []`; - -exports[`syscalls Neo.Runtime.Serialize 8`] = `Array []`; - -exports[`syscalls Neo.Runtime.Serialize 9`] = `Array []`; - -exports[`syscalls Neo.Runtime.Serialize 10`] = `Array []`; - -exports[`syscalls Neo.Runtime.Serialize 11`] = `Array []`; - -exports[`syscalls Neo.Runtime.Serialize 12`] = `Array []`; - -exports[`syscalls Neo.Runtime.Serialize 13`] = `Array []`; - -exports[`syscalls Neo.Runtime.Serialize 14`] = `Array []`; - -exports[`syscalls Neo.Runtime.Serialize 15`] = `Array []`; - -exports[`syscalls Neo.Runtime.Serialize 16`] = `Array []`; - -exports[`syscalls Neo.Runtime.Serialize 17`] = `Array []`; - -exports[`syscalls Neo.Runtime.Serialize 18`] = `Array []`; - -exports[`syscalls Neo.Runtime.Serialize 19`] = `Array []`; - -exports[`syscalls Neo.Runtime.Serialize 20`] = `Array []`; - -exports[`syscalls Neo.Runtime.Serialize 21`] = `Array []`; - -exports[`syscalls Neo.Runtime.Serialize 22`] = `Array []`; - -exports[`syscalls Neo.Runtime.Serialize 23`] = `Array []`; - -exports[`syscalls Neo.Runtime.Serialize 24`] = `Array []`; - -exports[`syscalls Neo.Storage.Delete 1`] = `"contract.get"`; - -exports[`syscalls Neo.Storage.Delete 2`] = ` -Array [ - Array [ - Object { - "hash": "bff26630a34d202045d1fc72a9f905b0f308f43d", - }, - ], -] -`; - -exports[`syscalls Neo.Storage.Delete 3`] = `"storageItem.tryGet"`; - -exports[`syscalls Neo.Storage.Delete 4`] = ` -Array [ - Array [ - Object { - "hash": "bff26630a34d202045d1fc72a9f905b0f308f43d", - "key": "", - }, - ], -] -`; - -exports[`syscalls Neo.Storage.Delete 5`] = `"storageItem.delete"`; - -exports[`syscalls Neo.Storage.Delete 6`] = ` -Array [ - Array [ - Object { - "hash": "bff26630a34d202045d1fc72a9f905b0f308f43d", - "key": "", - }, - ], -] -`; - -exports[`syscalls Neo.Storage.Delete 7`] = `Array []`; - -exports[`syscalls Neo.Storage.Delete 8`] = `Array []`; - -exports[`syscalls Neo.Storage.Delete 9`] = `Array []`; - -exports[`syscalls Neo.Storage.Delete 10`] = `Array []`; - -exports[`syscalls Neo.Storage.Find 1`] = ` -Array [ - IteratorStackItem { - "mutableCount": 1, - "referenceID": 34, - "value": StackItemIterator { - "enumerator": Object { - "next": [Function], - "return": [Function], - "throw": [Function], - Symbol(Symbol.asyncIterator): [Function], - }, - "mutableDone": false, - }, - }, -] -`; - -exports[`syscalls Neo.Storage.Find 2`] = `"contract.get"`; - -exports[`syscalls Neo.Storage.Find 3`] = ` -Array [ - Array [ - Object { - "hash": "172a85ad477e8853f60c2bdce6e92b5492c4b5b3", - }, - ], -] -`; - -exports[`syscalls Neo.Storage.Find 4`] = `"storageItem.getAll$"`; - -exports[`syscalls Neo.Storage.Find 5`] = ` -Array [ - Array [ - Object { - "hash": "172a85ad477e8853f60c2bdce6e92b5492c4b5b3", - "prefix": "01", - }, - ], -] -`; - -exports[`syscalls Neo.Storage.Find 6`] = `Array []`; - -exports[`syscalls Neo.Storage.Find 7`] = `Array []`; - -exports[`syscalls Neo.Storage.Find 8`] = `Array []`; - -exports[`syscalls Neo.Storage.Find 9`] = `Array []`; - -exports[`syscalls Neo.Storage.Get 1`] = `"contract.get"`; - -exports[`syscalls Neo.Storage.Get 2`] = ` -Array [ - Array [ - Object { - "hash": "172a85ad477e8853f60c2bdce6e92b5492c4b5b3", - }, - ], -] -`; - -exports[`syscalls Neo.Storage.Get 3`] = `"storageItem.tryGet"`; - -exports[`syscalls Neo.Storage.Get 4`] = ` -Array [ - Array [ - Object { - "hash": "172a85ad477e8853f60c2bdce6e92b5492c4b5b3", - "key": "01", - }, - ], -] -`; - -exports[`syscalls Neo.Storage.Get 5`] = `Array []`; - -exports[`syscalls Neo.Storage.Get 6`] = `Array []`; - -exports[`syscalls Neo.Storage.Get 7`] = `Array []`; - -exports[`syscalls Neo.Storage.Get 8`] = `Array []`; - -exports[`syscalls Neo.Storage.Get 9`] = `"contract.get"`; - -exports[`syscalls Neo.Storage.Get 10`] = ` -Array [ - Array [ - Object { - "hash": "172a85ad477e8853f60c2bdce6e92b5492c4b5b3", - }, - ], -] -`; - -exports[`syscalls Neo.Storage.Get 11`] = `"storageItem.tryGet"`; - -exports[`syscalls Neo.Storage.Get 12`] = ` -Array [ - Array [ - Object { - "hash": "172a85ad477e8853f60c2bdce6e92b5492c4b5b3", - "key": "01", - }, - ], -] -`; - -exports[`syscalls Neo.Storage.Get 13`] = `Array []`; - -exports[`syscalls Neo.Storage.Get 14`] = `Array []`; - -exports[`syscalls Neo.Storage.Get 15`] = `Array []`; - -exports[`syscalls Neo.Storage.Get 16`] = `Array []`; - -exports[`syscalls Neo.Storage.GetContext 1`] = `Array []`; - -exports[`syscalls Neo.Storage.GetContext 2`] = `Array []`; - -exports[`syscalls Neo.Storage.GetContext 3`] = `Array []`; - -exports[`syscalls Neo.Storage.GetContext 4`] = `Array []`; - -exports[`syscalls Neo.Storage.GetReadOnlyContext 1`] = `Array []`; - -exports[`syscalls Neo.Storage.GetReadOnlyContext 2`] = `Array []`; - -exports[`syscalls Neo.Storage.GetReadOnlyContext 3`] = `Array []`; - -exports[`syscalls Neo.Storage.GetReadOnlyContext 4`] = `Array []`; - -exports[`syscalls Neo.Storage.Put 1`] = `"contract.get"`; - -exports[`syscalls Neo.Storage.Put 2`] = ` -Array [ - Array [ - Object { - "hash": "5a4dc5955ca2dcef435f4cdc40439ebf49632abd", - }, - ], -] -`; - -exports[`syscalls Neo.Storage.Put 3`] = `"storageItem.tryGet"`; - -exports[`syscalls Neo.Storage.Put 4`] = ` -Array [ - Array [ - Object { - "hash": "5a4dc5955ca2dcef435f4cdc40439ebf49632abd", - "key": "", - }, - ], -] -`; - -exports[`syscalls Neo.Storage.Put 5`] = `"storageItem.add"`; - -exports[`syscalls Neo.Storage.Put 6`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "5a4dc5955ca2dcef435f4cdc40439ebf49632abd", - "key": "", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - ], -] -`; - -exports[`syscalls Neo.Storage.Put 7`] = `Array []`; - -exports[`syscalls Neo.Storage.Put 8`] = `Array []`; - -exports[`syscalls Neo.Storage.Put 9`] = `Array []`; - -exports[`syscalls Neo.Storage.Put 10`] = `Array []`; - -exports[`syscalls Neo.Storage.Put 11`] = `"contract.get"`; - -exports[`syscalls Neo.Storage.Put 12`] = ` -Array [ - Array [ - Object { - "hash": "65b899fa49b9c7c16211de54af874319eb36ada3", - }, - ], -] -`; - -exports[`syscalls Neo.Storage.Put 13`] = `"storageItem.tryGet"`; - -exports[`syscalls Neo.Storage.Put 14`] = ` -Array [ - Array [ - Object { - "hash": "65b899fa49b9c7c16211de54af874319eb36ada3", - "key": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - }, - ], -] -`; - -exports[`syscalls Neo.Storage.Put 15`] = `"storageItem.add"`; - -exports[`syscalls Neo.Storage.Put 16`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "65b899fa49b9c7c16211de54af874319eb36ada3", - "key": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "", - }, - ], -] -`; - -exports[`syscalls Neo.Storage.Put 17`] = `Array []`; - -exports[`syscalls Neo.Storage.Put 18`] = `Array []`; - -exports[`syscalls Neo.Storage.Put 19`] = `Array []`; - -exports[`syscalls Neo.Storage.Put 20`] = `Array []`; - -exports[`syscalls Neo.Storage.Put 21`] = `"contract.get"`; - -exports[`syscalls Neo.Storage.Put 22`] = ` -Array [ - Array [ - Object { - "hash": "6b0c054a07b8264a8347d9cdd1d49a6efb6631ef", - }, - ], -] -`; - -exports[`syscalls Neo.Storage.Put 23`] = `"storageItem.tryGet"`; - -exports[`syscalls Neo.Storage.Put 24`] = ` -Array [ - Array [ - Object { - "hash": "6b0c054a07b8264a8347d9cdd1d49a6efb6631ef", - "key": "", - }, - ], -] -`; - -exports[`syscalls Neo.Storage.Put 25`] = `"storageItem.add"`; - -exports[`syscalls Neo.Storage.Put 26`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "6b0c054a07b8264a8347d9cdd1d49a6efb6631ef", - "key": "", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - }, - ], -] -`; - -exports[`syscalls Neo.Storage.Put 27`] = `Array []`; - -exports[`syscalls Neo.Storage.Put 28`] = `Array []`; - -exports[`syscalls Neo.Storage.Put 29`] = `Array []`; - -exports[`syscalls Neo.Storage.Put 30`] = `Array []`; - -exports[`syscalls Neo.Storage.Put 31`] = `"contract.get"`; - -exports[`syscalls Neo.Storage.Put 32`] = ` -Array [ - Array [ - Object { - "hash": "6b0c054a07b8264a8347d9cdd1d49a6efb6631ef", - }, - ], -] -`; - -exports[`syscalls Neo.Storage.Put 33`] = `"storageItem.tryGet"`; - -exports[`syscalls Neo.Storage.Put 34`] = ` -Array [ - Array [ - Object { - "hash": "6b0c054a07b8264a8347d9cdd1d49a6efb6631ef", - "key": "", - }, - ], -] -`; - -exports[`syscalls Neo.Storage.Put 35`] = `"storageItem.update"`; - -exports[`syscalls Neo.Storage.Put 36`] = ` -Array [ - Array [ - Object { - "hasStorage": true, - }, - Object { - "flags": 0, - "value": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - }, - ], -] -`; - -exports[`syscalls Neo.Storage.Put 37`] = `"storageItem.add"`; - -exports[`syscalls Neo.Storage.Put 38`] = `Array []`; - -exports[`syscalls Neo.Storage.Put 39`] = `Array []`; - -exports[`syscalls Neo.Storage.Put 40`] = `Array []`; - -exports[`syscalls Neo.Storage.Put 41`] = `Array []`; - -exports[`syscalls Neo.Storage.Put 42`] = `Array []`; - -exports[`syscalls Neo.Storage.Put 43`] = `"contract.get"`; - -exports[`syscalls Neo.Storage.Put 44`] = ` -Array [ - Array [ - Object { - "hash": "cf131c8ec9c75f49d824958f33df72b8e18980b5", - }, - ], -] -`; - -exports[`syscalls Neo.Storage.Put 45`] = `"storageItem.tryGet"`; - -exports[`syscalls Neo.Storage.Put 46`] = ` -Array [ - Array [ - Object { - "hash": "cf131c8ec9c75f49d824958f33df72b8e18980b5", - "key": "", - }, - ], -] -`; - -exports[`syscalls Neo.Storage.Put 47`] = `"storageItem.add"`; - -exports[`syscalls Neo.Storage.Put 48`] = ` -Array [ - Array [ - StorageItem { - "equals": [Function], - "flags": 0, - "hash": "cf131c8ec9c75f49d824958f33df72b8e18980b5", - "key": "", - "serializeWire": [Function], - "sizeInternal": [Function], - "value": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - }, - ], -] -`; - -exports[`syscalls Neo.Storage.Put 49`] = `Array []`; - -exports[`syscalls Neo.Storage.Put 50`] = `Array []`; - -exports[`syscalls Neo.Storage.Put 51`] = `Array []`; - -exports[`syscalls Neo.Storage.Put 52`] = `Array []`; - -exports[`syscalls Neo.StorageContext.AsReadOnly 1`] = `Array []`; - -exports[`syscalls Neo.StorageContext.AsReadOnly 2`] = `Array []`; - -exports[`syscalls Neo.StorageContext.AsReadOnly 3`] = `Array []`; - -exports[`syscalls Neo.StorageContext.AsReadOnly 4`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetAttributes 1`] = `"transaction.get"`; - -exports[`syscalls Neo.Transaction.GetAttributes 2`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Transaction.GetAttributes 3`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetAttributes 4`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetAttributes 5`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetAttributes 6`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetHash 1`] = `"transaction.get"`; - -exports[`syscalls Neo.Transaction.GetHash 2`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Transaction.GetHash 3`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetHash 4`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetHash 5`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetHash 6`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetInputs 1`] = `"transaction.get"`; - -exports[`syscalls Neo.Transaction.GetInputs 2`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Transaction.GetInputs 3`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetInputs 4`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetInputs 5`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetInputs 6`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetOutputs 1`] = `"transaction.get"`; - -exports[`syscalls Neo.Transaction.GetOutputs 2`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Transaction.GetOutputs 3`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetOutputs 4`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetOutputs 5`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetOutputs 6`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetReferences 1`] = `"output.get"`; - -exports[`syscalls Neo.Transaction.GetReferences 2`] = ` -Array [ - Array [ - Object { - "__$type": "Input", - "hash": "0000000000000000000000000000000000000000000000000000000000000000", - "hashHex": "0x0000000000000000000000000000000000000000000000000000000000000000", - "index": 0, - "size": 34, - }, - ], -] -`; - -exports[`syscalls Neo.Transaction.GetReferences 3`] = `"transaction.get"`; - -exports[`syscalls Neo.Transaction.GetReferences 4`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Transaction.GetReferences 5`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetReferences 6`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetReferences 7`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetReferences 8`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetType 1`] = `"transaction.get"`; - -exports[`syscalls Neo.Transaction.GetType 2`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Transaction.GetType 3`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetType 4`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetType 5`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetType 6`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetUnspentCoins 1`] = `"transaction.get"`; - -exports[`syscalls Neo.Transaction.GetUnspentCoins 2`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Transaction.GetUnspentCoins 3`] = `"transactionData.get"`; - -exports[`syscalls Neo.Transaction.GetUnspentCoins 4`] = ` -Array [ - Array [ - Object { - "hash": "df09c9981eb0c4a2a182ce6090148647a2f4f6053c970380a645ed63b91ce258", - }, - ], -] -`; - -exports[`syscalls Neo.Transaction.GetUnspentCoins 5`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetUnspentCoins 6`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetUnspentCoins 7`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetUnspentCoins 8`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetUnspentCoins 9`] = `"transaction.get"`; - -exports[`syscalls Neo.Transaction.GetUnspentCoins 10`] = ` -Array [ - Array [ - Object { - "hash": "0303030303030303030303030303030303030303030303030303030303030303", - }, - ], -] -`; - -exports[`syscalls Neo.Transaction.GetUnspentCoins 11`] = `"transactionData.get"`; - -exports[`syscalls Neo.Transaction.GetUnspentCoins 12`] = ` -Array [ - Array [ - Object { - "hash": "df09c9981eb0c4a2a182ce6090148647a2f4f6053c970380a645ed63b91ce258", - }, - ], -] -`; - -exports[`syscalls Neo.Transaction.GetUnspentCoins 13`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetUnspentCoins 14`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetUnspentCoins 15`] = `Array []`; - -exports[`syscalls Neo.Transaction.GetUnspentCoins 16`] = `Array []`; - -exports[`syscalls Neo.Validator.Register 1`] = `"validator.tryGet"`; - -exports[`syscalls Neo.Validator.Register 2`] = ` -Array [ - Array [ - Object { - "publicKey": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", - }, - ], -] -`; - -exports[`syscalls Neo.Validator.Register 3`] = `Array []`; - -exports[`syscalls Neo.Validator.Register 4`] = `Array []`; - -exports[`syscalls Neo.Validator.Register 5`] = `Array []`; - -exports[`syscalls Neo.Validator.Register 6`] = `Array []`; - -exports[`syscalls Neo.Validator.Register 7`] = `"validator.tryGet"`; - -exports[`syscalls Neo.Validator.Register 8`] = ` -Array [ - Array [ - Object { - "publicKey": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", - }, - ], -] -`; - -exports[`syscalls Neo.Validator.Register 9`] = `"validator.add"`; - -exports[`syscalls Neo.Validator.Register 10`] = ` -Array [ - Array [ - Object { - "__$type": "Validator", - "publicKey": "02028a99826edc0c97d18e22b6932373d908d323aa7f92656a77ec26e8861699ef", - "registered": false, - "version": 0, - "votes": "0", - }, - ], -] -`; - -exports[`syscalls Neo.Validator.Register 11`] = `Array []`; - -exports[`syscalls Neo.Validator.Register 12`] = `Array []`; - -exports[`syscalls Neo.Validator.Register 13`] = `Array []`; - -exports[`syscalls Neo.Validator.Register 14`] = `Array []`; - -exports[`syscalls System.ExecutionEngine.GetCallingScriptHash 1`] = `Array []`; - -exports[`syscalls System.ExecutionEngine.GetCallingScriptHash 2`] = `Array []`; - -exports[`syscalls System.ExecutionEngine.GetCallingScriptHash 3`] = `Array []`; - -exports[`syscalls System.ExecutionEngine.GetCallingScriptHash 4`] = `Array []`; - -exports[`syscalls System.ExecutionEngine.GetCallingScriptHash 5`] = `Array []`; - -exports[`syscalls System.ExecutionEngine.GetCallingScriptHash 6`] = `Array []`; - -exports[`syscalls System.ExecutionEngine.GetCallingScriptHash 7`] = `Array []`; - -exports[`syscalls System.ExecutionEngine.GetCallingScriptHash 8`] = `Array []`; - -exports[`syscalls System.ExecutionEngine.GetEntryScriptHash 1`] = `Array []`; - -exports[`syscalls System.ExecutionEngine.GetEntryScriptHash 2`] = `Array []`; - -exports[`syscalls System.ExecutionEngine.GetEntryScriptHash 3`] = `Array []`; - -exports[`syscalls System.ExecutionEngine.GetEntryScriptHash 4`] = `Array []`; - -exports[`syscalls System.ExecutionEngine.GetExecutingScriptHash 1`] = `Array []`; - -exports[`syscalls System.ExecutionEngine.GetExecutingScriptHash 2`] = `Array []`; - -exports[`syscalls System.ExecutionEngine.GetExecutingScriptHash 3`] = `Array []`; - -exports[`syscalls System.ExecutionEngine.GetExecutingScriptHash 4`] = `Array []`; - -exports[`syscalls System.ExecutionEngine.GetScriptContainer 1`] = `Array []`; - -exports[`syscalls System.ExecutionEngine.GetScriptContainer 2`] = `Array []`; - -exports[`syscalls System.ExecutionEngine.GetScriptContainer 3`] = `Array []`; - -exports[`syscalls System.ExecutionEngine.GetScriptContainer 4`] = `Array []`; - -exports[`syscalls System.ExecutionEngine.GetScriptContainer 5`] = `Array []`; - -exports[`syscalls System.ExecutionEngine.GetScriptContainer 6`] = `Array []`; - -exports[`syscalls System.ExecutionEngine.GetScriptContainer 7`] = `Array []`; - -exports[`syscalls System.ExecutionEngine.GetScriptContainer 8`] = `Array []`; - -exports[`syscalls System.ExecutionEngine.GetScriptContainer 9`] = `Array []`; - -exports[`syscalls System.ExecutionEngine.GetScriptContainer 10`] = `Array []`; - -exports[`syscalls System.ExecutionEngine.GetScriptContainer 11`] = `Array []`; - -exports[`syscalls System.ExecutionEngine.GetScriptContainer 12`] = `Array []`; diff --git a/packages/neo-one-node-vm/src/__tests__/execute.test.ts b/packages/neo-one-node-vm/src/__tests__/execute.test.ts deleted file mode 100644 index d82527fe84..0000000000 --- a/packages/neo-one-node-vm/src/__tests__/execute.test.ts +++ /dev/null @@ -1,1849 +0,0 @@ -// tslint:disable no-any no-let no-object-mutation no-empty -import { common, crypto, ScriptBuilder, UInt160, UInt256, utils, VMState } from '@neo-one/client-common'; -import { - ArrayContractParameter, - ByteArrayContractParameter, - ExecuteScriptsResult, - Input, - InvocationTransaction, - NULL_ACTION, - Output, - ScriptContainerType, - TriggerType, - UInt160Attribute, - UInt256Attribute, - VMListeners, -} from '@neo-one/node-core'; -import { BN } from 'bn.js'; -import _ from 'lodash'; -import { assets, createBlockchain, factory, testUtils, transactions } from '../__data__'; -import { execute } from '../execute'; - -let listeners: VMListeners; - -const executeSimple = async ({ - blockchain, - transaction, - gas = utils.ZERO, - persistingBlock, - skipWitnessVerify, -}: { - readonly blockchain: any; - readonly transaction: InvocationTransaction; - readonly gas?: BN; - readonly persistingBlock?: any; - readonly skipWitnessVerify?: boolean; -}) => - execute({ - scripts: [{ code: transaction.script }], - blockchain, - scriptContainer: { - type: ScriptContainerType.Transaction, - value: transaction, - }, - - triggerType: TriggerType.Application, - action: NULL_ACTION, - gas, - skipWitnessVerify: skipWitnessVerify === undefined ? true : skipWitnessVerify, - persistingBlock, - listeners, - }); - -const neoBN = (value: string) => new BN(value, 10).mul(utils.ONE_HUNDRED_MILLION); - -describe('execute', () => { - let blockchain: any; - - const expectFailure = (result: ExecuteScriptsResult) => { - expect(result.errorMessage).toBeUndefined(); - expect(result.state).toEqual(VMState.Halt); - expect(result.stack.length).toEqual(1); - expect(result.stack[0].asBoolean()).toBeFalsy(); - expect(result.gasConsumed.toString(10)).toMatchSnapshot(); - testUtils.verifyBlockchainSnapshot(blockchain); - }; - - const expectThrow = (result: ExecuteScriptsResult) => { - expect(result.errorMessage).toBeDefined(); - if (result.errorMessage !== undefined) { - expect(result.errorMessage.split('\n')[0]).toMatchSnapshot(); - } - expect(result.state).toEqual(VMState.Fault); - expect(result.gasConsumed.toString(10)).toMatchSnapshot(); - testUtils.verifyBlockchainSnapshot(blockchain); - }; - - const expectSuccess = (result: ExecuteScriptsResult) => { - expect(result.errorMessage).toBeUndefined(); - expect(result.state).toEqual(VMState.Halt); - expect(result.stack.length).toEqual(1); - expect(result.stack[0].asBoolean()).toBeTruthy(); - expect(result.gasConsumed.toString(10)).toMatchSnapshot(); - testUtils.verifyBlockchainSnapshot(blockchain); - }; - - const checkResult = (result: ExecuteScriptsResult) => { - if (result.errorMessage !== undefined) { - throw new Error(result.errorMessage); - } - - if (result.state !== VMState.Halt) { - throw new Error(`Ended in ${result.state}`); - } - - return result.stack[0]; - }; - - const executeSetupScript = async (script: Buffer, gas = utils.ZERO) => { - const result = await executeSimple({ - blockchain, - transaction: transactions.createInvocation({ script }), - gas, - }); - - return checkResult(result); - }; - - beforeEach(() => { - blockchain = { - contract: {}, - settings: { - vm: {}, - }, - - storageItem: {}, - action: {}, - output: {}, - currentBlock: {}, - } as any; - - listeners = { - onNotify: jest.fn(() => {}), - onLog: jest.fn(() => {}), - onMigrateContract: jest.fn(() => {}), - onSetVotes: jest.fn(() => {}), - }; - }); - - const testKYC = (name: string, gas: BN, state: number) => { - test(name, async () => { - blockchain.contract.get = jest.fn(async () => Promise.resolve(transactions.kycContract)); - - blockchain.storageItem.add = jest.fn(async () => Promise.resolve()); - blockchain.storageItem.get = jest.fn(async () => Promise.resolve({ value: Buffer.alloc(20, 0) })); - - blockchain.storageItem.tryGet = jest.fn(async () => Promise.resolve({ value: Buffer.alloc(20, 0) })); - - blockchain.storageItem.update = jest.fn(async () => Promise.resolve()); - blockchain.action.add = jest.fn(async () => Promise.resolve()); - - const result = await executeSimple({ - blockchain, - transaction: transactions.kycTransaction, - gas, - }); - - if (state === VMState.Fault) { - const { errorMessage } = result; - expect(errorMessage).toBeDefined(); - if (errorMessage !== undefined) { - expect(errorMessage.split('\n')[0]).toMatchSnapshot(); - } - } else { - expect(result.errorMessage).toBeUndefined(); - } - expect(result.state).toEqual(state); - expect(result.gasConsumed.toString(10)).toMatchSnapshot(); - testUtils.verifyBlockchainSnapshot(blockchain); - testUtils.verifyListeners(listeners); - }); - }; - - testKYC('should fail kyc transaction with insufficient gas', utils.ZERO, VMState.Fault); - - testKYC('should not fail kyc transaction with sufficient gas', common.ONE_HUNDRED_MILLION_FIXED8, VMState.Halt); - - test('should refund on mintTokens with insufficient presale', async () => { - blockchain.contract.get = jest.fn(async () => Promise.resolve(transactions.kycContract)); - - blockchain.storageItem.tryGet = jest.fn(async (item) => { - if (item.key.toString('utf8') === 'sale_paused') { - return Promise.resolve({ value: Buffer.alloc(1, 0) }); - } - if (item.key.toString('utf8').startsWith('kyc_ok')) { - return Promise.resolve({ value: Buffer.alloc(1, 1) }); - } - - return Promise.resolve({ value: Buffer.alloc(20, 0) }); - }); - blockchain.storageItem.get = jest.fn(async () => Promise.resolve({ value: Buffer.alloc(20, 0) })); - - blockchain.output.get = jest.fn(async () => - Promise.resolve( - new Output({ - asset: common.stringToUInt256(common.NEO_ASSET_HASH), - value: new BN(204).mul(utils.ONE_HUNDRED_MILLION), - address: transactions.mintTransaction.outputs[1].address, - }), - ), - ); - - blockchain.action.add = jest.fn(async () => Promise.resolve()); - blockchain.currentBlock.index = 1920286; - - const result = await executeSimple({ - blockchain, - transaction: transactions.mintTransaction, - }); - - expect(result.errorMessage).toBeUndefined(); - expect(result.state).toEqual(VMState.Halt); - expect(result.gasConsumed.toString(10)).toMatchSnapshot(); - testUtils.verifyBlockchainSnapshot(blockchain); - testUtils.verifyListeners(listeners); - }); - - const { conciergeContract } = transactions; - - const setConciergeParam = async (operation: string, value: string) => - executeSetupScript(new ScriptBuilder().emitAppCall(conciergeContract.hash, operation, new BN(value, 10)).build()); - - const expectItemBNEquals = async (hash: UInt160, key: Buffer | UInt160, value: string) => { - const item = await blockchain.storageItem.get({ - hash, - key, - }); - - testUtils.expectItemBNEquals(item, value); - }; - - const expectConciergeItemBNEquals = async (key: Buffer | UInt160, value: string) => - expectItemBNEquals(conciergeContract.hash, key, value); - - const conciergeSenderAddress = common.bufferToUInt160(Buffer.alloc(20, 10)); - const mockConciergeMintOutput = () => { - blockchain.output.get = jest.fn(async () => - Promise.resolve( - new Output({ - address: conciergeSenderAddress, - value: neoBN('20'), - asset: assets.NEO_ASSET_HASH_UINT256, - }), - ), - ); - }; - - const conciergeMintTokensScript = new ScriptBuilder().emitAppCall(conciergeContract.hash, 'mintTokens').build(); - const conciergeInputHash = common.bufferToUInt256(Buffer.alloc(32, 5)); - - const conciergeNEOTransaction = transactions.createInvocation({ - script: conciergeMintTokensScript, - inputs: [ - new Input({ - hash: conciergeInputHash, - index: 0, - }), - ], - - outputs: [ - new Output({ - address: conciergeSenderAddress, - value: neoBN('10'), - asset: assets.NEO_ASSET_HASH_UINT256, - }), - - new Output({ - address: conciergeContract.hash, - value: neoBN('10'), - asset: assets.NEO_ASSET_HASH_UINT256, - }), - ], - }); - - const conciergeWhitelistBeginTime = 1518512400; - const conciergePreSaleBeginTime = 1518598800; - const conciergeMainSaleBeginTime = 1522486800; - - const conciergeDeploy = async () => - executeSetupScript(new ScriptBuilder().emitAppCall(conciergeContract.hash, 'deploy').build()); - - describe('concierge', () => { - const mockBlockchain = () => { - blockchain = createBlockchain({ - contracts: [conciergeContract], - }); - - mockConciergeMintOutput(); - }; - - const ownerScriptHash = common.stringToUInt160('0x78bad2350ef3403faba2a1b5fc5415ebd88e0946'); - - const totalSupply = Buffer.from('totalSupply', 'utf8'); - const whitelistSaleBegin = Buffer.from('WHITELIST_SALE_BEGIN', 'utf8'); - const whitelistHardCap = Buffer.from('WHITELIST_HARD_CAP', 'utf8'); - const preSaleBegin = Buffer.from('PRE_SALE_BEGIN', 'utf8'); - const preSaleHardCap = Buffer.from('PRE_SALE_HARD_CAP', 'utf8'); - const mainSaleBegin = Buffer.from('MAIN_SALE_BEGIN', 'utf8'); - const mainSaleHardCap = Buffer.from('MAIN_SALE_HARD_CAP', 'utf8'); - const maxNEOPerTransfer = Buffer.from('MAX_NEO_PER_TRANSFER', 'utf8'); - - beforeEach(() => { - mockBlockchain(); - }); - - const addToWhitelist = async (address: UInt160) => - executeSetupScript(new ScriptBuilder().emitAppCall(conciergeContract.hash, 'addToWhitelist', address).build()); - - test('should add to storage in deploy', async () => { - const ret = await conciergeDeploy(); - - testUtils.verifyBlockchainSnapshot(blockchain); - - expect(ret.asBoolean()).toBeTruthy(); - await expectConciergeItemBNEquals(ownerScriptHash, '3900000000000000'); - await expectConciergeItemBNEquals(totalSupply, '3900000000000000'); - await expectConciergeItemBNEquals(whitelistSaleBegin, '1518512400'); - await expectConciergeItemBNEquals(whitelistHardCap, '45000000'); - await expectConciergeItemBNEquals(preSaleBegin, '1518598800'); - await expectConciergeItemBNEquals(preSaleHardCap, '55000000'); - await expectConciergeItemBNEquals(mainSaleBegin, '1522486800'); - await expectConciergeItemBNEquals(mainSaleHardCap, '100000000'); - await expectConciergeItemBNEquals(maxNEOPerTransfer, '250'); - testUtils.verifyListeners(listeners); - }); - - test('should fail on multiple deploy', async () => { - let ret = await conciergeDeploy(); - expect(ret.asBoolean()).toBeTruthy(); - - ret = await conciergeDeploy(); - expect(ret.asBoolean()).toBeFalsy(); - - testUtils.verifyBlockchainSnapshot(blockchain); - testUtils.verifyListeners(listeners); - }); - - describe('mintTokens', () => { - beforeEach(() => { - mockBlockchain(); - }); - - test('should fail without a sender', async () => { - await conciergeDeploy(); - - const result = await executeSimple({ - blockchain, - transaction: transactions.createInvocation({ - script: conciergeMintTokensScript, - }), - }); - - expectFailure(result); - testUtils.verifyListeners(listeners); - }); - - describe('should fail if current exchange rate is 0', () => { - beforeEach(() => { - mockBlockchain(); - }); - - test('when whitelist sale period and not whitelisted', async () => { - await conciergeDeploy(); - - const result = await executeSimple({ - blockchain, - transaction: conciergeNEOTransaction, - persistingBlock: { - timestamp: conciergeWhitelistBeginTime + 1, - }, - }); - - expectFailure(result); - testUtils.verifyListeners(listeners); - }); - - test('when whitelist sale period and not whitelisted real world', async () => { - blockchain.output.get = jest.fn(async () => - Promise.resolve( - new Output({ - address: conciergeSenderAddress, - value: neoBN('1'), - asset: assets.NEO_ASSET_HASH_UINT256, - }), - ), - ); - - await conciergeDeploy(); - await setConciergeParam('setWhitelistSaleBegin', '1518512370'); - await setConciergeParam('setPresaleBegin', '1518598770'); - - const result = await executeSimple({ - blockchain, - transaction: transactions.createInvocation({ - script: conciergeMintTokensScript, - inputs: [ - new Input({ - hash: conciergeInputHash, - index: 0, - }), - ], - - outputs: [ - new Output({ - address: conciergeContract.hash, - asset: assets.NEO_ASSET_HASH_UINT256, - value: neoBN('1'), - }), - ], - }), - - persistingBlock: { - timestamp: 1518597416, - }, - }); - - expectFailure(result); - testUtils.verifyListeners(listeners); - }); - - test('when whitelist sale period and rate not set', async () => { - await conciergeDeploy(); - await addToWhitelist(conciergeSenderAddress); - - const result = await executeSimple({ - blockchain, - transaction: conciergeNEOTransaction, - persistingBlock: { - timestamp: conciergeWhitelistBeginTime + 1, - }, - }); - - expectFailure(result); - testUtils.verifyListeners(listeners); - }); - - test('when pre sale sale period and rate not set', async () => { - await conciergeDeploy(); - - const result = await executeSimple({ - blockchain, - transaction: conciergeNEOTransaction, - persistingBlock: { - timestamp: conciergePreSaleBeginTime + 1, - }, - }); - - expectFailure(result); - testUtils.verifyListeners(listeners); - }); - }); - - test('should mint tokens during whitelist based on exchange rate', async () => { - await conciergeDeploy(); - await addToWhitelist(conciergeSenderAddress); - await setConciergeParam('setWhitelistSaleRate', '22'); - - const result = await executeSimple({ - blockchain, - transaction: conciergeNEOTransaction, - persistingBlock: { - timestamp: conciergeWhitelistBeginTime + 1, - }, - }); - - expectSuccess(result); - await expectConciergeItemBNEquals(conciergeSenderAddress, '22000000000'); - - testUtils.verifyListeners(listeners); - }); - - test('should mint tokens during pre sale based on exchange rate with max tokens', async () => { - await conciergeDeploy(); - await setConciergeParam('setPresaleWeek1Rate', '10'); - await setConciergeParam('setMaxPurchase', '5'); - - const result = await executeSimple({ - blockchain, - transaction: conciergeNEOTransaction, - persistingBlock: { - timestamp: conciergePreSaleBeginTime + 1, - }, - }); - - expectSuccess(result); - await expectConciergeItemBNEquals(conciergeSenderAddress, '5000000000'); - testUtils.verifyListeners(listeners); - }); - - test('should mint tokens during main sale based on exchange rate with total supply cap', async () => { - await conciergeDeploy(); - await setConciergeParam('setMainsaleWeek2Rate', '10'); - await setConciergeParam('setMaxPurchase', '10'); - await setConciergeParam('setMainsaleHardcap', '39000050'); - - const result = await executeSimple({ - blockchain, - transaction: conciergeNEOTransaction, - persistingBlock: { - timestamp: conciergeMainSaleBeginTime + 1 + 7 * 24 * 3600, - }, - }); - - expectSuccess(result); - await expectConciergeItemBNEquals(conciergeSenderAddress, '5000000000'); - testUtils.verifyListeners(listeners); - }); - }); - - describe('transfer', () => { - const receiverAddress = common.bufferToUInt160(Buffer.alloc(20, 4)); - - const mintTokens = async () => { - await conciergeDeploy(); - await setConciergeParam('setPresaleWeek1Rate', '1000'); - await setConciergeParam('setMaxPurchase', '1000'); - - const result = await executeSimple({ - blockchain, - transaction: conciergeNEOTransaction, - persistingBlock: { - timestamp: conciergePreSaleBeginTime + 1, - }, - }); - - checkResult(result); - testUtils.verifyListeners(listeners); - }; - - const getSenderValue = async () => { - const senderItem = await blockchain.storageItem.get({ - hash: conciergeContract.hash, - key: conciergeSenderAddress, - }); - - return utils.fromSignedBuffer(senderItem.value); - }; - - const testTransfer = ({ count, success, gas }: { count: number; success: boolean; gas?: string }) => { - test(`should ${success ? '' : 'not '}handle ${count} transfers${ - gas === undefined ? '' : ` with ${gas} gas` - }`, async () => { - await mintTokens(); - const value = new BN(10); - const senderValue = await getSenderValue(); - - const sb = new ScriptBuilder(); - _.range(count).forEach((idx) => { - sb.emitAppCall(conciergeContract.hash, 'transfer', conciergeSenderAddress, receiverAddress, value); - - if (idx > 0) { - sb.emitOp('AND'); - } - }); - - const result = await executeSimple({ - blockchain, - transaction: transactions.createInvocation({ - script: sb.build(), - }), - - gas: gas === undefined ? undefined : neoBN(gas), - }); - - if (success) { - expectSuccess(result); - const expectedValue = value.mul(new BN(count)); - await expectConciergeItemBNEquals(conciergeSenderAddress, senderValue.sub(expectedValue).toString(10)); - - await expectConciergeItemBNEquals(receiverAddress, expectedValue.toString(10)); - } else { - expectThrow(result); - } - testUtils.verifyListeners(listeners); - }); - }; - - beforeEach(() => { - mockBlockchain(); - }); - - test('should add malformed address to storage', async () => { - await mintTokens(); - const value = new BN(10); - - const result = await executeSimple({ - blockchain, - transaction: transactions.createInvocation({ - script: new ScriptBuilder() - .emitAppCall( - conciergeContract.hash, - 'transfer', - conciergeSenderAddress, - new ScriptBuilder() - .emit( - Buffer.from( - '4164636f57696a714c756a4a4a626b69344776696a5a5053726d37534a6b5551394d2020e4bda0e79a845549443a204a5953364e41', - 'hex', - ), - ) - .build(), - value, - ) - .build(), - }), - }); - - expectSuccess(result); - }); - - _.range(1, 4).forEach((count) => testTransfer({ count, success: true })); - _.range(4, 6).forEach((count) => testTransfer({ count, success: false })); - - _.range(4, 8).forEach((count) => - testTransfer({ - count, - success: true, - gas: '10', - }), - ); - - _.range(8, 10).forEach((count) => - testTransfer({ - count, - success: false, - gas: '10', - }), - ); - }); - }); - - const { switcheoTokenContract } = transactions; - - const expectSwitcheoItemBNEquals = async (key: Buffer | UInt160, value: string) => - expectItemBNEquals(switcheoTokenContract.hash, key, value); - - const switcheoTokenSenderAddress = common.bufferToUInt160(Buffer.alloc(20, 7)); - - const switcheoMintTokensScript = new ScriptBuilder().emitAppCall(switcheoTokenContract.hash, 'mintTokens').build(); - const switcheoTokenInputHash = common.bufferToUInt256(Buffer.alloc(32, 7)); - - const switcheoNEOTransaction = transactions.createInvocation({ - script: switcheoMintTokensScript, - inputs: [ - new Input({ - hash: switcheoTokenInputHash, - index: 0, - }), - ], - - outputs: [ - new Output({ - address: switcheoTokenSenderAddress, - value: neoBN('10'), - asset: assets.NEO_ASSET_HASH_UINT256, - }), - - new Output({ - address: switcheoTokenContract.hash, - value: neoBN('10'), - asset: assets.NEO_ASSET_HASH_UINT256, - }), - ], - }); - - const switcheoDeploy = async () => { - await executeSetupScript(new ScriptBuilder().emitAppCall(switcheoTokenContract.hash, 'deploy').build()); - - await executeSetupScript(new ScriptBuilder().emitAppCall(switcheoTokenContract.hash, 'enableTransfers').build()); - }; - - describe('switcheo', () => { - const { switcheoContract } = transactions; - const feeAddress = Buffer.alloc(20, 10); - - const switcheoInputHash = common.bufferToUInt256(Buffer.alloc(32, 6)); - - const mockBlockchain = () => { - blockchain = createBlockchain({ - contracts: [switcheoContract, conciergeContract, switcheoTokenContract], - }); - - blockchain.asset.get = assets.createGetAsset(); - - blockchain.output.get = jest.fn(async ({ hash }) => { - if (common.uInt256Equal(hash, switcheoInputHash)) { - return new Output({ - address: switcheoContract.hash, - value: new BN(1), - asset: assets.GAS_ASSET_HASH_UINT256, - }); - } - - if (common.uInt256Equal(hash, switcheoTokenInputHash)) { - return new Output({ - address: switcheoTokenSenderAddress, - value: neoBN('20'), - asset: assets.NEO_ASSET_HASH_UINT256, - }); - } - - if (common.uInt256Equal(hash, conciergeInputHash)) { - return new Output({ - address: conciergeSenderAddress, - value: neoBN('20'), - asset: assets.NEO_ASSET_HASH_UINT256, - }); - } - - throw new Error('Unknown input'); - }); - }; - - beforeEach(() => { - mockBlockchain(); - }); - - const deploy = async () => { - await executeSetupScript( - new ScriptBuilder() - .emitAppCall( - switcheoContract.hash, - 'initialize', - utils.TWO, // Taker fee - utils.TWO, // Maker fee - feeAddress, - ) - .build(), - ); - - await conciergeDeploy(); - await switcheoDeploy(); - }; - - const whitelist = async (hash: UInt160) => { - const result = await executeSimple({ - blockchain, - transaction: transactions.createInvocation({ - script: new ScriptBuilder().emitAppCall(switcheoContract.hash, 'addToWhitelist', hash).build(), - }), - }); - - expectSuccess(result); - }; - - const whitelistConcierge = async () => whitelist(conciergeContract.hash); - const whitelistSwitcheo = async () => whitelist(switcheoTokenContract.hash); - - const conciergeTokenAmount = '5000000000'; - const conciergeDepositAmount = '2500000000'; - const conciergeRemainingAmount = '2500000000'; - const mintConciergeTokens = async () => { - await setConciergeParam('setPresaleWeek1Rate', '10'); - await setConciergeParam('setMaxPurchase', '5'); - - const result = await executeSimple({ - blockchain, - transaction: conciergeNEOTransaction, - persistingBlock: { - timestamp: conciergePreSaleBeginTime + 1, - }, - }); - - expectSuccess(result); - await expectConciergeItemBNEquals(conciergeSenderAddress, conciergeTokenAmount); - }; - - const switcheoTokenAmount = '5000000000'; - const switcheoDepositAmount = '2500000000'; - const switcheoRemainingAmount = '2500000000'; - const mintSwitcheoTokens = async () => { - const configResult = await executeSimple({ - blockchain, - transaction: transactions.createInvocation({ - script: new ScriptBuilder() - .emitAppCall( - switcheoTokenContract.hash, - 'setSaleConfig', - new BN(conciergePreSaleBeginTime), - new BN('500000000', 10), - new BN('500000000', 10), - ) - .build(), - }), - }); - - expectSuccess(configResult); - - const whitelistResult = await executeSimple({ - blockchain, - transaction: transactions.createInvocation({ - script: new ScriptBuilder() - .emitAppCall(switcheoTokenContract.hash, 'addToWhitelist', switcheoTokenSenderAddress, '1') - .build(), - }), - }); - - expectSuccess(whitelistResult); - - const result = await executeSimple({ - blockchain, - transaction: switcheoNEOTransaction, - persistingBlock: { - timestamp: conciergePreSaleBeginTime + 1, - }, - }); - - expectSuccess(result); - await expectSwitcheoItemBNEquals(switcheoTokenSenderAddress, switcheoTokenAmount); - }; - - const depositConciergeTokens = async () => { - const result = await executeSimple({ - blockchain, - transaction: transactions.createInvocation({ - script: new ScriptBuilder() - .emitAppCall( - switcheoContract.hash, - 'deposit', - conciergeSenderAddress, - conciergeContract.hash, - new BN(conciergeDepositAmount, 10), - ) - .build(), - }), - }); - - expectSuccess(result); - }; - - const depositSwitcheoTokens = async () => { - const result = await executeSimple({ - blockchain, - transaction: transactions.createInvocation({ - script: new ScriptBuilder() - .emitAppCall( - switcheoContract.hash, - 'deposit', - switcheoTokenSenderAddress, - switcheoTokenContract.hash, - new BN(switcheoDepositAmount, 10), - ) - .build(), - }), - }); - - expectSuccess(result); - }; - - const markWithdrawTokens = async (withdrawAddress: UInt160, asset: UInt160) => { - const result = await executeSimple({ - blockchain, - transaction: transactions.createInvocation({ - script: new ScriptBuilder().emitAppCall(switcheoContract.hash, 'withdraw').build(), - attributes: [ - // Withdrawal Stage = Mark - new UInt256Attribute({ - usage: 0xa1, - value: common.bufferToUInt256(Buffer.concat([Buffer.from([0x50]), Buffer.alloc(31, 0)])), - }), - - // Withdrawal address - new UInt160Attribute({ - usage: 0x20, - value: withdrawAddress, - }), - - // Withdrawal asset - new UInt256Attribute({ - usage: 0xa2, - value: common.bufferToUInt256(Buffer.concat([common.uInt160ToBuffer(asset), Buffer.alloc(12, 0)])), - }), - ], - }), - }); - - expectSuccess(result); - }; - - const markWithdrawConciergeTokens = async (address: UInt160) => markWithdrawTokens(address, conciergeContract.hash); - const markWithdrawSwitcheoTokens = async (address: UInt160) => - markWithdrawTokens(address, switcheoTokenContract.hash); - - const processWithdrawTokens = async (address: UInt160, asset: UInt160) => { - const result = await executeSimple({ - blockchain, - transaction: transactions.createInvocation({ - script: new ScriptBuilder().emitTailCall(switcheoContract.hash, 'withdraw').build(), - inputs: [ - new Input({ - hash: switcheoInputHash, - index: 0, - }), - ], - - outputs: [ - new Output({ - address: switcheoContract.hash, - value: new BN(1), - asset: assets.GAS_ASSET_HASH_UINT256, - }), - ], - - attributes: [ - // Withdrawal Stage = Withdraw - new UInt256Attribute({ - usage: 0xa1, - value: common.bufferToUInt256(Buffer.concat([Buffer.from([0x51]), Buffer.alloc(31, 0)])), - }), - - // Withdrawal address - new UInt256Attribute({ - usage: 0xa4, - value: common.bufferToUInt256(Buffer.concat([common.uInt160ToBuffer(address), Buffer.alloc(12, 0)])), - }), - - // Withdrawal asset - new UInt256Attribute({ - usage: 0xa2, - value: common.bufferToUInt256(Buffer.concat([common.uInt160ToBuffer(asset), Buffer.alloc(12, 0)])), - }), - ], - }), - - skipWitnessVerify: false, - }); - - expectSuccess(result); - }; - - const processWithdrawConciergeTokens = async (address: UInt160) => - processWithdrawTokens(address, conciergeContract.hash); - const processWithdrawSwitcheoTokens = async (address: UInt160) => - processWithdrawTokens(address, switcheoTokenContract.hash); - - const offerHash = crypto.hash256( - Buffer.concat([ - common.uInt160ToBuffer(switcheoTokenSenderAddress), - switcheoTokenContract.hash, - conciergeContract.hash, - utils.toSignedBuffer(new BN(switcheoDepositAmount, 10)), - utils.toSignedBuffer(new BN(conciergeDepositAmount, 10)), - utils.toSignedBuffer(new BN(10)), - ]), - ); - - const offerSwitcheoTokens = async () => { - const result = await executeSimple({ - blockchain, - transaction: transactions.createInvocation({ - script: new ScriptBuilder() - .emitAppCall( - switcheoContract.hash, - 'makeOffer', - switcheoTokenSenderAddress, - switcheoTokenContract.hash, - new BN(switcheoDepositAmount, 10), - conciergeContract.hash, - new BN(conciergeDepositAmount, 10), - new BN(10), - ) - .build(), - }), - }); - - expectSuccess(result); - }; - const fillSwitcheoTokens = async () => { - const result = await executeSimple({ - blockchain, - transaction: transactions.createInvocation({ - script: new ScriptBuilder() - .emitAppCall( - switcheoContract.hash, - 'fillOffer', - conciergeSenderAddress, - Buffer.concat([switcheoTokenContract.hash, conciergeContract.hash]), - - offerHash, - new BN(conciergeDepositAmount, 10), - true, - ) - .build(), - }), - }); - - expectSuccess(result); - }; - - describe('withdraw', () => { - test('should allow NEP5 Concierge withdrawals', async () => { - await deploy(); - await mintConciergeTokens(); - await whitelistConcierge(); - await depositConciergeTokens(); - await expectConciergeItemBNEquals(conciergeSenderAddress, conciergeRemainingAmount); - - await markWithdrawConciergeTokens(conciergeSenderAddress); - await processWithdrawConciergeTokens(conciergeSenderAddress); - await expectConciergeItemBNEquals(conciergeSenderAddress, conciergeTokenAmount); - - testUtils.verifyListeners(listeners); - }); - - test('should allow NEP5 Switcheo withdrawals', async () => { - await deploy(); - await mintSwitcheoTokens(); - await whitelistSwitcheo(); - await depositSwitcheoTokens(); - await expectSwitcheoItemBNEquals(switcheoTokenSenderAddress, switcheoRemainingAmount); - - await markWithdrawSwitcheoTokens(switcheoTokenSenderAddress); - await processWithdrawSwitcheoTokens(switcheoTokenSenderAddress); - await expectSwitcheoItemBNEquals(switcheoTokenSenderAddress, switcheoTokenAmount); - - testUtils.verifyListeners(listeners); - }); - - test('should allow withdrawing filled orders', async () => { - await deploy(); - - await whitelistConcierge(); - await mintConciergeTokens(); - await depositConciergeTokens(); - await expectConciergeItemBNEquals(conciergeSenderAddress, conciergeRemainingAmount); - - await whitelistSwitcheo(); - await mintSwitcheoTokens(); - await depositSwitcheoTokens(); - await expectSwitcheoItemBNEquals(switcheoTokenSenderAddress, switcheoRemainingAmount); - - await offerSwitcheoTokens(); - await fillSwitcheoTokens(); - - await markWithdrawConciergeTokens(switcheoTokenSenderAddress); - await processWithdrawConciergeTokens(switcheoTokenSenderAddress); - await expectConciergeItemBNEquals(switcheoTokenSenderAddress, '2499995000'); - - await markWithdrawSwitcheoTokens(conciergeSenderAddress); - await processWithdrawSwitcheoTokens(conciergeSenderAddress); - await expectSwitcheoItemBNEquals(conciergeSenderAddress, switcheoDepositAmount); - - testUtils.verifyListeners(listeners); - }); - }); - }); - - describe('narrative token', () => { - const { narrativeTokenContract } = transactions; - - const narrativeTokenCrowdsaleRegister = async (bytes: Buffer, fail?: boolean) => { - const result = await executeSimple({ - blockchain, - transaction: transactions.createInvocation({ - script: new ScriptBuilder() - .emitAppCall(narrativeTokenContract.hash, 'crowdsale_register', new ScriptBuilder().emit(bytes).build()) - .build(), - }), - }); - - if (fail) { - expectThrow(result); - } else { - expectSuccess(result); - } - }; - - const narrativeTokenCrowdsaleDeregister = async (bytes: Buffer) => { - const result = await executeSimple({ - blockchain, - transaction: transactions.createInvocation({ - script: new ScriptBuilder() - .emitAppCall(narrativeTokenContract.hash, 'crowdsale_deregister', new ScriptBuilder().emit(bytes).build()) - .build(), - }), - }); - - expectSuccess(result); - }; - - const mockBlockchain = () => { - blockchain = createBlockchain({ - contracts: [narrativeTokenContract], - }); - }; - - const deploy = async () => - executeSetupScript(new ScriptBuilder().emitAppCall(narrativeTokenContract.hash, 'deploy').build()); - - beforeEach(() => { - mockBlockchain(); - }); - - test('crowdsale register - fails at free GAS limit for bulk addresses', async () => { - const ret = await deploy(); - expect(ret.asBoolean()).toBeTruthy(); - - await narrativeTokenCrowdsaleRegister(Buffer.from('23ba2703c53263e8d6e522dc32203339dcd8eee9', 'hex')); - await narrativeTokenCrowdsaleRegister( - Buffer.from( - '5c2721a33bf665880fb2c1c0d504d92dcfe1616f03a8b007549dd4d19f367d6b71ed5c6fe9aa827298d3602f1e4f5ba179481398e55593862a0df92c62b9d04e2d8b2a989d72c3c9478c18f2ef714cf2c2c1bac70b182dbf8434323013c72d66c57591d849b197c38b07107c7ac4097ba47c1c9c39a04409dbfae7df8d49ad1319079604318ba12252ace7f1ace575f6847bc025bb30d752d73892bbb875e8d2baa6caaaf1b6efeb33744ace65f19fad05b26e12c1e347ae7770a182a4934e47332bebbd4cc848692cf5480980a6d99833e84fece90e31b196cbfe775ea2beb13b95ed41179becfb21dffcfbc3696d56dd270aa03397e5831c6b21f3542bfec1bf48fdafc51b2a9364f1d85268737eb7421911f6f581744475ab2bec031da981f65df6372f0a9dabcc4d5a174cadc544894ee83981fc66021d33025579f4eec82b96c64588ff0def56e0b0304f584f0acfa9632d6a3d3c88d3689b06954f57bcc860e78de1713d98982fb2a042a9b9a973435b5d49ddaca01d707ae0287bc0f0c2cceeb41a15131c5f98a6b690ca6c57366d229bd2b2f266b5b240f2057f50eb43f41945d84f65776cc194dd408e2cbb12a665cd2b9502b576cd518f09f9eddec27374fe8c9978db7d50a8144bb7dd13f517e8f0e1b4f90b20918f605fbcbfd6afa86a36b7555bfb9910128651af954dfa3a7de539949b4c0c4d28b55ac089e85cd8ec118f8ea34e2a7045b5d17a344b63f2dde9bef9a3ae624320d73875dff29fd7a4779f6dca2417e6f8c7f6b62d7f8ee2d22a87228f0c8b456fb43dc9fdb04793044493e9403daefed173a9e5a82acdfb7f40c4845419d360c06efe559805a52f4c554ff5d8de17ba8a28d815cbb32e904328d57179ef7282d5e33b546ee6', - 'hex', - ), - true, - ); - - testUtils.verifyListeners(listeners); - }); - - test('crowdsale deregister - does not log delete for nonexistent address', async () => { - const ret = await deploy(); - expect(ret.asBoolean()).toBeTruthy(); - - await narrativeTokenCrowdsaleRegister(Buffer.from('23ba2703c53263e8d6e522dc32203339dcd8eee9', 'hex')); - await narrativeTokenCrowdsaleDeregister(Buffer.from('23ba2703c53263e8d6e522dc32203339dcd8eee9', 'hex')); - await narrativeTokenCrowdsaleDeregister(Buffer.from('dbfae7df8d49ad1319079604318ba12252ace7f1', 'hex')); - - testUtils.verifyListeners(listeners); - }); - }); - - describe('Wowbit token', () => { - const { wowbitTokenContract } = transactions; - - const mockBlockchain = () => { - blockchain = createBlockchain({ - contracts: [wowbitTokenContract], - }); - }; - - const deploy = async () => - executeSetupScript( - new ScriptBuilder().emitAppCall(wowbitTokenContract.hash, 'deploy').build(), - common.ONE_THOUSAND_FIXED8, - ); - - beforeEach(() => { - mockBlockchain(); - }); - - test('deploy - negative buffer conversion works properly', async () => { - const ret = await deploy(); - expect(ret.asBoolean()).toBeTruthy(); - - testUtils.verifyBlockchainSnapshot(blockchain); - testUtils.verifyListeners(listeners); - }); - }); - - describe('Mystery invoke', () => { - const { mysteryScript } = transactions; - - const mockBlockchain = () => { - blockchain = createBlockchain({ contracts: [] }); - - blockchain.contract.tryGet = jest.fn(async () => Promise.resolve(undefined)); - blockchain.contract.add = jest.fn(async () => Promise.resolve()); - }; - - const deploy = async () => - executeSetupScript(new ScriptBuilder().emit(mysteryScript).build(), common.ONE_THOUSAND_FIXED8); - - beforeEach(() => { - mockBlockchain(); - }); - - test('deploy - invalid contract paramter ignored', async () => { - const ret = await deploy(); - expect(ret).toBeTruthy(); - - testUtils.verifyBlockchainSnapshot(blockchain); - testUtils.verifyListeners(listeners); - }); - }); - - describe('Aphelion exchange', () => { - const { aphelionExchangeContract } = transactions; - - const mockBlockchain = () => { - blockchain = createBlockchain({ contracts: [aphelionExchangeContract] }); - }; - - const deploy = async () => - executeSetupScript( - new ScriptBuilder().emitAppCall(aphelionExchangeContract.hash, 'deploy').build(), - common.ONE_THOUSAND_FIXED8, - ); - - const setManager = async () => { - const result = await executeSimple({ - blockchain, - transaction: transactions.createInvocation({ - script: new ScriptBuilder() - .emit( - Buffer.from( - '141a1af8a9f46ebcaa47f3b2f967dd7bf606d8931651c10a7365744d616e6167657267cbf29df42fb950a4456787ec4ebf2076795f8948', - 'hex', - ), - ) - .build(), - }), - }); - - expectSuccess(result); - }; - - beforeEach(() => { - mockBlockchain(); - }); - - test('deploy + set manager - CALL_I opcode', async () => { - await deploy(); - await setManager(); - - testUtils.verifyBlockchainSnapshot(blockchain); - testUtils.verifyListeners(listeners); - }); - }); - - describe('Bridge Protocol', () => { - const { bridgeProtocolTokenContract, bridgeProtocolKeyServer } = transactions; - - const mockBlockchain = () => { - blockchain = createBlockchain({ contracts: [bridgeProtocolTokenContract, bridgeProtocolKeyServer] }); - }; - - const deployToken = async () => - executeSetupScript( - new ScriptBuilder().emitAppCall(bridgeProtocolTokenContract.hash, 'deploy').build(), - common.ONE_THOUSAND_FIXED8, - ); - - // https://neotracker.io/tx/f0531b93b1771ad093774d4aea423b838d513b1c823f44ad686582a543ce8317 - const deployKeyServer = async () => - executeSetupScript( - new ScriptBuilder() - .emit(Buffer.from('025b5d04696e697467f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4', 'hex')) - .build(), - common.ONE_THOUSAND_FIXED8, - ); - - const publish = async () => { - const result = await executeSimple({ - blockchain, - transaction: transactions.createInvocation({ - script: new ScriptBuilder() - .emit( - Buffer.from( - '14aefaa22d12d1222db572901ba81478da2803bb2b4d8f022d2d2d2d2d424547494e20504750205055424c4943204b455920424c4f434b2d2d2d2d2d0d0a56657273696f6e3a204f70656e5047502e6a732076332e312e300d0a436f6d6d656e743a2068747470733a2f2f6f70656e7067706a732e6f72670d0a0d0a786a4d45572f6c343252594a4b775942424148615277384241516441356c6e326d70414150374864645834506c54774f51425658305a475942542b720a6636784757624c786833504e4b454a796157526e5a53425159584e7a634739796443413859573576626b4269636d6c6b5a32567759584e7a634739790a64433570627a37436477515146676f414b515543572f6c343251594c435163494177494a454b6755654e6f6f413773724242554943674944466749420a41686b4241687344416834424141414148674541727962314574726c53315870587558636c595568506b44345055516c7835587a6c3070354e526e740a735334412f693230434d57346e67312b42762f5548316266496247355871736742666e4e4c4a6a744f584e74413355507a6a6745572f6c343252494b0a4b7759424241475856514546415145485142545944733873494d2b5669446a52336567325065746646715962632f564a536535575a316b4b677234530a4177454942384a68424267574341415442514a622b586a5a4352436f46486a614b414f374b77496244414141457145412f3342596f5a5641666b31380a704f4d556f612f5a446e32476e4a5447312f4f456c684b4a4558553543614944415039315032373557527a686d77364a337a6a55753279652f5777510a5950492f414e434841532f766c344c6443413d3d0d0a3d336f514b0d0a2d2d2d2d2d454e4420504750205055424c4943204b455920424c4f434b2d2d2d2d2d0d0a0d0a14aefaa22d12d1222db572901ba81478da2803bb2b14a1502468141d9b6832da9d2e455bde41779faea554c1077075626c69736867f8b65f752e5c0eb9d8b19d7f7198db03ef5fb4a4', - 'hex', - ), - ) - .build(), - }), - }); - - expectSuccess(result); - }; - - beforeEach(() => { - mockBlockchain(); - }); - - test('publish', async () => { - const retToken = await deployToken(); - expect(retToken.asBoolean()).toBeTruthy(); - const retKeyServer = await deployKeyServer(); - expect(retKeyServer.asBoolean()).toBeTruthy(); - - await publish(); - - testUtils.verifyListeners(listeners); - }); - }); - - describe('NEX Token', () => { - const { nexTokenContract } = transactions; - - const mockBlockchain = () => { - blockchain = createBlockchain({ contracts: [nexTokenContract] }); - }; - - const initializeOwners = async () => { - const result = await executeSimple({ - blockchain, - transaction: transactions.createInvocation({ - script: new ScriptBuilder() - .emit( - Buffer.from('025b5d10696e697469616c697a654f776e657273672911176a2e804903ac8a39447c6e084736cd4a3a', 'hex'), - ) - .build(), - }), - gas: common.ONE_HUNDRED_FIXED8, - }); - - expectSuccess(result); - }; - - const deploy = async () => { - const result = await executeSimple({ - blockchain, - transaction: transactions.createInvocation({ - script: new ScriptBuilder() - .emit(Buffer.from('025b5d066465706c6f79672911176a2e804903ac8a39447c6e084736cd4a3a', 'hex')) - .build(), - }), - }); - - expectSuccess(result); - }; - - const ownerMint = async (owner: string) => { - const result = await executeSimple({ - blockchain, - transaction: transactions.createInvocation({ - script: new ScriptBuilder().emitAppCall(nexTokenContract.hash, 'ownerMint', Buffer.from(owner)).build(), - }), - }); - - expectSuccess(result); - }; - - const getOwners = async () => { - const result = await executeSimple({ - blockchain, - transaction: transactions.createInvocation({ - script: new ScriptBuilder().emitAppCall(nexTokenContract.hash, 'getOwners').build(), - }), - }); - - return ((result.stack[0] as ArrayContractParameter).value as ReadonlyArray).map( - ({ value }) => common.asUInt160(value), - ); - }; - - const transfer = async (from: UInt160, to: UInt160, amount: BN) => { - const result = await executeSimple({ - blockchain, - transaction: transactions.createInvocation({ - script: new ScriptBuilder().emitAppCall(nexTokenContract.hash, 'transfer', from, to, amount).build(), - }), - }); - - expectSuccess(result); - }; - - beforeEach(() => { - mockBlockchain(); - }); - - test('transfer', async () => { - await initializeOwners(); - await deploy(); - await ownerMint('owner1'); - const owners = await getOwners(); - - await transfer(owners[0], owners[1], new BN(5)); - - testUtils.verifyListeners(listeners); - }); - }); - - describe('Time Coin', () => { - const { timeCoinContract } = transactions; - - const mockBlockchain = () => { - blockchain = createBlockchain({ contracts: [timeCoinContract] }); - - blockchain.header = { - get: jest.fn(() => factory.createHeader()), - }; - - blockchain.storageItem.getAll$ = jest.fn(() => []); - }; - - const deploy = async () => - executeSetupScript( - new ScriptBuilder().emitAppCall(timeCoinContract.hash, 'contractDeploy').build(), - common.ONE_THOUSAND_FIXED8, - ); - - const setOtcApprove = async (arg: number, address: UInt160) => { - const result = await executeSimple({ - blockchain, - transaction: transactions.createInvocation({ - script: new ScriptBuilder().emitAppCall(timeCoinContract.hash, 'setOtcApprove', address, arg).build(), - }), - }); - - expectSuccess(result); - }; - - const transferWithLockupPeriod = async (from: UInt160, to: UInt160, amount: BN, time: Buffer) => { - const result = await executeSimple({ - blockchain, - transaction: transactions.createInvocation({ - script: new ScriptBuilder() - .emitAppCall(timeCoinContract.hash, 'transferWithLockupPeriod', from, to, amount, time) - .build(), - }), - }); - - expectSuccess(result); - }; - - const transfer = async (from: UInt160, to: UInt160, amount: BN) => { - const result = await executeSimple({ - blockchain, - transaction: transactions.createInvocation({ - script: new ScriptBuilder().emitAppCall(timeCoinContract.hash, 'transfer', from, to, amount).build(), - }), - }); - - expectSuccess(result); - }; - - beforeEach(() => { - mockBlockchain(); - }); - - const primaryAddressScriptHash = common.asUInt160(Buffer.from('7d2185c97fa43cb41c5617941c6b68d146a84ae5', 'hex')); - const altAddressScriptHash = common.asUInt160(Buffer.from('a48c1ae6617e509347e5a385624b15f8872c8802', 'hex')); - - test('deploy & transfer', async () => { - const ret = await deploy(); - expect(ret).toBeTruthy(); - await setOtcApprove(0, primaryAddressScriptHash); - await setOtcApprove(1, primaryAddressScriptHash); - await transferWithLockupPeriod( - primaryAddressScriptHash, - altAddressScriptHash, - new BN(30000000000), - Buffer.from('8047cb5d', 'hex'), - ); - await transferWithLockupPeriod( - primaryAddressScriptHash, - altAddressScriptHash, - new BN(40000000000), - Buffer.from('8091445e', 'hex'), - ); - await transferWithLockupPeriod( - primaryAddressScriptHash, - altAddressScriptHash, - new BN(50000000000), - Buffer.from('0069a25d', 'hex'), - ); - blockchain.storageItem.getAll$ = jest.fn(() => [ - { - key: Buffer.from('6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802b71403', 'hex'), - value: Buffer.from('800400000203b71403020500ac23fc06820102010d000500ac23fc06', 'hex'), - }, - { - key: Buffer.from('6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802121503', 'hex'), - value: Buffer.from('800400000203121503020500902f5009820102010d000500902f5009', 'hex'), - }, - { - key: Buffer.from('6c6f636b7570735fa48c1ae6617e509347e5a385624b15f8872c8802b61403', 'hex'), - value: Buffer.from('800400000203b61403020500743ba40b820102010d000500743ba40b', 'hex'), - }, - ]); - - await transfer(altAddressScriptHash, primaryAddressScriptHash, new BN(120000000000)); - - testUtils.verifyListeners(listeners); - }); - }); - - describe('Switcheo V3.1', () => { - const { switcheoV3Contract, switcheoV2TokenContract, nosTokenContract } = transactions; - - const switcheoTokenTransfer = async (from: UInt160, to: UInt160, amount: BN) => { - const result = await executeSimple({ - blockchain, - transaction: transactions.createInvocation({ - script: new ScriptBuilder().emitAppCall(switcheoV2TokenContract.hash, 'transfer', from, to, amount).build(), - }), - }); - - expectSuccess(result); - }; - - const switcheoTokenDeploy = async () => { - const deployResult = await executeSetupScript( - new ScriptBuilder().emitAppCall(switcheoV2TokenContract.hash, 'deploy').build(), - ); - expect(deployResult.asBoolean()).toBeTruthy(); - }; - - const nosTokenTransfer = async (from: UInt160, to: UInt160, amount: Buffer) => { - const transaction = transactions.createInvocation({ - script: new ScriptBuilder().emitAppCall(nosTokenContract.hash, 'transfer', from, to, amount).build(), - }); - - const result = await executeSimple({ - blockchain, - transaction, - }); - - expectSuccess(result); - }; - - const nosTokenDeploy = async () => { - const script = new ScriptBuilder().emitAppCall(nosTokenContract.hash, 'admin', 'InitSmartContract').build(); - - const deployResult = await executeSetupScript(script); - - expect(deployResult.asBoolean()).toBeTruthy(); - testUtils.verifyBlockchainSnapshot(blockchain); - }; - - const nosWhiteListTransferFromAdd = async (address: UInt160) => { - const transaction = transactions.createInvocation({ - script: new ScriptBuilder() - .emitAppCall(nosTokenContract.hash, 'admin', 'WhitelistTransferFromAdd', address) - .build(), - }); - - const result = await executeSimple({ - blockchain, - transaction, - }); - - expectSuccess(result); - }; - - const initialize = async (address1: UInt160, address2: UInt160, address3: UInt160) => { - const transaction = transactions.createInvocation({ - script: new ScriptBuilder() - .emitAppCall(switcheoV3Contract.hash, 'initialize', address1, address2, address3) - .build(), - }); - - const result = await executeSimple({ - blockchain, - transaction, - }); - - expectSuccess(result); - }; - - const addToWhitelist = async (address: UInt160) => { - const transaction = transactions.createInvocation({ - script: new ScriptBuilder().emitAppCall(switcheoV3Contract.hash, 'addToWhitelist', address).build(), - }); - - const result = await executeSimple({ - blockchain, - transaction, - }); - - expectSuccess(result); - }; - - const deposit = async ( - address: UInt160, - val: UInt160 | UInt256, - amount: BN, - inputs: ReadonlyArray = [], - outputs: ReadonlyArray = [], - ) => { - const transaction = transactions.createInvocation({ - script: new ScriptBuilder().emitAppCall(switcheoV3Contract.hash, 'deposit', address, val, amount).build(), - inputs, - outputs, - }); - - const result = await executeSimple({ - blockchain, - transaction, - }); - - expectSuccess(result); - }; - - const withdraw = async (attributes: ReadonlyArray) => { - const transaction = transactions.createInvocation({ - script: new ScriptBuilder().emitTailCall(switcheoV3Contract.hash, 'withdraw').build(), - attributes, - }); - - const result = await executeSimple({ - blockchain, - transaction, - }); - - expectSuccess(result); - }; - - const createAtomicSwap = async ( - makerAddress: UInt160, - takerAddress: UInt160, - assetID: UInt256, - amount: Buffer | BN, - hashedSecret: UInt256, - expirtyTime: Buffer, - feeAssetID: UInt256, - feeAmount = new BN(0), - burnTokens = false, - ) => { - const transaction = transactions.createInvocation({ - script: new ScriptBuilder() - .emitAppCall( - switcheoV3Contract.hash, - 'createAtomicSwap', - makerAddress, - takerAddress, - assetID, - amount, - hashedSecret, - expirtyTime, - feeAssetID, - feeAmount, - burnTokens, - ) - .build(), - }); - - const result = await executeSimple({ - blockchain, - transaction, - }); - - expectSuccess(result); - }; - - const executeAtomicSwap = async (hashedSecret: UInt256, preImage: Buffer) => { - const transaction = transactions.createInvocation({ - script: new ScriptBuilder() - .emitAppCall(switcheoV3Contract.hash, 'executeAtomicSwap', hashedSecret, preImage) - .build(), - }); - - const result = await executeSimple({ blockchain, transaction }); - - expectSuccess(result); - }; - - const mockBlockchain = () => { - const timestamp = 1641700000; - const blockIndex = 2900000; - blockchain = createBlockchain({ contracts: [switcheoV3Contract, nosTokenContract, switcheoV2TokenContract] }); - - blockchain.currentBlock.timestamp = timestamp; - blockchain.currentBlock.index = blockIndex; - - blockchain.header = { - get: jest.fn(async () => factory.createHeader({ index: blockIndex, timestamp })), - }; - }; - - beforeEach(() => { - mockBlockchain(); - }); - - const addr1 = common.asUInt160(Buffer.from('b7634295e58c6d7513c22d5881ba116db154e8de', 'hex')); - const addr2 = common.asUInt160(Buffer.from('7335f929546270b8f811a0f9427b5712457107e7', 'hex')); - const addr3 = common.asUInt160(Buffer.from('c202200f681f5d3b933c956cfedec18ee635bf5c', 'hex')); - const addr = common.asUInt160(Buffer.from('2fbaa22d64a8c8f5a9940f359cb0cb1dfe49eb2c', 'hex')); - const nosTokenHolderAddr = common.asUInt160( - Buffer.from([163, 78, 249, 186, 149, 73, 242, 165, 255, 174, 25, 102, 234, 143, 189, 222, 71, 131, 159, 32]), - ); - - const n0sAttributes = [ - new UInt256Attribute({ - usage: 0xa1, - value: common.bufferToUInt256( - Buffer.from('5100000000000000000000000000000000000000000000000000000000000000', 'hex'), - ), - }), - new UInt256Attribute({ - usage: 0xa2, - value: common.bufferToUInt256( - Buffer.concat([common.uInt160ToBuffer(nosTokenContract.hash), Buffer.alloc(12, 0)]), - ), - }), - new UInt256Attribute({ - usage: 0xa4, - value: common.bufferToUInt256(Buffer.concat([common.uInt160ToBuffer(addr), Buffer.alloc(12, 0)])), - }), - new UInt256Attribute({ - usage: 0xa5, - value: common.bufferToUInt256( - Buffer.from('8023bce88e000000000000000000000000000000000000000000000000000000', 'hex'), - ), - }), - ]; - - test('deposit & withdraw n0S tokens', async () => { - const depositBuff = Buffer.from('88c132e98e00', 'hex'); - const depositBN = utils.fromSignedBuffer(depositBuff); - - await nosTokenDeploy(); - await nosWhiteListTransferFromAdd(switcheoV3Contract.hash); - await nosTokenTransfer(nosTokenHolderAddr, addr, depositBuff); - await initialize(addr3, addr2, addr1); - await addToWhitelist(nosTokenContract.hash); - await deposit(addr, nosTokenContract.hash, depositBN); - await withdraw(n0sAttributes); - - testUtils.verifyListeners(listeners); - }); - - const switcheoAttributes = [ - new UInt256Attribute({ - usage: 0xa1, - value: common.bufferToUInt256( - Buffer.from('5100000000000000000000000000000000000000000000000000000000000000', 'hex'), - ), - }), - new UInt256Attribute({ - usage: 0xa2, - value: common.bufferToUInt256( - Buffer.concat([common.uInt160ToBuffer(switcheoV2TokenContract.hash), Buffer.alloc(12, 0)]), - ), - }), - new UInt256Attribute({ - usage: 0xa4, - value: common.bufferToUInt256(Buffer.concat([common.uInt160ToBuffer(addr), Buffer.alloc(12, 0)])), - }), - new UInt256Attribute({ - usage: 0xa5, - value: common.bufferToUInt256( - Buffer.from('8023bce88e000000000000000000000000000000000000000000000000000000', 'hex'), - ), - }), - ]; - const switcheoTokenHolderAddr = common.asUInt160(Buffer.from('46fca70ca7f0526d6955f915ce07cbe326fbadd0', 'hex')); - - test('deposit & withdraw SWTH tokens', async () => { - const depositBuff = Buffer.from('88c132e98e00', 'hex'); - const depositBN = utils.fromSignedBuffer(depositBuff); - - await switcheoTokenDeploy(); - await switcheoTokenTransfer(switcheoTokenHolderAddr, addr, depositBN); - await initialize(addr3, addr2, addr1); - await addToWhitelist(switcheoV2TokenContract.hash); - await deposit(addr, switcheoV2TokenContract.hash, depositBN); - await withdraw(switcheoAttributes); - - testUtils.verifyListeners(listeners); - }); - - test('atomic swap', async () => { - const timestamp = 1554800000; - const blockIndex = 2900000; - - blockchain.currentBlock.timestamp = timestamp; - blockchain.currentBlock.index = blockIndex; - - blockchain.header = { - get: jest.fn(async () => factory.createHeader({ index: blockIndex, timestamp })), - }; - - const makerAddress = common.asUInt160(Buffer.from('78fb1102d1dfef0d2b7a1fc6a29592c39ad3a674', 'hex')); - const takerAddress = common.asUInt160(Buffer.from('69cc2943e9523cd2e63e815b2f510a58162e995d', 'hex')); - const assetID = common.asUInt256( - Buffer.from('9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc5', 'hex'), - ); - const amount = Buffer.from('e033c00d', 'hex'); - const hashSecret = common.asUInt256( - Buffer.from('d1a2ce56d5e119bc3a8893305e371cf3a9a6da9c9472b69d56081d7755d26207', 'hex'), - ); - const preImage = Buffer.from('33366137646530382d366162632d343763372d623537302d366238366136373635353038', 'hex'); - const expirtyTime = Buffer.from('e5a6ad5c', 'hex'); - const neoBalance = neoBN('1000'); - - blockchain.output.get = jest.fn(async () => - Promise.resolve( - new Output({ - address: makerAddress, - value: neoBalance, - asset: assets.NEO_ASSET_HASH_UINT256, - }), - ), - ); - - const inputs = [ - new Input({ - hash: common.bufferToUInt256(Buffer.alloc(32, 5)), - index: 0, - }), - ]; - const outputs = [ - new Output({ - address: switcheoV3Contract.hash, - value: neoBalance, - asset: assets.NEO_ASSET_HASH_UINT256, - }), - ]; - - await initialize(addr3, addr2, addr1); - await deposit(makerAddress, assets.NEO_ASSET_HASH_UINT256, neoBalance, inputs, outputs); - await createAtomicSwap(makerAddress, takerAddress, assetID, amount, hashSecret, expirtyTime, assetID); - await executeAtomicSwap(hashSecret, preImage); - - testUtils.verifyListeners(listeners); - }); - }); - - describe('Deep Brain', () => { - const { deepBrainContract } = transactions; - - const mockBlockchain = () => { - const timestamp = 1513172344; - const blockIndex = 1699154; - blockchain = createBlockchain({ contracts: [deepBrainContract] }); - - blockchain.currentBlock.timestamp = timestamp; - blockchain.currentBlock.index = blockIndex; - - blockchain.header = { - get: jest.fn(async () => factory.createHeader({ index: blockIndex, timestamp })), - }; - }; - - const init = async () => { - const script = new ScriptBuilder().emitAppCall(deepBrainContract.hash, 'init').build(); - const ret = await executeSetupScript(script, common.ONE_THOUSAND_FIXED8); - - expect(ret).toBeTruthy(); - }; - - const transfer = async (from: UInt160, to: UInt160, amount: BN) => { - const transaction = transactions.createInvocation({ - script: new ScriptBuilder().emitAppCall(deepBrainContract.hash, 'transfer', from, to, amount).build(), - }); - const result = await executeSimple({ - blockchain, - transaction, - }); - - expectSuccess(result); - }; - - beforeEach(() => { - mockBlockchain(); - }); - - const tokenHolderAddr = common.asUInt160(Buffer.from('f2b4b715c9a84fcca6bc6dc17351dd1c113f89a9', 'hex')); - const workAddr = common.asUInt160(Buffer.from('1c65bc389492f9b14c8a708bba1d013c428d9909', 'hex')); - const addr1 = common.asUInt160(Buffer.from('b511fe310e31bdbeea50b5bcf00107ed35b8f79d', 'hex')); - const addr2 = common.asUInt160(Buffer.from('4951c0bbd42cb2e7e96a08662b0aa779c9a1c383', 'hex')); - - const startingBalance = new BN('8407482592097768'); - const firstAmount = new BN('128425589200000'); - const secondAmount = new BN('2686734000000'); - - test('transfers', async () => { - await init(); - - await transfer(tokenHolderAddr, workAddr, startingBalance); - await transfer(tokenHolderAddr, addr1, firstAmount); - await transfer(tokenHolderAddr, addr2, secondAmount); - await transfer(addr1, workAddr, firstAmount); - await transfer(addr2, workAddr, secondAmount); - - testUtils.verifyListeners(listeners); - }); - }); -}); diff --git a/packages/neo-one-node-vm/src/__tests__/opcodes.test.ts b/packages/neo-one-node-vm/src/__tests__/opcodes.test.ts deleted file mode 100644 index 1cfc70a7bb..0000000000 --- a/packages/neo-one-node-vm/src/__tests__/opcodes.test.ts +++ /dev/null @@ -1,1845 +0,0 @@ -// tslint:disable no-object-mutation no-any no-loop-statement -import { BinaryWriter, crypto, OpCode, ScriptBuilder, ScriptBuilderParam } from '@neo-one/client-common'; -import { - AttributeUsage, - Contract, - ContractParameterType, - ContractPropertyState, - NULL_ACTION, - ScriptContainerType, - Transaction, - TriggerType, - UInt160Attribute, - utils, -} from '@neo-one/node-core'; -import { BN } from 'bn.js'; -import _ from 'lodash'; -import { keys, transactions } from '../__data__'; -import { ExecutionInit, FEES } from '../constants'; -import { executeScript } from '../execute'; -import { - ArrayStackItem, - BooleanStackItem, - BufferStackItem, - IntegerStackItem, - MapStackItem, - StackItem, - StructStackItem, - UInt160StackItem, - UInt256StackItem, -} from '../stackItem'; - -const triggerType = TriggerType.Application; -const scriptAttributeHash = keys[0].scriptHash; -const blockTime = Date.now(); - -interface Op { - readonly op: OpCode; - readonly buffer?: Buffer; -} - -interface TestCase extends Op { - readonly preOps?: readonly Op[]; - readonly postOps?: readonly Op[]; - readonly result: readonly StackItem[]; - readonly resultAlt?: readonly StackItem[]; - readonly gas: BN; - readonly args?: ReadonlyArray; - readonly argsAlt?: ReadonlyArray; - readonly stackItems?: readonly StackItem[]; - readonly ref?: StackItem; - // tslint:disable-next-line no-any - readonly mockBlockchain?: (options: { readonly blockchain: any }) => void; - // tslint:disable-next-line no-any - readonly mockTransaction?: (options: { readonly transaction: any }) => void; - readonly returnValueCount?: number; -} - -const setRef = new ArrayStackItem([new IntegerStackItem(new BN(1))]); -const appendRef = new ArrayStackItem([]); -const reverseRef = new ArrayStackItem([ - new IntegerStackItem(new BN(1)), - new IntegerStackItem(new BN(2)), - new IntegerStackItem(new BN(3)), -]); - -const simpleStruct = new StructStackItem([new IntegerStackItem(new BN(1))]); - -const removeRef = new ArrayStackItem([new IntegerStackItem(new BN(1)), new IntegerStackItem(new BN(2))]); - -const mapStatic = new MapStackItem({ - referenceKeys: new Map([ - [ - new BufferStackItem(Buffer.from('aaaa', 'hex')).toStructuralKey(), - new BufferStackItem(Buffer.from('aaaa', 'hex')), - ] as const, - [ - new BufferStackItem(Buffer.from('bbbb', 'hex')).toStructuralKey(), - new BufferStackItem(Buffer.from('bbbb', 'hex')), - ] as const, - ]), - referenceValues: new Map([ - [new BufferStackItem(Buffer.from('aaaa', 'hex')).toStructuralKey(), new IntegerStackItem(new BN(1))] as const, - [new BufferStackItem(Buffer.from('bbbb', 'hex')).toStructuralKey(), new IntegerStackItem(new BN(2))] as const, - ]), -}); - -const mapSetRef = new MapStackItem({ - referenceKeys: new Map([ - [ - new BufferStackItem(Buffer.from('aaaa', 'hex')).toStructuralKey(), - new BufferStackItem(Buffer.from('aaaa', 'hex')), - ] as const, - [ - new BufferStackItem(Buffer.from('bbbb', 'hex')).toStructuralKey(), - new BufferStackItem(Buffer.from('bbbb', 'hex')), - ] as const, - ]), - referenceValues: new Map([ - [new BufferStackItem(Buffer.from('aaaa', 'hex')).toStructuralKey(), new IntegerStackItem(new BN(1))] as const, - [new BufferStackItem(Buffer.from('bbbb', 'hex')).toStructuralKey(), new IntegerStackItem(new BN(2))] as const, - ]), -}); - -const mapRemoveRef = new MapStackItem({ - referenceKeys: new Map([ - [ - new BufferStackItem(Buffer.from('aaaa', 'hex')).toStructuralKey(), - new BufferStackItem(Buffer.from('aaaa', 'hex')), - ] as const, - [ - new BufferStackItem(Buffer.from('bbbb', 'hex')).toStructuralKey(), - new BufferStackItem(Buffer.from('bbbb', 'hex')), - ] as const, - ]), - referenceValues: new Map([ - [new BufferStackItem(Buffer.from('aaaa', 'hex')).toStructuralKey(), new IntegerStackItem(new BN(1))] as const, - [new BufferStackItem(Buffer.from('bbbb', 'hex')).toStructuralKey(), new IntegerStackItem(new BN(2))] as const, - ]), -}); - -const contractSB = new ScriptBuilder(); -contractSB.emitOp('PUSH3'); -contractSB.emitOp('PUSH2'); - -const contract = new Contract({ - script: contractSB.build(), - parameterList: [], - returnType: ContractParameterType.Void, - name: '', - codeVersion: '', - author: '', - email: '', - description: '', - contractProperties: ContractPropertyState.HasDynamicInvoke, -}); - -const multiplyContractSB = new ScriptBuilder(); -multiplyContractSB.emitOp('PUSH2'); -multiplyContractSB.emitOp('MUL'); - -const multiplyContract = new Contract({ - script: multiplyContractSB.build(), - parameterList: [], - returnType: ContractParameterType.Void, - name: '', - codeVersion: '', - author: '', - email: '', - description: '', - contractProperties: ContractPropertyState.HasDynamicInvoke, -}); - -const signature0 = crypto.sign({ - message: Buffer.alloc(32, 10), - privateKey: keys[0].privateKey, -}); - -const signature1 = crypto.sign({ - message: Buffer.alloc(32, 10), - privateKey: keys[1].privateKey, -}); - -// const hugeBuffer = Buffer.alloc(16843009, 0); - -const OPCODES = ([ - { - op: 'PUSH0', - result: [new BufferStackItem(Buffer.from([]))], - gas: utils.ZERO, - }, -] as readonly TestCase[]) - .concat( - _.range(0x01, 0x4c).map((idx) => ({ - // tslint:disable-next-line no-any - op: `PUSHBYTES${idx}` as any, - buffer: Buffer.alloc(idx, 10), - result: [new BufferStackItem(Buffer.alloc(idx, 10))], - gas: utils.ZERO, - })), - ) - .concat( - [ - { - op: 'PUSHDATA1', - buffer: Buffer.from([2, 10, 10]), - result: [new BufferStackItem(Buffer.alloc(2, 10))], - gas: utils.ZERO, - }, - - { - op: 'PUSHDATA2', - buffer: Buffer.concat([Buffer.from([1, 1]), Buffer.alloc(257, 10)]), - result: [new BufferStackItem(Buffer.alloc(257, 10))], - gas: utils.ZERO, - }, - - // { - // op: 'PUSHDATA4', - // buffer: Buffer.concat([Buffer.from([1, 1, 1, 1]), hugeBuffer]), - // result: [new BufferStackItem(hugeBuffer)], - // gas: utils.ZERO, - // }, - - { - op: 'PUSHM1', - result: [new IntegerStackItem(new BN(-1))], - gas: utils.ZERO, - }, - - { - op: 'PUSH1', - result: [new IntegerStackItem(new BN(1))], - gas: utils.ZERO, - }, - - { - op: 'PUSH2', - result: [new IntegerStackItem(new BN(2))], - gas: utils.ZERO, - }, - - { - op: 'PUSH3', - result: [new IntegerStackItem(new BN(3))], - gas: utils.ZERO, - }, - - { - op: 'PUSH4', - result: [new IntegerStackItem(new BN(4))], - gas: utils.ZERO, - }, - - { - op: 'PUSH5', - result: [new IntegerStackItem(new BN(5))], - gas: utils.ZERO, - }, - - { - op: 'PUSH6', - result: [new IntegerStackItem(new BN(6))], - gas: utils.ZERO, - }, - - { - op: 'PUSH7', - result: [new IntegerStackItem(new BN(7))], - gas: utils.ZERO, - }, - - { - op: 'PUSH8', - result: [new IntegerStackItem(new BN(8))], - gas: utils.ZERO, - }, - - { - op: 'PUSH9', - result: [new IntegerStackItem(new BN(9))], - gas: utils.ZERO, - }, - - { - op: 'PUSH10', - result: [new IntegerStackItem(new BN(10))], - gas: utils.ZERO, - }, - - { - op: 'PUSH11', - result: [new IntegerStackItem(new BN(11))], - gas: utils.ZERO, - }, - - { - op: 'PUSH12', - result: [new IntegerStackItem(new BN(12))], - gas: utils.ZERO, - }, - - { - op: 'PUSH13', - result: [new IntegerStackItem(new BN(13))], - gas: utils.ZERO, - }, - - { - op: 'PUSH14', - result: [new IntegerStackItem(new BN(14))], - gas: utils.ZERO, - }, - - { - op: 'PUSH15', - result: [new IntegerStackItem(new BN(15))], - gas: utils.ZERO, - }, - - { - op: 'PUSH16', - result: [new IntegerStackItem(new BN(16))], - gas: utils.ZERO, - }, - - { - op: 'NOP', - result: [], - gas: utils.ZERO, - }, - - { - op: 'JMP', - // Jump 1 ahead + 2 over the jump bytes - buffer: new ScriptBuilder().emitInt16LE(3).build(), - postOps: [{ op: 'PUSH2' }, { op: 'PUSH3' }], - result: [new IntegerStackItem(new BN(3)), new IntegerStackItem(new BN(2))], - - gas: FEES.ONE, - }, - - { - op: 'JMP', - // Jump 2 ahead + 2 over the jump bytes - buffer: new ScriptBuilder().emitInt16LE(4).build(), - postOps: [{ op: 'PUSH2' }, { op: 'PUSH3' }], - result: [new IntegerStackItem(new BN(3))], - gas: FEES.ONE, - }, - - { - op: 'JMPIF', - args: [Buffer.alloc(1, 1)], - // Jump 2 ahead + 2 over the jump bytes - buffer: new ScriptBuilder().emitInt16LE(4).build(), - postOps: [{ op: 'PUSH2' }, { op: 'PUSH3' }], - result: [new IntegerStackItem(new BN(3))], - gas: FEES.ONE, - }, - - { - op: 'JMPIF', - args: [Buffer.alloc(1, 0)], - // Jump 2 ahead + 2 over the jump bytes - buffer: new ScriptBuilder().emitInt16LE(4).build(), - postOps: [{ op: 'PUSH2' }, { op: 'PUSH3' }], - result: [new IntegerStackItem(new BN(3)), new IntegerStackItem(new BN(2))], - - gas: FEES.ONE, - }, - - { - op: 'JMPIFNOT', - args: [Buffer.alloc(1, 0)], - // Jump 2 ahead + 2 over the jump bytes - buffer: new ScriptBuilder().emitInt16LE(4).build(), - postOps: [{ op: 'PUSH2' }, { op: 'PUSH3' }], - result: [new IntegerStackItem(new BN(3))], - gas: FEES.ONE, - }, - - { - op: 'JMPIFNOT', - args: [Buffer.alloc(1, 1)], - // Jump 2 ahead + 2 over the jump bytes - buffer: new ScriptBuilder().emitInt16LE(4).build(), - postOps: [{ op: 'PUSH2' }, { op: 'PUSH3' }], - result: [new IntegerStackItem(new BN(3)), new IntegerStackItem(new BN(2))], - - gas: FEES.ONE, - }, - - { - op: 'CALL', - // Jump 2 ahead + 2 over the jump bytes - buffer: new ScriptBuilder().emitInt16LE(4).build(), - // We jump to PUSH3, then return, then invoke PUSH2 and PUSH3 again. - postOps: [{ op: 'PUSH2' }, { op: 'PUSH3' }, { op: 'RET' }], - result: [new IntegerStackItem(new BN(3)), new IntegerStackItem(new BN(2)), new IntegerStackItem(new BN(3))], - - // CALL + RET + RET - gas: FEES.ONE.add(FEES.ONE).add(FEES.ONE), - }, - - { - op: 'CALL', - // Jump 2 behind - buffer: new ScriptBuilder().emitInt16LE(-2).build(), - // We jump to PUSH3, then return, then invoke PUSH2 and PUSH3 again. - preOps: [ - { - op: 'JMP', - // Jump 4 ahead + 2 over the jump bytes - buffer: new ScriptBuilder().emitInt16LE(6).build(), - }, - - { op: 'PUSH2' }, - { op: 'PUSH3' }, - { op: 'RET' }, - ], - - result: [new IntegerStackItem(new BN(3))], - // JMP + CALL + RET - gas: FEES.ONE.add(FEES.ONE).add(FEES.ONE), - }, - - { - op: 'CALL_I', - // 1 return value, 0 parameters, Jump ahead 2 + 4 over the jump (2) + return (1) + param (1) bytes. - buffer: Buffer.concat([Buffer.from([1]), Buffer.from([0]), new ScriptBuilder().emitInt16LE(6).build()]), - // jump to PUSH4, then return, then invoke PUSH2, PUSH3, and PUSH4 again - postOps: [{ op: 'PUSH1' }, { op: 'PUSH2' }, { op: 'PUSH3' }, { op: 'PUSH4' }, { op: 'RET' }], - result: [ - new IntegerStackItem(new BN(4)), - new IntegerStackItem(new BN(3)), - new IntegerStackItem(new BN(2)), - new IntegerStackItem(new BN(1)), - new IntegerStackItem(new BN(4)), - ], - // CALL_I RET RET - gas: FEES.ONE.add(FEES.ONE).add(FEES.ONE), - }, - - { - op: 'CALL_I', - // 2 return value, 0 parameters, Jump ahead 1 + 4 over the jump (2) + return (1) + param (1) bytes. - buffer: Buffer.concat([Buffer.from([2]), Buffer.from([0]), new ScriptBuilder().emitInt16LE(5).build()]), - // jump to PUSH3, PUSH4, then return, then invoke PUSH2, PUSH3, and PUSH4 again - postOps: [{ op: 'PUSH1' }, { op: 'PUSH2' }, { op: 'PUSH3' }, { op: 'PUSH4' }, { op: 'RET' }], - result: [ - new IntegerStackItem(new BN(4)), - new IntegerStackItem(new BN(3)), - new IntegerStackItem(new BN(2)), - new IntegerStackItem(new BN(1)), - new IntegerStackItem(new BN(4)), - new IntegerStackItem(new BN(3)), - ], - // CALL_I RET RET - gas: FEES.ONE.add(FEES.ONE).add(FEES.ONE), - }, - - { - op: 'CALL_I', - // 1 return value, 2 parameters, Jump ahead 1 + 4 over the jump (2) + return (1) + param (1) bytes. - buffer: Buffer.concat([Buffer.from([1]), Buffer.from([2]), new ScriptBuilder().emitInt16LE(5).build()]), - postOps: [{ op: 'PUSH2' }, { op: 'PUSH3' }, { op: 'ADD' }, { op: 'RET' }], - // jump to ADD (adds the two args), then return, then invoke PUSH2, PUSH3, and ADD again - args: [new BN(5), new BN(7)], - result: [new IntegerStackItem(new BN(5)), new IntegerStackItem(new BN(12))], - // CALL_I ADD RET ADD RET - gas: FEES.ONE.add(FEES.ONE) - .add(FEES.ONE) - .add(FEES.ONE) - .add(FEES.ONE), - }, - - { - op: 'CALL_I', - // 0 return value, 2 parameters, Jump ahead 1 + 4 over the jump (2) + return (1) + param (1) bytes. - buffer: Buffer.concat([Buffer.from([0]), Buffer.from([2]), new ScriptBuilder().emitInt16LE(5).build()]), - postOps: [{ op: 'PUSH2' }, { op: 'PUSH3' }, { op: 'ADD' }, { op: 'RET' }], - // jump to ADD (adds the two args), then return, then invoke PUSH2, PUSH3, and ADDs again - args: [new BN(5), new BN(7)], - result: [new IntegerStackItem(new BN(5))], - // CALL_I ADD RET ADD RET - gas: FEES.ONE.add(FEES.ONE) - .add(FEES.ONE) - .add(FEES.ONE) - .add(FEES.ONE), - }, - - // RET is tested above - { - op: 'APPCALL', - buffer: Buffer.alloc(20, 10), - // Result of Contract Script defined above - result: [new IntegerStackItem(new BN(2)), new IntegerStackItem(new BN(3))], - - mockBlockchain: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve(contract)); - }, - gas: FEES.TEN, - }, - - { - op: 'APPCALL', - buffer: Buffer.alloc(20, 0), - args: [Buffer.alloc(20, 10)], - // Result of Contract Script defined above - result: [new IntegerStackItem(new BN(2)), new IntegerStackItem(new BN(3))], - - // Slightly broken because we're actually running a dynamic invoke - // directly from a transaction, but it works because we mock return - // this contract with dynamic invoke enabled - mockBlockchain: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve(contract)); - }, - gas: FEES.TEN, - }, - { - op: 'CALL_E', - buffer: Buffer.concat([Buffer.from([1]), Buffer.from([2]), Buffer.alloc(20, 10)]), - args: [new BN(2), new BN(3)], - result: [new IntegerStackItem(new BN(4))], - mockBlockchain: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve(multiplyContract)); - }, - gas: FEES.ONE.add(FEES.ONE), - }, - { - op: 'CALL_E', - buffer: Buffer.concat([Buffer.from([1]), Buffer.from([1]), Buffer.alloc(20, 10)]), - args: [new BN(2), new BN(3)], - result: [new IntegerStackItem(new BN(4)), new IntegerStackItem(new BN(3))], - mockBlockchain: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve(multiplyContract)); - }, - gas: FEES.ONE.add(FEES.ONE), - }, - { - op: 'CALL_E', - buffer: Buffer.concat([Buffer.from([2]), Buffer.from([2]), Buffer.alloc(20, 10)]), - args: [new BN(2), new BN(3)], - result: [new IntegerStackItem(new BN(4)), new IntegerStackItem(new BN(3))], - mockBlockchain: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve(multiplyContract)); - }, - gas: FEES.ONE.add(FEES.ONE), - }, - { - op: 'CALL_ET', - buffer: Buffer.concat([Buffer.from([1]), Buffer.from([2]), Buffer.alloc(20, 10)]), - args: [new BN(2), new BN(3)], - result: [new IntegerStackItem(new BN(4))], - mockBlockchain: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve(multiplyContract)); - }, - gas: FEES.ONE.add(FEES.ONE), - returnValueCount: 1, - }, - { - op: 'CALL_ET', - buffer: Buffer.concat([Buffer.from([1]), Buffer.from([1]), Buffer.alloc(20, 10)]), - args: [new BN(2), new BN(3)], - result: [new IntegerStackItem(new BN(4)), new IntegerStackItem(new BN(3))], - mockBlockchain: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve(multiplyContract)); - }, - gas: FEES.ONE.add(FEES.ONE), - returnValueCount: 1, - }, - { - op: 'CALL_ET', - buffer: Buffer.concat([Buffer.from([2]), Buffer.from([2]), Buffer.alloc(20, 10)]), - args: [new BN(2), new BN(3)], - result: [new IntegerStackItem(new BN(4)), new IntegerStackItem(new BN(3))], - mockBlockchain: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve(multiplyContract)); - }, - gas: FEES.ONE.add(FEES.ONE), - returnValueCount: 2, - }, - { - op: 'CALL_ED', - buffer: Buffer.concat([Buffer.from([1]), Buffer.from([2])]), - args: [Buffer.alloc(20, 10), new BN(2), new BN(3)], - result: [new IntegerStackItem(new BN(4))], - mockBlockchain: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve(multiplyContract)); - }, - gas: FEES.ONE.add(FEES.ONE), - }, - { - op: 'CALL_ED', - buffer: Buffer.concat([Buffer.from([1]), Buffer.from([1])]), - args: [Buffer.alloc(20, 10), new BN(2), new BN(3)], - result: [new IntegerStackItem(new BN(4)), new IntegerStackItem(new BN(3))], - mockBlockchain: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve(multiplyContract)); - }, - gas: FEES.ONE.add(FEES.ONE), - }, - { - op: 'CALL_ED', - buffer: Buffer.concat([Buffer.from([2]), Buffer.from([2])]), - args: [Buffer.alloc(20, 10), new BN(2), new BN(3)], - result: [new IntegerStackItem(new BN(4)), new IntegerStackItem(new BN(3))], - mockBlockchain: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve(multiplyContract)); - }, - gas: FEES.ONE.add(FEES.ONE), - }, - { - op: 'CALL_EDT', - buffer: Buffer.concat([Buffer.from([1]), Buffer.from([2])]), - args: [Buffer.alloc(20, 10), new BN(2), new BN(3)], - result: [new IntegerStackItem(new BN(4))], - mockBlockchain: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve(multiplyContract)); - }, - gas: FEES.ONE.add(FEES.ONE), - returnValueCount: 1, - }, - { - op: 'CALL_EDT', - buffer: Buffer.concat([Buffer.from([1]), Buffer.from([1])]), - args: [Buffer.alloc(20, 10), new BN(2), new BN(3)], - result: [new IntegerStackItem(new BN(4)), new IntegerStackItem(new BN(3))], - mockBlockchain: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve(multiplyContract)); - }, - gas: FEES.ONE.add(FEES.ONE), - returnValueCount: 1, - }, - { - op: 'CALL_EDT', - buffer: Buffer.concat([Buffer.from([2]), Buffer.from([2])]), - args: [Buffer.alloc(20, 10), new BN(2), new BN(3)], - result: [new IntegerStackItem(new BN(4)), new IntegerStackItem(new BN(3))], - mockBlockchain: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve(multiplyContract)); - }, - gas: FEES.ONE.add(FEES.ONE), - returnValueCount: 2, - }, - - { - op: 'SYSCALL', - buffer: new BinaryWriter().writeVarBytesLE(Buffer.from('Neo.Blockchain.GetHeight', 'ascii')).toBuffer(), - result: [new IntegerStackItem(new BN(10))], - mockBlockchain: ({ blockchain }) => { - blockchain.currentBlock.index = 10; - }, - gas: FEES.ONE, - }, - - { - op: 'TAILCALL', - buffer: Buffer.alloc(20, 10), - // Result of Contract Script defined above - result: [new IntegerStackItem(new BN(2)), new IntegerStackItem(new BN(3))], - - mockBlockchain: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve(contract)); - }, - gas: FEES.TEN, - }, - - { - op: 'DUPFROMALTSTACK', - argsAlt: [new BN(1)], - result: [new IntegerStackItem(new BN(1))], - resultAlt: [new IntegerStackItem(new BN(1))], - gas: FEES.ONE, - }, - - { - op: 'TOALTSTACK', - args: [new BN(1)], - result: [], - resultAlt: [new IntegerStackItem(new BN(1))], - gas: FEES.ONE, - }, - - { - op: 'FROMALTSTACK', - argsAlt: [new BN(1)], - result: [new IntegerStackItem(new BN(1))], - gas: FEES.ONE, - }, - - { - op: 'XDROP', - args: [new BN(1), Buffer.alloc(1, 1), Buffer.alloc(1, 0)], - result: [new BufferStackItem(Buffer.alloc(1, 1))], - gas: FEES.ONE, - }, - - { - op: 'XSWAP', - args: [new BN(1), Buffer.alloc(1, 1), Buffer.alloc(1, 0)], - result: [new BufferStackItem(Buffer.alloc(1, 0)), new BufferStackItem(Buffer.alloc(1, 1))], - - gas: FEES.ONE, - }, - - { - op: 'XTUCK', - args: [new BN(2), Buffer.alloc(1, 0), Buffer.alloc(1, 1), Buffer.alloc(1, 2), Buffer.alloc(1, 3)], - - result: [ - new BufferStackItem(Buffer.alloc(1, 0)), - new BufferStackItem(Buffer.alloc(1, 1)), - new BufferStackItem(Buffer.alloc(1, 0)), - new BufferStackItem(Buffer.alloc(1, 2)), - new BufferStackItem(Buffer.alloc(1, 3)), - ], - - gas: FEES.ONE, - }, - - { - op: 'DEPTH', - args: [Buffer.alloc(1, 0), Buffer.alloc(1, 1)], - result: [ - new IntegerStackItem(new BN(2)), - new BufferStackItem(Buffer.alloc(1, 0)), - new BufferStackItem(Buffer.alloc(1, 1)), - ], - - gas: FEES.ONE, - }, - - { - op: 'DROP', - args: [Buffer.alloc(1, 0)], - result: [], - gas: FEES.ONE, - }, - - { - op: 'DUP', - args: [Buffer.alloc(1, 0)], - result: [new BufferStackItem(Buffer.alloc(1, 0)), new BufferStackItem(Buffer.alloc(1, 0))], - - gas: FEES.ONE, - }, - - { - op: 'NIP', - args: [Buffer.alloc(1, 0), Buffer.alloc(1, 1)], - result: [new BufferStackItem(Buffer.alloc(1, 0))], - gas: FEES.ONE, - }, - - { - op: 'OVER', - args: [Buffer.alloc(1, 0), Buffer.alloc(1, 1)], - result: [ - new BufferStackItem(Buffer.alloc(1, 1)), - new BufferStackItem(Buffer.alloc(1, 0)), - new BufferStackItem(Buffer.alloc(1, 1)), - ], - - gas: FEES.ONE, - }, - - { - op: 'PICK', - args: [new BN(1), Buffer.alloc(1, 0), Buffer.alloc(1, 1)], - result: [ - new BufferStackItem(Buffer.alloc(1, 1)), - new BufferStackItem(Buffer.alloc(1, 0)), - new BufferStackItem(Buffer.alloc(1, 1)), - ], - - gas: FEES.ONE, - }, - - { - op: 'ROLL', - args: [new BN(1), Buffer.alloc(1, 0), Buffer.alloc(1, 1), Buffer.alloc(1, 2)], - - result: [ - new BufferStackItem(Buffer.alloc(1, 1)), - new BufferStackItem(Buffer.alloc(1, 0)), - new BufferStackItem(Buffer.alloc(1, 2)), - ], - - gas: FEES.ONE, - }, - - { - op: 'ROT', - args: [Buffer.alloc(1, 3), Buffer.alloc(1, 2), Buffer.alloc(1, 1)], - result: [ - new BufferStackItem(Buffer.alloc(1, 1)), - new BufferStackItem(Buffer.alloc(1, 3)), - new BufferStackItem(Buffer.alloc(1, 2)), - ], - - gas: FEES.ONE, - }, - - { - op: 'SWAP', - args: [Buffer.alloc(1, 0), Buffer.alloc(1, 1)], - result: [new BufferStackItem(Buffer.alloc(1, 1)), new BufferStackItem(Buffer.alloc(1, 0))], - - gas: FEES.ONE, - }, - - { - op: 'TUCK', - args: [Buffer.alloc(1, 0), Buffer.alloc(1, 1)], - result: [ - new BufferStackItem(Buffer.alloc(1, 0)), - new BufferStackItem(Buffer.alloc(1, 1)), - new BufferStackItem(Buffer.alloc(1, 0)), - ], - - gas: FEES.ONE, - }, - - { - op: 'CAT', - args: [Buffer.alloc(1, 0), Buffer.alloc(1, 1)], - result: [new BufferStackItem(Buffer.concat([Buffer.alloc(1, 1), Buffer.alloc(1, 0)]))], - - gas: FEES.ONE, - }, - - { - op: 'SUBSTR', - args: [new BN(2), new BN(1), Buffer.from([11, 12, 13, 14, 15])], - result: [new BufferStackItem(Buffer.from([12, 13]))], - gas: FEES.ONE, - }, - - { - op: 'LEFT', - args: [new BN(2), Buffer.from([11, 12, 13, 14, 15])], - result: [new BufferStackItem(Buffer.from([11, 12]))], - gas: FEES.ONE, - }, - - { - op: 'RIGHT', - args: [new BN(2), Buffer.from([11, 12, 13, 14, 15])], - result: [new BufferStackItem(Buffer.from([14, 15]))], - gas: FEES.ONE, - }, - - { - op: 'SIZE', - args: [Buffer.alloc(10, 1)], - result: [new IntegerStackItem(new BN(10))], - gas: FEES.ONE, - }, - - { - op: 'INVERT', - args: [Buffer.alloc(10, 0x0f)], - result: [new IntegerStackItem(utils.fromSignedBuffer(Buffer.alloc(10, 0xf0)))], - - gas: FEES.ONE, - }, - - { - op: 'INVERT', - args: [Buffer.alloc(1, 0xf0)], - result: [new IntegerStackItem(utils.fromSignedBuffer(Buffer.alloc(1, 0x0f)))], - - gas: FEES.ONE, - }, - - { - op: 'AND', - args: [Buffer.alloc(10, 0x0a), Buffer.alloc(10, 0x0f)], - result: [new IntegerStackItem(utils.fromSignedBuffer(Buffer.alloc(10, 0x0a)))], - - gas: FEES.ONE, - }, - - { - op: 'AND', - args: [Buffer.alloc(1, 0xa0), Buffer.alloc(1, 0xa0)], - result: [new IntegerStackItem(utils.fromSignedBuffer(Buffer.alloc(1, 0xa0)))], - - gas: FEES.ONE, - }, - - { - op: 'OR', - args: [Buffer.alloc(10, 0xa0), Buffer.alloc(10, 0x0a)], - result: [new IntegerStackItem(utils.fromSignedBuffer(Buffer.alloc(10, 0xaa)))], - - gas: FEES.ONE, - }, - - { - op: 'OR', - args: [Buffer.alloc(10, 0xaa), Buffer.alloc(10, 0xaa)], - result: [new IntegerStackItem(utils.fromSignedBuffer(Buffer.alloc(10, 0xaa)))], - - gas: FEES.ONE, - }, - - { - op: 'OR', - args: [2, 128], - result: [new IntegerStackItem(new BN(130))], - gas: FEES.ONE, - }, - - { - op: 'OR', - args: [128, 2], - result: [new IntegerStackItem(new BN(130))], - gas: FEES.ONE, - }, - - { - op: 'XOR', - args: [Buffer.alloc(10, 0xa0), Buffer.alloc(10, 0x0a)], - result: [new IntegerStackItem(utils.fromSignedBuffer(Buffer.alloc(10, 0xaa)))], - - gas: FEES.ONE, - }, - - { - op: 'XOR', - args: [Buffer.alloc(10, 0xaa), Buffer.alloc(10, 0xaa)], - result: [new IntegerStackItem(utils.fromSignedBuffer(Buffer.alloc(10, 0x00)))], - - gas: FEES.ONE, - }, - - { - op: 'EQUAL', - args: [Buffer.alloc(10, 0x01), Buffer.alloc(10, 0x01)], - result: [new BooleanStackItem(true)], - gas: FEES.ONE, - }, - - { - op: 'EQUAL', - args: [Buffer.alloc(10, 0x01), []], - result: [new BooleanStackItem(false)], - gas: FEES.ONE, - }, - - { - op: 'EQUAL', - args: [new BN(1), []], - result: [new BooleanStackItem(false)], - gas: FEES.ONE, - }, - - { - op: 'EQUAL', - args: [true, []], - result: [new BooleanStackItem(false)], - gas: FEES.ONE, - }, - - // { - // op: 'OP_EQUALVERIFY', - // }, - // { - // op: 'OP_RESERVED1', - // }, - // { - // op: 'OP_RESERVED2', - // }, - { - op: 'INC', - args: [new BN(1)], - result: [new IntegerStackItem(new BN(2))], - gas: FEES.ONE, - }, - - { - op: 'DEC', - args: [new BN(2)], - result: [new IntegerStackItem(new BN(1))], - gas: FEES.ONE, - }, - - { - op: 'SIGN', - args: [new BN(0)], - result: [new IntegerStackItem(utils.ZERO)], - gas: FEES.ONE, - }, - - { - op: 'SIGN', - args: [new BN(-1)], - result: [new IntegerStackItem(utils.NEGATIVE_ONE)], - gas: FEES.ONE, - }, - - { - op: 'SIGN', - args: [new BN(5)], - result: [new IntegerStackItem(utils.ONE)], - gas: FEES.ONE, - }, - - { - op: 'NEGATE', - args: [new BN(5)], - result: [new IntegerStackItem(new BN(-5))], - gas: FEES.ONE, - }, - - { - op: 'ABS', - args: [new BN(-1)], - result: [new IntegerStackItem(new BN(1))], - gas: FEES.ONE, - }, - - { - op: 'NOT', - args: [true], - result: [new BooleanStackItem(false)], - gas: FEES.ONE, - }, - - { - op: 'NZ', - args: [new BN(5)], - result: [new BooleanStackItem(true)], - gas: FEES.ONE, - }, - - { - op: 'NZ', - args: [new BN(0)], - result: [new BooleanStackItem(false)], - gas: FEES.ONE, - }, - - { - op: 'ADD', - args: [new BN(1), new BN(5)], - result: [new IntegerStackItem(new BN(6))], - gas: FEES.ONE, - }, - - { - op: 'SUB', - args: [new BN(1), new BN(5)], - result: [new IntegerStackItem(new BN(4))], - gas: FEES.ONE, - }, - - { - op: 'MUL', - args: [new BN(2), new BN(5)], - result: [new IntegerStackItem(new BN(10))], - gas: FEES.ONE, - }, - - { - op: 'DIV', - args: [new BN(2), new BN(11)], - result: [new IntegerStackItem(new BN(5))], - gas: FEES.ONE, - }, - - { - op: 'MOD', - args: [new BN(2), new BN(5)], - result: [new IntegerStackItem(new BN(1))], - gas: FEES.ONE, - }, - - { - op: 'SHL', - args: [new BN(2), new BN(1)], - result: [new IntegerStackItem(new BN(4))], - gas: FEES.ONE, - }, - - { - op: 'SHL', - args: [new BN(2), new BN(-1)], - result: [new IntegerStackItem(new BN(-4))], - gas: FEES.ONE, - }, - - { - op: 'SHR', - args: [new BN(2), new BN(4)], - result: [new IntegerStackItem(new BN(1))], - gas: FEES.ONE, - }, - - { - op: 'SHR', - args: [new BN(2), new BN(-4)], - result: [new IntegerStackItem(new BN(-2))], - gas: FEES.ONE, - }, - - { - op: 'BOOLAND', - args: [true, false], - result: [new BooleanStackItem(false)], - gas: FEES.ONE, - }, - - { - op: 'BOOLAND', - args: [true, true], - result: [new BooleanStackItem(true)], - gas: FEES.ONE, - }, - - { - op: 'BOOLAND', - args: [false, false], - result: [new BooleanStackItem(false)], - gas: FEES.ONE, - }, - - { - op: 'BOOLOR', - args: [true, false], - result: [new BooleanStackItem(true)], - gas: FEES.ONE, - }, - - { - op: 'BOOLOR', - args: [true, true], - result: [new BooleanStackItem(true)], - gas: FEES.ONE, - }, - - { - op: 'BOOLOR', - args: [false, false], - result: [new BooleanStackItem(false)], - gas: FEES.ONE, - }, - - { - op: 'NUMEQUAL', - args: [new BN(4), new BN(4)], - result: [new BooleanStackItem(true)], - gas: FEES.ONE, - }, - - { - op: 'NUMEQUAL', - args: [new BN(4), new BN(5)], - result: [new BooleanStackItem(false)], - gas: FEES.ONE, - }, - - { - op: 'NUMNOTEQUAL', - args: [new BN(4), new BN(4)], - result: [new BooleanStackItem(false)], - gas: FEES.ONE, - }, - - { - op: 'NUMNOTEQUAL', - args: [new BN(4), new BN(5)], - result: [new BooleanStackItem(true)], - gas: FEES.ONE, - }, - - { - op: 'LT', - args: [new BN(4), new BN(5)], - result: [new BooleanStackItem(false)], - gas: FEES.ONE, - }, - - { - op: 'LT', - args: [new BN(6), new BN(5)], - result: [new BooleanStackItem(true)], - gas: FEES.ONE, - }, - - { - op: 'GT', - args: [new BN(4), new BN(5)], - result: [new BooleanStackItem(true)], - gas: FEES.ONE, - }, - - { - op: 'GT', - args: [new BN(6), new BN(5)], - result: [new BooleanStackItem(false)], - gas: FEES.ONE, - }, - - { - op: 'LTE', - args: [new BN(4), new BN(5)], - result: [new BooleanStackItem(false)], - gas: FEES.ONE, - }, - - { - op: 'LTE', - args: [new BN(4), new BN(4)], - result: [new BooleanStackItem(true)], - gas: FEES.ONE, - }, - - { - op: 'LTE', - args: [new BN(4), new BN(3)], - result: [new BooleanStackItem(true)], - gas: FEES.ONE, - }, - - { - op: 'GTE', - args: [new BN(4), new BN(5)], - result: [new BooleanStackItem(true)], - gas: FEES.ONE, - }, - - { - op: 'GTE', - args: [new BN(4), new BN(4)], - result: [new BooleanStackItem(true)], - gas: FEES.ONE, - }, - - { - op: 'GTE', - args: [new BN(4), new BN(3)], - result: [new BooleanStackItem(false)], - gas: FEES.ONE, - }, - - { - op: 'MIN', - args: [new BN(2), new BN(3)], - result: [new IntegerStackItem(new BN(2))], - gas: FEES.ONE, - }, - - { - op: 'MAX', - args: [new BN(2), new BN(3)], - result: [new IntegerStackItem(new BN(3))], - gas: FEES.ONE, - }, - - { - op: 'WITHIN', - args: [new BN(2), new BN(3), new BN(4)], - result: [new BooleanStackItem(false)], - gas: FEES.ONE, - }, - - { - op: 'WITHIN', - args: [new BN(5), new BN(3), new BN(4)], - result: [new BooleanStackItem(true)], - gas: FEES.ONE, - }, - - { - op: 'SHA1', - args: [Buffer.alloc(1, 1)], - result: [new BufferStackItem(crypto.sha1(Buffer.alloc(1, 1)))], - gas: FEES.TEN, - }, - - { - op: 'SHA256', - args: [Buffer.alloc(1, 1)], - result: [new BufferStackItem(crypto.sha256(Buffer.alloc(1, 1)))], - gas: FEES.TEN, - }, - - { - op: 'HASH160', - args: [Buffer.alloc(20, 1)], - result: [new UInt160StackItem(crypto.hash160(Buffer.alloc(20, 1)))], - gas: FEES.TWENTY, - }, - - { - op: 'HASH256', - args: [Buffer.alloc(32, 1)], - result: [new UInt256StackItem(crypto.hash256(Buffer.alloc(32, 1)))], - gas: FEES.TWENTY, - }, - - { - op: 'CHECKSIG', - args: [keys[0].publicKey, signature0], - result: [new BooleanStackItem(true)], - mockTransaction: ({ transaction }) => { - transaction.messageInternal = jest.fn(() => Buffer.alloc(32, 10)); - }, - gas: FEES.ONE_HUNDRED, - }, - - { - op: 'CHECKSIG', - args: [keys[0].publicKey, Buffer.alloc(64, 10)], - result: [new BooleanStackItem(false)], - gas: FEES.ONE_HUNDRED, - }, - - { - op: 'VERIFY', - args: [keys[0].publicKey, signature0, Buffer.alloc(32, 10)], - result: [new BooleanStackItem(true)], - gas: FEES.ONE_HUNDRED, - }, - - { - op: 'VERIFY', - args: [keys[0].publicKey, signature0, Buffer.alloc(32, 1)], - result: [new BooleanStackItem(false)], - gas: FEES.ONE_HUNDRED, - }, - - { - op: 'CHECKMULTISIG', - args: [[keys[0].publicKey, keys[1].publicKey], [signature0, signature1]], - result: [new BooleanStackItem(true)], - mockTransaction: ({ transaction }) => { - transaction.messageInternal = jest.fn(() => Buffer.alloc(32, 10)); - }, - gas: FEES.ONE_HUNDRED.mul(new BN(2)), - }, - - { - op: 'CHECKMULTISIG', - args: [new BN(2), keys[0].publicKey, keys[1].publicKey, new BN(2), signature0, signature1], - - result: [new BooleanStackItem(true)], - mockTransaction: ({ transaction }) => { - transaction.messageInternal = jest.fn(() => Buffer.alloc(32, 10)); - }, - gas: FEES.ONE_HUNDRED.mul(new BN(2)), - }, - - { - op: 'CHECKMULTISIG', - args: [[keys[0].publicKey, keys[2].publicKey, keys[1].publicKey], [signature0, signature1]], - - result: [new BooleanStackItem(true)], - mockTransaction: ({ transaction }) => { - transaction.messageInternal = jest.fn(() => Buffer.alloc(32, 10)); - }, - gas: FEES.ONE_HUNDRED.mul(new BN(3)), - }, - - { - op: 'CHECKMULTISIG', - args: [new BN(3), keys[0].publicKey, keys[2].publicKey, keys[1].publicKey, new BN(2), signature0, signature1], - - result: [new BooleanStackItem(true)], - mockTransaction: ({ transaction }) => { - transaction.messageInternal = jest.fn(() => Buffer.alloc(32, 10)); - }, - gas: FEES.ONE_HUNDRED.mul(new BN(3)), - }, - - { - op: 'CHECKMULTISIG', - args: [[keys[0].publicKey, keys[1].publicKey], [Buffer.alloc(64, 10)]], - result: [new BooleanStackItem(false)], - gas: FEES.ONE_HUNDRED.mul(new BN(2)), - }, - - { - op: 'CHECKMULTISIG', - args: [new BN(2), keys[0].publicKey, keys[1].publicKey, new BN(1), Buffer.alloc(64, 10)], - - result: [new BooleanStackItem(false)], - mockTransaction: ({ transaction }) => { - transaction.messageInternal = jest.fn(() => Buffer.alloc(32, 10)); - }, - gas: FEES.ONE_HUNDRED.mul(new BN(2)), - }, - - { - op: 'ARRAYSIZE', - args: [[true, false]], - result: [new IntegerStackItem(new BN(2))], - gas: FEES.ONE, - }, - - { - op: 'PACK', - args: [new BN(1), Buffer.alloc(1, 0), Buffer.alloc(1, 1), Buffer.alloc(1, 2)], - - result: [ - new ArrayStackItem([new BufferStackItem(Buffer.alloc(1, 0))]), - new BufferStackItem(Buffer.alloc(1, 1)), - new BufferStackItem(Buffer.alloc(1, 2)), - ], - - gas: FEES.ONE, - }, - - { - op: 'UNPACK', - args: [[new BN(4), new BN(5)]], - result: [new IntegerStackItem(new BN(2)), new IntegerStackItem(new BN(4)), new IntegerStackItem(new BN(5))], - - gas: FEES.ONE, - }, - - { - op: 'PICKITEM', - args: [new BN(1), [Buffer.alloc(1, 0), Buffer.alloc(1, 1), Buffer.alloc(1, 2)]], - - result: [new BufferStackItem(Buffer.alloc(1, 1))], - gas: FEES.ONE, - }, - - { - op: 'PICKITEM', - stackItems: [new BufferStackItem(Buffer.from('aaaa', 'hex')), mapStatic], - result: [new IntegerStackItem(new BN(1))], - gas: FEES.ONE, - }, - - { - op: 'PICKITEM', - stackItems: [ - new IntegerStackItem(new BN(1)), - new StructStackItem([ - new IntegerStackItem(new BN(1)), - new StructStackItem([new IntegerStackItem(new BN(1))]), - ]), - ], - result: [new StructStackItem([new IntegerStackItem(new BN(1))])], - gas: FEES.ONE, - }, - - { - op: 'SETITEM', - ref: setRef, - stackItems: [new IntegerStackItem(new BN(5)), new IntegerStackItem(new BN(0)), setRef], - - result: [new ArrayStackItem([new IntegerStackItem(new BN(5))])], - gas: FEES.ONE, - }, - - { - op: 'SETITEM', - ref: mapSetRef, - stackItems: [new IntegerStackItem(new BN(5)), new BufferStackItem(Buffer.from('dddd', 'hex')), mapSetRef], - - result: [ - new MapStackItem({ - referenceKeys: new Map([ - [ - new BufferStackItem(Buffer.from('aaaa', 'hex')).toStructuralKey(), - new BufferStackItem(Buffer.from('aaaa', 'hex')), - ] as const, - [ - new BufferStackItem(Buffer.from('bbbb', 'hex')).toStructuralKey(), - new BufferStackItem(Buffer.from('bbbb', 'hex')), - ] as const, - [ - new BufferStackItem(Buffer.from('dddd', 'hex')).toStructuralKey(), - new BufferStackItem(Buffer.from('dddd', 'hex')), - ] as const, - ]), - referenceValues: new Map([ - [ - new BufferStackItem(Buffer.from('aaaa', 'hex')).toStructuralKey(), - new IntegerStackItem(new BN(1)), - ] as const, - [ - new BufferStackItem(Buffer.from('bbbb', 'hex')).toStructuralKey(), - new IntegerStackItem(new BN(2)), - ] as const, - [ - new BufferStackItem(Buffer.from('dddd', 'hex')).toStructuralKey(), - new IntegerStackItem(new BN(5)), - ] as const, - ]), - }), - ], - - gas: FEES.ONE, - }, - - { - op: 'NEWARRAY', - args: [new BN(3)], - result: [ - new ArrayStackItem([new BooleanStackItem(false), new BooleanStackItem(false), new BooleanStackItem(false)]), - ], - - gas: FEES.ONE, - }, - - { - op: 'NEWARRAY', - args: [[new BN(1), new BN(2), new BN(3)]], - result: [ - new ArrayStackItem([ - new IntegerStackItem(new BN(1)), - new IntegerStackItem(new BN(2)), - new IntegerStackItem(new BN(3)), - ]), - ], - - gas: FEES.ONE, - }, - - { - op: 'NEWARRAY', - stackItems: [simpleStruct], - result: [new ArrayStackItem([new IntegerStackItem(new BN(1))])], - - gas: FEES.ONE, - }, - - { - op: 'NEWSTRUCT', - args: [new BN(3)], - result: [ - new StructStackItem([new BooleanStackItem(false), new BooleanStackItem(false), new BooleanStackItem(false)]), - ], - - gas: FEES.ONE, - }, - - { - op: 'NEWSTRUCT', - args: [[new BN(1), new BN(2), new BN(3)]], - result: [ - new StructStackItem([ - new IntegerStackItem(new BN(1)), - new IntegerStackItem(new BN(2)), - new IntegerStackItem(new BN(3)), - ]), - ], - - gas: FEES.ONE, - }, - - { - op: 'NEWSTRUCT', - stackItems: [simpleStruct], - result: [new StructStackItem([new IntegerStackItem(new BN(1))])], - - gas: FEES.ONE, - }, - - { - op: 'NEWMAP', - result: [new MapStackItem()], - gas: FEES.ONE, - }, - - { - op: 'APPEND', - ref: appendRef, - stackItems: [new IntegerStackItem(new BN(3)), appendRef], - result: [new ArrayStackItem([new IntegerStackItem(new BN(3))])], - gas: FEES.ONE, - }, - - { - op: 'APPEND', - stackItems: [simpleStruct, simpleStruct, simpleStruct], - result: [ - new StructStackItem([ - new IntegerStackItem(new BN(1)), - new StructStackItem([new IntegerStackItem(new BN(1))]), - ]), - ], - gas: FEES.ONE, - }, - - { - op: 'REVERSE', - ref: reverseRef, - stackItems: [reverseRef], - result: [ - new ArrayStackItem([ - new IntegerStackItem(new BN(3)), - new IntegerStackItem(new BN(2)), - new IntegerStackItem(new BN(1)), - ]), - ], - - gas: FEES.ONE, - }, - - { - op: 'REMOVE', - ref: removeRef, - stackItems: [new IntegerStackItem(new BN(1)), removeRef], - result: [new ArrayStackItem([new IntegerStackItem(new BN(1))])], - gas: FEES.ONE, - }, - - { - op: 'REMOVE', - ref: mapRemoveRef, - stackItems: [new BufferStackItem(Buffer.from('bbbb', 'hex')), mapRemoveRef], - - result: [ - new MapStackItem({ - referenceKeys: new Map([ - [ - new BufferStackItem(Buffer.from('aaaa', 'hex')).toStructuralKey(), - new BufferStackItem(Buffer.from('aaaa', 'hex')), - ] as const, - ]), - referenceValues: new Map([ - [ - new BufferStackItem(Buffer.from('aaaa', 'hex')).toStructuralKey(), - new IntegerStackItem(new BN(1)), - ] as const, - ]), - }), - ], - - gas: FEES.ONE, - }, - - { - op: 'HASKEY', - args: [new BN(1), [new BN(0), new BN(1)]], - result: [new BooleanStackItem(true)], - gas: FEES.ONE, - }, - - { - op: 'HASKEY', - args: [new BN(2), [new BN(0), new BN(1)]], - result: [new BooleanStackItem(false)], - gas: FEES.ONE, - }, - - { - op: 'HASKEY', - stackItems: [new BufferStackItem(Buffer.from('aaaa', 'hex')), mapStatic], - result: [new BooleanStackItem(true)], - gas: FEES.ONE, - }, - - { - op: 'HASKEY', - stackItems: [new BufferStackItem(Buffer.from('cccc', 'hex')), mapStatic], - result: [new BooleanStackItem(false)], - gas: FEES.ONE, - }, - - { - op: 'KEYS', - stackItems: [mapStatic], - result: [mapStatic.keys()], - gas: FEES.ONE, - }, - - { - op: 'VALUES', - args: [[new BN(1), new BN(2)]], - result: [new ArrayStackItem([new IntegerStackItem(new BN(1)), new IntegerStackItem(new BN(2))])], - - gas: FEES.ONE, - }, - - { - op: 'VALUES', - stackItems: [mapStatic], - result: [new ArrayStackItem(mapStatic.valuesArray())], - gas: FEES.ONE, - }, - ], - - // { - // op: 'THROW', - // }, - // { - // op: 'THROWIFNOT', - // }, - ) as readonly TestCase[]; - -describe('opcodes', () => { - // tslint:disable-next-line no-any - const filterMethods = (value: any): any => { - if (value == undefined) { - return value; - } - - if (Array.isArray(value)) { - return value.map(filterMethods); - } - - if (typeof value === 'function') { - return undefined; - } - - if (typeof value === 'object') { - // tslint:disable-next-line no-any - const result: { [key: string]: any } = {}; - // tslint:disable-next-line no-loop-statement - for (const [key, val] of Object.entries(value)) { - if (key !== 'referenceID' && key !== 'mutableCount') { - result[key] = filterMethods(val); - } - } - - return result; - } - - return value; - }; - - for (const testCase of OPCODES) { - const { - op, - postOps = [], - result, - resultAlt, - gas, - buffer, - args = [], - argsAlt = [], - preOps = [], - stackItems = [], - ref, - mockBlockchain, - mockTransaction, - returnValueCount, - } = testCase; - test(op, async () => { - const sb = new ScriptBuilder(); - for (const { op: preOp, buffer: preBuffer } of preOps) { - sb.emitOp(preOp, preBuffer); - } - - sb.emitOp(op, buffer); - - for (const { op: postOp, buffer: postBuffer } of postOps) { - sb.emitOp(postOp, postBuffer); - } - - const transaction = transactions.createInvocation({ - script: sb.build(), - attributes: [ - new UInt160Attribute({ - usage: AttributeUsage.Script, - value: scriptAttributeHash, - }), - ], - }); - - if (mockTransaction !== undefined) { - mockTransaction({ transaction }); - } - - const blockchain = { - output: {}, - asset: {}, - action: { - add: jest.fn(() => { - // do nothing - }), - }, - - contract: {}, - currentBlock: {}, - }; - - const block = { timestamp: blockTime }; - const init: ExecutionInit = { - scriptContainer: { - type: ScriptContainerType.Transaction, - value: transaction as Transaction, - }, - - triggerType, - action: NULL_ACTION, - listeners: {}, - skipWitnessVerify: false, - persistingBlock: block as any, - }; - - const gasLeft = utils.ONE_HUNDRED_MILLION; - let stack: readonly StackItem[] = []; - let stackAlt: readonly StackItem[] = []; - if (mockBlockchain !== undefined) { - mockBlockchain({ blockchain }); - } - - if (args.length) { - const argsSB = new ScriptBuilder(); - argsSB.emitPushParams(...args); - const argsContext = await executeScript({ - code: argsSB.build(), - blockchain: blockchain as any, - init, - gasLeft, - }); - - ({ stack } = argsContext); - } else if (stackItems.length) { - stack = stackItems; - } - - if (argsAlt.length) { - const argsAltSB = new ScriptBuilder(); - argsAltSB.emitPushParams(...argsAlt); - const argsAltContext = await executeScript({ - code: argsAltSB.build(), - blockchain: blockchain as any, - init, - gasLeft, - }); - - stackAlt = argsAltContext.stack; - } - - const context = await executeScript({ - code: transaction.script, - blockchain: blockchain as any, - init, - gasLeft, - options: { stack, stackAlt, returnValueCount } as any, - }); - - expect(context.errorMessage).toBeUndefined(); - if (resultAlt) { - expect(filterMethods(context.stackAlt)).toEqual(filterMethods(resultAlt)); - } - - if (stackItems.length && ref) { - expect(filterMethods(ref)).toEqual(filterMethods(result[0])); - } else { - expect(context.stack.length).toEqual(result.length); - for (const [idx, item] of context.stack.entries()) { - const resultItem = result[idx]; - if (item instanceof IntegerStackItem && resultItem instanceof IntegerStackItem) { - expect(item.asBigInteger().toString(10)).toEqual(resultItem.asBigInteger().toString(10)); - } else { - expect(filterMethods(item)).toEqual(filterMethods(resultItem)); - } - } - } - expect(gasLeft.sub(context.gasLeft).toString(10)).toEqual(gas.toString(10)); - }); - } -}); diff --git a/packages/neo-one-node-vm/src/__tests__/snapshot.test.ts b/packages/neo-one-node-vm/src/__tests__/snapshot.test.ts new file mode 100644 index 0000000000..e76db1da0c --- /dev/null +++ b/packages/neo-one-node-vm/src/__tests__/snapshot.test.ts @@ -0,0 +1,17 @@ +import { TriggerType, common, VMState } from '@neo-one/client-common'; +import { ApplicationEngine } from '../ApplicationEngine'; +import { Dispatcher } from '../Dispatcher'; + +describe('ApplicationEngine test', () => { + const dispatcher = new Dispatcher(); + beforeEach(() => { + dispatcher.reset(); + }); + test('withApplicationEngine -- NOP Script -- Halt', () => { + dispatcher.withSnapshots(({ main }) => { + main.changeBlockHashIndex(1, common.ZERO_UINT256); + + console.log(dispatcher.test()); + }); + }); +}); diff --git a/packages/neo-one-node-vm/src/__tests__/stackItem/ArrayLikeStackItem.test.ts b/packages/neo-one-node-vm/src/__tests__/stackItem/ArrayLikeStackItem.test.ts deleted file mode 100644 index 6a51d0b536..0000000000 --- a/packages/neo-one-node-vm/src/__tests__/stackItem/ArrayLikeStackItem.test.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { deserializeStackItem } from '../..'; -import { factory, testUtils } from '../../__data__/'; -import { ArrayStackItem, StructStackItem, UInt256StackItem } from '../../stackItem'; - -describe('Array(Like) Stack Item', () => { - const initUInt = factory.createUInt256(); - factory.incrementData(); - const secondUInt = factory.createUInt256(); - - const arrayStackItem = new ArrayStackItem([new UInt256StackItem(initUInt), new UInt256StackItem(secondUInt)]); - const structStackItem = new StructStackItem([new UInt256StackItem(initUInt), new UInt256StackItem(secondUInt)]); - const nestedStructStackItem = new StructStackItem([structStackItem]); - - test('Array - Deserialize serialized', () => { - const serialArrayItem = arrayStackItem.serialize(); - const deserializedArrayItem = deserializeStackItem(serialArrayItem); - - expect(deserializedArrayItem.asArray()).toEqual(arrayStackItem.asArray()); - }); - - test('Array - asBoolean', () => { - expect(arrayStackItem.asBoolean()).toBeTruthy(); - }); - - test('Array - convertJSON', () => { - expect(arrayStackItem.convertJSON()).toMatchSnapshot(); - }); - - test('Array - toStructuralKey', () => { - expect(arrayStackItem.toStructuralKey()).toMatchSnapshot(); - }); - - test('Array - equals - true', () => { - expect(arrayStackItem.equals(arrayStackItem)).toBeTruthy(); - }); - - test('Array - equals - false', () => { - expect(arrayStackItem.equals('no')).toBeFalsy(); - }); - - test('Array - toContractParameter throws on seen', () => { - const seen = testUtils.badSeen(arrayStackItem); - expect(() => arrayStackItem.toContractParameter(seen)).toThrowError('Circular Reference Error'); - }); - - test('Struct - Deserialize serialized', () => { - const serialStructItem = structStackItem.serialize(); - const deserializedStructStackItem = deserializeStackItem(serialStructItem); - - expect(deserializedStructStackItem.equals(structStackItem)).toBeTruthy(); - }); - - test('Struct - toStructuralKey', () => { - expect(structStackItem.toStructuralKey()).toMatchSnapshot(); - }); - - test('Struct - clones nested', () => { - expect(nestedStructStackItem.clone()).toEqual(nestedStructStackItem); - }); - - test('Struct - equals - undefined', () => { - expect(structStackItem.equals(undefined)).toBeFalsy(); - }); - - test('Struct - equals - same', () => { - expect(structStackItem.equals(structStackItem)).toBeTruthy(); - }); - - test('Struct - equals - cloned', () => { - expect(structStackItem.equals(structStackItem.clone())).toBeTruthy(); - }); - - test('Struct - equals - different structItem', () => { - expect(structStackItem.equals(nestedStructStackItem)).toBeFalsy(); - }); - test('Struct - equals - other item', () => { - expect(structStackItem.equals(true)).toBeFalsy(); - }); -}); diff --git a/packages/neo-one-node-vm/src/__tests__/stackItem/EnumIterStackItems.test.ts b/packages/neo-one-node-vm/src/__tests__/stackItem/EnumIterStackItems.test.ts deleted file mode 100644 index 52b33209b9..0000000000 --- a/packages/neo-one-node-vm/src/__tests__/stackItem/EnumIterStackItems.test.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { AsyncIterableX } from '@reactivex/ix-es2015-cjs/asynciterable'; -import { BN } from 'bn.js'; -import { deserializeStackItem } from '../..'; -import { - BooleanStackItem, - EnumeratorStackItem, - IntegerStackItem, - StackItemEnumerator, - StackItemIterator, -} from '../../stackItem'; - -describe('Enumerator/Iterator Stack Item Types', () => { - const testIterator: ReadonlyArray<{ readonly key: IntegerStackItem; readonly value: IntegerStackItem }> = [ - { key: new IntegerStackItem(new BN(0)), value: new IntegerStackItem(new BN(1)) }, - ]; - const testAsyncIterable = AsyncIterableX.from(testIterator); - - const stackItemEnumerator = new StackItemEnumerator(testAsyncIterable[Symbol.asyncIterator]()); - const stackItemIterator = new StackItemIterator(testAsyncIterable[Symbol.asyncIterator]()); - const enumeratorStackItem = new EnumeratorStackItem(stackItemEnumerator); - - test('StackItemEnumerator - mutableCurrent throws before .next() called', () => { - expect(() => stackItemEnumerator.value()).toThrowError( - 'Current is not set. The enumerator has been fully consumed or has not been initialized', - ); - }); - - test('StackItemEnumerator - start of iterating done - false', () => { - expect(stackItemEnumerator.done).toBeFalsy(); - }); - - test('StackItemEnumerator - equals', () => { - expect(stackItemEnumerator.equals(stackItemEnumerator)).toBeTruthy(); - expect(stackItemEnumerator.equals(true)).toBeFalsy(); - }); - - test('StackItemEnumerator - next', async () => { - expect(await stackItemEnumerator.next()).toBeTruthy(); // first .next() has a value. - expect(await stackItemEnumerator.next()).toBeFalsy(); // sets this.mutableDone to true, returns false - expect(await stackItemEnumerator.next()).toBeFalsy(); // returns !this.mutableDone - }); - - test('StackItemIterator - mutableCurrent throws before initialized', () => { - expect(() => stackItemIterator.key()).toThrowError( - 'Current is not set. The iterator has been fully consumed or has not been initialized', - ); - }); - - test('EnumeratorStackItem - toStructuralKey', () => { - expect(enumeratorStackItem.toStructuralKey()).toMatchSnapshot(); - }); - - test('EnumeratorStackItem - equals', () => { - expect(enumeratorStackItem.equals(enumeratorStackItem)).toBeTruthy(); - expect(enumeratorStackItem.equals(true)).toBeFalsy(); - }); -}); - -describe('Deserialize Stack Item Tests', () => { - const booleanStackItem = new BooleanStackItem(true); - const integerStackItem = new IntegerStackItem(new BN(0)); - - const serialBooleanItem = booleanStackItem.serialize(); - const serialIntegerItem = integerStackItem.serialize(); - - test('Deserialize BooleanStackItem', () => { - expect(deserializeStackItem(serialBooleanItem)).toEqual(booleanStackItem); - }); - - test('Deserialize IntegerStackItem', () => { - expect(deserializeStackItem(serialIntegerItem)).toEqual(integerStackItem); - }); -}); diff --git a/packages/neo-one-node-vm/src/__tests__/stackItem/EquatableStackItem.test.ts b/packages/neo-one-node-vm/src/__tests__/stackItem/EquatableStackItem.test.ts deleted file mode 100644 index f38984b114..0000000000 --- a/packages/neo-one-node-vm/src/__tests__/stackItem/EquatableStackItem.test.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { factory } from '../../__data__'; -import { AttributeStackItem } from '../../stackItem'; - -describe('EquatableKey Stack Item', () => { - const bufferAttribute = factory.createBufferAttribute(); - const ecPointAttribute = factory.createECPointAttribute(); - const bufferAttributeStackItem = new AttributeStackItem(bufferAttribute); - const ecPointAttributeStackItem = new AttributeStackItem(ecPointAttribute); - - test('toStructuralKey', () => { - expect(bufferAttributeStackItem.toStructuralKey()).toMatchSnapshot(); - }); - - test('equals - undefined other', () => { - expect(bufferAttributeStackItem.equals(undefined)).toBeFalsy(); - }); - - test('equals - same value', () => { - expect(bufferAttributeStackItem.equals(bufferAttributeStackItem)).toBeTruthy(); - }); - - test('equals - other stack item', () => { - expect(bufferAttributeStackItem.equals(ecPointAttributeStackItem)).toBeFalsy(); - }); -}); diff --git a/packages/neo-one-node-vm/src/__tests__/stackItem/MapStackItem.test.ts b/packages/neo-one-node-vm/src/__tests__/stackItem/MapStackItem.test.ts deleted file mode 100644 index a8fa867dc1..0000000000 --- a/packages/neo-one-node-vm/src/__tests__/stackItem/MapStackItem.test.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { BN } from 'bn.js'; -import { testUtils } from '../../__data__'; -import { BufferStackItem, IntegerStackItem, MapStackItem } from '../../stackItem'; - -describe('Map Stack Item', () => { - const keyStackItem = new IntegerStackItem(new BN(0)); - const valueStackItem = new BufferStackItem(Buffer.from([0x00])); - const keyMap = new Map([['0', keyStackItem] as const]); - const valueMap = new Map([[valueStackItem.toStructuralKey(), valueStackItem] as const]); - const mapStackItem = new MapStackItem({ - referenceKeys: keyMap, - referenceValues: valueMap, - }); - - test('toStructuralKey', () => { - expect(mapStackItem.toStructuralKey()).toMatchSnapshot(); - }); - test('equals - different value (false)', () => { - expect(mapStackItem.equals(true)).toBeFalsy(); - }); - test('isMap - (returns false)', () => { - expect(mapStackItem.isMap()).toBeFalsy(); - }); - test('asBoolean - true', () => { - expect(mapStackItem.asBoolean()).toBeTruthy(); - }); - test('asBuffer throws', () => { - expect(() => mapStackItem.asBuffer()).toThrowError('Invalid Value. Expected Buffer'); - }); - test('get throws error on no items', () => { - expect(() => mapStackItem.get(new IntegerStackItem(new BN(2)))).toThrowError('Map does not contain key.'); - }); - test('toContractParameter throws on seen', () => { - const seen = testUtils.badSeen(mapStackItem); - expect(() => mapStackItem.toContractParameter(seen)).toThrowError('Circular Reference Error'); - }); - test('toContractParameter', () => { - expect(mapStackItem.toContractParameter()).toMatchSnapshot(); - }); - - test('convertJSON', () => { - expect(mapStackItem.convertJSON()).toMatchSnapshot(); - }); -}); diff --git a/packages/neo-one-node-vm/src/__tests__/stackItem/ObjectStackItem.test.ts b/packages/neo-one-node-vm/src/__tests__/stackItem/ObjectStackItem.test.ts deleted file mode 100644 index c94daf1510..0000000000 --- a/packages/neo-one-node-vm/src/__tests__/stackItem/ObjectStackItem.test.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { factory } from '../../__data__'; -import { ContractStackItem } from '../../stackItem'; - -describe('Object Stack Item', () => { - const contract = factory.createContract(); - const contractStackItem = new ContractStackItem(contract); - - test('asBoolean', () => { - expect(contractStackItem.asBoolean()).toBeTruthy(); - }); - - test('asBuffer - throws', () => { - expect(() => contractStackItem.asBuffer()).toThrowError('Invalid Value. Expected Buffer'); - }); - - test('toContractParameter', () => { - expect(contractStackItem.toContractParameter()).toMatchSnapshot(); - }); - - test('serialize - Throws', () => { - expect(() => contractStackItem.serialize()).toThrowError('Unsupported StackItem serde.'); - }); -}); diff --git a/packages/neo-one-node-vm/src/__tests__/stackItem/Stack.test.ts b/packages/neo-one-node-vm/src/__tests__/stackItem/Stack.test.ts deleted file mode 100644 index 76955a9a78..0000000000 --- a/packages/neo-one-node-vm/src/__tests__/stackItem/Stack.test.ts +++ /dev/null @@ -1,281 +0,0 @@ -import { BN } from 'bn.js'; -import { ArrayStackItem, IntegerStackItem, MapStackItem } from '../../stackItem'; - -describe('StackItem', () => { - test('simple', () => { - const stackItem = new IntegerStackItem(new BN(10)); - - expect(stackItem.increment()).toEqual(1); - expect(stackItem.increment()).toEqual(1); - expect(stackItem.decrement()).toEqual(-1); - expect(stackItem.decrement()).toEqual(-1); - }); - - test('array', () => { - const stackItem = new ArrayStackItem([new IntegerStackItem(new BN(10)), new IntegerStackItem(new BN(11))]); - - expect(stackItem.increment()).toEqual(3); - expect(stackItem.decrement()).toEqual(-3); - }); - - test('APPEND - array circular on stack', () => { - // [value] PUSH10 - const a = new IntegerStackItem(new BN(10)); - expect(a.increment()).toEqual(1); - // [value, value] PUSH10 - const b = new IntegerStackItem(new BN(10)); - expect(b.increment()).toEqual(1); - - // [number, value, value] PUSH2 - const c = new IntegerStackItem(new BN(10)); - expect(c.increment()).toEqual(1); - - // [arr] PACK - expect(a.decrement()).toEqual(-1); - expect(b.decrement()).toEqual(-1); - expect(c.decrement()).toEqual(-1); - const stackItem = new ArrayStackItem([a, b]); - expect(stackItem.increment()).toEqual(3); - - // [arr, arr] DUP - expect(stackItem.increment()).toEqual(1); - // [arr, arr, arr] DUP - expect(stackItem.increment()).toEqual(1); - - // [arr] APPEND - expect(stackItem.decrement()).toEqual(-1); - expect(stackItem.decrement()).toEqual(-1); - // tslint:disable-next-line no-array-mutation - stackItem.value.push(stackItem); - expect(stackItem.increment(new Set([stackItem]))).toEqual(1); - - // [arr, arr] DUP - expect(stackItem.increment()).toEqual(1); - // [arr, arr, arr] DUP - expect(stackItem.increment()).toEqual(1); - - // [arr] APPEND - expect(stackItem.decrement()).toEqual(-1); - expect(stackItem.decrement()).toEqual(-1); - // tslint:disable-next-line no-array-mutation - stackItem.value.push(stackItem); - expect(stackItem.increment(new Set([stackItem]))).toEqual(1); - - // [] DROP - expect(stackItem.decrement()).toEqual(-5); - }); - - test('APPEND - array circular on stack, consumed', () => { - // [value] PUSH10 - const a = new IntegerStackItem(new BN(10)); - expect(a.increment()).toEqual(1); - // [value, value] PUSH10 - const b = new IntegerStackItem(new BN(10)); - expect(b.increment()).toEqual(1); - - // [number, value, value] PUSH2 - const c = new IntegerStackItem(new BN(10)); - expect(c.increment()).toEqual(1); - - // [arr] PACK - expect(a.decrement()).toEqual(-1); - expect(b.decrement()).toEqual(-1); - expect(c.decrement()).toEqual(-1); - const stackItem = new ArrayStackItem([a, b]); - expect(stackItem.increment()).toEqual(3); - - // [arr, arr] DUP - expect(stackItem.increment()).toEqual(1); - - // [] APPEND - expect(stackItem.decrement()).toEqual(-1); - expect(stackItem.decrement()).toEqual(-3); - // tslint:disable-next-line no-array-mutation - stackItem.value.push(stackItem); - }); - - test('SETITEM - map circular on stack', () => { - // [map] NEWMAP - const stackItem = new MapStackItem(); - expect(stackItem.increment()).toEqual(1); - - // [map, map] DUP - expect(stackItem.increment()).toEqual(1); - - // [map, map, map] DUP - expect(stackItem.increment()).toEqual(1); - // [map, map, map, map] DUP - expect(stackItem.increment()).toEqual(1); - - // [map] SETITEM - expect(stackItem.decrement()).toEqual(-1); - expect(stackItem.decrement()).toEqual(-1); - expect(stackItem.decrement()).toEqual(-1); - stackItem.set(stackItem, stackItem); - expect(stackItem.increment(new Set([stackItem]))).toEqual(1); - expect(stackItem.increment(new Set([stackItem]))).toEqual(1); - - // [] DROP - expect(stackItem.decrement()).toEqual(-3); - }); - - test('SETITEM - map circular on stack, consumed', () => { - // [map] NEWMAP - const stackItem = new MapStackItem(); - expect(stackItem.increment()).toEqual(1); - - // [map, map] DUP - expect(stackItem.increment()).toEqual(1); - - // [map, map, map] DUP - expect(stackItem.increment()).toEqual(1); - // [map, map, map, map] DUP - expect(stackItem.increment()).toEqual(1); - - // [map] SETITEM - expect(stackItem.decrement()).toEqual(-1); - expect(stackItem.decrement()).toEqual(-1); - expect(stackItem.decrement()).toEqual(-1); - stackItem.set(stackItem, stackItem); - expect(stackItem.increment(new Set([stackItem]))).toEqual(1); - expect(stackItem.increment(new Set([stackItem]))).toEqual(1); - - // [] DROP - expect(stackItem.decrement()).toEqual(-3); - }); - - test('REMOVE - map circular on stack', () => { - // [map] NEWMAP - const stackItem = new MapStackItem(); - expect(stackItem.increment()).toEqual(1); - - // [map, map] DUP - expect(stackItem.increment()).toEqual(1); - // [map, map, map] DUP - expect(stackItem.increment()).toEqual(1); - // [map, map, map, map] DUP - expect(stackItem.increment()).toEqual(1); - - // [map] SETITEM - expect(stackItem.decrement()).toEqual(-1); - expect(stackItem.decrement()).toEqual(-1); - expect(stackItem.decrement()).toEqual(-1); - stackItem.set(stackItem, stackItem); - expect(stackItem.increment(new Set([stackItem]))).toEqual(1); - expect(stackItem.increment(new Set([stackItem]))).toEqual(1); - - // [map, map] DUP - expect(stackItem.increment()).toEqual(1); - // [map, map, map] DUP - expect(stackItem.increment()).toEqual(1); - - // [map] REMOVE - expect(stackItem.decrement()).toEqual(-1); - expect(stackItem.decrement()).toEqual(-1); - stackItem.delete(stackItem); - expect(stackItem.referenceCount).toEqual(1); - expect(stackItem.decrement(new Set([stackItem]))).toEqual(-1); - expect(stackItem.decrement(new Set([stackItem]))).toEqual(-1); - - // [] DROP - expect(stackItem.decrement()).toEqual(-1); - }); - - test('REMOVE - map circular on stack, consumed', () => { - // [map] NEWMAP - const stackItem = new MapStackItem(); - expect(stackItem.increment()).toEqual(1); - - // [map, map] DUP - expect(stackItem.increment()).toEqual(1); - // [map, map, map] DUP - expect(stackItem.increment()).toEqual(1); - // [map, map, map, map] DUP - expect(stackItem.increment()).toEqual(1); - - // [map] SETITEM - expect(stackItem.decrement()).toEqual(-1); - expect(stackItem.decrement()).toEqual(-1); - expect(stackItem.decrement()).toEqual(-1); - stackItem.set(stackItem, stackItem); - expect(stackItem.increment(new Set([stackItem]))).toEqual(1); - expect(stackItem.increment(new Set([stackItem]))).toEqual(1); - - // [map, map] DUP - expect(stackItem.increment()).toEqual(1); - - // [] REMOVE - expect(stackItem.decrement()).toEqual(-1); - expect(stackItem.decrement()).toEqual(-3); - stackItem.delete(stackItem); - expect(stackItem.referenceCount).toEqual(0); - }); - - test('KEYS + DROP - map circular on stack', () => { - // [map] NEWMAP - const stackItem = new MapStackItem(); - expect(stackItem.increment()).toEqual(1); - - // [map, map] DUP - expect(stackItem.increment()).toEqual(1); - // [map, map, map] DUP - expect(stackItem.increment()).toEqual(1); - // [map, map, map, map] DUP - expect(stackItem.increment()).toEqual(1); - - // [map] SETITEM - expect(stackItem.decrement()).toEqual(-1); - expect(stackItem.decrement()).toEqual(-1); - expect(stackItem.decrement()).toEqual(-1); - stackItem.set(stackItem, stackItem); - expect(stackItem.increment(new Set([stackItem]))).toEqual(1); - expect(stackItem.increment(new Set([stackItem]))).toEqual(1); - - // [map, map] DUP - expect(stackItem.increment()).toEqual(1); - - // [arr, map] KEYS - expect(stackItem.decrement()).toEqual(-1); - const arr = new ArrayStackItem([stackItem]); - expect(arr.increment()).toEqual(2); - - // [arr] DROP - expect(arr.decrement()).toEqual(-2); - // [] - expect(stackItem.decrement()).toEqual(-3); - }); - - test('KEYS + NIP - map circular on stack', () => { - // [map] NEWMAP - const stackItem = new MapStackItem(); - expect(stackItem.increment()).toEqual(1); - - // [map, map] DUP - expect(stackItem.increment()).toEqual(1); - // [map, map, map] DUP - expect(stackItem.increment()).toEqual(1); - // [map, map, map, map] DUP - expect(stackItem.increment()).toEqual(1); - - // [map] SETITEM - expect(stackItem.decrement()).toEqual(-1); - expect(stackItem.decrement()).toEqual(-1); - expect(stackItem.decrement()).toEqual(-1); - stackItem.set(stackItem, stackItem); - expect(stackItem.increment(new Set([stackItem]))).toEqual(1); - expect(stackItem.increment(new Set([stackItem]))).toEqual(1); - - // [map, map] DUP - expect(stackItem.increment()).toEqual(1); - - // [arr, map] KEYS - expect(stackItem.decrement()).toEqual(-1); - const arr = new ArrayStackItem([stackItem]); - expect(arr.increment()).toEqual(2); - - // [arr] NIPF - expect(stackItem.decrement()).toEqual(-1); - // [] - expect(arr.decrement()).toEqual(-4); - }); -}); diff --git a/packages/neo-one-node-vm/src/__tests__/stackItem/StackItem.test.ts b/packages/neo-one-node-vm/src/__tests__/stackItem/StackItem.test.ts deleted file mode 100644 index 8e1b98fd23..0000000000 --- a/packages/neo-one-node-vm/src/__tests__/stackItem/StackItem.test.ts +++ /dev/null @@ -1,231 +0,0 @@ -import { utils } from '@neo-one/client-common'; -import { BN } from 'bn.js'; -import _ from 'lodash'; -import { factory } from '../../__data__'; -import { - AccountStackItem, - assertStackItemType, - AssetStackItem, - AttributeStackItem, - BlockStackItem, - BooleanStackItem, - BufferStackItem, - ConsensusPayloadStackItem, - ContractStackItem, - ECPointStackItem, - HeaderStackItem, - InputStackItem, - IntegerStackItem, - OutputStackItem, - StackItemType, - StorageContextStackItem, - UInt160StackItem, - UInt256StackItem, - ValidatorStackItem, -} from '../../stackItem'; - -describe('Stack Item Tests', () => { - beforeEach(() => { - factory.resetDataIndex(); - }); - - test('Account Stack Item', () => { - const account = factory.createAccount(); - const accountItem = new AccountStackItem(account); - - expect(accountItem.asAccount()).toEqual(account); - }); - - test('Boolean Stack Item - true', () => { - const booleanItem = new BooleanStackItem(true); - - expect(booleanItem.asBigInteger()).toEqual(utils.ONE); - expect(booleanItem.asBoolean()).toEqual(true); - expect(booleanItem.asBuffer()).toEqual(Buffer.from([1])); - expect(booleanItem.toContractParameter()).toMatchSnapshot(); - expect(booleanItem.serialize()).toEqual(Buffer.concat([Buffer.from([StackItemType.Boolean]), Buffer.from([0x01])])); - }); - - test('Boolean Stack Item - false', () => { - const booleanItem = new BooleanStackItem(false); - - expect(booleanItem.asBigInteger()).toEqual(utils.ZERO); - expect(booleanItem.asBoolean()).toEqual(false); - expect(booleanItem.asBuffer()).toEqual(Buffer.from([])); - expect(booleanItem.toContractParameter()).toMatchSnapshot(); - expect(booleanItem.serialize()).toEqual(Buffer.concat([Buffer.from([StackItemType.Boolean]), Buffer.from([0x00])])); - }); - - test('Buffer Stack Item', () => { - const buff = Buffer.from([0]); - const bufferItem = new BufferStackItem(buff); - - expect(bufferItem.asBuffer()).toEqual(buff); - expect(bufferItem.toContractParameter()).toMatchSnapshot(); - }); - - test('Integer Stack Item', () => { - const int = new BN(1); - const integerItem = new IntegerStackItem(int); - - expect(integerItem.toContractParameter()).toMatchSnapshot(); - expect(integerItem.serialize()).toEqual( - Buffer.concat([ - Buffer.from([StackItemType.Integer]), - Buffer.from([0x01]), - Buffer.from(utils.toSignedBuffer(int)), - ]), - ); - }); - - test('Integer Stack Item - Errors', () => { - const badInt = new BN(Buffer.concat(_.range(33).map(() => Buffer.from([0xff])))); - const integerStackItemThrows = () => new IntegerStackItem(badInt); - - expect(integerStackItemThrows).toThrowError('Integer too large. Max size is 256 bits.'); - }); - - test('Output Stack Item', () => { - const out = factory.createOutput(); - const outputStackItem = new OutputStackItem(out); - - expect(outputStackItem.asOutput()).toEqual(out); - }); - - test('ECPoint Stack Item', () => { - const ecPoint = factory.createECPoint(); - const ecPointStackItem = new ECPointStackItem(ecPoint); - - expect(ecPointStackItem.asECPoint()).toEqual(ecPoint); - expect(ecPointStackItem.asBuffer()).toEqual(Buffer.from(ecPoint)); - expect(ecPointStackItem.toContractParameter()).toMatchSnapshot(); - }); - - test('Contract Stack Item', () => { - const contract = factory.createContract(); - const contractStackItem = new ContractStackItem(contract); - - expect(contractStackItem.asContract()).toEqual(contract); - }); - - test('Input Stack Item', () => { - const input = factory.createInput(); - const inputStackItem = new InputStackItem(input); - - expect(inputStackItem.asInput()).toEqual(input); - }); - - test('Header Stack Item', () => { - const header = factory.createHeader(); - const headerStackItem = new HeaderStackItem(header); - - expect(headerStackItem.asHeader()).toEqual(header); - expect(headerStackItem.asBlockBase()).toEqual(header); - }); - - test('Block Stack Item', () => { - const header = factory.createHeader(); - const block = factory.createBlock({ ...header }); - const blockStackItem = new BlockStackItem(block); - - expect(blockStackItem.asHeader()).toEqual(block.header); - expect(blockStackItem.asBlockBase()).toEqual(block); - }); - - test('Asset Stack Item', () => { - const asset = factory.createAsset(); - const assetStackItem = new AssetStackItem(asset); - - expect(assetStackItem.asAsset()).toEqual(asset); - }); - - test('UInt160 Stack Item', () => { - const uInt160 = factory.createUInt160(); - const uInt160StackItem = new UInt160StackItem(uInt160); - - expect(uInt160StackItem.asUInt160()).toEqual(uInt160); - expect(uInt160StackItem.asBuffer()).toEqual(Buffer.from(uInt160)); - expect(uInt160StackItem.toContractParameter()).toMatchSnapshot(); - }); - - test('UInt256 Stack Item', () => { - const uInt256 = factory.createUInt256(); - const uInt256StackItem = new UInt256StackItem(uInt256); - - expect(uInt256StackItem.asUInt256()).toEqual(uInt256); - expect(uInt256StackItem.asBuffer()).toEqual(Buffer.from(uInt256)); - expect(uInt256StackItem.toContractParameter()).toMatchSnapshot(); - }); - - test('Attribute Stack Item - Buffer', () => { - const buff = Buffer.from('test', 'hex'); - const bufferAttribute = factory.createBufferAttribute({ value: buff }); - const bufferAttributeStackItem = new AttributeStackItem(bufferAttribute); - - expect(bufferAttributeStackItem.asAttributeStackItem()).toEqual(bufferAttributeStackItem); - expect(bufferAttributeStackItem.asAttribute()).toEqual(bufferAttribute); - expect(bufferAttributeStackItem.asBuffer()).toEqual(buff); - expect(bufferAttributeStackItem.toContractParameter()).toMatchSnapshot(); - }); - - test('Attribute Stack Item - UInt160', () => { - const uInt160 = factory.createUInt160(); - const uInt160Attribute = factory.createUInt160Attribute({ value: uInt160 }); - const uInt160AttributeStackItem = new AttributeStackItem(uInt160Attribute); - - expect(uInt160AttributeStackItem.asAttribute()).toEqual(uInt160Attribute); - expect(uInt160AttributeStackItem.asBuffer()).toEqual(Buffer.from(uInt160)); - expect(uInt160AttributeStackItem.asUInt160()).toEqual(uInt160); - expect(uInt160AttributeStackItem.toContractParameter()).toMatchSnapshot(); - }); - - test('Attribute Stack Item - UInt256', () => { - const uInt256 = factory.createUInt256(); - const uInt256Attribute = factory.createUInt256Attribute({ value: uInt256 }); - const uInt256AttributeStackItem = new AttributeStackItem(uInt256Attribute); - - expect(uInt256AttributeStackItem.asAttribute()).toEqual(uInt256Attribute); - expect(uInt256AttributeStackItem.asBuffer()).toEqual(Buffer.from(uInt256)); - expect(uInt256AttributeStackItem.asUInt256()).toEqual(uInt256); - expect(uInt256AttributeStackItem.toContractParameter()).toMatchSnapshot(); - }); - - test('Attribute Stack Item - ECPoint', () => { - const ecPoint = factory.createECPoint(); - const ecPointAttribute = factory.createECPointAttribute({ value: ecPoint }); - const ecPointAttributeStackItem = new AttributeStackItem(ecPointAttribute); - - expect(ecPointAttributeStackItem.asAttribute()).toEqual(ecPointAttribute); - expect(ecPointAttributeStackItem.asBuffer()).toEqual(Buffer.from(ecPoint)); - expect(ecPointAttributeStackItem.asECPoint()).toEqual(ecPoint); - expect(ecPointAttributeStackItem.toContractParameter()).toMatchSnapshot(); - }); - - test('Consensus Payload Stack Item', () => { - const consensusPayload = factory.createConsensusPayload(); - const consensusPayloadStackItem = new ConsensusPayloadStackItem(consensusPayload); - - expect(consensusPayloadStackItem.asConsensusPayload()).toEqual(consensusPayload); - }); - - test('Validator Stack Item', () => { - const validator = factory.createValidator(); - const validatorStackItem = new ValidatorStackItem(validator); - - expect(validatorStackItem.asValidator()).toEqual(validator); - }); - - test('StorageContext Stack Item', () => { - const uInt160 = factory.createUInt160(); - const storageContextStackItem = new StorageContextStackItem(uInt160); - - expect(storageContextStackItem.asUInt160()).toEqual(uInt160); - expect(storageContextStackItem.asBoolean()).toBeTruthy(); - expect(storageContextStackItem.asBuffer()).toEqual(Buffer.from(uInt160)); - }); - - test('StackItemType - Throws On Bad Assert', () => { - const badByte = 0xff; - expect(() => assertStackItemType(badByte)).toThrowError(`Expected StackItemType, found: ${badByte.toString(16)}`); - }); -}); diff --git a/packages/neo-one-node-vm/src/__tests__/stackItem/StackItemBase.test.ts b/packages/neo-one-node-vm/src/__tests__/stackItem/StackItemBase.test.ts deleted file mode 100644 index 8c2bbf9d45..0000000000 --- a/packages/neo-one-node-vm/src/__tests__/stackItem/StackItemBase.test.ts +++ /dev/null @@ -1,114 +0,0 @@ -import { factory, testUtils } from '../../__data__'; -import { HeaderStackItem, InputStackItem, UInt160StackItem, UInt256StackItem } from '../../stackItem'; - -describe('Stack Item Base', () => { - const uInt160 = factory.createUInt160(); - const uInt256 = factory.createUInt256(); - const header = factory.createHeader(); - const input = factory.createInput(); - const uInt160StackItem = new UInt160StackItem(uInt160); - const uInt256StackItem = new UInt256StackItem(uInt256); - const headerStackItem = new HeaderStackItem(header); - const inputStackItem = new InputStackItem(input); - - test('equals - undefined', () => { - expect(uInt160StackItem.equals(undefined)).toBeFalsy(); - }); - - test('equals - true (same)', () => { - expect(uInt160StackItem.equals(uInt160StackItem)).toBeTruthy(); - }); - - test('equals - false (different stackItem)', () => { - expect(uInt160StackItem.equals(uInt256StackItem)).toBeFalsy(); - }); - - test('equals - false (number)', () => { - expect(uInt160StackItem.equals(1)).toBeFalsy(); - }); - - test('serialize - throws on seen', () => { - const seen = testUtils.badSeen(uInt160StackItem); - expect(() => uInt160StackItem.serialize(seen)).toThrowError('Attempted to serialize a recursive structure.'); - }); - - test('asArray - throws', () => { - expect(() => uInt160StackItem.asArray()).toThrowError('Invalid Value. Expected Array'); - }); - - test('asUInt160Maybe - uInt160', () => { - expect(uInt160StackItem.asUInt160Maybe()).toEqual(uInt160); - }); - - test('asUInt160Maybe - uInt256 (bad)', () => { - expect(uInt256StackItem.asUInt160Maybe()).toEqual(undefined); - }); - - test('asUInt256Maybe - uInt256', () => { - expect(uInt256StackItem.asUInt256Maybe()).toEqual(uInt256); - }); - - test('asUInt256Maybe - uInt160 (bad)', () => { - expect(uInt160StackItem.asUInt256Maybe()).toEqual(undefined); - }); - - test('asECPointMaybe - bad', () => { - expect(headerStackItem.asECPointMaybe()).toEqual(undefined); - }); - - test('Errors - asHeader', () => { - expect(() => uInt160StackItem.asHeader()).toThrowError('Invalid Value. Expected Header'); - }); - test('Errors - asBlockBase', () => { - expect(() => uInt160StackItem.asBlockBase()).toThrowError('Invalid Value. Expected BlockBase'); - }); - test('Errors - asBlock', () => { - expect(() => uInt160StackItem.asBlock()).toThrowError('Invalid Value. Expected Block'); - }); - test('Errors - asTransaction', () => { - expect(() => uInt160StackItem.asTransaction()).toThrowError('Invalid Value. Expected Transaction'); - }); - test('Errors - asAttribute', () => { - expect(() => uInt160StackItem.asAttribute()).toThrowError('Invalid Value. Expected Attribute'); - }); - test('Errors - asAttributeStackItem', () => { - expect(() => uInt160StackItem.asAttributeStackItem()).toThrowError('Invalid Value. Expected AttributeStackItem'); - }); - test('Errors - asInput', () => { - expect(() => uInt160StackItem.asInput()).toThrowError('Invalid Value. Expected Input'); - }); - test('Errors - asOutput', () => { - expect(() => uInt160StackItem.asOutput()).toThrowError('Invalid Value. Expected Output'); - }); - test('Errors - asAccount', () => { - expect(() => uInt160StackItem.asAccount()).toThrowError('Invalid Value. Expected Account'); - }); - test('Errors - asAsset', () => { - expect(() => uInt160StackItem.asAsset()).toThrowError('Invalid Value. Expected Asset'); - }); - test('Errors - asContract', () => { - expect(() => uInt160StackItem.asContract()).toThrowError('Invalid Value. Expected Contract'); - }); - test('Errors - asValidator', () => { - expect(() => uInt160StackItem.asValidator()).toThrowError('Invalid Value. Expected Validator'); - }); - test('Errors - asMapStackItem', () => { - expect(() => uInt160StackItem.asMapStackItem()).toThrowError('Invalid Value. Expected MapStackItem'); - }); - test('Errors - asEnumerator', () => { - expect(() => uInt160StackItem.asEnumerator()).toThrowError('Invalid Value. Expected Enumerator'); - }); - test('Errors - asIterator', () => { - expect(() => uInt160StackItem.asIterator()).toThrowError('Invalid Value. Expected Iterator'); - }); - test('Base - isMap', () => { - expect(uInt160StackItem.isMap()).toBeFalsy(); - }); - test('Base - circular return', () => { - const seen = testUtils.badSeen(uInt160StackItem); - expect(uInt160StackItem.convertJSON(seen)).toEqual(''); - }); - test('convertJSON - "UNKNOWN"', () => { - expect(inputStackItem.convertJSON()).toEqual('UNKNOWN'); - }); -}); diff --git a/packages/neo-one-node-vm/src/__tests__/stackItem/__snapshots__/ArrayLikeStackItem.test.ts.snap b/packages/neo-one-node-vm/src/__tests__/stackItem/__snapshots__/ArrayLikeStackItem.test.ts.snap deleted file mode 100644 index 2cf9934d18..0000000000 --- a/packages/neo-one-node-vm/src/__tests__/stackItem/__snapshots__/ArrayLikeStackItem.test.ts.snap +++ /dev/null @@ -1,12 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Array(Like) Stack Item Array - convertJSON 1`] = ` -Array [ - "a9b71a27c3f44e611e816b67e2cb75822d92e179993fc43e240a079d220bf59b", - "a9b71a27c3f44e611e816b67e2cb75822d92e179993fc43e240a079d220bf59b", -] -`; - -exports[`Array(Like) Stack Item Array - toStructuralKey 1`] = `"1"`; - -exports[`Array(Like) Stack Item Struct - toStructuralKey 1`] = `"[\\"a9b71a27c3f44e611e816b67e2cb75822d92e179993fc43e240a079d220bf59b\\",\\"a9b71a27c3f44e611e816b67e2cb75822d92e179993fc43e240a079d220bf59b\\"]"`; diff --git a/packages/neo-one-node-vm/src/__tests__/stackItem/__snapshots__/EnumIterStackItems.test.ts.snap b/packages/neo-one-node-vm/src/__tests__/stackItem/__snapshots__/EnumIterStackItems.test.ts.snap deleted file mode 100644 index f247f7cb20..0000000000 --- a/packages/neo-one-node-vm/src/__tests__/stackItem/__snapshots__/EnumIterStackItems.test.ts.snap +++ /dev/null @@ -1,3 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Enumerator/Iterator Stack Item Types EnumeratorStackItem - toStructuralKey 1`] = `"1"`; diff --git a/packages/neo-one-node-vm/src/__tests__/stackItem/__snapshots__/EquatableStackItem.test.ts.snap b/packages/neo-one-node-vm/src/__tests__/stackItem/__snapshots__/EquatableStackItem.test.ts.snap deleted file mode 100644 index 0b6fba5ae9..0000000000 --- a/packages/neo-one-node-vm/src/__tests__/stackItem/__snapshots__/EquatableStackItem.test.ts.snap +++ /dev/null @@ -1,3 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`EquatableKey Stack Item toStructuralKey 1`] = `"AttributeBaseClass:129:fbe042a3403a59513625225b9132f3c48d0014283a837ba480c136f43d112106"`; diff --git a/packages/neo-one-node-vm/src/__tests__/stackItem/__snapshots__/MapStackItem.test.ts.snap b/packages/neo-one-node-vm/src/__tests__/stackItem/__snapshots__/MapStackItem.test.ts.snap deleted file mode 100644 index c927518c38..0000000000 --- a/packages/neo-one-node-vm/src/__tests__/stackItem/__snapshots__/MapStackItem.test.ts.snap +++ /dev/null @@ -1,31 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Map Stack Item convertJSON 1`] = ` -Object { - "\\"00\\"": "00", -} -`; - -exports[`Map Stack Item toContractParameter 1`] = ` -MapContractParameter { - "serializeWire": [Function], - "sizeInternal": [Function], - "type": 18, - "value": Array [ - Array [ - Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "0", - }, - Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00", - }, - ], - ], -} -`; - -exports[`Map Stack Item toStructuralKey 1`] = `"1"`; diff --git a/packages/neo-one-node-vm/src/__tests__/stackItem/__snapshots__/ObjectStackItem.test.ts.snap b/packages/neo-one-node-vm/src/__tests__/stackItem/__snapshots__/ObjectStackItem.test.ts.snap deleted file mode 100644 index da564a7981..0000000000 --- a/packages/neo-one-node-vm/src/__tests__/stackItem/__snapshots__/ObjectStackItem.test.ts.snap +++ /dev/null @@ -1,9 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Object Stack Item toContractParameter 1`] = ` -Object { - "__$type": "InteropInterfaceContractParameter", - "size": 0, - "type": 240, -} -`; diff --git a/packages/neo-one-node-vm/src/__tests__/stackItem/__snapshots__/StackItem.test.ts.snap b/packages/neo-one-node-vm/src/__tests__/stackItem/__snapshots__/StackItem.test.ts.snap deleted file mode 100644 index 2bb3d14850..0000000000 --- a/packages/neo-one-node-vm/src/__tests__/stackItem/__snapshots__/StackItem.test.ts.snap +++ /dev/null @@ -1,89 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Stack Item Tests Attribute Stack Item - Buffer 1`] = ` -Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "", -} -`; - -exports[`Stack Item Tests Attribute Stack Item - ECPoint 1`] = ` -Object { - "__$type": "PublicKeyContractParameter", - "type": 6, - "value": "010101010101010101010101010101010101010101010101010101010101010101", -} -`; - -exports[`Stack Item Tests Attribute Stack Item - UInt160 1`] = ` -Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "197ff6783d512a740d42f4cc4f5572955fa44c95", -} -`; - -exports[`Stack Item Tests Attribute Stack Item - UInt256 1`] = ` -Object { - "__$type": "Hash256ContractParameter", - "type": 4, - "value": "a9b71a27c3f44e611e816b67e2cb75822d92e179993fc43e240a079d220bf59b", -} -`; - -exports[`Stack Item Tests Boolean Stack Item - false 1`] = ` -Object { - "__$type": "BooleanContractParameter", - "type": 1, - "value": false, -} -`; - -exports[`Stack Item Tests Boolean Stack Item - true 1`] = ` -Object { - "__$type": "BooleanContractParameter", - "type": 1, - "value": true, -} -`; - -exports[`Stack Item Tests Buffer Stack Item 1`] = ` -Object { - "__$type": "ByteArrayContractParameter", - "type": 5, - "value": "00", -} -`; - -exports[`Stack Item Tests ECPoint Stack Item 1`] = ` -Object { - "__$type": "PublicKeyContractParameter", - "type": 6, - "value": "010101010101010101010101010101010101010101010101010101010101010101", -} -`; - -exports[`Stack Item Tests Integer Stack Item 1`] = ` -Object { - "__$type": "IntegerContractParameter", - "type": 2, - "value": "1", -} -`; - -exports[`Stack Item Tests UInt160 Stack Item 1`] = ` -Object { - "__$type": "Hash160ContractParameter", - "type": 3, - "value": "197ff6783d512a740d42f4cc4f5572955fa44c95", -} -`; - -exports[`Stack Item Tests UInt256 Stack Item 1`] = ` -Object { - "__$type": "Hash256ContractParameter", - "type": 4, - "value": "a9b71a27c3f44e611e816b67e2cb75822d92e179993fc43e240a079d220bf59b", -} -`; diff --git a/packages/neo-one-node-vm/src/__tests__/storage.test.ts b/packages/neo-one-node-vm/src/__tests__/storage.test.ts new file mode 100644 index 0000000000..abba6462c1 --- /dev/null +++ b/packages/neo-one-node-vm/src/__tests__/storage.test.ts @@ -0,0 +1,138 @@ +import { common, ScriptBuilder, TriggerType, UInt256, WitnessScopeModel, VMState } from '@neo-one/client-common'; +import { assertArrayStackItem, Block, ConsensusData, Signer, Transaction, Witness } from '@neo-one/node-core'; +import { BN } from 'bn.js'; +import { Dispatcher } from '../Dispatcher'; + +const createGetBlockScript = (hash: UInt256) => { + const script = new ScriptBuilder(); + script.emitPushUInt256(hash); + script.emitSysCall('System.Blockchain.GetBlock'); + + return script.build(); +}; + +// if these tests break when we go to mainnet it is likely the message magic +describe('TS <--> C# Storage Test', () => { + const messageMagic = 5195086; + test('add a block to the snapshot -- returns Block StackItems -- memory', () => { + const dispatcher = new Dispatcher(); + const tx = new Transaction({ + script: Buffer.from([0x01]), + attributes: [], + signers: [new Signer({ scopes: WitnessScopeModel.Global, account: common.ZERO_UINT160 })], + networkFee: new BN(0x02), + systemFee: new BN(0x03), + nonce: 0x04, + validUntilBlock: 0x05, + version: 0x00, + witnesses: [ + new Witness({ + verification: Buffer.from([0x07]), + invocation: Buffer.from([]), + }), + ], + messageMagic, + }); + + const block = new Block({ + index: 0, + timestamp: new BN(2), + version: 3, + witness: new Witness({ + invocation: Buffer.from([]), + verification: Buffer.from([]), + }), + previousHash: common.ZERO_UINT256, + nextConsensus: common.ZERO_UINT160, + consensusData: new ConsensusData({ nonce: new BN(1), primaryIndex: 1 }), + transactions: [tx], + messageMagic, + }); + + const script = createGetBlockScript(block.hash); + dispatcher.withSnapshots(({ main }) => { + main.addBlock(block); + main.addTransaction(tx, block.index); + main.changeBlockHashIndex(block.index, block.hash); + + dispatcher.withApplicationEngine( + { + trigger: TriggerType.Application, + snapshot: 'main', + gas: common.TWENTY_FIXED8, + }, + (engine) => { + engine.loadScript({ script }); + const newState = engine.execute(); + expect(newState).toEqual(VMState.HALT); + + const resultStack = engine.resultStack; + const arr = assertArrayStackItem(resultStack[0]).array; + const hash = common.asUInt256(arr[0].getBuffer()); + expect(hash).toEqual(block.hash); + }, + ); + }); + }); + + test.skip('add a block to the snapshot -- returns Block StackItems -- leveldb', () => { + const dispatcher = new Dispatcher({ levelDBPath: '/Users/danielbyrne/Desktop/test-location' }); + const tx = new Transaction({ + script: Buffer.from([0x01]), + attributes: [], + signers: [new Signer({ scopes: WitnessScopeModel.Global, account: common.ZERO_UINT160 })], + networkFee: new BN(0x02), + systemFee: new BN(0x03), + nonce: 0x04, + validUntilBlock: 0x05, + version: 0x00, + witnesses: [ + new Witness({ + verification: Buffer.from([0x07]), + invocation: Buffer.from([]), + }), + ], + messageMagic, + }); + + const block = new Block({ + index: 0, + timestamp: new BN(2), + version: 3, + witness: new Witness({ + invocation: Buffer.from([]), + verification: Buffer.from([]), + }), + previousHash: common.ZERO_UINT256, + nextConsensus: common.ZERO_UINT160, + consensusData: new ConsensusData({ nonce: new BN(1), primaryIndex: 1 }), + transactions: [tx], + messageMagic, + }); + + const script = createGetBlockScript(block.hash); + dispatcher.withSnapshots(({ main }) => { + main.addBlock(block); + main.addTransaction(tx, block.index); + main.changeBlockHashIndex(block.index, block.hash); + + dispatcher.withApplicationEngine( + { + trigger: TriggerType.Application, + snapshot: 'main', + gas: common.TWENTY_FIXED8, + }, + (engine) => { + engine.loadScript({ script }); + const newState = engine.execute(); + expect(newState).toEqual('HALT'); + + const resultStack = engine.resultStack; + const arr = assertArrayStackItem(resultStack[0]).array; + const hashFromStackItem = common.asUInt256(arr[0].getBuffer()); + expect(hashFromStackItem).toEqual(block.hash); + }, + ); + }); + }); +}); diff --git a/packages/neo-one-node-vm/src/__tests__/syscalls.test.ts b/packages/neo-one-node-vm/src/__tests__/syscalls.test.ts index a428d72fe9..644daa8e76 100644 --- a/packages/neo-one-node-vm/src/__tests__/syscalls.test.ts +++ b/packages/neo-one-node-vm/src/__tests__/syscalls.test.ts @@ -1,3416 +1,202 @@ -// tslint:disable no-object-mutation -import { BinaryWriter, common, crypto, OpCode, Param, ScriptBuilder, SysCallName } from '@neo-one/client-common'; -import { - Account, - Asset, - AssetType, - AttributeUsage, - Block, - Contract, - Header, - InvocationTransaction, - NULL_ACTION, - ScriptContainerType, - StorageFlags, - StorageItem, - TriggerType, - UInt160Attribute, - utils, - Validator, - WriteBlockchain, -} from '@neo-one/node-core'; -import { AsyncIterableX } from '@reactivex/ix-es2015-cjs/asynciterable/asynciterablex'; +import { common, ScriptBuilder, TriggerType } from '@neo-one/client-common'; +import { Block, ConsensusData, Witness } from '@neo-one/node-core'; import { BN } from 'bn.js'; import _ from 'lodash'; -import { of } from 'rxjs'; -import { factory, keys, testUtils, transactions } from '../__data__'; -import { BLOCK_HEIGHT_YEAR, ExecutionInit, FEES, Options } from '../constants'; -import { executeScript } from '../execute'; -import { - AccountStackItem, - ArrayStackItem, - AssetStackItem, - AttributeStackItem, - BlockStackItem, - BooleanStackItem, - BufferStackItem, - ConsensusPayloadStackItem, - ContractStackItem, - ECPointStackItem, - HeaderStackItem, - InputStackItem, - IntegerStackItem, - IteratorStackItem, - MapStackItem, - OutputStackItem, - StackItem, - StackItemIterator, - StackItemType, - StorageContextStackItem, - TransactionStackItem, - UInt160StackItem, - UInt256StackItem, - ValidatorStackItem, -} from '../stackItem'; - -type flag = 'blockContainer' | 'consensusContainer' | 'useBadTransaction' | 'noPersistingBlock'; - -const testArray: readonly number[] = [1, 2, 3]; -const testIterator: ReadonlyArray<{ readonly key: IntegerStackItem; readonly value: IntegerStackItem }> = [ - { key: new IntegerStackItem(new BN(0)), value: new IntegerStackItem(new BN(1)) }, - { key: new IntegerStackItem(new BN(1)), value: new IntegerStackItem(new BN(2)) }, - { key: new IntegerStackItem(new BN(2)), value: new IntegerStackItem(new BN(3)) }, -]; -const testAsyncIterable = AsyncIterableX.from(testIterator); - -const triggerType = TriggerType.Application; -const scriptAttributeHash = keys[0].scriptHash; -const blockTime = Date.now(); -const blockBase = { - version: 0, - previousHash: common.bufferToUInt256(Buffer.alloc(32, 0)), - merkleRoot: common.bufferToUInt256(Buffer.alloc(32, 1)), - timestamp: 1, - index: 2, - consensusData: new BN(10), - nextConsensus: keys[1].scriptHash, - hash: common.bufferToUInt256(Buffer.alloc(32, 2)), -}; - -const dummyBlock = { - ...blockBase, - transactions: [transactions.kycTransaction, transactions.mintTransaction], -}; - -const badTransactionsBlock = { - ...blockBase, - transactions: _.range(1025).map(() => transactions.kycTransaction), -}; - -const ASSETHASH1 = common.uInt256ToHex(common.bufferToUInt256(Buffer.alloc(32, 1))); - -const account = { - version: 0, - hash: scriptAttributeHash, - isFrozen: false, - votes: [keys[0].publicKey, keys[1].publicKey], - balances: { [ASSETHASH1]: new BN(10) }, -}; - -const noBalanceAccount = { - ...account, - balances: {}, -}; - -const frozenAccount = { - ...noBalanceAccount, - isFrozen: true, -}; - -const asset = { - hash: common.bufferToUInt256(Buffer.alloc(32, 0)), - type: AssetType.Currency, - name: 'assetName', - amount: new BN(10), - precision: 8, - owner: keys[0].publicKey, - admin: scriptAttributeHash, - issuer: keys[1].scriptHash, - expiration: 2, - available: new BN(5), -}; - -const assetExpirationLT = { - ...asset, - expiration: 0, -}; - -const assetExpirationMax = { - ...asset, - expiration: utils.UINT_MAX.toNumber(), -}; - -const nextItem = new StorageItem({ - hash: scriptAttributeHash, - key: Buffer.from('key', 'utf-8'), - value: Buffer.from('val', 'utf-8'), - flags: StorageFlags.None, -}); - -interface SysCall { - readonly name: SysCallName; - readonly type: 'sys'; - - readonly args?: readonly Arg[]; -} - -interface OpCall { - readonly name: OpCode; - readonly type: 'op'; - - readonly args?: readonly Arg[]; - readonly buffer?: Buffer; -} -type Call = SysCall | OpCall; - -interface Calls { - readonly type: 'calls'; - readonly calls: readonly Call[]; -} -type Arg = Param | undefined | Calls; - -interface TestCase { - readonly name: SysCallName; - readonly result: - | readonly StackItem[] - | ((options: { - readonly transaction: InvocationTransaction; - }) => // tslint:disable-next-line no-any - readonly StackItem[] | ((result: any) => void)); - - readonly gas: BN; - readonly args?: readonly Arg[]; - readonly options?: Options; - // tslint:disable-next-line no-any - readonly mock?: (options: { readonly blockchain: any }) => void; - readonly error?: string; - readonly flags?: Set; -} - -const SYSCALLS = [ - { - name: 'Neo.Runtime.GetTrigger', - result: [new IntegerStackItem(new BN(triggerType))], - gas: FEES.ONE, - }, - - { - name: 'Neo.Runtime.CheckWitness', - result: [new BooleanStackItem(true)], - args: [scriptAttributeHash], - gas: FEES.TWO_HUNDRED, - }, - - { - name: 'Neo.Runtime.CheckWitness', - result: [new BooleanStackItem(false)], - args: [keys[1].scriptHash], - gas: FEES.TWO_HUNDRED, - }, - - { - name: 'Neo.Runtime.Notify', - result: [], - args: [[true]], - gas: FEES.ONE, - }, - - { - name: 'Neo.Runtime.Log', - result: [], - args: ['foo'], - gas: FEES.ONE, - }, - - { - name: 'Neo.Runtime.GetTime', - result: [new IntegerStackItem(new BN(blockTime))], - gas: FEES.ONE, - }, - - { - name: 'Neo.Runtime.GetTime', - result: [new IntegerStackItem(new BN(15))], - gas: FEES.ONE, - flags: new Set(['noPersistingBlock']), - mock: ({ blockchain }) => { - blockchain.currentBlock.timestamp = 0; - blockchain.settings.secondsPerBlock = 15; - }, - }, - - { - name: 'Neo.Runtime.Serialize', - result: [ - new BufferStackItem( - new BinaryWriter() - .writeUInt8(StackItemType.ByteArray) - .writeVarBytesLE(Buffer.alloc(10, 1)) - .toBuffer(), - ), - ], - - args: [Buffer.alloc(10, 1)], - gas: FEES.ONE, - }, - - { - name: 'Neo.Runtime.Serialize', - result: [ - new BufferStackItem( - new BinaryWriter() - .writeUInt8(StackItemType.ByteArray) - .writeVarBytesLE(Buffer.alloc(10, 1)) - .toBuffer(), - ), - ], - - args: [Buffer.alloc(10, 1)], - gas: FEES.ONE, - }, - - // This one is a bit odd because true turns into emitting an integer - // stack item. - { - name: 'Neo.Runtime.Serialize', - result: [ - new BufferStackItem( - new BinaryWriter() - .writeUInt8(StackItemType.Integer) - .writeVarBytesLE(Buffer.alloc(1, 1)) - .toBuffer(), - ), - ], - - args: [true], - gas: FEES.ONE, - }, - - { - name: 'Neo.Runtime.Serialize', - result: [ - new BufferStackItem( - new BinaryWriter() - .writeUInt8(StackItemType.ByteArray) - .writeVarBytesLE(utils.toSignedBuffer(new BN('10000000000000', 10))) - .toBuffer(), - ), - ], - - args: [new BN('10000000000000', 10)], - gas: FEES.ONE, - }, - - { - name: 'Neo.Runtime.Serialize', - result: [ - new BufferStackItem( - new BinaryWriter() - .writeUInt8(StackItemType.Array) - .writeVarUIntLE(1) - .writeBytes( - new BinaryWriter() - .writeUInt8(StackItemType.ByteArray) - .writeVarBytesLE(utils.toSignedBuffer(new BN('10000000000000', 10))) - .toBuffer(), - ) - .toBuffer(), - ), - ], - - args: [[new BN('10000000000000', 10)]], - gas: FEES.ONE, - }, - - { - name: 'Neo.Runtime.Serialize', - result: [], - error: 'Item too large', - - args: [Buffer.alloc(1024 * 1024)], - gas: FEES.ONE, - }, - - { - name: 'Neo.Runtime.Serialize', - result: [ - new BufferStackItem( - new BinaryWriter() - .writeUInt8(StackItemType.Map) - .writeVarUIntLE(1) - .writeBytes( - new BinaryWriter() - .writeUInt8(StackItemType.ByteArray) - .writeVarBytesLE(Buffer.from('key', 'utf8')) - .toBuffer(), - ) - .writeBytes( - new BinaryWriter() - .writeUInt8(StackItemType.ByteArray) - .writeVarBytesLE(Buffer.from('value', 'utf8')) - .toBuffer(), - ) - .toBuffer(), - ), - ], - - args: [ - { - type: 'calls', - calls: [ - { - name: 'NEWMAP', - type: 'op', - }, - - { - name: 'DUP', - type: 'op', - }, - - { - name: 'SETITEM', - type: 'op', - args: [Buffer.from('value', 'utf8'), Buffer.from('key', 'utf8')], - }, - ], - }, - ], - - gas: FEES.ONE, - }, - - { - name: 'Neo.Runtime.Deserialize', - result: [new BufferStackItem(Buffer.alloc(10, 1))], - args: [ - new BinaryWriter() - .writeUInt8(StackItemType.ByteArray) - .writeVarBytesLE(Buffer.alloc(10, 1)) - .toBuffer(), - ], - - gas: FEES.ONE, - }, - - { - name: 'Neo.Runtime.Deserialize', - result: [ - new MapStackItem({ - referenceKeys: new Map([ - [ - new BufferStackItem(Buffer.from('key', 'utf8')).toStructuralKey(), - new BufferStackItem(Buffer.from('key', 'utf8')), - ] as const, - ]), - referenceValues: new Map([ - [ - new BufferStackItem(Buffer.from('key', 'utf8')).toStructuralKey(), - new BufferStackItem(Buffer.from('value', 'utf8')), - ] as const, - ]), - }), - ], - - args: [ - new BinaryWriter() - .writeUInt8(StackItemType.Map) - .writeVarUIntLE(1) - .writeBytes( - new BinaryWriter() - .writeUInt8(StackItemType.ByteArray) - .writeVarBytesLE(Buffer.from('key', 'utf8')) - .toBuffer(), - ) - .writeBytes( - new BinaryWriter() - .writeUInt8(StackItemType.ByteArray) - .writeVarBytesLE(Buffer.from('value', 'utf8')) - .toBuffer(), - ) - .toBuffer(), - ], - - gas: FEES.ONE, - }, - - { - name: 'Neo.Blockchain.GetHeight', - result: [new IntegerStackItem(new BN(10))], - mock: ({ blockchain }) => { - blockchain.currentBlock.index = 10; - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Blockchain.GetHeader', - result: [new HeaderStackItem(new Header(blockBase))], - args: [Buffer.alloc(32, 3)], - mock: ({ blockchain }) => { - blockchain.header.get = jest.fn(async () => Promise.resolve(new Header(blockBase))); - }, - gas: FEES.ONE_HUNDRED, - }, - { - name: 'Neo.Blockchain.GetHeader', - result: [], - args: [Buffer.alloc(6, 0)], - mock: ({ blockchain }) => { - blockchain.header.get = jest.fn(async () => Promise.resolve(new Header(blockBase))); - }, - gas: FEES.ONE_HUNDRED, - error: 'Invalid GETHEADER Arguments', - }, - - { - name: 'Neo.Blockchain.GetBlock', - result: [new BlockStackItem(new Block(dummyBlock))], - args: [Buffer.alloc(32, 3)], - mock: ({ blockchain }) => { - blockchain.block.get = jest.fn(async () => Promise.resolve(new Block(dummyBlock))); - }, - gas: FEES.TWO_HUNDRED, - }, - - { - name: 'Neo.Blockchain.GetBlock', - result: [new BlockStackItem(new Block(dummyBlock))], - args: [Buffer.alloc(6, 0)], - mock: ({ blockchain }) => { - blockchain.block.get = jest.fn(async () => Promise.resolve(new Block(dummyBlock))); - }, - gas: FEES.TWO_HUNDRED, - error: 'Invalid GETBLOCK Argument', - }, - - { - name: 'Neo.Blockchain.GetTransaction', - result: [new TransactionStackItem(transactions.mintTransaction)], - args: [Buffer.alloc(32, 3)], - mock: ({ blockchain }) => { - blockchain.transaction.get = jest.fn(async () => Promise.resolve(transactions.mintTransaction)); - }, - gas: FEES.ONE_HUNDRED, - }, - - { - name: 'Neo.Blockchain.GetTransactionHeight', - result: [new IntegerStackItem(new BN(10))], - args: [Buffer.alloc(32, 3)], - mock: ({ blockchain }) => { - blockchain.transactionData.get = jest.fn(async () => Promise.resolve({ startHeight: 10 })); - }, - gas: FEES.ONE_HUNDRED, - }, - - { - name: 'Neo.Blockchain.GetAccount', - result: [new AccountStackItem(new Account(account))], - args: [scriptAttributeHash], - mock: ({ blockchain }) => { - blockchain.account.tryGet = jest.fn(async () => Promise.resolve(new Account(account))); - }, - gas: FEES.ONE_HUNDRED, - }, - - { - name: 'Neo.Blockchain.GetAccount', - result: [new AccountStackItem(new Account({ hash: scriptAttributeHash }))], - args: [scriptAttributeHash], - mock: ({ blockchain }) => { - blockchain.account.tryGet = jest.fn(async () => Promise.resolve(undefined)); - }, - gas: FEES.ONE_HUNDRED, - }, - - { - name: 'Neo.Blockchain.GetValidators', - result: [new ArrayStackItem([new ValidatorStackItem(new Validator({ publicKey: keys[0].publicKey }))])], - - mock: ({ blockchain }) => { - blockchain.validator.all$ = { - pipe: () => ({ - toPromise: () => [new ValidatorStackItem(new Validator({ publicKey: keys[0].publicKey }))], - }), - }; - }, - gas: FEES.TWO_HUNDRED, - }, - - { - name: 'Neo.Blockchain.GetValidators', - result: [new ArrayStackItem([new ECPointStackItem(keys[0].publicKey)])], - mock: ({ blockchain }) => { - blockchain.validator.all$ = of({ publicKey: keys[0].publicKey }); - }, - gas: FEES.TWO_HUNDRED, - }, - - { - name: 'Neo.Blockchain.GetAsset', - result: [new AssetStackItem(new Asset(asset))], - mock: ({ blockchain }) => { - blockchain.asset.get = jest.fn(async () => Promise.resolve(new Asset(asset))); - }, - args: [Buffer.alloc(32, 3)], - gas: FEES.ONE_HUNDRED, - }, - - { - name: 'Neo.Blockchain.GetContract', - result: [new ContractStackItem(transactions.kycContract)], - mock: ({ blockchain }) => { - blockchain.contract.tryGet = jest.fn(async () => Promise.resolve(transactions.kycContract)); - }, - args: [scriptAttributeHash], - gas: FEES.ONE_HUNDRED, - }, - - { - name: 'Neo.Blockchain.GetContract', - result: [new BufferStackItem(Buffer.alloc(0, 0))], - mock: ({ blockchain }) => { - blockchain.contract.tryGet = jest.fn(async () => Promise.resolve(undefined)); - }, - args: [scriptAttributeHash], - gas: FEES.ONE_HUNDRED, - }, - - { - name: 'Neo.Header.GetHash', - result: [new UInt256StackItem(blockBase.hash)], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetHeader', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.header.get = jest.fn(async () => Promise.resolve(new Header(blockBase))); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Header.GetVersion', - result: [new IntegerStackItem(new BN(blockBase.version))], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetHeader', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.header.get = jest.fn(async () => Promise.resolve(new Header(blockBase))); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Header.GetPrevHash', - result: [new UInt256StackItem(blockBase.previousHash)], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetHeader', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.header.get = jest.fn(async () => Promise.resolve(new Header(blockBase))); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Header.GetIndex', - result: [new IntegerStackItem(new BN(blockBase.index))], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetHeader', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.header.get = jest.fn(async () => Promise.resolve(new Header(blockBase))); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Header.GetMerkleRoot', - result: [new UInt256StackItem(blockBase.merkleRoot)], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetHeader', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.header.get = jest.fn(async () => Promise.resolve(new Header(blockBase))); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Header.GetTimestamp', - result: [new IntegerStackItem(new BN(blockBase.timestamp))], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetHeader', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.header.get = jest.fn(async () => Promise.resolve(new Header(blockBase))); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Header.GetConsensusData', - result: [new IntegerStackItem(blockBase.consensusData)], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetHeader', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.header.get = jest.fn(async () => Promise.resolve(new Header(blockBase))); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Header.GetNextConsensus', - result: [new UInt160StackItem(blockBase.nextConsensus)], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetHeader', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.header.get = jest.fn(async () => Promise.resolve(new Header(blockBase))); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Block.GetTransactionCount', - result: [new IntegerStackItem(new BN(dummyBlock.transactions.length))], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetBlock', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.block.get = jest.fn(async () => Promise.resolve(new Block(dummyBlock))); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Block.GetTransactions', - result: [ - new ArrayStackItem([ - new TransactionStackItem(transactions.kycTransaction), - new TransactionStackItem(transactions.mintTransaction), - ]), - ], - - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetBlock', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.block.get = jest.fn(async () => Promise.resolve(new Block(dummyBlock))); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Block.GetTransactions', - result: [], - error: 'Container too large', - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetBlock', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.block.get = jest.fn(async () => Promise.resolve(new Block(badTransactionsBlock))); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Block.GetTransaction', - result: [new TransactionStackItem(transactions.mintTransaction)], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetBlock', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - - new BN(1), - ], - - mock: ({ blockchain }) => { - blockchain.block.get = jest.fn(async () => Promise.resolve(new Block(dummyBlock))); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Transaction.GetHash', - result: [new UInt256StackItem(transactions.mintTransaction.hash)], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetTransaction', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.transaction.get = jest.fn(async () => Promise.resolve(transactions.mintTransaction)); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Transaction.GetType', - result: [new IntegerStackItem(new BN(transactions.mintTransaction.type))], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetTransaction', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.transaction.get = jest.fn(async () => Promise.resolve(transactions.mintTransaction)); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Transaction.GetAttributes', - result: [ - new ArrayStackItem(transactions.mintTransaction.attributes.map((attribute) => new AttributeStackItem(attribute))), - ], - - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetTransaction', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.transaction.get = jest.fn(async () => Promise.resolve(transactions.mintTransaction)); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Transaction.GetInputs', - result: [new ArrayStackItem(transactions.mintTransaction.inputs.map((input) => new InputStackItem(input)))], - - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetTransaction', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.transaction.get = jest.fn(async () => Promise.resolve(transactions.mintTransaction)); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Transaction.GetInputs', - result: [], - error: 'Container too large', - - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetTransaction', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.transaction.get = jest.fn(async () => Promise.resolve(transactions.badTransaction)); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Transaction.GetOutputs', - result: [new ArrayStackItem(transactions.mintTransaction.outputs.map((output) => new OutputStackItem(output)))], - - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetTransaction', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.transaction.get = jest.fn(async () => Promise.resolve(transactions.mintTransaction)); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Transaction.GetOutputs', - result: [], - error: 'Container too large', - - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetTransaction', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.transaction.get = jest.fn(async () => Promise.resolve(transactions.badTransaction)); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Transaction.GetReferences', - result: [new ArrayStackItem([new OutputStackItem(transactions.mintTransaction.outputs[0])])], - - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetTransaction', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.transaction.get = jest.fn(async () => Promise.resolve(transactions.mintTransaction)); - - blockchain.output.get = jest.fn(async () => Promise.resolve(transactions.mintTransaction.outputs[0])); - }, - gas: FEES.TWO_HUNDRED, - }, - - { - name: 'Neo.Transaction.GetReferences', - result: [], - error: 'Container too large', - - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetTransaction', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.transaction.get = jest.fn(async () => Promise.resolve(transactions.badTransaction)); - blockchain.output.get = jest.fn(async () => Promise.resolve(transactions.mintTransaction.outputs[0])); - }, - gas: FEES.TWO_HUNDRED, - }, - - { - name: 'Neo.Transaction.GetUnspentCoins', - result: [new ArrayStackItem(transactions.mintTransaction.outputs.map((output) => new OutputStackItem(output)))], - - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetTransaction', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.transaction.get = jest.fn(async () => Promise.resolve(transactions.mintTransaction)); - - blockchain.transactionData.get = jest.fn(async () => - Promise.resolve({ - hash: common.bufferToUInt256(Buffer.alloc(32, 0)), - startHeight: 1, - endHeights: {}, - }), - ); - }, - gas: FEES.TWO_HUNDRED, - }, - - { - name: 'Neo.Transaction.GetUnspentCoins', - result: [new ArrayStackItem([])], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetTransaction', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.transaction.get = jest.fn(async () => Promise.resolve(transactions.mintTransaction)); - - blockchain.transactionData.get = jest.fn(async () => - Promise.resolve({ - hash: common.bufferToUInt256(Buffer.alloc(32, 0)), - startHeight: 1, - endHeights: { '0': 1, '1': 2 }, - }), - ); - }, - gas: FEES.TWO_HUNDRED, - }, - - { - name: 'Neo.Transaction.GetUnspentCoins', - result: [], - error: 'Container too large', - flags: new Set(['useBadTransaction']), - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetTransaction', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.transaction.get = jest.fn(async () => Promise.resolve(transactions.badTransaction)); - - blockchain.transactionData.get = jest.fn(async () => - Promise.resolve({ - hash: common.bufferToUInt256(Buffer.alloc(32, 0)), - startHeight: 1, - endHeights: { '0': 1, '1': 2 }, - }), - ); - }, - gas: FEES.TWO_HUNDRED, - }, - - { - name: 'Neo.InvocationTransaction.GetScript', - result: [new BufferStackItem(transactions.mintTransaction.script)], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetTransaction', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.transaction.get = jest.fn(async () => Promise.resolve(transactions.mintTransaction)); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.InvocationTransaction.GetScript', - result: [], - error: 'Expected InvocationTransaction', - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetTransaction', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.transaction.get = jest.fn(async () => Promise.resolve(transactions.claimTransaction)); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Attribute.GetUsage', - result: [new IntegerStackItem(new BN(transactions.mintTransaction.attributes[0].usage))], - - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetTransaction', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - - { - name: 'Neo.Transaction.GetAttributes', - type: 'sys', - }, - - { - name: 'PICKITEM', - type: 'op', - args: [new BN(0)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.transaction.get = jest.fn(async () => Promise.resolve(transactions.mintTransaction)); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Attribute.GetData', - result: [new BufferStackItem(transactions.mintTransaction.attributes[0].value)], - - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetTransaction', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - - { - name: 'Neo.Transaction.GetAttributes', - type: 'sys', - }, - - { - name: 'PICKITEM', - type: 'op', - args: [new BN(0)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.transaction.get = jest.fn(async () => Promise.resolve(transactions.mintTransaction)); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Input.GetHash', - result: [new UInt256StackItem(transactions.mintTransaction.inputs[0].hash)], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetTransaction', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - - { - name: 'Neo.Transaction.GetInputs', - type: 'sys', - }, - - { - name: 'PICKITEM', - type: 'op', - args: [new BN(0)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.transaction.get = jest.fn(async () => Promise.resolve(transactions.mintTransaction)); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Input.GetIndex', - result: [new IntegerStackItem(new BN(transactions.mintTransaction.inputs[0].index))], - - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetTransaction', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - - { - name: 'Neo.Transaction.GetInputs', - type: 'sys', - }, - - { - name: 'PICKITEM', - type: 'op', - args: [new BN(0)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.transaction.get = jest.fn(async () => Promise.resolve(transactions.mintTransaction)); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Output.GetAssetId', - result: [new UInt256StackItem(transactions.mintTransaction.outputs[0].asset)], - - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetTransaction', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - - { - name: 'Neo.Transaction.GetOutputs', - type: 'sys', - }, - - { - name: 'PICKITEM', - type: 'op', - args: [new BN(0)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.transaction.get = jest.fn(async () => Promise.resolve(transactions.mintTransaction)); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Output.GetValue', - result: [new IntegerStackItem(transactions.mintTransaction.outputs[0].value)], - - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetTransaction', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - - { - name: 'Neo.Transaction.GetOutputs', - type: 'sys', - }, - - { - name: 'PICKITEM', - type: 'op', - args: [new BN(0)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.transaction.get = jest.fn(async () => Promise.resolve(transactions.mintTransaction)); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Output.GetScriptHash', - result: [new UInt160StackItem(transactions.mintTransaction.outputs[0].address)], - - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetTransaction', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - - { - name: 'Neo.Transaction.GetOutputs', - type: 'sys', - }, - - { - name: 'PICKITEM', - type: 'op', - args: [new BN(0)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.transaction.get = jest.fn(async () => Promise.resolve(transactions.mintTransaction)); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Account.GetScriptHash', - result: [new UInt160StackItem(scriptAttributeHash)], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetAccount', - type: 'sys', - args: [scriptAttributeHash], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.account.tryGet = jest.fn(async () => Promise.resolve(new Account(account))); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Account.GetVotes', - result: [new ArrayStackItem(new Account(account).votes.map((vote) => new ECPointStackItem(vote)))], - - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetAccount', - type: 'sys', - args: [scriptAttributeHash], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.account.tryGet = jest.fn(async () => Promise.resolve(new Account(account))); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Account.GetBalance', - result: [new IntegerStackItem(account.balances[ASSETHASH1])], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetAccount', - type: 'sys', - args: [scriptAttributeHash], - }, - ], - }, - - common.bufferToUInt256(Buffer.alloc(32, 1)), - ], - - mock: ({ blockchain }) => { - blockchain.account.tryGet = jest.fn(async () => Promise.resolve(new Account(account))); - - blockchain.account.get = jest.fn(async () => Promise.resolve(new Account(account))); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Account.GetBalance', - result: [new IntegerStackItem(utils.ZERO)], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetAccount', - type: 'sys', - args: [scriptAttributeHash], - }, - ], - }, - - common.bufferToUInt256(Buffer.alloc(32, 2)), - ], - - mock: ({ blockchain }) => { - blockchain.account.tryGet = jest.fn(async () => Promise.resolve(new Account(account))); - - blockchain.account.get = jest.fn(async () => Promise.resolve(new Account(account))); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Asset.GetAssetId', - result: [new UInt256StackItem(asset.hash)], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetAsset', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.asset.get = jest.fn(async () => Promise.resolve(new Asset(asset))); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Asset.GetAssetType', - result: [new IntegerStackItem(new BN(asset.type))], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetAsset', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.asset.get = jest.fn(async () => Promise.resolve(new Asset(asset))); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Asset.GetAmount', - result: [new IntegerStackItem(new BN(asset.amount))], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetAsset', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.asset.get = jest.fn(async () => Promise.resolve(new Asset(asset))); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Asset.GetAvailable', - result: [new IntegerStackItem(new BN(asset.available))], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetAsset', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.asset.get = jest.fn(async () => Promise.resolve(new Asset(asset))); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Asset.GetPrecision', - result: [new IntegerStackItem(new BN(asset.precision))], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetAsset', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.asset.get = jest.fn(async () => Promise.resolve(new Asset(asset))); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Asset.GetOwner', - result: [new ECPointStackItem(asset.owner)], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetAsset', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.asset.get = jest.fn(async () => Promise.resolve(new Asset(asset))); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Asset.GetAdmin', - result: [new UInt160StackItem(asset.admin)], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetAsset', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.asset.get = jest.fn(async () => Promise.resolve(new Asset(asset))); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Asset.GetIssuer', - result: [new UInt160StackItem(asset.issuer)], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetAsset', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.asset.get = jest.fn(async () => Promise.resolve(new Asset(asset))); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Contract.GetScript', - result: [new BufferStackItem(transactions.kycContract.script)], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetContract', - type: 'sys', - args: [scriptAttributeHash], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.contract.tryGet = jest.fn(async () => Promise.resolve(transactions.kycContract)); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Contract.IsPayable', - result: [new BooleanStackItem(transactions.kycContract.payable)], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetContract', - type: 'sys', - args: [scriptAttributeHash], - }, - ], - }, - ], - - mock: ({ blockchain }) => { - blockchain.contract.tryGet = jest.fn(async () => Promise.resolve(transactions.kycContract)); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Storage.GetContext', - result: ({ transaction }) => [new StorageContextStackItem(crypto.toScriptHash(transaction.script))], - - gas: FEES.ONE, - }, - - { - name: 'Neo.Storage.GetReadOnlyContext', - result: ({ transaction }) => [new StorageContextStackItem(crypto.toScriptHash(transaction.script), true)], - - gas: FEES.ONE, - }, - - { - name: 'Neo.Storage.Get', - result: [new BufferStackItem(Buffer.alloc(10, 1))], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Storage.GetContext', - type: 'sys', - }, - ], - }, - - Buffer.alloc(1, 1), - ], - - mock: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve({ hasStorage: true })); - - blockchain.storageItem.tryGet = jest.fn(async () => Promise.resolve({ value: Buffer.alloc(10, 1) })); - }, - gas: FEES.ONE_HUNDRED, - }, - - { - name: 'Neo.Storage.Get', - result: [new BufferStackItem(Buffer.from([]))], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Storage.GetContext', - type: 'sys', - }, - ], - }, - - Buffer.alloc(1, 1), - ], - - mock: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve({ hasStorage: true })); - - blockchain.storageItem.tryGet = jest.fn(async () => Promise.resolve(undefined)); - }, - gas: FEES.ONE_HUNDRED, - }, - - { - name: 'Neo.Storage.Find', - result: () => (result) => { - expect(result).toMatchSnapshot(); - }, - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Storage.GetContext', - type: 'sys', - }, - ], - }, - - Buffer.alloc(1, 1), - ], - - mock: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve({ hasStorage: true })); - - blockchain.storageItem.getAll$ = jest.fn(() => AsyncIterableX.of()); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.StorageContext.AsReadOnly', - result: ({ transaction }) => (stack) => { - expect(stack.length).toEqual(1); - // It should equal the call's script hash. - expect(stack[0].value).not.toEqual(crypto.toScriptHash(transaction.script)); - - expect(stack[0].isReadOnly).toBeTruthy(); - }, - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Storage.GetContext', - type: 'sys', - }, - ], - }, - ], - - gas: FEES.ONE, - }, - - { - name: 'Neo.Iterator.Create', - result: [new IteratorStackItem(new StackItemIterator(testAsyncIterable[Symbol.asyncIterator]()))], - args: [testArray], - gas: FEES.ONE, - }, - - { - name: 'Neo.Enumerator.Next', - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Enumerator.Create', - type: 'sys', - args: [[new BN(0)]], - }, - ], - }, - ], - - result: [new BooleanStackItem(true)], - gas: FEES.ONE, - }, - - { - name: 'Neo.Enumerator.Next', - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Iterator.Create', - type: 'sys', - args: [ - { - type: 'calls', - calls: [ - { - name: 'NEWMAP', - type: 'op', - }, - - { - name: 'DUP', - type: 'op', - }, - - { - name: 'SETITEM', - type: 'op', - args: [Buffer.from('value', 'utf8'), Buffer.from('key', 'utf8')], - }, - ], - }, - ], - }, - ], - }, - ], - - result: [new BooleanStackItem(true)], - gas: FEES.ONE, - }, - - { - name: 'Neo.Enumerator.Next', - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Enumerator.Create', - type: 'sys', - args: [[new BN(0)]], - }, - - { - name: 'DUP', - type: 'op', - }, - - { - name: 'Neo.Enumerator.Next', - type: 'sys', - }, - - { - name: 'DROP', - type: 'op', - }, - ], - }, - ], - - result: [new BooleanStackItem(false)], - gas: FEES.ONE, - }, - - { - name: 'Neo.Enumerator.Value', - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Enumerator.Create', - type: 'sys', - args: [[new BN(1), new BN(2)]], - }, - - { - name: 'DUP', - type: 'op', - }, - - { - name: 'Neo.Enumerator.Next', - type: 'sys', - }, - - { - name: 'DROP', - type: 'op', - }, - ], - }, - ], - - result: [new IntegerStackItem(new BN(1))], - gas: FEES.ONE, - }, - - { - name: 'Neo.Enumerator.Next', - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Enumerator.Create', - type: 'sys', - args: [[new BN(1)]], - }, - - { - name: 'Neo.Enumerator.Create', - type: 'sys', - args: [[new BN(2)]], - }, - - { - name: 'Neo.Enumerator.Concat', - type: 'sys', - }, - - { - name: 'DUP', - type: 'op', - }, - - { - name: 'DUP', - type: 'op', - }, - - { - name: 'Neo.Enumerator.Next', - type: 'sys', - }, - - { - name: 'DROP', - type: 'op', - }, - - { - name: 'Neo.Enumerator.Next', - type: 'sys', - }, - - { - name: 'DROP', - type: 'op', - }, - ], - }, - ], - - result: [new BooleanStackItem(false)], - gas: FEES.ONE, - }, - - { - name: 'Neo.Enumerator.Value', - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Enumerator.Create', - type: 'sys', - args: [[new BN(2)]], - }, - - { - name: 'Neo.Enumerator.Create', - type: 'sys', - args: [[new BN(1)]], - }, - - { - name: 'Neo.Enumerator.Concat', - type: 'sys', - }, - - { - name: 'DUP', - type: 'op', - }, - - { - name: 'DUP', - type: 'op', - }, - - { - name: 'Neo.Enumerator.Next', - type: 'sys', - }, - - { - name: 'DROP', - type: 'op', - }, - - { - name: 'Neo.Enumerator.Next', - type: 'sys', - }, - - { - name: 'DROP', - type: 'op', - }, - ], - }, - ], - - result: [new IntegerStackItem(new BN(2))], - gas: FEES.ONE, - }, - - { - name: 'Neo.Enumerator.Value', - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Iterator.Create', - type: 'sys', - args: [ - { - type: 'calls', - calls: [ - { - name: 'NEWMAP', - type: 'op', - }, - - { - name: 'DUP', - type: 'op', - }, - - { - name: 'SETITEM', - type: 'op', - args: [Buffer.from('value2', 'utf8'), Buffer.from('key2', 'utf8')], - }, - ], - }, - ], - }, - - { - name: 'Neo.Iterator.Create', - type: 'sys', - args: [ - { - type: 'calls', - calls: [ - { - name: 'NEWMAP', - type: 'op', - }, - - { - name: 'DUP', - type: 'op', - }, - - { - name: 'SETITEM', - type: 'op', - args: [Buffer.from('value1', 'utf8'), Buffer.from('key1', 'utf8')], - }, - ], - }, - ], - }, - - { - name: 'Neo.Iterator.Concat', - type: 'sys', - }, - - { - name: 'DUP', - type: 'op', - }, - - { - name: 'DUP', - type: 'op', - }, - - { - name: 'Neo.Enumerator.Next', - type: 'sys', - }, - - { - name: 'DROP', - type: 'op', - }, - - { - name: 'Neo.Enumerator.Next', - type: 'sys', - }, - - { - name: 'DROP', - type: 'op', - }, - ], - }, - ], - - result: [new BufferStackItem(Buffer.from('value2', 'utf8'))], - gas: FEES.ONE, - }, - - { - name: 'Neo.Iterator.Key', - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Iterator.Create', - type: 'sys', - args: [ - { - type: 'calls', - calls: [ - { - name: 'NEWMAP', - type: 'op', - }, - - { - name: 'DUP', - type: 'op', - }, - - { - name: 'SETITEM', - type: 'op', - args: [Buffer.from('value2', 'utf8'), Buffer.from('key2', 'utf8')], - }, - ], - }, - ], - }, - - { - name: 'Neo.Iterator.Create', - type: 'sys', - args: [ - { - type: 'calls', - calls: [ - { - name: 'NEWMAP', - type: 'op', - }, - - { - name: 'DUP', - type: 'op', - }, - - { - name: 'SETITEM', - type: 'op', - args: [Buffer.from('value1', 'utf8'), Buffer.from('key1', 'utf8')], - }, - ], - }, - ], - }, - - { - name: 'Neo.Iterator.Concat', - type: 'sys', - }, - - { - name: 'DUP', - type: 'op', - }, - - { - name: 'DUP', - type: 'op', - }, - - { - name: 'Neo.Enumerator.Next', - type: 'sys', - }, - - { - name: 'DROP', - type: 'op', - }, - - { - name: 'Neo.Enumerator.Next', - type: 'sys', - }, - - { - name: 'DROP', - type: 'op', - }, - ], - }, - ], - - result: [new BufferStackItem(Buffer.from('key2', 'utf8'))], - gas: FEES.ONE, - }, - - { - name: 'Neo.Enumerator.Next', - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Storage.Find', - type: 'sys', - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Storage.GetContext', - type: 'sys', - }, - ], - }, - - Buffer.alloc(1, 1), - ], - }, - ], - }, - ], - - result: [new BooleanStackItem(true)], - mock: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve({ hasStorage: true })); - - blockchain.storageItem.getAll$ = jest.fn(() => AsyncIterableX.of(Buffer.alloc(1, 1), Buffer.alloc(1, 2))); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Enumerator.Next', - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Storage.Find', - type: 'sys', - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Storage.GetContext', - type: 'sys', - }, - ], - }, - - Buffer.alloc(1, 1), - ], - }, - ], - }, - ], - - result: [new BooleanStackItem(false)], - mock: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve({ hasStorage: true })); - - blockchain.storageItem.getAll$ = jest.fn(() => AsyncIterableX.of()); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Iterator.Key', - args: [ - { - type: 'calls', - calls: [ - { - name: 'SWAP', - type: 'op', - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Enumerator.Next', - type: 'sys', - args: [ - { - type: 'calls', - calls: [ - { - name: 'DUP', - type: 'op', - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Storage.Find', - type: 'sys', - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Storage.GetContext', - type: 'sys', - }, - ], - }, - - Buffer.alloc(1, 1), - ], - }, - ], - }, - ], - }, - ], - }, - ], - }, - ], - }, - ], - }, - ], - }, - ], - - result: [new BufferStackItem(nextItem.key), new BooleanStackItem(true)], - mock: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve({ hasStorage: true })); - - blockchain.storageItem.getAll$ = jest.fn(() => AsyncIterableX.of(nextItem)); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Enumerator.Value', - args: [ - { - type: 'calls', - calls: [ - { - name: 'SWAP', - type: 'op', - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Enumerator.Next', - type: 'sys', - args: [ - { - type: 'calls', - calls: [ - { - name: 'DUP', - type: 'op', - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Storage.Find', - type: 'sys', - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Storage.GetContext', - type: 'sys', - }, - ], - }, - - Buffer.alloc(1, 1), - ], - }, - ], - }, - ], - }, - ], - }, - ], - }, - ], - }, - ], - }, - ], - }, - ], - - result: [new BufferStackItem(nextItem.value), new BooleanStackItem(true)], - mock: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve({ hasStorage: true })); - - blockchain.storageItem.getAll$ = jest.fn(() => AsyncIterableX.of(nextItem)); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Enumerator.Value', - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Storage.Find', - type: 'sys', - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Storage.GetContext', - type: 'sys', - }, - ], - }, - - Buffer.alloc(1, 1), - ], - }, - - { - name: 'Neo.Iterator.Values', - type: 'sys', - }, - - { - name: 'DUP', - type: 'op', - }, - - { - name: 'Neo.Enumerator.Next', - type: 'sys', - }, - - { - name: 'DROP', - type: 'op', - }, - ], - }, - ], - - result: [new BufferStackItem(nextItem.value)], - mock: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve({ hasStorage: true })); - - blockchain.storageItem.getAll$ = jest.fn(() => AsyncIterableX.of(nextItem)); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Enumerator.Value', - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Storage.Find', - type: 'sys', - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Storage.GetContext', - type: 'sys', - }, - ], - }, - - Buffer.alloc(1, 1), - ], - }, - - { - name: 'Neo.Iterator.Keys', - type: 'sys', - }, - - { - name: 'DUP', - type: 'op', - }, - - { - name: 'Neo.Enumerator.Next', - type: 'sys', - }, - - { - name: 'DROP', - type: 'op', - }, - ], - }, - ], - - result: [new BufferStackItem(nextItem.key)], - mock: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve({ hasStorage: true })); - - blockchain.storageItem.getAll$ = jest.fn(() => AsyncIterableX.of(nextItem)); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Account.SetVotes', - result: [], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetAccount', - type: 'sys', - args: [scriptAttributeHash], - }, - ], - }, - - [keys[2].publicKey], - ], - - mock: ({ blockchain }) => { - blockchain.account.tryGet = jest.fn(async () => Promise.resolve(new Account(account))); - - blockchain.account.get = jest.fn(async () => Promise.resolve(new Account(account))); - - blockchain.settings.governingToken = { hashHex: ASSETHASH1 }; - blockchain.account.update = jest.fn(async () => - Promise.resolve({ - ...account, - votes: [keys[2].publicKey], - isDeletable: () => false, - }), - ); - }, - gas: FEES.ONE_THOUSAND, - }, - - { - name: 'Neo.Account.SetVotes', - result: [], - error: 'Account Frozen', - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetAccount', - type: 'sys', - args: [scriptAttributeHash], - }, - ], - }, - - [keys[2].publicKey], - ], - - mock: ({ blockchain }) => { - blockchain.account.tryGet = jest.fn(async () => Promise.resolve(new Account(frozenAccount))); - - blockchain.account.get = jest.fn(async () => Promise.resolve(new Account(frozenAccount))); - - blockchain.settings.governingToken = { hashHex: ASSETHASH1 }; - blockchain.account.update = jest.fn(async () => - Promise.resolve({ - ...account, - votes: [keys[2].publicKey], - isDeletable: () => false, - }), - ); - }, - gas: FEES.ONE_THOUSAND, - }, - - { - name: 'Neo.Account.SetVotes', - result: [], - error: 'Ineligible To Vote', - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetAccount', - type: 'sys', - args: [scriptAttributeHash], - }, - ], - }, - - [keys[2].publicKey], - ], - - mock: ({ blockchain }) => { - blockchain.account.tryGet = jest.fn(async () => Promise.resolve(new Account(noBalanceAccount))); - - blockchain.account.get = jest.fn(async () => Promise.resolve(new Account(noBalanceAccount))); - - blockchain.settings.governingToken = { hashHex: ASSETHASH1 }; - blockchain.account.update = jest.fn(async () => - Promise.resolve({ - ...account, - votes: [keys[2].publicKey], - isDeletable: () => false, - }), - ); - }, - gas: FEES.ONE_THOUSAND, - }, - - { - name: 'Neo.Account.SetVotes', - result: [], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetAccount', - type: 'sys', - args: [scriptAttributeHash], - }, - ], - }, - - [keys[2].publicKey], - ], - - mock: ({ blockchain }) => { - blockchain.account.tryGet = jest.fn(async () => Promise.resolve(new Account(account))); - - blockchain.account.get = jest.fn(async () => Promise.resolve(new Account(account))); - - blockchain.settings.governingToken = { hashHex: ASSETHASH1 }; - blockchain.account.update = jest.fn(async () => - Promise.resolve({ - ...account, - votes: [keys[2].publicKey], - isDeletable: () => true, - }), - ); - - blockchain.account.delete = jest.fn(() => undefined); - }, - gas: FEES.ONE_THOUSAND, - }, - - { - name: 'Neo.Validator.Register', - result: [new ValidatorStackItem(new Validator({ publicKey: keys[0].publicKey }))], - - args: [keys[0].publicKey], - mock: ({ blockchain }) => { - blockchain.validator.tryGet = jest.fn(() => new Validator({ publicKey: keys[0].publicKey })); - }, - gas: common.ONE_THOUSAND_FIXED8, - }, - - { - name: 'Neo.Validator.Register', - result: [new ValidatorStackItem(new Validator({ publicKey: keys[0].publicKey }))], - args: [keys[0].publicKey], - mock: ({ blockchain }) => { - blockchain.validator.tryGet = jest.fn(() => undefined); - blockchain.validator.add = jest.fn(() => true); - }, - gas: common.ONE_THOUSAND_FIXED8, - }, - - { - name: 'Neo.Asset.Create', - result: [ - new AssetStackItem( - new Asset({ - ...asset, - hash: common.stringToUInt256('0x6859cd3caa26f28d8dd3e2eb29b05019f9dad3c0adf0215a1a4f198f4a9c4e29'), - - available: new BN(0), - }), - ), - ], - - args: [AssetType.Currency, 'assetName', new BN(10), 8, keys[0].publicKey, scriptAttributeHash, keys[1].scriptHash], - - mock: ({ blockchain }) => { - blockchain.currentBlock.index = 2 - (2000000 + 1); - blockchain.asset.add = jest.fn(async () => Promise.resolve()); - }, - gas: common.FIVE_THOUSAND_FIXED8, - }, - - { - name: 'Neo.Asset.Renew', - result: [new IntegerStackItem(new BN(2).add(new BN(2).mul(new BN(BLOCK_HEIGHT_YEAR))))], - - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetAsset', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - - new BN(2), - ], - - mock: ({ blockchain }) => { - blockchain.asset.get = jest.fn(async () => Promise.resolve(new Asset(asset))); - blockchain.currentBlock.index = 1; - blockchain.asset.update = jest.fn(async () => Promise.resolve()); - }, - gas: common.FIVE_THOUSAND_FIXED8.mul(new BN(2)), - }, - { - name: 'Neo.Asset.Renew', - result: [new IntegerStackItem(new BN(2).add(new BN(2).mul(new BN(BLOCK_HEIGHT_YEAR))))], - - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetAsset', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - - new BN(2), - ], - - mock: ({ blockchain }) => { - blockchain.asset.get = jest.fn(async () => Promise.resolve(new Asset(assetExpirationLT))); - blockchain.currentBlock.index = 1; - blockchain.asset.update = jest.fn(async () => Promise.resolve()); - }, - gas: common.FIVE_THOUSAND_FIXED8.mul(new BN(2)), - }, - { - name: 'Neo.Asset.Renew', - result: [new IntegerStackItem(utils.UINT_MAX)], - - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Blockchain.GetAsset', - type: 'sys', - args: [Buffer.alloc(32, 3)], - }, - ], - }, - - new BN(2), - ], - - mock: ({ blockchain }) => { - blockchain.asset.get = jest.fn(async () => Promise.resolve(new Asset(assetExpirationMax))); - blockchain.currentBlock.index = 1; - blockchain.asset.update = jest.fn(async () => Promise.resolve()); - }, - gas: common.FIVE_THOUSAND_FIXED8.mul(new BN(2)), - }, - { - name: 'Neo.Contract.Create', - result: [new ContractStackItem(transactions.kycContract)], - args: [ - transactions.kycContract.script, - Buffer.from([...transactions.kycContract.parameterList]), - transactions.kycContract.returnType, - transactions.kycContract.contractProperties, - transactions.kycContract.name, - transactions.kycContract.codeVersion, - transactions.kycContract.author, - transactions.kycContract.email, - transactions.kycContract.description, - ], - - mock: ({ blockchain }) => { - blockchain.contract.tryGet = jest.fn(async () => Promise.resolve()); - blockchain.contract.add = jest.fn(async () => Promise.resolve()); - }, - gas: common.FIVE_HUNDRED_FIXED8, - }, - - { - name: 'Neo.Contract.Migrate', - result: [new ContractStackItem(transactions.kycContract)], - args: [ - transactions.kycContract.script, - Buffer.from([...transactions.kycContract.parameterList]), - transactions.kycContract.returnType, - transactions.kycContract.contractProperties, - transactions.kycContract.name, - transactions.kycContract.codeVersion, - transactions.kycContract.author, - transactions.kycContract.email, - transactions.kycContract.description, - ], - - mock: ({ blockchain }) => { - blockchain.contract.tryGet = jest.fn(async () => Promise.resolve()); - blockchain.contract.add = jest.fn(async () => Promise.resolve()); - // tslint:disable-next-line: deprecation seems like a bug from rxjs; We don't want the scheduler definition anyway. - blockchain.storageItem.getAll$ = jest.fn(of); - blockchain.storageItem.add = jest.fn(async () => Promise.resolve()); - }, - gas: common.FIVE_HUNDRED_FIXED8, - }, - - { - name: 'Neo.Contract.GetStorageContext', - options: { - stack: [new ContractStackItem(new Contract(transactions.kycContract))], - createdContracts: { - [transactions.kycContract.hashHex]: Buffer.from('f42c9189cbfc9d582b7039b29e2cf36ec1283f1b', 'hex'), - }, - }, - result: [new StorageContextStackItem(transactions.kycContract.hash)], - gas: FEES.ONE, - }, - { - name: 'Neo.Contract.GetStorageContext', - options: { - stack: [new ContractStackItem(new Contract(transactions.kycContract))], - createdContracts: { - [transactions.kycContract.hashHex]: Buffer.from('f42c9189cbfc9d582b7039b29e2cf36ec1283f1a', 'hex'), - }, - }, - result: [new StorageContextStackItem(transactions.kycContract.hash)], - error: 'Invalid Contract.GetStorageContext context', - gas: FEES.ONE, - }, - - { - name: 'Neo.Contract.Destroy', - result: [], - mock: ({ blockchain }) => { - blockchain.contract.tryGet = jest.fn(async () => Promise.resolve()); - }, - gas: FEES.ONE, - }, - - { - name: 'Neo.Storage.Put', - result: [], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Storage.GetContext', - type: 'sys', - }, - ], - }, - - Buffer.alloc(0, 0), - Buffer.alloc(0, 0), - ], - - mock: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve({ hasStorage: true })); - - blockchain.storageItem.tryGet = jest.fn(async () => Promise.resolve()); - blockchain.storageItem.add = jest.fn(async () => Promise.resolve()); - }, - gas: FEES.ONE_THOUSAND, - }, - - { - name: 'Neo.Storage.Put', - result: [], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Storage.GetContext', - type: 'sys', - }, - ], - }, - - Buffer.alloc(1024, 0), - Buffer.alloc(0, 0), - ], - - mock: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve({ hasStorage: true })); - - blockchain.storageItem.tryGet = jest.fn(async () => Promise.resolve()); - blockchain.storageItem.add = jest.fn(async () => Promise.resolve()); - }, - gas: FEES.ONE_THOUSAND, - }, - - { - name: 'Neo.Storage.Put', - result: [], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Storage.GetContext', - type: 'sys', - }, - ], - }, - - Buffer.alloc(1025, 0), - Buffer.alloc(0, 0), - ], - - mock: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve({ hasStorage: true })); - - blockchain.storageItem.tryGet = jest.fn(async () => Promise.resolve()); - blockchain.storageItem.add = jest.fn(async () => Promise.resolve()); - }, - gas: FEES.ONE_THOUSAND.mul(new BN(2)), - error: 'Item too large', - }, - - { - name: 'Neo.Storage.Put', - result: [], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Storage.GetContext', - type: 'sys', - }, - ], - }, - - Buffer.alloc(0, 0), - Buffer.alloc(1024, 0), - ], - - mock: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve({ hasStorage: true })); - - blockchain.storageItem.tryGet = jest.fn(async () => Promise.resolve()); - blockchain.storageItem.add = jest.fn(async () => Promise.resolve()); - }, - gas: FEES.ONE_THOUSAND, - }, - { - name: 'Neo.Storage.Put', - result: [], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Storage.GetContext', - type: 'sys', - }, - ], - }, - - Buffer.alloc(0, 0), - Buffer.alloc(1024, 0), - ], - - mock: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve({ hasStorage: true })); - - blockchain.storageItem.tryGet = jest.fn(async () => Promise.resolve({ hasStorage: true })); - blockchain.storageItem.update = jest.fn(async () => Promise.resolve()); - blockchain.storageItem.add = jest.fn(async () => Promise.resolve()); - }, - gas: FEES.ONE_THOUSAND, - }, - - { - name: 'Neo.Storage.Put', - result: [], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Storage.GetContext', - type: 'sys', - }, - ], - }, - - Buffer.alloc(0, 0), - Buffer.alloc(1025, 0), - ], - - mock: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve({ hasStorage: true })); - - blockchain.storageItem.tryGet = jest.fn(async () => Promise.resolve()); - blockchain.storageItem.add = jest.fn(async () => Promise.resolve()); - }, - gas: FEES.ONE_THOUSAND.mul(new BN(2)), - }, - - { - name: 'Neo.Storage.Delete', - result: [], - args: [ - { - type: 'calls', - calls: [ - { - name: 'Neo.Storage.GetContext', - type: 'sys', - }, - ], - }, - - Buffer.alloc(0, 0), - ], - - mock: ({ blockchain }) => { - blockchain.contract.get = jest.fn(async () => Promise.resolve({ hasStorage: true })); - blockchain.storageItem.tryGet = jest.fn(async () => Promise.resolve({ flags: StorageFlags.None })); - blockchain.storageItem.delete = jest.fn(async () => Promise.resolve()); - }, - gas: FEES.ONE_HUNDRED, - }, - - { - name: 'System.ExecutionEngine.GetScriptContainer', - result: ({ transaction }) => [new TransactionStackItem(transaction)], - gas: FEES.ONE, - }, +import { ApplicationEngine } from '../ApplicationEngine'; +import { Dispatcher } from '../Dispatcher'; + +describe('Application Engine SysCall Tests', () => { + const dispatcher = new Dispatcher(); + const engine = new ApplicationEngine(dispatcher); + let script: ScriptBuilder; + beforeEach(() => { + dispatcher.reset(); + engine.create({ + trigger: TriggerType.Application, + gas: common.TWENTY_FIXED8, + }); - { - name: 'System.ExecutionEngine.GetScriptContainer', - flags: new Set(['blockContainer']), - result: [new BlockStackItem(factory.createBlock({ timestamp: 15 }))], - gas: FEES.ONE, - }, + script = new ScriptBuilder(); + }); - { - name: 'System.ExecutionEngine.GetScriptContainer', - flags: new Set(['consensusContainer']), - result: [new ConsensusPayloadStackItem(factory.createConsensusPayload({ timestamp: 15 }))], - gas: FEES.ONE, - }, + describe('System.Json.Deserialize', () => { + test('Halt -- Good values', () => { + script.emitPushString('123'); + script.emitSysCall('System.Json.Deserialize'); + script.emitPushString('null'); + script.emitSysCall('System.Json.Deserialize'); - { - name: 'System.ExecutionEngine.GetExecutingScriptHash', - result: ({ transaction }) => [new UInt160StackItem(crypto.toScriptHash(transaction.script))], + engine.loadScript({ script: script.build() }); + const state = engine.execute(); + expect(state).toEqual('HALT'); - gas: FEES.ONE, - }, + const resultStack = engine.resultStack; + expect(resultStack[0].isNull).toEqual(true); + expect(resultStack[1].getInteger().toNumber()).toEqual(123); + }); - { - name: 'System.ExecutionEngine.GetCallingScriptHash', - result: [new BufferStackItem(Buffer.alloc(0, 0))], - gas: FEES.ONE, - }, - { - name: 'System.ExecutionEngine.GetCallingScriptHash', - result: [new UInt160StackItem(common.ZERO_UINT160)], - gas: FEES.ONE, - options: { - scriptHashStack: [Buffer.alloc(20, 1), common.ZERO_UINT160, Buffer.alloc(20, 2)], - }, - }, + test('Fault -- Wrong Json', () => { + script.emitPushString('***'); + script.emitSysCall('System.Json.Deserialize'); - { - name: 'System.ExecutionEngine.GetEntryScriptHash', - result: [new UInt160StackItem(common.ZERO_UINT160)], - options: { - scriptHashStack: [Buffer.alloc(20, 1), Buffer.alloc(20, 2), common.ZERO_UINT160], - }, - gas: FEES.ONE, - }, -] as readonly TestCase[]; + engine.loadScript({ script: script.build() }); + const state = engine.execute(); + expect(state).toEqual('FAULT'); + expect(engine.resultStack.length).toEqual(0); + }); -const handleCall = (sb: ScriptBuilder, call: Call) => { - if (call.args !== undefined) { - // eslint-disable-next-line - handleArgs(sb, call.args); - } - if (call.type === 'sys') { - sb.emitSysCall(call.name); - } - if (call.type === 'op') { - sb.emitOp(call.name, call.buffer); - } -}; + test('Fault -- No decimals', () => { + script.emitPushString('123.45'); + script.emitSysCall('System.Json.Deserialize'); -const handleArgs = (sb: ScriptBuilder, args: readonly Arg[]) => { - // tslint:disable-next-line no-loop-statement - for (let i = args.length - 1; i >= 0; i -= 1) { - // tslint:disable-next-line no-any - const arg: any = args[i]; - if (arg != undefined && typeof arg === 'object' && arg.type === 'calls' && arg.calls != undefined) { - // tslint:disable-next-line no-any - arg.calls.forEach((call: any) => { - handleCall(sb, call); - }); - } else { - sb.emitPushParam(arg); - } - } -}; - -describe('syscalls', () => { - // tslint:disable-next-line no-any - const filterMethods = (value: any): any => { - if (value == undefined) { - return value; - } + engine.loadScript({ script: script.build() }); + const state = engine.execute(); + expect(state).toEqual('FAULT'); + expect(engine.resultStack.length).toEqual(0); + }); + }); + + describe('System.Json.Serialize', () => { + test('Halt -- Good values', () => { + script.emitPushInt(5); + script.emitSysCall('System.Json.Serialize'); + script.emitOp('PUSH0'); + script.emitOp('NOT'); + script.emitSysCall('System.Json.Serialize'); + script.emitPushString('test'); + script.emitSysCall('System.Json.Serialize'); + script.emitOp('PUSHNULL'); + script.emitSysCall('System.Json.Serialize'); + script.emitOp('NEWMAP'); + script.emitOp('DUP'); + script.emitPushString('key'); + script.emitPushString('value'); + script.emitOp('SETITEM'); + script.emitSysCall('System.Json.Serialize'); + + engine.loadScript({ script: script.build() }); + const state = engine.execute(); + expect(state).toEqual('HALT'); + + const resultStack = engine.resultStack; + expect(resultStack.length).toEqual(5); + + expect(resultStack[0].getString()).toEqual('{"key":"value"}'); + expect(resultStack[1].getString()).toEqual('null'); + expect(resultStack[2].getString()).toEqual('"test"'); + expect(resultStack[3].getString()).toEqual('true'); + expect(resultStack[4].getString()).toEqual('5'); + }); - if (Array.isArray(value)) { - return value.map(filterMethods); - } + test('Fault -- Bad values', () => { + script.emitSysCall('System.Storage.GetContext'); + script.emitSysCall('System.Json.Serialize'); - if (typeof value === 'function') { - return undefined; - } + engine.loadScript({ script: script.build() }); + const state = engine.execute(); + expect(state).toEqual('FAULT'); + expect(engine.resultStack.length).toEqual(0); + }); + }); - if (typeof value === 'object') { - // tslint:disable-next-line no-any - const result: { [key: string]: any } = {}; - // tslint:disable-next-line no-loop-statement - for (const [key, val] of Object.entries(value)) { - if (key !== 'referenceID' && key !== 'mutableCount') { - result[key] = filterMethods(val); - } - } + test('System.Callback.Invoke -- Halt', () => { + engine.create({ + trigger: TriggerType.Application, + gas: common.TWENTY_FIXED8, + }); - return result; - } + script = new ScriptBuilder(); + + script.emitPushInt(5); // Callback argument 1 + script.emitPushInt(1); // Callback argument 2 + script.emitPushInt(2); // ParamCount + script.emitOp('PACK'); + script.emitPushInt(2); // ParamCount + script.emitOp('PUSHA', new BN(200).toArrayLike(Buffer, 'le', 4)); // -> Nop area + script.emitSysCall('System.Callback.Create'); + script.emitSysCall('System.Callback.Invoke'); + script.emitOp('RET'); + _.range(250).forEach(() => { + script.emitOp('NOP'); + }); + script.emitOp('SUB'); + script.emitOp('RET'); + + engine.loadScript({ script: script.build() }); + const state = engine.execute(); + expect(state).toEqual('HALT'); + + const resultStack = engine.resultStack; + expect(resultStack.length).toEqual(1); + expect(resultStack[0].getInteger().eq(new BN(4))).toEqual(true); + }); + + test('System.Callback.CreateFromSyscall -- Halt', () => { + engine.create({ + trigger: TriggerType.Application, + gas: common.TWENTY_FIXED8, + }); - return value; - }; + script = new ScriptBuilder(); + + script.emitPush(Buffer.from([])); + script.emitPushInt(1); + script.emitOp('PACK'); + script.emitSysCallName('Neo.Crypto.SHA256'); + script.emitSysCall('System.Callback.CreateFromSyscall'); + script.emitSysCall('System.Callback.Invoke'); + + engine.loadScript({ script: script.build() }); + const state = engine.execute(); + expect(state).toEqual('HALT'); + + const resultStack = engine.resultStack; + expect(resultStack.length).toEqual(1); + expect(resultStack[0].getBuffer().toString('hex')).toEqual( + 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', + ); + }); + + describe('System.Blockchain.GetBlock', () => { + const block = new Block({ + index: 0, + timestamp: new BN(2), + version: 3, + witness: new Witness({ invocation: Buffer.from([]), verification: Buffer.from([]) }), + previousHash: common.ZERO_UINT256, + merkleRoot: common.ZERO_UINT256, + nextConsensus: common.ZERO_UINT160, + consensusData: new ConsensusData({ nonce: new BN(1), primaryIndex: 1 }), + transactions: [], + messageMagic: 1951352142, + }); - // tslint:disable-next-line no-loop-statement - for (const testCase of SYSCALLS) { - const { name, result, gas, args = [], mock, options, flags = new Set(), error } = testCase; - test(name, async () => { - const sb = new ScriptBuilder(); - sb.emitSysCall(name); - const transaction = transactions.createInvocation({ - script: sb.build(), - attributes: [ - new UInt160Attribute({ - usage: AttributeUsage.Script, - value: scriptAttributeHash, - }), - ], + test('With Snapshot option -- Halt', () => { + engine.create({ + trigger: TriggerType.Application, + gas: common.TWENTY_FIXED8, + snapshot: 'main', }); + script.emitPushUInt256(block.hash); + script.emitSysCall('System.Blockchain.GetBlock'); - const blockchain = { - contract: {}, - output: {}, - asset: {}, - action: {}, - storageItem: {}, - settings: {}, - currentBlock: {}, - header: {}, - block: {}, - transaction: {}, - account: {}, - validator: {}, - transactionData: {}, - }; - - const listeners = { - onNotify: jest.fn(() => { - // do nothing - }), - onLog: jest.fn(() => { - // do nothing - }), - onMigrateContract: jest.fn(() => { - // do nothing - }), - onSetVotes: jest.fn(() => { - // do nothing - }), - }; + engine.loadScript({ script: script.build() }); + const state = engine.execute(); + expect(state).toEqual('HALT'); - const block = { - timestamp: blockTime, - }; - - const init: ExecutionInit = { - scriptContainer: flags.has('blockContainer') - ? { - type: ScriptContainerType.Block, - value: factory.createBlock({ timestamp: 15 }), - } - : flags.has('consensusContainer') - ? { - type: ScriptContainerType.Consensus, - value: factory.createConsensusPayload({ timestamp: 15 }), - } - : { - type: ScriptContainerType.Transaction, - value: flags.has('useBadTransaction') ? transactions.badTransaction : transaction, - }, - - triggerType, - action: NULL_ACTION, - listeners, - skipWitnessVerify: false, - persistingBlock: flags.has('noPersistingBlock') ? undefined : (block as Block), - }; - - const gasLeft = common.ONE_HUNDRED_MILLION_FIXED8; - let stack: readonly StackItem[] = []; - - if (mock !== undefined) { - mock({ blockchain }); - } - - if (args.length) { - const argsSB = new ScriptBuilder(); - handleArgs(argsSB, args); - - const argsContext = await executeScript({ - code: argsSB.build(), - blockchain: blockchain as WriteBlockchain, - init, - gasLeft, - }); - - ({ stack } = argsContext); - expect(argsContext.errorMessage).toBeUndefined(); - } - - const context = await executeScript({ - code: transaction.script, - blockchain: blockchain as WriteBlockchain, - init, - gasLeft, - options: options === undefined ? { stack } : options, - }); - - if (error !== undefined) { - expect(context.errorMessage).toBeDefined(); - expect((context.errorMessage as string).startsWith(error)).toBeTruthy(); - } else { - expect(context.errorMessage).toBeUndefined(); + const stack = engine.resultStack; + expect(stack.length).toEqual(1); + expect(stack[0].isNull).toEqual(true); + }); - if (Array.isArray(result)) { - expect(filterMethods(context.stack)).toEqual(filterMethods(result)); - } else { - // tslint:disable-next-line no-any - const expectedResult = (result as any)({ transaction }); - if (Array.isArray(expectedResult)) { - expect(filterMethods(context.stack)).toEqual(filterMethods(expectedResult)); - } else { - expectedResult(context.stack); - } - } - expect(gasLeft.sub(context.gasLeft).toString(10)).toEqual(gas.toString(10)); + test('Without Snapshot option -- Fault', () => { + engine.create({ trigger: TriggerType.Application, gas: common.TWENTY_FIXED8 }); + script.emitPushUInt256(block.hash); + script.emitSysCall('System.Blockchain.GetBlock'); - testUtils.verifyBlockchainSnapshot(blockchain); - testUtils.verifyListeners(listeners); - } + engine.loadScript({ script: script.build() }); + const state = engine.execute(); + expect(state).toEqual('FAULT'); }); - } + }); }); diff --git a/packages/neo-one-node-vm/src/constants.ts b/packages/neo-one-node-vm/src/constants.ts deleted file mode 100644 index 52552fc433..0000000000 --- a/packages/neo-one-node-vm/src/constants.ts +++ /dev/null @@ -1,115 +0,0 @@ -import { common, OpCode, SysCallName, UInt160, VMState } from '@neo-one/client-common'; -import { Block, ExecutionAction, ScriptContainer, TriggerType, VMListeners, WriteBlockchain } from '@neo-one/node-core'; -import { BN } from 'bn.js'; -import { StackItem } from './stackItem'; - -export const MAX_SHL_SHR = 65535; -export const MIN_SHL_SHR = -MAX_SHL_SHR; -export const MAX_SIZE_BIG_INTEGER = 32; -export const MAX_STACK_SIZE = 2 * 1024; -export const MAX_ITEM_SIZE = 1024 * 1024; -export const MAX_INVOCATION_STACK_SIZE = 1024; -export const MAX_ARRAY_SIZE = 1024; -export const MAX_ARRAY_SIZE_BN = new BN(1024); -export const BLOCK_HEIGHT_YEAR = 2000000; -export const BLOCK_HEIGHT_MAX_SIZE_CHECKS = Number.MAX_SAFE_INTEGER; -const ratio = 100000; -export const FEES = { - ONE: new BN(ratio * 1), - TEN: new BN(ratio * 10), - TWENTY: new BN(ratio * 20), - ONE_HUNDRED: new BN(ratio * 100), - TWO_HUNDRED: new BN(ratio * 200), - FOUR_HUNDRED: new BN(ratio * 400), - FIVE_HUNDRED: new BN(ratio * 500), - ONE_THOUSAND: new BN(ratio * 1000), -}; - -export const FREE_GAS = common.TEN_FIXED8; -export type ExecutionStack = readonly StackItem[]; -export interface ExecutionInit { - readonly scriptContainer: ScriptContainer; - readonly triggerType: TriggerType; - readonly action: ExecutionAction; - readonly listeners: VMListeners; - readonly skipWitnessVerify: boolean; - readonly persistingBlock?: Block; -} - -export interface CreatedContracts { - readonly [hash: string]: UInt160; -} -export interface Options { - readonly depth: number; - readonly stack: ExecutionStack; - readonly stackAlt: ExecutionStack; - readonly createdContracts: CreatedContracts; - readonly scriptHashStack: readonly UInt160[]; - readonly scriptHash: UInt160 | undefined; - readonly entryScriptHash: UInt160; - readonly returnValueCount: number; - readonly stackCount: number; - readonly pc?: number; -} -export interface ExecutionContext { - readonly state: VMState; - readonly errorMessage?: string; - readonly blockchain: WriteBlockchain; - readonly init: ExecutionInit; - readonly engine: { - readonly run: (input: { readonly context: ExecutionContext }) => Promise; - readonly executeScript: (input: { - readonly code: Buffer; - readonly blockchain: WriteBlockchain; - readonly init: ExecutionInit; - readonly gasLeft: BN; - readonly options?: Options; - }) => Promise; - }; - readonly code: Buffer; - readonly scriptHashStack: readonly UInt160[]; - readonly scriptHash: UInt160; - readonly callingScriptHash: UInt160 | undefined; - readonly entryScriptHash: UInt160; - readonly pc: number; - readonly depth: number; - readonly stack: ExecutionStack; - readonly stackAlt: ExecutionStack; - readonly gasLeft: BN; - readonly createdContracts: CreatedContracts; - readonly returnValueCount: number; - readonly stackCount: number; -} - -export interface OpResult { - readonly context: ExecutionContext; - readonly results?: readonly StackItem[]; - readonly resultsAlt?: readonly StackItem[]; -} -export interface OpInvokeArgs { - readonly context: ExecutionContext; - readonly args: readonly StackItem[]; - readonly argsAlt: readonly StackItem[]; -} -export type OpInvoke = (input: OpInvokeArgs) => Promise | OpResult; -export interface Op { - readonly name: OpCode; - readonly in: number; - readonly inAlt: number; - readonly out: number; - readonly outAlt: number; - readonly invocation: number; - readonly fee: BN; - readonly invoke: OpInvoke; -} -export interface SysCall { - readonly name: SysCallName; - readonly in: number; - readonly inAlt: number; - readonly out: number; - readonly outAlt: number; - readonly invocation: number; - readonly fee: BN; - readonly invoke: OpInvoke; - readonly context: ExecutionContext; -} diff --git a/packages/neo-one-node-vm/src/converters/changes.ts b/packages/neo-one-node-vm/src/converters/changes.ts new file mode 100644 index 0000000000..dd91b9b252 --- /dev/null +++ b/packages/neo-one-node-vm/src/converters/changes.ts @@ -0,0 +1,87 @@ +// import { PutBatch, DeleteBatch } from '@neo-one/node-core'; + +type ChangeType = 'Added' | 'Changed' | 'Deleted'; +type ItemType = 'block' | 'transaction' | 'storage' | 'headerHashList'; + +export interface ChangeReturn { + readonly type: ChangeType; + readonly itemType: ItemType; + readonly key: Buffer; + readonly value: Buffer; +} + +// TODO: stealing this from `node-storage-common` temporarily this should come from `node-core`. +enum Prefix { + Block = 0x01, + Transaction = 0x02, + Storage = 0x70, + HeaderHashList = 0x80, + CurrentBlock = 0xc0, + CurrentHeader = 0xc1, + ContractID = 0xc2, +} + +const addPrefix = (prefix: Prefix, key: Buffer) => Buffer.concat([Buffer.from([prefix]), key]); + +const addPrefixToKey = (type: ItemType, key: Buffer) => { + switch (type) { + case 'block': + return addPrefix(Prefix.Block, key); + case 'transaction': + return addPrefix(Prefix.Transaction, key); + case 'storage': + return addPrefix(Prefix.Storage, key); + case 'headerHashList': + return addPrefix(Prefix.HeaderHashList, key); + default: + throw new Error(`Invalid type: ${type}`); + } +}; + +/** + * TODO: these batch definitions are straight from `abstract-leveldown`. + * we should export them from a common place like `node-core` for use in + * `node-storage-levelup` and here. + */ +export interface PutBatch { + readonly type: 'put'; + readonly key: Buffer; + readonly value: Buffer; +} + +export interface DeleteBatch { + readonly type: 'del'; + readonly key: Buffer; +} + +type Batch = PutBatch | DeleteBatch; + +export const parseChangeReturns = (changes: readonly ChangeReturn[]): readonly Batch[] => + changes.map(parseChangeReturn); + +const parseChangeReturn = (change: ChangeReturn): Batch => { + switch (change.type) { + case 'Added': + return { + type: 'put', + key: addPrefixToKey(change.itemType, change.key), + value: change.value, + }; + + case 'Changed': + return { + type: 'put', + key: addPrefixToKey(change.itemType, change.key), + value: change.value, + }; + + case 'Deleted': + return { + type: 'del', + key: addPrefixToKey(change.itemType, change.key), + }; + + default: + throw new Error('Invalid Change Type found'); + } +}; diff --git a/packages/neo-one-node-vm/src/converters/index.ts b/packages/neo-one-node-vm/src/converters/index.ts new file mode 100644 index 0000000000..7ffd048320 --- /dev/null +++ b/packages/neo-one-node-vm/src/converters/index.ts @@ -0,0 +1,3 @@ +export * from './changes'; +export * from './log'; +export * from './stackItems'; diff --git a/packages/neo-one-node-vm/src/converters/log.ts b/packages/neo-one-node-vm/src/converters/log.ts new file mode 100644 index 0000000000..aaf00a70e7 --- /dev/null +++ b/packages/neo-one-node-vm/src/converters/log.ts @@ -0,0 +1,18 @@ +import { common } from '@neo-one/client-common'; +import { VMLog } from '@neo-one/node-core'; + +export interface LogReturn { + readonly containerHash?: Buffer; + readonly callingScriptHash: Buffer; + readonly message: string; + readonly position: number; +} + +export const convertLog = ({ containerHash, callingScriptHash, message, position }: LogReturn): VMLog => { + return { + containerHash: containerHash ? common.asUInt256(containerHash) : undefined, + callingScriptHash: common.asUInt160(callingScriptHash), + message, + position, + }; +}; diff --git a/packages/neo-one-node-vm/src/converters/stackItems.ts b/packages/neo-one-node-vm/src/converters/stackItems.ts new file mode 100644 index 0000000000..029ef11766 --- /dev/null +++ b/packages/neo-one-node-vm/src/converters/stackItems.ts @@ -0,0 +1,149 @@ +import { + ArrayStackItem, + BooleanStackItem, + BufferStackItem, + ByteStringStackItem, + IntegerStackItem, + InteropInterface, + MapStackItem, + NullStackItem, + PointerStackItem, + PrimitiveStackItem, + StackItem, + StackItemType, + StructStackItem, +} from '@neo-one/node-core'; +import { BN } from 'bn.js'; + +export interface StackItemReturnBase { + readonly Type: keyof typeof StackItemType; + readonly IsNull: boolean; +} + +export interface AnyStackItemReturn extends StackItemReturnBase { + readonly Type: 'Any'; +} + +export interface PointerStackItemReturn extends StackItemReturnBase { + readonly Type: 'Pointer'; + readonly value: Buffer; + readonly Position: number; +} + +export interface BooleanStackItemReturn extends StackItemReturnBase { + readonly Type: 'Boolean'; + readonly value: boolean; + readonly Size: number; +} + +export interface IntegerStackItemReturn extends StackItemReturnBase { + readonly Type: 'Integer'; + readonly value: string | number; + readonly Size: number; +} + +export interface ByteStringStackItemReturn extends StackItemReturnBase { + readonly Type: 'ByteString'; + readonly value: Buffer; + readonly Size: number; +} + +export interface BufferStackItemReturn extends StackItemReturnBase { + readonly Type: 'Buffer'; + readonly value: Buffer; + readonly Size: number; +} + +export interface ArrayStackItemReturn extends StackItemReturnBase { + readonly Type: 'Array'; + readonly value: readonly StackItemReturn[]; + readonly Count: number; +} + +export interface StructStackItemReturn extends StackItemReturnBase { + readonly Type: 'Struct'; + readonly value: readonly StackItemReturn[]; + readonly Count: number; +} + +export interface MapStackItemReturn extends StackItemReturnBase { + readonly Type: 'Map'; + readonly value: ReadonlyArray<{ readonly key: PrimitiveStackItemReturn; readonly value: StackItemReturn }>; + readonly Count: number; +} + +// tslint:disable-next-line: no-any +export interface InteropInterfaceStackItemReturn extends StackItemReturnBase { + readonly Type: 'InteropInterface'; + readonly value: T; +} + +export type PrimitiveStackItemReturn = BooleanStackItemReturn | IntegerStackItemReturn | ByteStringStackItemReturn; + +export type StackItemReturn = + | PrimitiveStackItemReturn + | AnyStackItemReturn + | PointerStackItemReturn + | BufferStackItemReturn + | ArrayStackItemReturn + | StructStackItemReturn + | MapStackItemReturn + | InteropInterfaceStackItemReturn; + +export const parseStackItems = (stack: readonly StackItemReturn[]): readonly StackItem[] => stack.map(parseStackItem); + +export const parseStackItem = (item: StackItemReturn): StackItem => { + switch (item.Type) { + case 'Any': + return new NullStackItem(); + + case 'Array': + return new ArrayStackItem(parseStackItems(item.value)); + + case 'Buffer': + return new BufferStackItem(item.value); + + case 'InteropInterface': + return new InteropInterface(item.value); + + case 'Map': + return new MapStackItem( + item.value.reduce((acc, { key, value }) => { + const parsedKey = parsePrimitiveStackItem(key); + const parsedValue = parseStackItem(value); + + acc.set(parsedKey, parsedValue); + + return acc; + }, new Map()), + ); + + case 'Pointer': + return new PointerStackItem({ + script: item.value, + position: item.Position, + }); + + case 'Struct': + return new StructStackItem(parseStackItems(item.value)); + + default: + return parsePrimitiveStackItem(item); + } +}; + +const parsePrimitiveStackItem = (item: PrimitiveStackItemReturn): PrimitiveStackItem => { + switch (item.Type) { + case 'Boolean': + return new BooleanStackItem(item.value); + + case 'ByteString': + return new ByteStringStackItem(item.value); + + case 'Integer': + return new IntegerStackItem(new BN(item.value, 'le')); + + default: + throw new Error(`invalid stack item when parsing, found type ${item}`); + } +}; diff --git a/packages/neo-one-node-vm/src/errors.ts b/packages/neo-one-node-vm/src/errors.ts index db78ebc71f..b21e5a0349 100644 --- a/packages/neo-one-node-vm/src/errors.ts +++ b/packages/neo-one-node-vm/src/errors.ts @@ -1,201 +1,16 @@ -import { common, OpCode } from '@neo-one/client-common'; -import { disassembleByteCode } from '@neo-one/node-core'; import { makeErrorWithCode } from '@neo-one/utils'; -import { BN } from 'bn.js'; -import { ExecutionContext } from './constants'; -const getLine = (context: ExecutionContext): number => { - try { - const bytecode = disassembleByteCode(context.code); - // tslint:disable-next-line no-unused - const result = [...bytecode.entries()].find(([idx, { pc }]) => context.pc === pc); - - // NOTE: We don't do result[0] + 1 because context.pc will be the next pc, not the one that - // the error was thrown on. (Line numbers are 1-indexed) - return result === undefined ? 1 : result[0]; - } catch { - return 1; - } -}; - -const getMessage = (context: ExecutionContext, message: string): string => { - const { pc } = context; - const stack = context.stack.map((item) => item.toString()).join('\n'); - - return `${message}\nPC:${pc}\nStack:\n${stack}\nLine:${getLine(context)}\nScript Hash:${common.uInt160ToString( - context.scriptHash, - )}`; -}; - -export const ThrowError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'Script execution threw an Error'), -); -export const ShiftTooLargeError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'Shift value too large'), -); -export const ContainerTooLargeError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'Container too large'), -); -export const ItemTooLargeError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'Item too large'), -); -export const UnknownOpError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext, byteCode: string) => - getMessage(context, `Unknown op: ${byteCode}`), -); -export const StackUnderflowError = makeErrorWithCode( - 'VM_ERROR', - (context: ExecutionContext, op: OpCode, stackLength: number, expected: number) => - getMessage(context, `Stack Underflow. Op: ${op}. Stack Length: ${stackLength}. ` + `Expected: ${expected}`), -); -export const NumberTooLargeError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext, value: BN) => - getMessage(context, `Number too large to be represented in Javascript: ${value.toString(10)}`), -); -export const AltStackUnderflowError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, `Stack Underflow.`), -); -export const StackOverflowError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'Stack Overflow'), -); -export const InvocationStackOverflowError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'Invocation Stack Overflow'), -); -export const OutOfGASError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'Out of GAS'), -); -export const CodeOverflowError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'Code Overflow'), -); -export const UnknownSysCallError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext, sysCall: string) => - getMessage(context, `Unknown SysCall: ${sysCall}`), -); -export const UnknownOPError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'Unnown Op'), -); -export const UnknownError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'Unknown Error'), -); -export const XTuckNegativeError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'XTUCK Negative Index'), -); -export const XSwapNegativeError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'XSWAP Negative Index'), -); -export const XDropNegativeError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'XDROP Negative Index'), -); -export const XDropUnderflowError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'XDROP Underflow'), -); -export const PickNegativeError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'PICK Negative Index'), -); -export const RollNegativeError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'ROLL Negative Index'), -); -export const SubstrNegativeEndError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'SUBSTR Negative End'), -); -export const SubstrNegativeStartError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'SUBSTR Negative Start'), -); -export const LeftNegativeError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'LEFT Negative Index'), -); -export const RightNegativeError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'RIGHT Negative Index'), +export const InvalidUIntError = makeErrorWithCode( + 'INVALID_UINT', + (num: number) => `Expected number to be a 32-bit unsigned integer. Got: ${num}`, ); -export const RightLengthError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'RIGHT Length Less Than Index'), -); -export const InvalidAssetTypeError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'Invalid Asset Type.'), -); -export const InvalidCheckMultisigArgumentsError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'Invalid CHECKMULTISIG Arguments'), -); -export const InvalidPackCountError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'Invalid PACK Count'), -); -export const InvalidPickItemKeyError = makeErrorWithCode( - 'VM_ERROR', - (context: ExecutionContext, key: string, value: string) => - getMessage(context, `Invalid PICKITEM Index: ${key}. Value: ${value}`), -); -export const InvalidRemoveIndexError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext, index: number) => - getMessage(context, `Invalid REMOVE Index: ${index}`), -); -export const InvalidHasKeyIndexError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'Invalid HASKEY Index'), -); -export const InvalidSetItemIndexError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'Invalid SETITEM Index'), -); -export const InvalidCheckWitnessArgumentsError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'Invalid CheckWitness Arguments'), -); -export const InvalidGetHeaderArgumentsError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'Invalid GETHEADER Arguments'), -); -export const InvalidGetBlockArgumentsError = makeErrorWithCode( - 'VM_ERROR', - (context: ExecutionContext, arg: Buffer | undefined) => - getMessage(context, `Invalid GETBLOCK Argument: ` + `${arg === undefined ? 'null' : arg.toString('hex')}`), -); -export const InvalidIndexError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'Invalid Index.'), -); -export const InvalidInvocationTransactionError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'Expected InvocationTransaction.'), -); -export const InvalidClaimTransactionError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'Expected ClaimTransaction.'), -); -export const ContractNoStorageError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext, hash: string) => - getMessage(context, `Contract Does Not Have Storage: ${hash}`), -); -export const ContractNoDynamicInvokeError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext, hash: string) => - getMessage(context, `Contract Does Not Have Dynamic Invoke: ${hash}`), -); -export const TooManyVotesError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'Too Many Votes'), -); -export const AccountFrozenError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'Account Frozen'), -); -export const NotEligibleVoteError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'Ineligible To Vote'), -); -export const BadWitnessCheckError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'Bad Witness'), -); -export const UnexpectedScriptContainerError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'Unexpected Script Container'), -); -export const InvalidGetStorageContextError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'Invalid Get Storage Context'), -); -export const InvalidContractGetStorageContextError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'Invalid Contract.GetStorageContext context'), -); -export const ReadOnlyStorageContextError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext) => - getMessage(context, 'StorageContext is read only'), -); -export const InsufficientReturnValueError = makeErrorWithCode( - 'VM_ERROR', - (context: ExecutionContext, stackSize: number, count: number) => - getMessage(context, `Insufficient return values. Found ${stackSize}, expected ${count}`), -); -export const InvalidTailCallReturnValueError = makeErrorWithCode( - 'VM_ERROR', - (context: ExecutionContext, found: number, expected: number) => - getMessage(context, `Invalid tail call return value count. Found ${found}, expected ${expected}`), -); -export const TemplateVMError = makeErrorWithCode('VM_ERROR', getMessage); -export const ConstantStorageError = makeErrorWithCode('VM_ERROR', (context: ExecutionContext, key: Buffer) => - getMessage(context, `Storage at ${key.toString('hex')} is read only`), + +export const InvalidIntError = makeErrorWithCode( + 'INVALID_INT', + (num: number) => `Expected number to be a 32-bit signed integer. Got: ${num}`, ); -export const InvalidVerifySyscallError = makeErrorWithCode( - 'INVALID_VERIFY_SYSCALL_ERROR', - (context: ExecutionContext, syscall: string) => - getMessage(context, `Syscall ${syscall} is not allowed during verification`), + +export const InvalidByteError = makeErrorWithCode( + 'INVALID_BYTE', + (num: number) => `Expected number to be an 8-bit signed integer. Got: ${num}`, ); diff --git a/packages/neo-one-node-vm/src/execute.ts b/packages/neo-one-node-vm/src/execute.ts deleted file mode 100644 index 2bcf094799..0000000000 --- a/packages/neo-one-node-vm/src/execute.ts +++ /dev/null @@ -1,354 +0,0 @@ -import { crypto, utils, VMState } from '@neo-one/client-common'; -import { - Block, - ByteArrayContractParameter, - ExecuteScriptsResult, - ExecutionAction, - Script, - ScriptContainer, - TriggerType, - VMListeners, - WriteBlockchain, -} from '@neo-one/node-core'; -import { BN } from 'bn.js'; -import _ from 'lodash'; -import { - ExecutionContext, - ExecutionInit, - FREE_GAS, - MAX_INVOCATION_STACK_SIZE, - MAX_STACK_SIZE, - Options, -} from './constants'; -import { - AltStackUnderflowError, - InvocationStackOverflowError, - OutOfGASError, - StackOverflowError, - StackUnderflowError, - TemplateVMError, - UnknownError, -} from './errors'; -import { lookupOp } from './opcodes'; -import { StackItem } from './stackItem'; - -const getErrorMessage = (error: Error) => `${error.message}\n${error.stack}`; - -const executeNext = async ({ - context: contextIn, -}: { - readonly context: ExecutionContext; -}): Promise => { - let context = contextIn; - if (context.state !== VMState.None) { - return context; - } - - if (context.pc >= context.code.length) { - return { - ...context, - state: VMState.Halt, - }; - } - - const { op, context: opContext } = lookupOp({ context }); - context = opContext; - - if (context.stack.length < op.in) { - throw new StackUnderflowError(context, op.name, context.stack.length, op.in); - } - - if (context.stackAlt.length < op.inAlt) { - throw new AltStackUnderflowError(context); - } - - if (context.depth + op.invocation > MAX_INVOCATION_STACK_SIZE) { - throw new InvocationStackOverflowError(context); - } - - const args = context.stack.slice(0, op.in); - const argsAlt = context.stackAlt.slice(0, op.inAlt); - - context = { - ...context, - stack: context.stack.slice(op.in), - stackAlt: context.stackAlt.slice(op.inAlt), - stackCount: - context.stackCount + - args.reduce((acc, val) => acc + val.decrement(), 0) + - argsAlt.reduce((acc, val) => acc + val.decrement(), 0), - gasLeft: context.gasLeft.sub(op.fee), - }; - - if (context.gasLeft.lt(utils.ZERO)) { - throw new OutOfGASError(context); - } - - let result; - try { - result = await op.invoke({ context, args, argsAlt }); - } catch (error) { - if (error.code === 'VM_ERROR') { - throw error; - } - const newError = new TemplateVMError(context, `VM Error: ${error.message}`); - // tslint:disable-next-line no-object-mutation - newError.stack = error.stack; - throw newError; - } - - const { context: newContext, results, resultsAlt } = result; - context = newContext; - - if (op.out > 0) { - if (results === undefined || results.length !== op.out) { - throw new UnknownError(context); - } - context = { - ...context, - stack: _.reverse(results).concat(context.stack), - stackCount: context.stackCount + results.reduce((acc, value) => acc + value.increment(), 0), - }; - } else if (results !== undefined) { - throw new UnknownError(context); - } - - if (op.outAlt > 0) { - if (resultsAlt === undefined || resultsAlt.length !== op.outAlt) { - throw new UnknownError(context); - } - - context = { - ...context, - stackAlt: _.reverse(resultsAlt).concat(context.stackAlt), - stackCount: context.stackCount + resultsAlt.reduce((acc, value) => acc + value.increment(), 0), - }; - } else if (resultsAlt !== undefined) { - throw new UnknownError(context); - } - - if (context.stackCount > MAX_STACK_SIZE) { - throw new StackOverflowError(context); - } - - return context; -}; - -const run = async ({ context: contextIn }: { readonly context: ExecutionContext }): Promise => { - let context = contextIn; - // tslint:disable-next-line no-loop-statement - while (context.state === VMState.None) { - try { - // eslint-disable-next-line - context = await executeNext({ context }); - } catch (error) { - context = { - state: VMState.Fault, - errorMessage: getErrorMessage(error), - blockchain: context.blockchain, - init: context.init, - engine: context.engine, - code: context.code, - scriptHashStack: context.scriptHashStack, - scriptHash: context.scriptHash, - callingScriptHash: context.callingScriptHash, - entryScriptHash: context.entryScriptHash, - pc: context.pc, - depth: context.depth, - stack: context.stack, - stackAlt: context.stackAlt, - gasLeft: context.gasLeft, - createdContracts: context.createdContracts, - returnValueCount: context.returnValueCount, - stackCount: context.stackCount, - }; - } - } - - return context; -}; - -export const executeScript = async ({ - code, - blockchain, - init, - gasLeft, - options: { - scriptHashStack = [], - // tslint:disable no-unnecessary-initializer - // @ts-ignore - scriptHash: callingScriptHash = undefined, - // tslint:enable no-unnecessary-initializer - entryScriptHash = callingScriptHash, - depth = 1, - stack = [], - stackAlt = [], - createdContracts = {}, - returnValueCount = -1, - stackCount = 0, - pc = 0, - } = {}, -}: { - readonly code: Buffer; - readonly blockchain: WriteBlockchain; - readonly init: ExecutionInit; - readonly gasLeft: BN; - readonly options?: Partial; -}): Promise => { - const scriptHash = crypto.hash160(code); - - const context = { - state: VMState.None, - blockchain, - init, - engine: { - run, - executeScript, - }, - code, - scriptHashStack, - scriptHash, - callingScriptHash, - entryScriptHash: entryScriptHash === undefined ? scriptHash : entryScriptHash, - pc, - depth, - stack, - stackAlt, - gasLeft, - createdContracts, - returnValueCount, - stackCount, - }; - - return run({ context }); -}; - -const safeToContractParameter = (item: StackItem, safe: boolean) => { - if (safe) { - try { - return item.toContractParameter(); - } catch { - return new ByteArrayContractParameter(Buffer.alloc(0, 0)); - } - } - - return item.toContractParameter(); -}; - -export const execute = async ({ - scripts, - blockchain, - scriptContainer, - triggerType, - action, - returnValueCount = -1, - gas: gasIn, - listeners = {}, - skipWitnessVerify = false, - persistingBlock, -}: { - readonly scripts: readonly Script[]; - readonly blockchain: WriteBlockchain; - readonly scriptContainer: ScriptContainer; - readonly triggerType: TriggerType; - readonly action: ExecutionAction; - readonly gas: BN; - readonly returnValueCount?: number; - readonly listeners?: VMListeners; - readonly skipWitnessVerify?: boolean; - readonly persistingBlock?: Block; -}): Promise => { - const init = { - scriptContainer, - triggerType, - action, - listeners, - skipWitnessVerify, - persistingBlock, - }; - - let context; - const startingGas = gasIn.add(FREE_GAS); - let gas = startingGas; - let errorMessage; - - try { - const entryScriptHash = crypto.hash160(scripts[0].code); - // tslint:disable-next-line no-loop-statement - for (let idx = 0; idx < scripts.length && (context === undefined || context.state === VMState.Halt); idx += 1) { - const script = scripts[idx]; - // NOTE: scriptHash has a different meaning here, it will be translated - // to callingScriptHash within executeScript. executeScript - // automatically hashes the input code to determine the current - // scriptHash. - const scriptHash = idx - 1 >= 0 ? crypto.hash160(scripts[idx - 1].code) : undefined; - let options: Options = { - depth: scripts.length - idx, - stack: [], - stackAlt: [], - createdContracts: {}, - scriptHashStack: [entryScriptHash], - scriptHash, - entryScriptHash, - returnValueCount, - stackCount: 0, - }; - - if (context !== undefined) { - options = { - depth: scripts.length - idx, - stack: context.stack, - stackAlt: context.stackAlt, - createdContracts: context.createdContracts, - scriptHashStack: context.scriptHashStack, - scriptHash, - entryScriptHash, - returnValueCount, - stackCount: context.stackCount, - }; - } - - context = await executeScript({ - code: script.code, - blockchain, - init, - gasLeft: gas, - options, - }); - - gas = context.gasLeft; - } - } catch (error) { - errorMessage = getErrorMessage(error); - } - - const finalContext = context; - if (finalContext === undefined) { - return { - state: errorMessage === undefined ? VMState.Halt : VMState.Fault, - stack: [], - stackAlt: [], - gasConsumed: utils.ZERO, - gasCost: utils.ZERO, - errorMessage, - }; - } - - const gasCost = startingGas.sub(finalContext.gasLeft); - let gasConsumed = gasCost.sub(FREE_GAS); - if (gasConsumed.lt(utils.ZERO)) { - gasConsumed = utils.ZERO; - } - - const state = errorMessage === undefined ? finalContext.state : VMState.Fault; - const toContractParameter = (item: StackItem) => safeToContractParameter(item, state === VMState.Fault); - - return { - state: errorMessage === undefined ? finalContext.state : VMState.Fault, - stack: finalContext.stack.map(toContractParameter), - stackAlt: finalContext.stackAlt.map(toContractParameter), - gasConsumed, - gasCost, - errorMessage: errorMessage === undefined ? finalContext.errorMessage : errorMessage, - }; -}; diff --git a/packages/neo-one-node-vm/src/index.ts b/packages/neo-one-node-vm/src/index.ts index 46df0aa08e..76bd1cb2a9 100644 --- a/packages/neo-one-node-vm/src/index.ts +++ b/packages/neo-one-node-vm/src/index.ts @@ -1,9 +1,3 @@ -import { execute } from './execute'; - -// tslint:disable-next-line export-name -export const vm = { - executeScripts: execute, -}; - -// tslint:disable-next-line export-name -export { StackItem, deserializeStackItem } from './stackItem'; +export * from './ApplicationEngine'; +export * from './Dispatcher'; +export * from './utils'; diff --git a/packages/neo-one-node-vm/src/opcodes.ts b/packages/neo-one-node-vm/src/opcodes.ts deleted file mode 100644 index 9352d6cd11..0000000000 --- a/packages/neo-one-node-vm/src/opcodes.ts +++ /dev/null @@ -1,2021 +0,0 @@ -import { common, crypto, Op as OpCodeToByteCode, OpCode, UInt160, utils, VMState } from '@neo-one/client-common'; -// tslint:disable-next-line:match-default-export-name -import bitwise from 'bitwise'; -import { BN } from 'bn.js'; -import _ from 'lodash'; -import { - ExecutionContext, - ExecutionStack, - FEES, - MAX_ARRAY_SIZE, - MAX_ITEM_SIZE, - MAX_SHL_SHR, - MIN_SHL_SHR, - Op, - OpInvoke, -} from './constants'; -import { - CodeOverflowError, - ContainerTooLargeError, - ContractNoDynamicInvokeError, - InsufficientReturnValueError, - InvalidCheckMultisigArgumentsError, - InvalidHasKeyIndexError, - InvalidPackCountError, - InvalidPickItemKeyError, - InvalidRemoveIndexError, - InvalidSetItemIndexError, - InvalidTailCallReturnValueError, - ItemTooLargeError, - LeftNegativeError, - PickNegativeError, - RightLengthError, - RightNegativeError, - RollNegativeError, - ShiftTooLargeError, - StackUnderflowError, - SubstrNegativeEndError, - SubstrNegativeStartError, - ThrowError, - UnknownOpError, - XDropNegativeError, - XDropUnderflowError, - XSwapNegativeError, - XTuckNegativeError, -} from './errors'; -import { - ArrayStackItem, - BooleanStackItem, - BufferStackItem, - IntegerStackItem, - MapStackItem, - StackItem, - StructStackItem, - UInt160StackItem, - UInt256StackItem, -} from './stackItem'; -import { lookupSysCall } from './syscalls'; -import { vmUtils } from './vmUtils'; - -export type CreateOp = ( - input: CreateOpArgs, -) => { - readonly op: Op; - readonly context: ExecutionContext; -}; - -interface OpStatic { - readonly type: 'op'; - readonly op: Op; -} - -interface OpCreate { - readonly type: 'create'; - readonly create: CreateOp; -} - -type OpObject = OpStatic | OpCreate; - -export interface CreateOpArgs { - readonly context: ExecutionContext; -} - -export const createOp = ({ - name, - in: _in = 0, - inAlt = 0, - out = 0, - outAlt = 0, - invocation = 0, - fee: feeIn, - invoke, -}: { - readonly name: OpCode; - readonly in?: number; - readonly inAlt?: number; - readonly out?: number; - readonly outAlt?: number; - readonly invocation?: number; - readonly array?: number; - readonly item?: number; - readonly fee?: BN; - readonly invoke: OpInvoke; -}): OpStatic => { - let fee = feeIn; - if (fee === undefined) { - const byteCode = OpCodeToByteCode[name]; - fee = byteCode <= OpCodeToByteCode.NOP ? utils.ZERO : FEES.ONE; - } - - return { - type: 'op', - op: { - name, - in: _in, - inAlt, - out, - outAlt, - invocation, - fee, - invoke, - }, - }; -}; - -const pushNumber = ({ name, value }: { readonly name: OpCode; readonly value: number }) => - createOp({ - name, - out: 1, - invoke: ({ context }) => ({ - context, - results: [new IntegerStackItem(new BN(value))], - }), - }); - -const pushData = ({ name, numBytes }: { readonly name: OpCode; readonly numBytes: 1 | 2 | 4 }) => - createOp({ - name, - out: 1, - invoke: ({ context }) => { - const { code, pc } = context; - let size; - if (numBytes === 1) { - size = code.readUInt8(context.pc); - } else if (numBytes === 2) { - size = code.readUInt16LE(pc); - } else { - size = code.readInt32LE(pc); - } - - if (code.length < pc + numBytes + size - 1) { - throw new CodeOverflowError(context); - } - - const value = code.slice(pc + numBytes, pc + numBytes + size); - if (value.length > MAX_ITEM_SIZE) { - throw new ItemTooLargeError(context); - } - - return { - context: { - ...context, - pc: pc + numBytes + size, - }, - - results: [new BufferStackItem(value)], - }; - }, - }); - -const jump = ({ name, checkTrue }: { readonly name: OpCode; readonly checkTrue?: boolean }) => - createOp({ - name, - in: checkTrue === undefined ? 0 : 1, - invoke: ({ context, args }) => { - const { code } = context; - let { pc } = context; - const offset = code.readInt16LE(pc); - pc += 2; - const newPC = pc + offset - 3; - if (newPC < 0 || newPC > code.length) { - throw new CodeOverflowError(context); - } - - let shouldJump = true; - if (checkTrue !== undefined) { - shouldJump = args[0].asBoolean(); - if (!checkTrue) { - shouldJump = !shouldJump; - } - } - - return { - context: { - ...context, - pc: shouldJump ? newPC : pc, - }, - }; - }, - }); - -const isDynamic = (hash: UInt160) => common.uInt160ToBuffer(hash).every((value) => value === 0); - -const call = ({ name, tailCall }: { readonly name: OpCode; readonly tailCall?: boolean }): OpCreate => ({ - type: 'create', - create: ({ context: contextIn }) => { - const hashIn = common.bufferToUInt160(contextIn.code.slice(contextIn.pc, contextIn.pc + 20)); - - const { op } = createOp({ - name, - in: isDynamic(hashIn) ? 1 : 0, - invocation: tailCall ? 0 : 1, - fee: FEES.TEN, - invoke: async ({ context, args }) => { - const { pc, scriptHash } = context; - let hash = common.bufferToUInt160(context.code.slice(pc, pc + 20)); - if (isDynamic(hash)) { - hash = common.bufferToUInt160(args[0].asBuffer()); - - const executingContract = await context.blockchain.contract.get({ - hash: scriptHash, - }); - - if (!executingContract.hasDynamicInvoke) { - throw new ContractNoDynamicInvokeError(context, common.uInt160ToString(scriptHash)); - } - } - const contract = await context.blockchain.contract.get({ hash }); - const scriptHashStack = [hash, ...context.scriptHashStack]; - const resultContext = await context.engine.executeScript({ - code: contract.script, - blockchain: context.blockchain, - init: context.init, - gasLeft: context.gasLeft, - options: { - stack: context.stack, - stackAlt: context.stackAlt, - depth: tailCall ? context.depth : context.depth + 1, - createdContracts: context.createdContracts, - scriptHashStack: tailCall ? scriptHashStack.slice(0, scriptHashStack.length - 1) : scriptHashStack, - scriptHash: context.scriptHash, - entryScriptHash: context.entryScriptHash, - returnValueCount: -1, - stackCount: context.stackCount, - }, - }); - - let { state } = resultContext; - if (state === VMState.Halt) { - // If it's a tail call, then the final recursive call executes the rest - // of the script, and we just return immediately here. - state = tailCall ? VMState.Halt : context.state; - } - - return { - context: { - state, - errorMessage: resultContext.errorMessage, - blockchain: context.blockchain, - init: context.init, - engine: context.engine, - code: context.code, - scriptHashStack: tailCall - ? context.scriptHashStack.slice(0, context.scriptHashStack.length - 1) - : context.scriptHashStack, - scriptHash: context.scriptHash, - callingScriptHash: context.callingScriptHash, - entryScriptHash: context.entryScriptHash, - pc: pc + 20, - depth: context.depth, - returnValueCount: context.returnValueCount, - stackCount: resultContext.stackCount, - stack: resultContext.stack, - stackAlt: resultContext.stackAlt, - gasLeft: resultContext.gasLeft, - createdContracts: resultContext.createdContracts, - }, - }; - }, - }); - - return { op, context: contextIn }; - }, -}); - -const callIsolated = ({ - name, - dynamicCall, - tailCall, -}: { - readonly name: OpCode; - readonly dynamicCall?: boolean; - readonly tailCall?: boolean; -}): OpCreate => ({ - type: 'create', - create: ({ context: contextIn }) => { - const returnValueCount = contextIn.code.slice(contextIn.pc, contextIn.pc + 1)[0]; - const parametersCount = contextIn.code.slice(contextIn.pc + 1, contextIn.pc + 2)[0]; - - const nextPC = dynamicCall ? contextIn.pc + 2 : contextIn.pc + 22; - - const { op } = createOp({ - name, - in: parametersCount + (dynamicCall ? 1 : 0), - invocation: tailCall ? 0 : 1, - invoke: async ({ context, args }) => { - const { pc, scriptHash } = context; - const hash = dynamicCall - ? common.bufferToUInt160(args[0].asBuffer()) - : common.bufferToUInt160(context.code.slice(pc + 2, pc + 22)); - - if (tailCall && context.returnValueCount !== returnValueCount) { - throw new InvalidTailCallReturnValueError(context, context.returnValueCount, returnValueCount); - } - - if (dynamicCall) { - const executingContract = await context.blockchain.contract.get({ - hash: scriptHash, - }); - - if (!executingContract.hasDynamicInvoke) { - throw new ContractNoDynamicInvokeError(context, common.uInt160ToString(scriptHash)); - } - } - - const contract = await context.blockchain.contract.get({ hash }); - const nextStack = dynamicCall ? args.slice(1) : args; - const scriptHashStack = [hash, ...context.scriptHashStack]; - - const resultContext = await context.engine.executeScript({ - code: contract.script, - blockchain: context.blockchain, - init: context.init, - gasLeft: context.gasLeft, - options: { - stack: nextStack, - stackAlt: [], - depth: tailCall ? context.depth : context.depth + 1, - createdContracts: context.createdContracts, - scriptHashStack: tailCall ? scriptHashStack.slice(0, scriptHashStack.length - 1) : scriptHashStack, - scriptHash: context.scriptHash, - entryScriptHash: context.entryScriptHash, - returnValueCount, - stackCount: context.stackCount + nextStack.reduce((acc, value) => acc + value.increment(), 0), - }, - }); - - let { state, stackCount } = resultContext; - if (state === VMState.Halt) { - // If it's a tail call, then the final recursive call executes the rest - // of the script, and we just return immediately here. - state = tailCall ? VMState.Halt : context.state; - } - - let stack: ExecutionStack = []; - if (returnValueCount === -1) { - stack = resultContext.stack; - } else if (returnValueCount > 0) { - if (resultContext.state === VMState.Halt && resultContext.stack.length < returnValueCount) { - throw new InsufficientReturnValueError(context, resultContext.stack.length, returnValueCount); - } - - stack = resultContext.stack.slice(0, returnValueCount); - stackCount += resultContext.stack.slice(returnValueCount).reduce((acc, value) => acc + value.decrement(), 0); - } - - stackCount += resultContext.stackAlt.reduce((acc, value) => acc + value.decrement(), 0); - - return { - context: { - state, - errorMessage: resultContext.errorMessage, - blockchain: context.blockchain, - init: context.init, - engine: context.engine, - code: context.code, - scriptHashStack: tailCall - ? context.scriptHashStack.slice(0, context.scriptHashStack.length - 1) - : context.scriptHashStack, - scriptHash: context.scriptHash, - callingScriptHash: context.callingScriptHash, - entryScriptHash: context.entryScriptHash, - pc: nextPC, - depth: context.depth, - returnValueCount: context.returnValueCount, - stackCount, - stack: stack.concat(context.stack), - stackAlt: context.stackAlt, - gasLeft: resultContext.gasLeft, - createdContracts: resultContext.createdContracts, - }, - }; - }, - }); - - return { op, context: contextIn }; - }, -}); - -const functionCallIsolated = ({ name }: { readonly name: OpCode }): OpCreate => ({ - type: 'create', - create: ({ context: contextIn }) => { - const returnValueCount = contextIn.code.slice(contextIn.pc, contextIn.pc + 1)[0]; - let parametersCount = contextIn.code.slice(contextIn.pc + 1, contextIn.pc + 2)[0]; - parametersCount = parametersCount === -1 ? contextIn.stack.length : parametersCount; - const jumpCount = contextIn.code.slice(contextIn.pc + 2, contextIn.pc + 4).readInt16LE(0); - const nextPC = contextIn.pc + 4; - - const { op } = createOp({ - name, - in: parametersCount, - invocation: 1, - invoke: async ({ context, args }) => { - const resultContext = await context.engine.executeScript({ - code: context.code, - blockchain: context.blockchain, - init: context.init, - gasLeft: context.gasLeft, - options: { - stack: args, - stackAlt: [], - depth: context.depth + 1, - createdContracts: context.createdContracts, - scriptHashStack: [context.scriptHash, ...context.scriptHashStack], - scriptHash: context.scriptHash, - entryScriptHash: context.entryScriptHash, - returnValueCount, - pc: context.pc + jumpCount + 1, - stackCount: context.stackCount + args.reduce((acc, value) => acc + value.increment(), 0), - }, - }); - - let { state, stackCount } = resultContext; - if (state === VMState.Halt) { - state = context.state; - } - - let stack: ExecutionStack = []; - if (returnValueCount === -1) { - stack = resultContext.stack; - } else if (returnValueCount > 0) { - if (resultContext.stack.length < returnValueCount) { - throw new InsufficientReturnValueError(context, resultContext.stack.length, returnValueCount); - } - - stack = resultContext.stack.slice(0, returnValueCount); - stackCount += resultContext.stack.slice(returnValueCount).reduce((acc, value) => acc + value.decrement(), 0); - } - - stackCount += resultContext.stackAlt.reduce((acc, value) => acc + value.decrement(), 0); - - return { - context: { - state, - errorMessage: resultContext.errorMessage, - blockchain: context.blockchain, - init: context.init, - engine: context.engine, - code: context.code, - scriptHashStack: context.scriptHashStack, - scriptHash: context.scriptHash, - callingScriptHash: context.callingScriptHash, - entryScriptHash: context.entryScriptHash, - pc: nextPC, - depth: context.depth, - returnValueCount: context.returnValueCount, - stackCount, - stack: stack.concat(context.stack), - stackAlt: context.stackAlt, - gasLeft: resultContext.gasLeft, - createdContracts: resultContext.createdContracts, - }, - }; - }, - }); - - return { op, context: contextIn }; - }, -}); - -const newArrayOrStruct = ({ name }: { readonly name: 'NEWARRAY' | 'NEWSTRUCT' }) => - createOp({ - name, - in: 1, - out: 1, - invoke: ({ context, args }) => { - let results; - if (args[0].isArray()) { - const array = args[0].asArray(); - results = name === 'NEWARRAY' ? [new ArrayStackItem(array)] : [new StructStackItem(array)]; - } else { - const count = vmUtils.toNumber(context, args[0].asBigIntegerUnsafe()); - - if (count > MAX_ARRAY_SIZE) { - throw new ContainerTooLargeError(context); - } - - const fill = _.range(0, count).map(() => new BooleanStackItem(false)); - results = name === 'NEWARRAY' ? [new ArrayStackItem(fill)] : [new StructStackItem(fill)]; - } - - return { context, results }; - }, - }); - -const JMP = jump({ name: 'JMP' }); - -const OPCODE_PAIRS = ([ - [ - 0x00, - createOp({ - name: 'PUSH0', - out: 1, - invoke: ({ context }) => ({ - context, - results: [new BufferStackItem(Buffer.alloc(0, 0))], - }), - }), - ], - // tslint:disable-next-line: readonly-array -] as ReadonlyArray<[number, OpObject]>) - .concat( - // tslint:disable-next-line: readonly-array - _.range(0x01, 0x4c).map<[number, OpObject]>((idx) => [ - idx, - createOp({ - // tslint:disable-next-line no-any - name: `PUSHBYTES${idx}` as any, - out: 1, - invoke: ({ context }) => ({ - context: { - ...context, - pc: context.pc + idx, - }, - results: [new BufferStackItem(context.code.slice(context.pc, context.pc + idx))], - }), - }), - ]), - ) - .concat([ - [0x4c, pushData({ name: 'PUSHDATA1', numBytes: 1 })], - [0x4d, pushData({ name: 'PUSHDATA2', numBytes: 2 })], - [0x4e, pushData({ name: 'PUSHDATA4', numBytes: 4 })], - [0x4f, pushNumber({ name: 'PUSHM1', value: -1 })], - ]) - .concat( - // tslint:disable-next-line: readonly-array - _.range(0x51, 0x61).map<[number, OpObject]>((idx) => { - const value = idx - 0x50; - - // tslint:disable-next-line no-any - return [idx, pushNumber({ name: `PUSH${value}` as any, value })]; - }), - ) - .concat([ - [ - 0x61, - createOp({ - name: 'NOP', - invoke: ({ context }) => ({ context }), - }), - ], - [0x62, JMP], - [0x63, jump({ name: 'JMPIF', checkTrue: true })], - [0x64, jump({ name: 'JMPIFNOT', checkTrue: false })], - [ - 0x65, - createOp({ - name: 'CALL', - invocation: 1, - invoke: async ({ context }) => { - const { pc } = context; - // High level: - // Execute JMP in place of current op codes pc using same context - // Continue running after JMP until done - // Set current pc to pc + 2 - const { op } = JMP; - const { context: startContext } = await op.invoke({ - context: { - ...context, - callingScriptHash: context.scriptHash, - }, - args: [], - argsAlt: [], - }); - - const resultContext = await context.engine.run({ - context: { - ...startContext, - depth: context.depth + 1, - }, - }); - - return { - context: { - ...resultContext, - callingScriptHash: context.callingScriptHash, - pc: pc + 2, - state: resultContext.state === VMState.Fault ? VMState.Fault : VMState.None, - depth: context.depth, - }, - }; - }, - }), - ], - [ - 0x66, - createOp({ - name: 'RET', - invoke: ({ context }) => ({ - context: { ...context, state: VMState.Halt }, - }), - }), - ], - [0x67, call({ name: 'APPCALL' })], - [ - 0x68, - { - type: 'create', - create: ({ context }) => { - const sysCall = lookupSysCall({ context }); - - return { - op: { - name: 'SYSCALL', - in: sysCall.in, - inAlt: sysCall.inAlt, - out: sysCall.out, - outAlt: sysCall.outAlt, - invocation: sysCall.invocation, - fee: sysCall.fee, - invoke: sysCall.invoke, - }, - context: sysCall.context, - }; - }, - }, - ], - [0x69, call({ name: 'TAILCALL', tailCall: true })], - [ - 0x6a, - createOp({ - name: 'DUPFROMALTSTACK', - inAlt: 1, - out: 1, - outAlt: 1, - invoke: ({ context, argsAlt }) => ({ - context, - results: [argsAlt[0]], - resultsAlt: [argsAlt[0]], - }), - }), - ], - [ - 0x6b, - createOp({ - name: 'TOALTSTACK', - in: 1, - outAlt: 1, - invoke: ({ context, args }) => ({ - context, - resultsAlt: [args[0]], - }), - }), - ], - [ - 0x6c, - createOp({ - name: 'FROMALTSTACK', - inAlt: 1, - out: 1, - invoke: ({ context, argsAlt }) => ({ - context, - results: [argsAlt[0]], - }), - }), - ], - [ - 0x6d, - createOp({ - name: 'XDROP', - in: 1, - invoke: ({ context, args }) => { - const n = vmUtils.toNumber(context, args[0].asBigIntegerUnsafe()); - if (n < 0) { - throw new XDropNegativeError(context); - } - - const { stack } = context; - - if (n >= stack.length) { - throw new XDropUnderflowError(context); - } - - return { - context: { - ...context, - stack: stack.slice(0, n).concat(stack.slice(n + 1)), - stackCount: context.stackCount + stack[n].decrement(), - }, - }; - }, - }), - ], - [ - 0x72, - createOp({ - name: 'XSWAP', - in: 1, - invoke: ({ context, args }) => { - const n = vmUtils.toNumber(context, args[0].asBigIntegerUnsafe()); - if (n < 0) { - throw new XSwapNegativeError(context); - } - - const mutableStack = [...context.stack]; - mutableStack[n] = context.stack[0]; - mutableStack[0] = context.stack[n]; - - return { context: { ...context, stack: mutableStack } }; - }, - }), - ], - [ - 0x73, - createOp({ - name: 'XTUCK', - in: 1, - invoke: ({ context, args }) => { - const n = vmUtils.toNumber(context, args[0].asBigIntegerUnsafe()); - if (n <= 0) { - throw new XTuckNegativeError(context); - } - - const { stack } = context; - - return { - context: { - ...context, - stack: stack - .slice(0, n) - .concat([stack[0]]) - .concat(stack.slice(n)), - stackCount: context.stackCount + stack[0].increment(), - }, - }; - }, - }), - ], - [ - 0x74, - createOp({ - name: 'DEPTH', - out: 1, - invoke: ({ context }) => ({ - context, - results: [new IntegerStackItem(new BN(context.stack.length))], - }), - }), - ], - [ - 0x75, - createOp({ - name: 'DROP', - in: 1, - invoke: ({ context }) => ({ context }), - }), - ], - [ - 0x76, - createOp({ - name: 'DUP', - in: 1, - out: 2, - invoke: ({ context, args }) => ({ - context, - results: [args[0], args[0]], - }), - }), - ], - [ - 0x77, - createOp({ - name: 'NIP', - in: 2, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [args[0]], - }), - }), - ], - [ - 0x78, - createOp({ - name: 'OVER', - in: 2, - out: 3, - invoke: ({ context, args }) => ({ - context, - results: [args[1], args[0], args[1]], - }), - }), - ], - [ - 0x79, - createOp({ - name: 'PICK', - in: 1, - out: 1, - invoke: ({ context, args }) => { - const n = vmUtils.toNumber(context, args[0].asBigIntegerUnsafe()); - if (n < 0) { - throw new PickNegativeError(context); - } - if (n >= context.stack.length) { - throw new StackUnderflowError(context, 'PICK', context.stack.length, n + 1); - } - - return { context, results: [context.stack[n]] }; - }, - }), - ], - [ - 0x7a, - createOp({ - name: 'ROLL', - in: 1, - out: 1, - invoke: ({ context, args }) => { - const n = vmUtils.toNumber(context, args[0].asBigIntegerUnsafe()); - if (n < 0) { - throw new RollNegativeError(context); - } - if (n >= context.stack.length) { - throw new StackUnderflowError(context, 'ROLL', context.stack.length, n + 1); - } - - const { stack } = context; - - return { - context: { - ...context, - stack: stack.slice(0, n).concat(stack.slice(n + 1)), - stackCount: context.stackCount + stack[n].decrement(), - }, - results: [context.stack[n]], - }; - }, - }), - ], - [ - 0x7b, - createOp({ - name: 'ROT', - in: 3, - out: 3, - invoke: ({ context, args }) => ({ - context, - results: [args[1], args[0], args[2]], - }), - }), - ], - [ - 0x7c, - createOp({ - name: 'SWAP', - in: 2, - out: 2, - invoke: ({ context, args }) => ({ - context, - results: [args[0], args[1]], - }), - }), - ], - [ - 0x7d, - createOp({ - name: 'TUCK', - in: 2, - out: 3, - invoke: ({ context, args }) => ({ - context, - results: [args[0], args[1], args[0]], - }), - }), - ], - [ - 0x7e, - createOp({ - name: 'CAT', - in: 2, - out: 1, - invoke: ({ context, args }) => { - const result = Buffer.concat([args[1].asBuffer(), args[0].asBuffer()]); - if (result.length > MAX_ITEM_SIZE) { - throw new ItemTooLargeError(context); - } - - return { - context, - results: [new BufferStackItem(result)], - }; - }, - }), - ], - [ - 0x7f, - createOp({ - name: 'SUBSTR', - in: 3, - out: 1, - invoke: ({ context, args }) => { - const end = vmUtils.toNumber(context, args[0].asBigIntegerUnsafe()); - if (end < 0) { - throw new SubstrNegativeEndError(context); - } - - const start = vmUtils.toNumber(context, args[1].asBigIntegerUnsafe()); - if (start < 0) { - throw new SubstrNegativeStartError(context); - } - - return { - context, - results: [new BufferStackItem(args[2].asBuffer().slice(start, start + end))], - }; - }, - }), - ], - [ - 0x80, - createOp({ - name: 'LEFT', - in: 2, - out: 1, - invoke: ({ context, args }) => { - const count = vmUtils.toNumber(context, args[0].asBigIntegerUnsafe()); - if (count < 0) { - throw new LeftNegativeError(context); - } - - return { - context, - results: [new BufferStackItem(args[1].asBuffer().slice(0, count))], - }; - }, - }), - ], - [ - 0x81, - createOp({ - name: 'RIGHT', - in: 2, - out: 1, - invoke: ({ context, args }) => { - const count = vmUtils.toNumber(context, args[0].asBigIntegerUnsafe()); - if (count < 0) { - throw new RightNegativeError(context); - } - - const value = args[1].asBuffer(); - if (value.length < count) { - throw new RightLengthError(context); - } - - return { - context, - results: [new BufferStackItem(value.slice(value.length - count, value.length))], - }; - }, - }), - ], - [ - 0x82, - createOp({ - name: 'SIZE', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new IntegerStackItem(new BN(args[0].asBuffer().length))], - }), - }), - ], - [ - 0x83, - createOp({ - name: 'INVERT', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [ - new IntegerStackItem( - utils.fromSignedBuffer(bitwise.buffer.not(utils.toSignedBuffer(args[0].asBigIntegerUnsafe()))), - ), - ], - }), - }), - ], - [ - 0x84, - createOp({ - name: 'AND', - in: 2, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [ - new IntegerStackItem( - vmUtils.bitwiseOp(bitwise.buffer.and, args[0].asBigIntegerUnsafe(), args[1].asBigIntegerUnsafe()), - ), - ], - }), - }), - ], - [ - 0x85, - createOp({ - name: 'OR', - in: 2, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [ - new IntegerStackItem( - vmUtils.bitwiseOp(bitwise.buffer.or, args[0].asBigIntegerUnsafe(), args[1].asBigIntegerUnsafe()), - ), - ], - }), - }), - ], - [ - 0x86, - createOp({ - name: 'XOR', - in: 2, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [ - new IntegerStackItem( - vmUtils.bitwiseOp(bitwise.buffer.xor, args[0].asBigIntegerUnsafe(), args[1].asBigIntegerUnsafe()), - ), - ], - }), - }), - ], - [ - 0x87, - createOp({ - name: 'EQUAL', - in: 2, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new BooleanStackItem(args[0].equals(args[1]))], - }), - }), - ], - // [0x88, createOp({ - // name: 'OP_EQUALVERIFY', - // invoke: ({ context }: OpInvokeArgs) => ({ context }), - // })], - // [0x89, createOp({ - // name: 'OP_RESERVED1', - // invoke: ({ context }: OpInvokeArgs) => ({ context }), - // })], - // [0x8A, createOp({ - // name: 'OP_RESERVED2', - // invoke: ({ context }: OpInvokeArgs) => ({ context }), - // })], - [ - 0x8b, - createOp({ - name: 'INC', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new IntegerStackItem(args[0].asBigInteger(context.blockchain.currentBlockIndex).add(utils.ONE))], - }), - }), - ], - [ - 0x8c, - createOp({ - name: 'DEC', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new IntegerStackItem(args[0].asBigInteger(context.blockchain.currentBlockIndex).sub(utils.ONE))], - }), - }), - ], - [ - 0x8d, - createOp({ - name: 'SIGN', - in: 1, - out: 1, - invoke: ({ context, args }) => { - const value = args[0].asBigIntegerUnsafe(); - const mutableResults = []; - if (value.isZero()) { - mutableResults.push(new IntegerStackItem(utils.ZERO)); - } else if (value.isNeg()) { - mutableResults.push(new IntegerStackItem(utils.NEGATIVE_ONE)); - } else { - mutableResults.push(new IntegerStackItem(utils.ONE)); - } - - return { context, results: mutableResults }; - }, - }), - ], - [ - 0x8f, - createOp({ - name: 'NEGATE', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new IntegerStackItem(args[0].asBigIntegerUnsafe().neg())], - }), - }), - ], - [ - 0x90, - createOp({ - name: 'ABS', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new IntegerStackItem(args[0].asBigIntegerUnsafe().abs())], - }), - }), - ], - [ - 0x91, - createOp({ - name: 'NOT', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new BooleanStackItem(!args[0].asBoolean())], - }), - }), - ], - [ - 0x92, - createOp({ - name: 'NZ', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new BooleanStackItem(!args[0].asBigIntegerUnsafe().isZero())], - }), - }), - ], - [ - 0x93, - createOp({ - name: 'ADD', - in: 2, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [ - new IntegerStackItem( - args[1] - .asBigInteger(context.blockchain.currentBlockIndex) - .add(args[0].asBigInteger(context.blockchain.currentBlockIndex)), - ), - ], - }), - }), - ], - [ - 0x94, - createOp({ - name: 'SUB', - in: 2, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [ - new IntegerStackItem( - args[1] - .asBigInteger(context.blockchain.currentBlockIndex) - .sub(args[0].asBigInteger(context.blockchain.currentBlockIndex)), - ), - ], - }), - }), - ], - [ - 0x95, - createOp({ - name: 'MUL', - in: 2, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [ - new IntegerStackItem( - args[1] - .asBigInteger(context.blockchain.currentBlockIndex) - .mul(args[0].asBigInteger(context.blockchain.currentBlockIndex)), - ), - ], - }), - }), - ], - [ - 0x96, - createOp({ - name: 'DIV', - in: 2, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [ - new IntegerStackItem( - args[1] - .asBigInteger(context.blockchain.currentBlockIndex) - .div(args[0].asBigInteger(context.blockchain.currentBlockIndex)), - ), - ], - }), - }), - ], - [ - 0x97, - createOp({ - name: 'MOD', - in: 2, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [ - new IntegerStackItem( - args[1] - .asBigInteger(context.blockchain.currentBlockIndex) - .mod(args[0].asBigInteger(context.blockchain.currentBlockIndex)), - ), - ], - }), - }), - ], - [ - 0x98, - createOp({ - name: 'SHL', - in: 2, - out: 1, - invoke: ({ context, args }) => { - const shift = args[0].asBigIntegerUnsafe(); - if (shift.toNumber() > MAX_SHL_SHR || shift.toNumber() < MIN_SHL_SHR) { - throw new ShiftTooLargeError(context); - } - - const value = args[1].asBigIntegerUnsafe(); - const result = new IntegerStackItem(vmUtils.shiftLeft(value, shift)); - - return { - context, - results: [result], - }; - }, - }), - ], - [ - 0x99, - createOp({ - name: 'SHR', - in: 2, - out: 1, - invoke: ({ context, args }) => { - const shift = args[0].asBigIntegerUnsafe(); - if (shift.toNumber() > MAX_SHL_SHR || shift.toNumber() < MIN_SHL_SHR) { - throw new ShiftTooLargeError(context); - } - - const value = args[1].asBigIntegerUnsafe(); - const result = new IntegerStackItem(vmUtils.shiftRight(value, shift)); - - return { - context, - results: [result], - }; - }, - }), - ], - [ - 0x9a, - createOp({ - name: 'BOOLAND', - in: 2, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new BooleanStackItem(args[0].asBoolean() && args[1].asBoolean())], - }), - }), - ], - [ - 0x9b, - createOp({ - name: 'BOOLOR', - in: 2, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new BooleanStackItem(args[0].asBoolean() || args[1].asBoolean())], - }), - }), - ], - [ - 0x9c, - createOp({ - name: 'NUMEQUAL', - in: 2, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new BooleanStackItem(args[0].asBigIntegerUnsafe().eq(args[1].asBigIntegerUnsafe()))], - }), - }), - ], - [ - 0x9e, - createOp({ - name: 'NUMNOTEQUAL', - in: 2, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new BooleanStackItem(!args[0].asBigIntegerUnsafe().eq(args[1].asBigIntegerUnsafe()))], - }), - }), - ], - [ - 0x9f, - createOp({ - name: 'LT', - in: 2, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new BooleanStackItem(args[1].asBigIntegerUnsafe().lt(args[0].asBigIntegerUnsafe()))], - }), - }), - ], - [ - 0xa0, - createOp({ - name: 'GT', - in: 2, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new BooleanStackItem(args[1].asBigIntegerUnsafe().gt(args[0].asBigIntegerUnsafe()))], - }), - }), - ], - [ - 0xa1, - createOp({ - name: 'LTE', - in: 2, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new BooleanStackItem(args[1].asBigIntegerUnsafe().lte(args[0].asBigIntegerUnsafe()))], - }), - }), - ], - [ - 0xa2, - createOp({ - name: 'GTE', - in: 2, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new BooleanStackItem(args[1].asBigIntegerUnsafe().gte(args[0].asBigIntegerUnsafe()))], - }), - }), - ], - [ - 0xa3, - createOp({ - name: 'MIN', - in: 2, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new IntegerStackItem(BN.min(args[1].asBigIntegerUnsafe(), args[0].asBigIntegerUnsafe()))], - }), - }), - ], - [ - 0xa4, - createOp({ - name: 'MAX', - in: 2, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new IntegerStackItem(BN.max(args[1].asBigIntegerUnsafe(), args[0].asBigIntegerUnsafe()))], - }), - }), - ], - [ - 0xa5, - createOp({ - name: 'WITHIN', - in: 3, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [ - new BooleanStackItem( - args[1].asBigIntegerUnsafe().lte(args[2].asBigIntegerUnsafe()) && - args[2].asBigIntegerUnsafe().lt(args[0].asBigIntegerUnsafe()), - ), - ], - }), - }), - ], - [ - 0xa7, - createOp({ - name: 'SHA1', - in: 1, - out: 1, - fee: FEES.TEN, - invoke: ({ context, args }) => ({ - context, - results: [new BufferStackItem(crypto.sha1(args[0].asBuffer()))], - }), - }), - ], - [ - 0xa8, - createOp({ - name: 'SHA256', - in: 1, - out: 1, - fee: FEES.TEN, - invoke: ({ context, args }) => ({ - context, - results: [new BufferStackItem(crypto.sha256(args[0].asBuffer()))], - }), - }), - ], - [ - 0xa9, - createOp({ - name: 'HASH160', - in: 1, - out: 1, - fee: FEES.TWENTY, - invoke: ({ context, args }) => ({ - context, - results: [new UInt160StackItem(crypto.hash160(args[0].asBuffer()))], - }), - }), - ], - [ - 0xaa, - createOp({ - name: 'HASH256', - in: 1, - out: 1, - fee: FEES.TWENTY, - invoke: ({ context, args }) => ({ - context, - results: [new UInt256StackItem(crypto.hash256(args[0].asBuffer()))], - }), - }), - ], - [ - 0xac, - createOp({ - name: 'CHECKSIG', - in: 2, - out: 1, - fee: FEES.ONE_HUNDRED, - invoke: async ({ context, args }) => { - const publicKey = args[0].asECPoint(); - const signature = args[1].asBuffer(); - let result; - try { - result = await crypto.verify({ - message: context.init.scriptContainer.value.message, - signature, - publicKey, - }); - } catch { - result = false; - } - - return { - context, - results: [new BooleanStackItem(result)], - }; - }, - }), - ], - [ - 0xad, - createOp({ - name: 'VERIFY', - in: 3, - out: 1, - fee: FEES.ONE_HUNDRED, - invoke: async ({ context, args }) => { - const publicKey = args[0].asECPoint(); - const signature = args[1].asBuffer(); - const message = args[2].asBuffer(); - let result; - try { - result = await crypto.verify({ - message, - signature, - publicKey, - }); - } catch { - result = false; - } - - return { - context, - results: [new BooleanStackItem(result)], - }; - }, - }), - ], - [ - 0xae, - { - type: 'create', - create: ({ context: contextIn }) => { - const { stack } = contextIn; - const top = stack[0] as StackItem | undefined; - let pubKeyCount = 0; - let _in; - if (top === undefined || top.isArray()) { - if (top !== undefined) { - pubKeyCount = top.asArray().length; - } - _in = 1; - } else { - pubKeyCount = vmUtils.toNumber(contextIn, top.asBigIntegerUnsafe()); - if (pubKeyCount <= 0) { - throw new InvalidCheckMultisigArgumentsError(contextIn); - } - _in = pubKeyCount + 1; - } - - const next = stack[_in] as StackItem | undefined; - if (next === undefined || next.isArray()) { - _in += 1; - } else { - const sigCount = vmUtils.toNumber(contextIn, next.asBigIntegerUnsafe()); - if (sigCount < 0) { - throw new InvalidCheckMultisigArgumentsError(contextIn); - } - _in += sigCount + 1; - } - - const { op } = createOp({ - name: 'CHECKMULTISIG', - in: _in, - out: 1, - fee: pubKeyCount === 0 ? FEES.ONE : FEES.ONE_HUNDRED.mul(new BN(pubKeyCount)), - invoke: ({ context, args }) => { - let index; - let publicKeys; - if (args[0].isArray()) { - index = 1; - publicKeys = args[0].asArray().map((value) => value.asECPoint()); - } else { - const count = vmUtils.toNumber(context, args[0].asBigIntegerUnsafe()); - index = count + 1; - publicKeys = args.slice(1, index).map((value) => value.asECPoint()); - } - - const signatures = args[index].isArray() - ? args[index].asArray().map((value) => value.asBuffer()) - : args.slice(index + 1).map((value) => value.asBuffer()); - - if (publicKeys.length === 0 || signatures.length === 0 || signatures.length > publicKeys.length) { - throw new InvalidCheckMultisigArgumentsError(context); - } - - let result = true; - const n = publicKeys.length; - const m = signatures.length; - try { - // tslint:disable-next-line no-loop-statement - for (let i = 0, j = 0; result && i < m && j < n; ) { - const currentResult = crypto.verify({ - message: context.init.scriptContainer.value.message, - signature: signatures[i], - publicKey: publicKeys[j], - }); - - if (currentResult) { - i += 1; - } - j += 1; - if (m - i > n - j) { - result = false; - } - } - } catch { - result = false; - } - - return { - context, - results: [new BooleanStackItem(result)], - }; - }, - }); - - return { op, context: contextIn }; - }, - }, - ], - [ - 0xc0, - createOp({ - name: 'ARRAYSIZE', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new IntegerStackItem(new BN(args[0].size))], - }), - }), - ], - [ - 0xc1, - { - type: 'create', - create: ({ context: contextIn }) => { - const { stack } = contextIn; - const top = stack[0] as StackItem | undefined; - let _in; - if (top === undefined) { - // This will cause the op to throw once it's executed. - _in = 1; - } else { - _in = vmUtils.toNumber(contextIn, top.asBigIntegerUnsafe()) + 1; - - if (_in < 0) { - throw new InvalidPackCountError(contextIn); - } - - if (_in > MAX_ARRAY_SIZE) { - throw new ContainerTooLargeError(contextIn); - } - } - - const { op } = createOp({ - name: 'PACK', - in: _in, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new ArrayStackItem(args.slice(1))], - }), - }); - - return { op, context: contextIn }; - }, - }, - ], - [ - 0xc2, - { - type: 'create', - create: ({ context: contextIn }) => { - const { stack } = contextIn; - const top = stack[0] as StackItem | undefined; - const out = top === undefined ? 1 : top.asArray().length + 1; - const { op } = createOp({ - name: 'UNPACK', - in: 1, - out, - invoke: ({ context, args }) => { - const arr = args[0].asArray(); - const mutableResults = []; - // tslint:disable-next-line no-loop-statement - for (let i = arr.length - 1; i >= 0; i -= 1) { - mutableResults.push(arr[i]); - } - mutableResults.push(new IntegerStackItem(new BN(arr.length))); - - return { context, results: mutableResults }; - }, - }); - - return { op, context: contextIn }; - }, - }, - ], - [ - 0xc3, - createOp({ - name: 'PICKITEM', - in: 2, - out: 1, - invoke: ({ context, args }) => { - if (args[1].isArray()) { - const index = vmUtils.toNumber(context, args[0].asBigIntegerUnsafe()); - const val = args[1].asArray(); - if (index < 0 || index >= val.length) { - throw new InvalidPickItemKeyError(context, `${index}`, JSON.stringify(args[1].convertJSON())); - } - - const arrayValue = val[index]; - - return { - context, - results: [arrayValue], - }; - } - - const key = args[0]; - const value = args[1].asMapStackItem(); - if (!value.has(key)) { - throw new InvalidPickItemKeyError(context, key.toStructuralKey(), JSON.stringify(args[1].convertJSON())); - } - - const mapValue = value.get(key); - - return { - context, - results: [mapValue], - }; - }, - }), - ], - [ - 0xc4, - createOp({ - name: 'SETITEM', - in: 3, - invoke: ({ context, args }) => { - let newItem = args[0]; - if (newItem instanceof StructStackItem) { - newItem = newItem.clone(); - } - if (args[2].isArray()) { - const index = vmUtils.toNumber(context, args[1].asBigIntegerUnsafe()); - const mutableValue = args[2].asArray(); - if (index < 0 || index >= mutableValue.length) { - throw new InvalidSetItemIndexError(context); - } - - const existing = mutableValue[index]; - mutableValue[index] = newItem; - const innerSeen = new Set([args[2]]); - - return { - context: { - ...context, - stackCount: - context.stackCount + - (args[2].referenceCount > 0 ? existing.decrement(innerSeen) + newItem.increment(innerSeen) : 0), - }, - }; - } - - const key = args[1]; - const value = args[2].asMapStackItem(); - const existingValue = value.has(key) ? value.get(key) : undefined; - value.set(key, newItem); - - if (value.size > MAX_ARRAY_SIZE) { - throw new ContainerTooLargeError(context); - } - const seen = new Set([args[2]]); - - return { - context: { - ...context, - stackCount: - context.stackCount + - (args[2].referenceCount > 0 - ? (existingValue === undefined ? key.increment(seen) : existingValue.decrement()) + - newItem.increment(seen) - : 0), - }, - }; - }, - }), - ], - [0xc5, newArrayOrStruct({ name: 'NEWARRAY' })], - [0xc6, newArrayOrStruct({ name: 'NEWSTRUCT' })], - [ - 0xc7, - createOp({ - name: 'NEWMAP', - out: 1, - invoke: ({ context }) => ({ - context, - results: [new MapStackItem()], - }), - }), - ], - [ - 0xc8, - createOp({ - name: 'APPEND', - in: 2, - invoke: ({ context, args }) => { - let newItem = args[0]; - if (newItem instanceof StructStackItem) { - newItem = newItem.clone(); - } - const mutableValue = args[1].asArray(); - mutableValue.push(newItem); - - if (mutableValue.length > MAX_ARRAY_SIZE) { - throw new ContainerTooLargeError(context); - } - - return { - context: { - ...context, - stackCount: context.stackCount + (args[1].referenceCount > 0 ? newItem.increment(new Set([args[1]])) : 0), - }, - }; - }, - }), - ], - [ - 0xc9, - createOp({ - name: 'REVERSE', - in: 1, - invoke: ({ context, args }) => { - const mutableValue = args[0].asArray(); - mutableValue.reverse(); - - return { context }; - }, - }), - ], - [ - 0xca, - createOp({ - name: 'REMOVE', - in: 2, - invoke: ({ context, args }) => { - if (args[1].isArray()) { - const index = vmUtils.toNumber(context, args[0].asBigIntegerUnsafe()); - const mutableValue = args[1].asArray(); - if (index < 0 || index >= mutableValue.length) { - throw new InvalidRemoveIndexError(context, index); - } - const existing = mutableValue[index]; - mutableValue.splice(index, 1); - - return { - context: { - ...context, - stackCount: - context.stackCount + (existing.referenceCount > 0 ? existing.decrement(new Set([args[1]])) : 0), - }, - }; - } - - const key = args[0]; - const value = args[1].asMapStackItem(); - if (value.has(key)) { - const val = value.get(key); - value.delete(key); - - const seen = new Set([args[1]]); - - return { - context: { - ...context, - stackCount: - context.stackCount + - (key.referenceCount > 0 ? key.decrement(seen) : 0) + - (val.referenceCount > 0 ? val.decrement(seen) : 0), - }, - }; - } - - return { context }; - }, - }), - ], - [ - 0xcb, - createOp({ - name: 'HASKEY', - in: 2, - out: 1, - invoke: ({ context, args }) => { - if (args[1].isArray()) { - const index = vmUtils.toNumber(context, args[0].asBigIntegerUnsafe()); - const val = args[1].asArray(); - if (index < 0) { - throw new InvalidHasKeyIndexError(context); - } - - return { - context, - results: [new BooleanStackItem(index < val.length)], - }; - } - - const key = args[0]; - const value = args[1].asMapStackItem(); - - return { - context, - results: [new BooleanStackItem(value.has(key))], - }; - }, - }), - ], - [ - 0xcc, - createOp({ - name: 'KEYS', - in: 1, - out: 1, - invoke: ({ context, args }) => { - const value = args[0].asMapStackItem(); - - return { context, results: [value.keys()] }; - }, - }), - ], - [ - 0xcd, - createOp({ - name: 'VALUES', - in: 1, - out: 1, - invoke: ({ context, args }) => { - const values = args[0].isArray() ? args[0].asArray() : args[0].asMapStackItem().valuesArray(); - - const newValues = values.map((value) => (value instanceof StructStackItem ? value.clone() : value)); - - return { context, results: [new ArrayStackItem(newValues)] }; - }, - }), - ], - [0xe0, functionCallIsolated({ name: 'CALL_I' })], - [0xe1, callIsolated({ name: 'CALL_E' })], - [0xe2, callIsolated({ name: 'CALL_ED', dynamicCall: true })], - [0xe3, callIsolated({ name: 'CALL_ET', tailCall: true })], - [0xe4, callIsolated({ name: 'CALL_EDT', tailCall: true, dynamicCall: true })], - [ - 0xf0, - createOp({ - name: 'THROW', - invoke: ({ context }) => { - throw new ThrowError(context); - }, - }), - ], - [ - 0xf1, - createOp({ - name: 'THROWIFNOT', - in: 1, - invoke: ({ context, args }) => { - if (!args[0].asBoolean()) { - throw new ThrowError(context); - } - - return { context }; - }, - }), - ], - ]); - -export const OPCODES = _.fromPairs(OPCODE_PAIRS) as { readonly [Byte in number]?: OpObject }; -// tslint:disable-next-line: readonly-array -const STATIC_OPCODES = _.fromPairs(OPCODE_PAIRS.filter((value): value is [number, OpStatic] => value[1].type === 'op')); -const CREATE_OPCODES = _.fromPairs( - // tslint:disable-next-line: readonly-array - OPCODE_PAIRS.filter((value): value is [number, OpCreate] => value[1].type === 'create'), -); - -export const lookupOp = ({ context }: { readonly context: ExecutionContext }) => { - const opCode = context.code[context.pc]; - const op = STATIC_OPCODES[opCode] as OpStatic | undefined; - const newContext = { - ...context, - pc: context.pc + 1, - }; - if (op !== undefined) { - return { op: op.op, context: newContext }; - } - - const create = CREATE_OPCODES[opCode] as OpCreate | undefined; - if (create === undefined) { - throw new UnknownOpError(context, `${opCode}`); - } - - return create.create({ context: newContext }); -}; diff --git a/packages/neo-one-node-vm/src/stackItem/AccountStackItem.ts b/packages/neo-one-node-vm/src/stackItem/AccountStackItem.ts deleted file mode 100644 index 1ff8704452..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/AccountStackItem.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Account } from '@neo-one/node-core'; -import { EquatableKeyStackItem } from './EquatableKeyStackItem'; - -export class AccountStackItem extends EquatableKeyStackItem { - public asAccount(): Account { - return this.value; - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/ArrayLikeStackItem.ts b/packages/neo-one-node-vm/src/stackItem/ArrayLikeStackItem.ts deleted file mode 100644 index ccd9f1d351..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/ArrayLikeStackItem.ts +++ /dev/null @@ -1,71 +0,0 @@ -// tslint:disable readonly-array -import { BinaryWriter } from '@neo-one/client-common'; -import { ArrayContractParameter, ContractParameter } from '@neo-one/node-core'; -import { CircularReferenceError, InvalidValueBufferError } from './errors'; -import { StackItem } from './StackItem'; -import { StackItemBase } from './StackItemBase'; -import { StackItemType } from './StackItemType'; - -export class ArrayLikeStackItem extends StackItemBase { - public static readonly type: StackItemType; - public readonly value: StackItem[]; - - public constructor(value: StackItem[]) { - super(); - this.value = value; - } - - public isArray(): boolean { - return true; - } - - public asArray(): StackItem[] { - return this.value; - } - - public asBoolean(): boolean { - return true; - } - - public asBuffer(): Buffer { - throw new InvalidValueBufferError(); - } - - public toContractParameter(seen: Set = new Set()): ContractParameter { - if (seen.has(this)) { - throw new CircularReferenceError(); - } - const newSeen = new Set([...seen]); - newSeen.add(this); - - return new ArrayContractParameter(this.value.map((val) => val.toContractParameter(newSeen))); - } - - public get size(): number { - return this.value.length; - } - - protected incrementInternal(seen: Set): number { - return this.incrementInternalArray(this.value, seen); - } - - protected decrementInternal(seen: Set): number { - return this.decrementInternalArray(this.value, seen); - } - - // tslint:disable-next-line no-any - protected convertJSONInternal(seen: Set): any { - return this.value.map((val) => val.convertJSON(seen)); - } - - protected serializeInternal(seen: Set): Buffer { - const writer = new BinaryWriter(); - writer.writeUInt8((this.constructor as typeof ArrayLikeStackItem).type); - writer.writeVarUIntLE(this.value.length); - this.value.forEach((item) => { - writer.writeBytes(item.serialize(seen)); - }); - - return writer.toBuffer(); - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/ArrayStackItem.ts b/packages/neo-one-node-vm/src/stackItem/ArrayStackItem.ts deleted file mode 100644 index 3c3bebcc6f..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/ArrayStackItem.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ArrayLikeStackItem } from './ArrayLikeStackItem'; -import { getNextID } from './referenceCounter'; -import { StackItemType } from './StackItemType'; - -export class ArrayStackItem extends ArrayLikeStackItem { - public static readonly type = StackItemType.Array; - private readonly referenceID = getNextID(); - - public toStructuralKey(): string { - return `${this.referenceID}`; - } - // tslint:disable-next-line no-any - public equals(other: any): boolean { - return this === other; - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/AssetStackItem.ts b/packages/neo-one-node-vm/src/stackItem/AssetStackItem.ts deleted file mode 100644 index 93af34ce8b..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/AssetStackItem.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Asset } from '@neo-one/node-core'; -import { EquatableKeyStackItem } from './EquatableKeyStackItem'; - -export class AssetStackItem extends EquatableKeyStackItem { - public asAsset(): Asset { - return this.value; - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/AttributeStackItem.ts b/packages/neo-one-node-vm/src/stackItem/AttributeStackItem.ts deleted file mode 100644 index 7bb0898863..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/AttributeStackItem.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { ECPoint, UInt160, UInt256 } from '@neo-one/client-common'; -import { Attribute, ContractParameter, ECPointAttribute, UInt160Attribute, UInt256Attribute } from '@neo-one/node-core'; -import { BufferStackItem } from './BufferStackItem'; -import { ECPointStackItem } from './ECPointStackItem'; -import { EquatableKeyStackItem } from './EquatableKeyStackItem'; -import { StackItem } from './StackItem'; -import { StackItemBase } from './StackItemBase'; -import { UInt160StackItem } from './UInt160StackItem'; -import { UInt256StackItem } from './UInt256StackItem'; - -export class AttributeStackItem extends EquatableKeyStackItem { - public asAttribute(): Attribute { - return this.value; - } - - public asUInt160(): UInt160 { - return this.toValueStackItem().asUInt160(); - } - - public asUInt256(): UInt256 { - return this.toValueStackItem().asUInt256(); - } - - public asECPoint(): ECPoint { - return this.toValueStackItem().asECPoint(); - } - - public asBuffer(): Buffer { - return this.toValueStackItem().asBuffer(); - } - - public toValueStackItem(): StackItem { - const { value } = this; - if (value instanceof ECPointAttribute) { - return new ECPointStackItem(value.value); - } - - if (value instanceof UInt160Attribute) { - return new UInt160StackItem(value.value); - } - - if (value instanceof UInt256Attribute) { - return new UInt256StackItem(value.value); - } - - return new BufferStackItem(value.value); - } - - public toContractParameter(_seen: Set = new Set()): ContractParameter { - return this.toValueStackItem().toContractParameter(); - } - - public asAttributeStackItem(): AttributeStackItem { - return this; - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/BlockStackItem.ts b/packages/neo-one-node-vm/src/stackItem/BlockStackItem.ts deleted file mode 100644 index 561242e98f..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/BlockStackItem.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Block, BlockBase, Header } from '@neo-one/node-core'; -import { EquatableKeyStackItem } from './EquatableKeyStackItem'; - -export class BlockStackItem extends EquatableKeyStackItem { - public asBlock(): Block { - return this.value; - } - - public asHeader(): Header { - return this.value.header; - } - - public asBlockBase(): BlockBase { - return this.value; - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/BooleanStackItem.ts b/packages/neo-one-node-vm/src/stackItem/BooleanStackItem.ts deleted file mode 100644 index 9ba556665d..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/BooleanStackItem.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { BinaryWriter, utils } from '@neo-one/client-common'; -import { BooleanContractParameter, ContractParameter } from '@neo-one/node-core'; -import { BN } from 'bn.js'; -import { StackItemBase } from './StackItemBase'; -import { StackItemType } from './StackItemType'; - -export class BooleanStackItem extends StackItemBase { - public static readonly TRUE = Buffer.from([1]); - public static readonly FALSE = Buffer.from([]); - public readonly value: boolean; - - public constructor(value: boolean) { - super(); - this.value = value; - } - - public asBigInteger(): BN { - return this.value ? utils.ONE : utils.ZERO; - } - - public asBoolean(): boolean { - return this.value; - } - - public asBuffer(): Buffer { - return this.value ? BooleanStackItem.TRUE : BooleanStackItem.FALSE; - } - - public toContractParameter(_seen: Set = new Set()): ContractParameter { - return new BooleanContractParameter(this.value); - } - - protected serializeInternal(): Buffer { - const writer = new BinaryWriter(); - writer.writeUInt8(StackItemType.Boolean); - writer.writeBoolean(this.value); - - return writer.toBuffer(); - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/BufferStackItem.ts b/packages/neo-one-node-vm/src/stackItem/BufferStackItem.ts deleted file mode 100644 index 73efc68ec0..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/BufferStackItem.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { ByteArrayContractParameter, ContractParameter } from '@neo-one/node-core'; -import { StackItemBase } from './StackItemBase'; - -export class BufferStackItem extends StackItemBase { - public readonly value: Buffer; - - public constructor(value: Buffer) { - super(); - this.value = value; - } - - public asBuffer(): Buffer { - return this.value; - } - - public toContractParameter(_seen: Set = new Set()): ContractParameter { - return new ByteArrayContractParameter(this.value); - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/ConsensusPayloadStackItem.ts b/packages/neo-one-node-vm/src/stackItem/ConsensusPayloadStackItem.ts deleted file mode 100644 index 5e4ea8bbe8..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/ConsensusPayloadStackItem.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { ConsensusPayload } from '@neo-one/node-core'; -import { EquatableKeyStackItem } from './EquatableKeyStackItem'; - -export class ConsensusPayloadStackItem extends EquatableKeyStackItem { - public asConsensusPayload(): ConsensusPayload { - return this.value; - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/ContractStackItem.ts b/packages/neo-one-node-vm/src/stackItem/ContractStackItem.ts deleted file mode 100644 index 22c78ac655..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/ContractStackItem.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Contract } from '@neo-one/node-core'; -import { EquatableKeyStackItem } from './EquatableKeyStackItem'; - -export class ContractStackItem extends EquatableKeyStackItem { - public asContract(): Contract { - return this.value; - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/ECPointStackItem.ts b/packages/neo-one-node-vm/src/stackItem/ECPointStackItem.ts deleted file mode 100644 index 86a6f0b496..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/ECPointStackItem.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { common, ECPoint } from '@neo-one/client-common'; -import { ContractParameter, PublicKeyContractParameter } from '@neo-one/node-core'; -import { StackItemBase } from './StackItemBase'; - -export class ECPointStackItem extends StackItemBase { - public readonly value: ECPoint; - - public constructor(value: ECPoint) { - super(); - this.value = value; - } - - public asECPoint(): ECPoint { - return this.value; - } - - public asBuffer(): Buffer { - return common.ecPointToBuffer(this.value); - } - - public toContractParameter(_seen: Set = new Set()): ContractParameter { - return new PublicKeyContractParameter(this.value); - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/EnumeratorStackItem.ts b/packages/neo-one-node-vm/src/stackItem/EnumeratorStackItem.ts deleted file mode 100644 index 0500c66ca7..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/EnumeratorStackItem.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ObjectStackItem } from './ObjectStackItem'; -import { getNextID } from './referenceCounter'; -import { StackItemBase } from './StackItemBase'; -import { StackItemEnumerator } from './StackItemEnumerator'; - -export class EnumeratorStackItem< - T extends { readonly value: StackItemBase } = { readonly value: StackItemBase }, - TEnumerator extends StackItemEnumerator = StackItemEnumerator -> extends ObjectStackItem { - private readonly referenceID = getNextID(); - - public toStructuralKey(): string { - return `${this.referenceID}`; - } - // tslint:disable-next-line no-any - public equals(other: any): boolean { - return this === other; - } - - public asEnumerator(): StackItemEnumerator { - return this.value; - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/EquatableKeyStackItem.ts b/packages/neo-one-node-vm/src/stackItem/EquatableKeyStackItem.ts deleted file mode 100644 index 35b5b05851..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/EquatableKeyStackItem.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { EquatableKey } from '@neo-one/node-core'; -import { ObjectStackItem } from './ObjectStackItem'; - -export class EquatableKeyStackItem extends ObjectStackItem { - public toStructuralKey(): string { - return this.value.toKeyString(); - } - // tslint:disable-next-line no-any - public equals(other: any): boolean { - if (other === undefined) { - return false; - } - - if (this === other) { - return true; - } - - return other instanceof EquatableKeyStackItem && this.value.equals(other.value); - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/HeaderStackItem.ts b/packages/neo-one-node-vm/src/stackItem/HeaderStackItem.ts deleted file mode 100644 index 1344c97819..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/HeaderStackItem.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { BlockBase, Header } from '@neo-one/node-core'; -import { EquatableKeyStackItem } from './EquatableKeyStackItem'; - -export class HeaderStackItem extends EquatableKeyStackItem
{ - public asHeader(): Header { - return this.value; - } - - public asBlockBase(): BlockBase { - return this.value; - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/InputStackItem.ts b/packages/neo-one-node-vm/src/stackItem/InputStackItem.ts deleted file mode 100644 index 73eeb024df..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/InputStackItem.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Input } from '@neo-one/node-core'; -import { EquatableKeyStackItem } from './EquatableKeyStackItem'; - -export class InputStackItem extends EquatableKeyStackItem { - public asInput(): Input { - return this.value; - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/IntegerStackItem.ts b/packages/neo-one-node-vm/src/stackItem/IntegerStackItem.ts deleted file mode 100644 index d4ca54d777..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/IntegerStackItem.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { BinaryWriter, utils } from '@neo-one/client-common'; -import { ContractParameter, IntegerContractParameter } from '@neo-one/node-core'; -import { BN } from 'bn.js'; -import { MAX_SIZE_BIG_INTEGER } from '../constants'; -import { IntegerTooLargeError, InvalidValueStorageContextStackItemError } from './errors'; -import { AsStorageContextStackItemOptions, StackItemBase } from './StackItemBase'; -import { StackItemType } from './StackItemType'; -import { StorageContextStackItem } from './StorageContextStackItem'; - -export class IntegerStackItem extends StackItemBase { - public readonly value: BN; - - public constructor(value: BN, safe = true) { - super(); - this.value = value; - - if (safe && this.asBuffer().length > MAX_SIZE_BIG_INTEGER) { - throw new IntegerTooLargeError(); - } - } - - public asBigInteger(): BN { - return this.value; - } - - public asBoolean(): boolean { - return !this.value.isZero(); - } - - public asBuffer(): Buffer { - return utils.toSignedBuffer(this.value); - } - - // https://github.com/lllwvlvwlll/MegaCity.AntShares/tree/master/src/AntShares - /* istanbul ignore next */ - public asStorageContextStackItem({ - currentBlockIndex, - vm, - scriptHash, - callingScriptHash, - entryScriptHash, - }: AsStorageContextStackItemOptions): StorageContextStackItem { - if (currentBlockIndex <= vm.storageContext.v0.index) { - const storageContext = this.asBigInteger().toNumber(); - let hash; - switch (storageContext) { - case 1: - hash = scriptHash; - break; - case 2: - hash = callingScriptHash; - break; - case 4: - hash = entryScriptHash; - break; - default: - } - - if (hash !== undefined) { - return new StorageContextStackItem(hash); - } - } - throw new InvalidValueStorageContextStackItemError(); - } - - public toContractParameter(_seen: Set = new Set()): ContractParameter { - return new IntegerContractParameter(this.value); - } - - protected serializeInternal(): Buffer { - const writer = new BinaryWriter(); - writer.writeUInt8(StackItemType.Integer); - writer.writeVarBytesLE(utils.toSignedBuffer(this.value)); - - return writer.toBuffer(); - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/IteratorStackItem.ts b/packages/neo-one-node-vm/src/stackItem/IteratorStackItem.ts deleted file mode 100644 index 08b1c76e58..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/IteratorStackItem.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { EnumeratorStackItem } from './EnumeratorStackItem'; -import { StackItemBase } from './StackItemBase'; -import { StackItemIterator } from './StackItemIterator'; - -export class IteratorStackItem extends EnumeratorStackItem< - { readonly key: StackItemBase; readonly value: StackItemBase }, - StackItemIterator -> { - public asIterator(): StackItemIterator { - return this.value; - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/MapStackItem.ts b/packages/neo-one-node-vm/src/stackItem/MapStackItem.ts deleted file mode 100644 index f5c9a5403f..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/MapStackItem.ts +++ /dev/null @@ -1,147 +0,0 @@ -// tslint:disable readonly-array -import { BinaryWriter } from '@neo-one/client-common'; -import { ContractParameter, MapContractParameter } from '@neo-one/node-core'; -import { utils } from '@neo-one/utils'; -import _ from 'lodash'; -import { ArrayStackItem } from './ArrayStackItem'; -import { CircularReferenceError, InvalidValueBufferError, MissingStackItemKeyError } from './errors'; -import { getNextID } from './referenceCounter'; -import { StackItem } from './StackItem'; -import { StackItemBase } from './StackItemBase'; -import { StackItemType } from './StackItemType'; - -export class MapStackItem extends StackItemBase { - private readonly referenceKeys: Map; - private readonly referenceValues: Map; - private readonly referenceID = getNextID(); - - public constructor({ - referenceKeys = new Map(), - referenceValues = new Map(), - }: { - readonly referenceKeys?: Map; - readonly referenceValues?: Map; - } = {}) { - super(); - this.referenceKeys = referenceKeys; - this.referenceValues = referenceValues; - } - - public toStructuralKey(): string { - return `${this.referenceID}`; - } - - // tslint:disable-next-line no-any - public equals(other: any): boolean { - return this === other; - } - - public isMap(): boolean { - return false; - } - - public asBoolean(): boolean { - return true; - } - - public asBuffer(): Buffer { - throw new InvalidValueBufferError(); - } - - public toContractParameter(seen: Set = new Set()): ContractParameter { - if (seen.has(this)) { - throw new CircularReferenceError(); - } - const newSeen = new Set([...seen]); - newSeen.add(this); - - return new MapContractParameter( - this.keysArray().map( - (key) => [key.toContractParameter(newSeen), this.get(key).toContractParameter(newSeen)] as const, - ), - ); - } - - public get size(): number { - return this.referenceKeys.size; - } - - public has(item: StackItem): boolean { - const referenceKey = item.toStructuralKey(); - - return this.referenceKeys.get(referenceKey) !== undefined; - } - - public get(item: StackItem): StackItem { - const referenceKey = item.toStructuralKey(); - const value = this.referenceValues.get(referenceKey); - - if (value === undefined) { - throw new MissingStackItemKeyError(); - } - - return value; - } - - public set(key: StackItem, value: StackItem): this { - const referenceKey = key.toStructuralKey(); - this.referenceKeys.set(referenceKey, key); - this.referenceValues.set(referenceKey, value); - - return this; - } - - public delete(item: StackItem): this { - const referenceKey = item.toStructuralKey(); - this.referenceKeys.delete(referenceKey); - this.referenceValues.delete(referenceKey); - - return this; - } - - public keys(): ArrayStackItem { - return new ArrayStackItem(this.keysArray()); - } - - public keysArray(): StackItem[] { - return [...this.referenceKeys.values()]; - } - - public valuesArray(): StackItem[] { - return [...this.referenceValues.values()]; - } - - public asMapStackItem(): MapStackItem { - return this; - } - - protected incrementInternal(seen: Set): number { - return this.incrementInternalArray(this.keysArray(), seen) + this.incrementInternalArray(this.valuesArray(), seen); - } - - protected decrementInternal(seen: Set): number { - return this.decrementInternalArray(this.keysArray(), seen) + this.decrementInternalArray(this.valuesArray(), seen); - } - - // tslint:disable-next-line no-any - protected convertJSONInternal(seen: Set): any { - return _.fromPairs( - utils - .zip(this.keysArray(), this.valuesArray()) - .map(([key, value]) => [JSON.stringify(key.convertJSON(seen)), value.convertJSON(seen)]), - ); - } - - protected serializeInternal(seen: Set): Buffer { - const writer = new BinaryWriter(); - writer.writeUInt8(StackItemType.Map); - const keys = this.keysArray(); - writer.writeVarUIntLE(keys.length); - keys.forEach((key) => { - writer.writeBytes(key.serialize(seen)); - writer.writeBytes(this.get(key).serialize(seen)); - }); - - return writer.toBuffer(); - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/ObjectStackItem.ts b/packages/neo-one-node-vm/src/stackItem/ObjectStackItem.ts deleted file mode 100644 index 4a9a99c4c5..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/ObjectStackItem.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { ContractParameter, InteropInterfaceContractParameter } from '@neo-one/node-core'; -import { InvalidValueBufferError, UnsupportedStackItemSerdeError } from './errors'; -import { StackItemBase } from './StackItemBase'; - -export class ObjectStackItem extends StackItemBase { - public readonly value: Value; - - public constructor(value: Value) { - super(); - this.value = value; - } - - public asBoolean(): boolean { - return this.value !== undefined; - } - - public asBuffer(): Buffer { - throw new InvalidValueBufferError(); - } - - public toContractParameter(_seen: Set = new Set()): ContractParameter { - return new InteropInterfaceContractParameter(); - } - - // tslint:disable-next-line no-any - protected toJSONInternal(): any { - /* istanbul ignore next */ - return JSON.stringify(this.value); - } - - protected serializeInternal(): Buffer { - throw new UnsupportedStackItemSerdeError(); - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/OutputStackItem.ts b/packages/neo-one-node-vm/src/stackItem/OutputStackItem.ts deleted file mode 100644 index 7e702f3ff6..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/OutputStackItem.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Output } from '@neo-one/node-core'; -import { EquatableKeyStackItem } from './EquatableKeyStackItem'; - -export class OutputStackItem extends EquatableKeyStackItem { - public asOutput(): Output { - return this.value; - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/StackItem.ts b/packages/neo-one-node-vm/src/stackItem/StackItem.ts deleted file mode 100644 index 2c113a143e..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/StackItem.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { AccountStackItem } from './AccountStackItem'; -import { ArrayStackItem } from './ArrayStackItem'; -import { AssetStackItem } from './AssetStackItem'; -import { AttributeStackItem } from './AttributeStackItem'; -import { BlockStackItem } from './BlockStackItem'; -import { BooleanStackItem } from './BooleanStackItem'; -import { BufferStackItem } from './BufferStackItem'; -import { ConsensusPayloadStackItem } from './ConsensusPayloadStackItem'; -import { ContractStackItem } from './ContractStackItem'; -import { ECPointStackItem } from './ECPointStackItem'; -import { EnumeratorStackItem } from './EnumeratorStackItem'; -import { HeaderStackItem } from './HeaderStackItem'; -import { InputStackItem } from './InputStackItem'; -import { IntegerStackItem } from './IntegerStackItem'; -import { IteratorStackItem } from './IteratorStackItem'; -import { MapStackItem } from './MapStackItem'; -import { OutputStackItem } from './OutputStackItem'; -import { StorageContextStackItem } from './StorageContextStackItem'; -import { StructStackItem } from './StructStackItem'; -import { TransactionStackItem } from './TransactionStackItem'; -import { UInt160StackItem } from './UInt160StackItem'; -import { UInt256StackItem } from './UInt256StackItem'; -import { ValidatorStackItem } from './ValidatorStackItem'; -import { WitnessStackItem } from './WitnessStackItem'; - -export type StackItem = - | ArrayStackItem - | BooleanStackItem - | BufferStackItem - | ConsensusPayloadStackItem - | EnumeratorStackItem - | UInt160StackItem - | UInt256StackItem - | IntegerStackItem - | HeaderStackItem - | BlockStackItem - | ContractStackItem - | TransactionStackItem - | AccountStackItem - | AssetStackItem - | AttributeStackItem - | InputStackItem - | IteratorStackItem - | MapStackItem - | OutputStackItem - | ValidatorStackItem - | StorageContextStackItem - | ECPointStackItem - | StructStackItem - | WitnessStackItem; diff --git a/packages/neo-one-node-vm/src/stackItem/StackItemBase.ts b/packages/neo-one-node-vm/src/stackItem/StackItemBase.ts deleted file mode 100644 index 64fe2190c6..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/StackItemBase.ts +++ /dev/null @@ -1,341 +0,0 @@ -import { BinaryWriter, common, ECPoint, UInt160, UInt256 } from '@neo-one/client-common'; -import { - Account, - Asset, - Attribute, - Block, - BlockBase, - Contract, - ContractParameter, - Equatable, - Input, - Output, - Transaction, - utils, - Validator, - VMSettings, - Witness, -} from '@neo-one/node-core'; -import { BN } from 'bn.js'; -import { BLOCK_HEIGHT_MAX_SIZE_CHECKS, MAX_SIZE_BIG_INTEGER } from '../constants'; -import { AttributeStackItem } from './AttributeStackItem'; -import { - IntegerTooLargeError, - InvalidRecursiveSerializeError, - InvalidValueAccountError, - InvalidValueArrayError, - InvalidValueAssetError, - InvalidValueAttributeError, - InvalidValueAttributeStackItemError, - InvalidValueBlockBaseError, - InvalidValueBlockError, - InvalidValueContractError, - InvalidValueEnumeratorError, - InvalidValueHeaderError, - InvalidValueInputError, - InvalidValueIteratorError, - InvalidValueMapStackItemError, - InvalidValueOutputError, - InvalidValueStorageContextStackItemError, - InvalidValueTransactionError, - InvalidValueValidatorError, - InvalidValueWitnessError, -} from './errors'; -import { MapStackItem } from './MapStackItem'; -import { StackItem } from './StackItem'; -import { StackItemEnumerator } from './StackItemEnumerator'; -import { StackItemIterator } from './StackItemIterator'; -import { StackItemType } from './StackItemType'; -import { StorageContextStackItem } from './StorageContextStackItem'; - -export interface AsStorageContextStackItemOptions { - readonly currentBlockIndex: number; - readonly vm: VMSettings; - readonly scriptHash: UInt160; - readonly callingScriptHash: UInt160 | undefined; - readonly entryScriptHash: UInt160; -} - -export class StackItemBase implements Equatable { - private mutableCount = 0; - - public get referenceCount(): number { - return this.mutableCount; - } - - public increment(seen = new Set()): number { - if (seen.has(this)) { - return 1; - } - seen.add(this); - this.mutableCount += 1; - - if (this.mutableCount > 1) { - return 1; - } - - return this.incrementInternal(seen) + 1; - } - - public decrement(seen = new Set()): number { - if (seen.has(this)) { - return -1; - } - seen.add(this); - this.mutableCount -= 1; - - if (this.mutableCount >= 1) { - return -1; - } - - return this.decrementInternal(seen) - 1; - } - - public toStructuralKey(): string { - return this.asBuffer().toString('hex'); - } - - // tslint:disable-next-line no-any - public equals(other: any): boolean { - if (other === undefined) { - return false; - } - - if (this === other) { - return true; - } - - if (other instanceof StackItemBase) { - // Note that we don't use serialize here because - const thisValue = this.asBufferMaybe(); - const otherValue = other.asBufferMaybe(); - - return thisValue !== undefined && otherValue !== undefined && thisValue.equals(otherValue); - } - - return false; - } - - public serialize(seen = new Set()): Buffer { - if (seen.has(this)) { - throw new InvalidRecursiveSerializeError(); - } - const nextSeen = new Set(seen); - nextSeen.add(this); - - return this.serializeInternal(nextSeen); - } - - // tslint:disable-next-line readonly-array - public asArray(): StackItem[] { - throw new InvalidValueArrayError(); - } - - public asBigInteger(currentBlockIndex?: number): BN { - if (currentBlockIndex === undefined || currentBlockIndex < BLOCK_HEIGHT_MAX_SIZE_CHECKS) { - return this.asBigIntegerUnsafe(); - } - const value = this.asBuffer(); - if (value.length > MAX_SIZE_BIG_INTEGER) { - /* istanbul ignore next */ - throw new IntegerTooLargeError(); - } - - return utils.fromSignedBuffer(value); - } - - public asBigIntegerUnsafe(): BN { - return utils.fromSignedBuffer(this.asBuffer()); - } - - public asBuffer(): Buffer { - /* istanbul ignore next */ - throw new Error('Unimplemented.'); - } - - public asBufferMaybe(): Buffer | undefined { - try { - return this.asBuffer(); - } catch { - return undefined; - } - } - - public asBoolean(): boolean { - return this.asBuffer().some((value) => value !== 0); - } - - public asUInt160(): UInt160 { - return common.bufferToUInt160(this.asBuffer()); - } - - public asUInt160Maybe(): UInt160 | undefined { - try { - return this.asUInt160(); - } catch { - return undefined; - } - } - - public asUInt256(): UInt256 { - return common.bufferToUInt256(this.asBuffer()); - } - - public asUInt256Maybe(): UInt256 | undefined { - try { - return this.asUInt256(); - } catch { - return undefined; - } - } - - public asECPoint(): ECPoint { - return common.bufferToECPoint(this.asBuffer()); - } - - public asECPointMaybe(): ECPoint | undefined { - try { - return this.asECPoint(); - } catch { - return undefined; - } - } - - public asString(): string { - return utils.toUTF8(this.asBuffer()); - } - - public asHeader(): BlockBase { - throw new InvalidValueHeaderError(); - } - - public asBlockBase(): BlockBase { - throw new InvalidValueBlockBaseError(); - } - - public asBlock(): Block { - throw new InvalidValueBlockError(); - } - - public asTransaction(): Transaction { - throw new InvalidValueTransactionError(); - } - - public asWitness(): Witness { - throw new InvalidValueWitnessError(); - } - - public asAttribute(): Attribute { - throw new InvalidValueAttributeError(); - } - - public asAttributeStackItem(): AttributeStackItem { - throw new InvalidValueAttributeStackItemError(); - } - - public asInput(): Input { - throw new InvalidValueInputError(); - } - - public asOutput(): Output { - throw new InvalidValueOutputError(); - } - - public asAccount(): Account { - throw new InvalidValueAccountError(); - } - - public asAsset(): Asset { - throw new InvalidValueAssetError(); - } - - public asContract(): Contract { - throw new InvalidValueContractError(); - } - - public asValidator(): Validator { - throw new InvalidValueValidatorError(); - } - - public asMapStackItem(): MapStackItem { - throw new InvalidValueMapStackItemError(); - } - - public asEnumerator(): StackItemEnumerator { - throw new InvalidValueEnumeratorError(); - } - - public asIterator(): StackItemIterator { - throw new InvalidValueIteratorError(); - } - - public asStorageContextStackItem(_options: AsStorageContextStackItemOptions): StorageContextStackItem { - /* istanbul ignore next */ - throw new InvalidValueStorageContextStackItemError(); - } - - public isArray(): boolean { - return false; - } - - public isMap(): boolean { - return false; - } - - public toContractParameter(): ContractParameter { - /* istanbul ignore next */ - throw new Error('Not Implemented'); - } - - public get size(): number { - return this.asBuffer().length; - } - - public toString(): string { - return JSON.stringify(this.convertJSON()); - } - - // tslint:disable-next-line no-any - public convertJSON(seen = new Set()): any { - if (seen.has(this)) { - return ''; - } - const nextSeen = new Set(seen); - nextSeen.add(this); - - return this.convertJSONInternal(nextSeen); - } - - protected incrementInternal(_seen: Set): number { - return 0; - } - - protected decrementInternal(_seen: Set): number { - return 0; - } - - protected incrementInternalArray(stackItems: readonly StackItem[], seen: Set): number { - return stackItems.reduce((acc, val) => acc + val.increment(seen), 0); - } - - protected decrementInternalArray(stackItems: readonly StackItem[], seen: Set): number { - return stackItems.reduce((acc, val) => acc + val.decrement(seen), 0); - } - - protected serializeInternal(_seen: Set): Buffer { - const writer = new BinaryWriter(); - writer.writeUInt8(StackItemType.ByteArray); - writer.writeVarBytesLE(this.asBuffer()); - - return writer.toBuffer(); - } - - // tslint:disable-next-line no-any - protected convertJSONInternal(_seen: Set): any { - try { - return this.asBuffer().toString('hex'); - } catch { - return 'UNKNOWN'; - } - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/StackItemEnumerator.ts b/packages/neo-one-node-vm/src/stackItem/StackItemEnumerator.ts deleted file mode 100644 index 2b3fab26f8..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/StackItemEnumerator.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { Equatable } from '@neo-one/node-core'; -import { AsyncIterableX } from '@reactivex/ix-es2015-cjs/asynciterable/asynciterablex'; -import { concat } from '@reactivex/ix-es2015-cjs/asynciterable/concat'; -import { InvalidStorageStackItemEnumeratorError } from './errors'; -import { StackItemBase } from './StackItemBase'; - -export class StackItemEnumerator - implements Equatable { - protected readonly enumerator: AsyncIterator; - protected mutableCurrent: T | undefined; - private mutableDone: boolean; - - public constructor(enumerator: AsyncIterator) { - this.enumerator = enumerator; - this.mutableDone = false; - } - - public get done(): boolean { - return this.mutableDone; - } - - public equals(other: {}): boolean { - return this === other; - } - - public async next(): Promise { - if (!this.mutableDone) { - const result = await this.enumerator.next(); - this.mutableCurrent = result.done ? undefined : result.value; - this.mutableDone = !!result.done; - if (this.mutableDone) { - return false; - } - - return true; - } - - return false; - } - - public value(): StackItemBase { - const { mutableCurrent } = this; - if (mutableCurrent === undefined) { - throw new InvalidStorageStackItemEnumeratorError(); - } - - return mutableCurrent.value; - } - - public concat( - other: StackItemEnumerator, - ): StackItemEnumerator { - const iterable = concat( - AsyncIterableX.from(this.enumerator as AsyncIterableIterator), - AsyncIterableX.from(other.enumerator as AsyncIterableIterator), - ); - - return new StackItemEnumerator(iterable[Symbol.asyncIterator]()); - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/StackItemIterator.ts b/packages/neo-one-node-vm/src/stackItem/StackItemIterator.ts deleted file mode 100644 index d0b28359eb..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/StackItemIterator.ts +++ /dev/null @@ -1,48 +0,0 @@ -/// -import { AsyncIterableX } from '@reactivex/ix-es2015-cjs/asynciterable/asynciterablex'; -import { concat } from '@reactivex/ix-es2015-cjs/asynciterable/concat'; -import { map } from '@reactivex/ix-es2015-cjs/asynciterable/pipe/map'; -import { InvalidStorageStackItemIteratorError } from './errors'; -import { StackItemBase } from './StackItemBase'; -import { StackItemEnumerator } from './StackItemEnumerator'; - -interface Value { - readonly key: StackItemBase; - readonly value: StackItemBase; -} - -export class StackItemIterator extends StackItemEnumerator { - public key(): StackItemBase { - const { mutableCurrent } = this; - if (mutableCurrent === undefined) { - throw new InvalidStorageStackItemIteratorError(); - } - - return mutableCurrent.key; - } - - public keys(): StackItemEnumerator { - const iterable = AsyncIterableX.from(this.enumerator as AsyncIterableIterator).pipe<{ - value: StackItemBase; - }>(map(({ key }) => ({ value: key }))); - - return new StackItemEnumerator(iterable[Symbol.asyncIterator]()); - } - - public values(): StackItemEnumerator { - const iterable = AsyncIterableX.from(this.enumerator as AsyncIterableIterator).pipe<{ - value: StackItemBase; - }>(map(({ value }) => ({ value }))); - - return new StackItemEnumerator(iterable[Symbol.asyncIterator]()); - } - - public concatIterator(other: StackItemIterator): StackItemIterator { - const iterable = concat( - AsyncIterableX.from(this.enumerator as AsyncIterableIterator), - AsyncIterableX.from(other.enumerator as AsyncIterableIterator), - ); - - return new StackItemIterator(iterable[Symbol.asyncIterator]()); - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/StackItemType.ts b/packages/neo-one-node-vm/src/stackItem/StackItemType.ts deleted file mode 100644 index 5e711b1c5c..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/StackItemType.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { makeErrorWithCode } from '@neo-one/utils'; - -export enum StackItemType { - ByteArray = 0x00, - Boolean = 0x01, - Integer = 0x02, - InteropInterface = 0x40, - Array = 0x80, - Struct = 0x81, - Map = 0x82, -} - -export const InvalidStackItemTypeError = makeErrorWithCode( - 'INVALID_STACK_ITEM_TYPE', - (stackItemType: number) => `Expected StackItemType, found: ${stackItemType.toString(16)}`, -); - -const isStackItemType = (value: number): value is StackItemType => - // tslint:disable-next-line strict-type-predicates - StackItemType[value] !== undefined; - -export const assertStackItemType = (value: number): StackItemType => { - if (isStackItemType(value)) { - return value; - } - - throw new InvalidStackItemTypeError(value); -}; diff --git a/packages/neo-one-node-vm/src/stackItem/StorageContextStackItem.ts b/packages/neo-one-node-vm/src/stackItem/StorageContextStackItem.ts deleted file mode 100644 index 5f152d0690..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/StorageContextStackItem.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { common, UInt160 } from '@neo-one/client-common'; -import { ContractParameter, Hash160ContractParameter } from '@neo-one/node-core'; -import { AsStorageContextStackItemOptions, StackItemBase } from './StackItemBase'; - -export class StorageContextStackItem extends StackItemBase { - public readonly value: UInt160; - public readonly isReadOnly: boolean; - - public constructor(value: UInt160, isReadOnly = false) { - super(); - this.value = value; - this.isReadOnly = isReadOnly; - } - - public asUInt160(): UInt160 { - return this.value; - } - - public asBoolean(): boolean { - return (this.value as UInt160 | undefined) !== undefined; - } - - public asBuffer(): Buffer { - return common.uInt160ToBuffer(this.value); - } - - public asStorageContextStackItem(_options: AsStorageContextStackItemOptions): StorageContextStackItem { - return this; - } - - public asReadOnly(): StorageContextStackItem { - return new StorageContextStackItem(this.value, true); - } - - public toContractParameter(_seen: Set = new Set()): ContractParameter { - return new Hash160ContractParameter(this.value); - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/StructStackItem.ts b/packages/neo-one-node-vm/src/stackItem/StructStackItem.ts deleted file mode 100644 index bcce0c08c1..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/StructStackItem.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { utils } from '@neo-one/utils'; -import { ArrayLikeStackItem } from './ArrayLikeStackItem'; -import { StackItemType } from './StackItemType'; - -export class StructStackItem extends ArrayLikeStackItem { - public static readonly type = StackItemType.Struct; - - public clone(): StructStackItem { - return new StructStackItem(this.value.map((value) => (value instanceof StructStackItem ? value.clone() : value))); - } - - public toStructuralKey(): string { - return JSON.stringify(this.value.map((value) => value.toStructuralKey())); - } - - // NOTE: We don't use `toReferenceKey` for comparison here because it doesn't short-circuit - // Instead, use equals for efficiency and since it's equivalent - // tslint:disable-next-line no-any - public equals(other: any): boolean { - if (other === undefined) { - return false; - } - - if (this === other) { - return true; - } - - if (other instanceof StructStackItem) { - if (this.value.length !== other.value.length) { - return false; - } - - return utils.zip(this.value, other.value).every(([a, b]) => a.equals(b)); - } - - return this === other; - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/TransactionStackItem.ts b/packages/neo-one-node-vm/src/stackItem/TransactionStackItem.ts deleted file mode 100644 index f1e651c1b2..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/TransactionStackItem.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Transaction } from '@neo-one/node-core'; -import { EquatableKeyStackItem } from './EquatableKeyStackItem'; - -export class TransactionStackItem extends EquatableKeyStackItem { - public asTransaction(): Transaction { - return this.value; - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/UInt160StackItem.ts b/packages/neo-one-node-vm/src/stackItem/UInt160StackItem.ts deleted file mode 100644 index 840669769e..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/UInt160StackItem.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { common, UInt160 } from '@neo-one/client-common'; -import { ContractParameter, Hash160ContractParameter } from '@neo-one/node-core'; -import { StackItemBase } from './StackItemBase'; - -export class UInt160StackItem extends StackItemBase { - public readonly value: UInt160; - - public constructor(value: UInt160) { - super(); - this.value = value; - } - - public asUInt160(): UInt160 { - return this.value; - } - - public asBuffer(): Buffer { - return common.uInt160ToBuffer(this.value); - } - - public toContractParameter(_seen: Set = new Set()): ContractParameter { - return new Hash160ContractParameter(this.value); - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/UInt256StackItem.ts b/packages/neo-one-node-vm/src/stackItem/UInt256StackItem.ts deleted file mode 100644 index 434ea391f4..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/UInt256StackItem.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { common, UInt256 } from '@neo-one/client-common'; -import { ContractParameter, Hash256ContractParameter } from '@neo-one/node-core'; -import { StackItemBase } from './StackItemBase'; - -export class UInt256StackItem extends StackItemBase { - public readonly value: UInt256; - - public constructor(value: UInt256) { - super(); - this.value = value; - } - - public asUInt256(): UInt256 { - return this.value; - } - - public asBuffer(): Buffer { - return common.uInt256ToBuffer(this.value); - } - - public toContractParameter(_seen: Set = new Set()): ContractParameter { - return new Hash256ContractParameter(this.value); - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/ValidatorStackItem.ts b/packages/neo-one-node-vm/src/stackItem/ValidatorStackItem.ts deleted file mode 100644 index 2bc20d6e81..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/ValidatorStackItem.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Validator } from '@neo-one/node-core'; -import { EquatableKeyStackItem } from './EquatableKeyStackItem'; - -export class ValidatorStackItem extends EquatableKeyStackItem { - public asValidator(): Validator { - return this.value; - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/WitnessStackItem.ts b/packages/neo-one-node-vm/src/stackItem/WitnessStackItem.ts deleted file mode 100644 index af0324215b..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/WitnessStackItem.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Witness } from '@neo-one/node-core'; -import { EquatableKeyStackItem } from './EquatableKeyStackItem'; - -export class WitnessStackItem extends EquatableKeyStackItem { - public asWitness(): Witness { - return this.value; - } -} diff --git a/packages/neo-one-node-vm/src/stackItem/deserializeStackItem.ts b/packages/neo-one-node-vm/src/stackItem/deserializeStackItem.ts deleted file mode 100644 index 58c19567cb..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/deserializeStackItem.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { BinaryReader, utils } from '@neo-one/node-core'; -import { utils as commonUtils } from '@neo-one/utils'; -import _ from 'lodash'; -import { MAX_ARRAY_SIZE_BN } from '../constants'; -import { ArrayStackItem } from './ArrayStackItem'; -import { BooleanStackItem } from './BooleanStackItem'; -import { BufferStackItem } from './BufferStackItem'; -import { UnsupportedStackItemSerdeError } from './errors'; -import { IntegerStackItem } from './IntegerStackItem'; -import { MapStackItem } from './MapStackItem'; -import { StackItem } from './StackItem'; -import { assertStackItemType, StackItemType } from './StackItemType'; -import { StructStackItem } from './StructStackItem'; - -const deserializeStackItemBase = (reader: BinaryReader): StackItem => { - const type = assertStackItemType(reader.readUInt8()); - switch (type) { - case StackItemType.ByteArray: // BYTE_ARRAY - return new BufferStackItem(reader.readVarBytesLE()); - case StackItemType.Boolean: // BOOLEAN - return new BooleanStackItem(reader.readBoolean()); - case StackItemType.Integer: // INTEGER - return new IntegerStackItem(utils.fromSignedBuffer(reader.readVarBytesLE())); - case StackItemType.InteropInterface: // INTEROP_INTERFACE - /* istanbul ignore next */ - throw new UnsupportedStackItemSerdeError(); - case StackItemType.Array: // ARRAY - case StackItemType.Struct: { - // STRUCT - const count = reader.readVarUIntLE(MAX_ARRAY_SIZE_BN).toNumber(); - const value = _.range(count).map(() => deserializeStackItemBase(reader)); - - return type === 0x80 ? new ArrayStackItem(value) : new StructStackItem(value); - } - case StackItemType.Map: { - // MAP - const count = reader.readVarUIntLE(MAX_ARRAY_SIZE_BN).toNumber(); - const referenceKeys = new Map(); - const referenceValues = new Map(); - _.range(count).forEach(() => { - const key = deserializeStackItemBase(reader); - const value = deserializeStackItemBase(reader); - const referenceKey = key.toStructuralKey(); - referenceKeys.set(referenceKey, key); - referenceValues.set(referenceKey, value); - }); - - return new MapStackItem({ referenceKeys, referenceValues }); - } - /* istanbul ignore next */ - default: - commonUtils.assertNever(type); - throw new Error('For TS'); - } -}; - -export const deserializeStackItem = (value: Buffer): StackItem => deserializeStackItemBase(new BinaryReader(value)); diff --git a/packages/neo-one-node-vm/src/stackItem/errors.ts b/packages/neo-one-node-vm/src/stackItem/errors.ts deleted file mode 100644 index 041995bae6..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/errors.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { makeErrorWithCode } from '@neo-one/utils'; - -export const InvalidValueArrayError = makeErrorWithCode('INVALID_VALUE_ARRAY', () => 'Invalid Value. Expected Array'); -export const CircularReferenceError = makeErrorWithCode('CIRCULAR_REFERENCE_ERROR', () => 'Circular Reference Error'); -export const InvalidValueBufferError = makeErrorWithCode( - 'INVALID_VALUE_BUFFER', - () => 'Invalid Value. Expected Buffer', -); -export const InvalidValueEnumeratorError = makeErrorWithCode( - 'INVALID_VALUE_ENUMERATOR', - () => 'Invalid Value. Expected Enumerator', -); -export const InvalidValueHeaderError = makeErrorWithCode( - 'INVALID_VALUE_HEADER', - () => 'Invalid Value. Expected Header', -); -export const InvalidValueBlockError = makeErrorWithCode('INVALID_VALUE_BLOCK', () => 'Invalid Value. Expected Block'); -export const InvalidValueBlockBaseError = makeErrorWithCode( - 'INVALID_VALUE_BLOCK_BASE', - () => 'Invalid Value. Expected BlockBase', -); -export const InvalidValueTransactionError = makeErrorWithCode( - 'INVALID_VALUE_TRANSACTION', - () => 'Invalid Value. Expected Transaction', -); -export const InvalidValueWitnessError = makeErrorWithCode( - 'INVALID_VALUE_WITNESS', - () => 'Invalid Value. Expected Witness', -); -export const InvalidValueAttributeError = makeErrorWithCode( - 'INVALID_VALUE_ATTRIBUTE', - () => 'Invalid Value. Expected Attribute', -); -export const InvalidValueAttributeStackItemError = makeErrorWithCode( - 'INVALID_VALUE_ATTRIBUTE_STACK_ITEM', - () => 'Invalid Value. Expected AttributeStackItem', -); -export const InvalidValueInputError = makeErrorWithCode('INVALID_VALUE_INPUT', () => 'Invalid Value. Expected Input'); -export const InvalidValueMapStackItemError = makeErrorWithCode( - 'INVALID_VALUE_MAP_STACK_ITEM', - () => 'Invalid Value. Expected MapStackItem', -); -export const InvalidValueOutputError = makeErrorWithCode( - 'INVALID_VALUE_OUTPUT', - () => 'Invalid Value. Expected Output', -); -export const InvalidValueAccountError = makeErrorWithCode( - 'INVALID_VALUE_ACCOUNT', - () => 'Invalid Value. Expected Account', -); -export const InvalidValueAssetError = makeErrorWithCode('INVALID_VALUE_ASSET', () => 'Invalid Value. Expected Asset'); -export const InvalidValueContractError = makeErrorWithCode( - 'INVALID_VALUE_CONTRACT', - () => 'Invalid Value. Expected Contract', -); -export const InvalidValueValidatorError = makeErrorWithCode( - 'INVALID_VALUE_VALIDATOR', - () => 'Invalid Value. Expected Validator', -); -export const InvalidValueIteratorError = makeErrorWithCode( - 'INVALID_VALUE_ITERATOR', - () => 'Invalid Value. Expected Iterator', -); -export const InvalidValueStorageContextStackItemError = makeErrorWithCode( - 'INVALID_VALUE_STORAGE_CONTEXT_STACK_ITEM', - /* istanbul ignore next */ - () => 'Invalid Value. Expected StorageContextStackItem', -); -export const UnsupportedStackItemSerdeError = makeErrorWithCode( - 'UNSUPPORTED_STACK_ITEM_SERDE', - () => 'Unsupported StackItem serde.', -); -export const InvalidStorageStackItemEnumeratorError = makeErrorWithCode( - 'INVALID_STORAGE_STACK_ITEM_ENUMERATOR', - () => 'Current is not set. The enumerator has been fully consumed or has not been initialized', -); -export const InvalidStorageStackItemIteratorError = makeErrorWithCode( - 'INVALID_STORAGE_STACK_ITEM_ITERATOR', - () => 'Current is not set. The iterator has been fully consumed or has not been initialized', -); -export const MissingStackItemKeyError = makeErrorWithCode('MISSING_STACK_ITEM_KEY', () => 'Map does not contain key.'); -export const InvalidRecursiveSerializeError = makeErrorWithCode( - 'INVALID_RECURSIVE_SERIALIZE', - () => 'Attempted to serialize a recursive structure.', -); -export const IntegerTooLargeError = makeErrorWithCode( - 'INTEGER_TOO_LARGE', - () => 'Integer too large. Max size is 256 bits.', -); diff --git a/packages/neo-one-node-vm/src/stackItem/index.ts b/packages/neo-one-node-vm/src/stackItem/index.ts deleted file mode 100644 index a034ae0c9f..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -export { ArrayStackItem } from './ArrayStackItem'; -export { BooleanStackItem } from './BooleanStackItem'; -export { BufferStackItem } from './BufferStackItem'; -export { ConsensusPayloadStackItem } from './ConsensusPayloadStackItem'; -export { UInt160StackItem } from './UInt160StackItem'; -export { UInt256StackItem } from './UInt256StackItem'; -export { IntegerStackItem } from './IntegerStackItem'; -export { HeaderStackItem } from './HeaderStackItem'; -export { BlockStackItem } from './BlockStackItem'; -export { ContractStackItem } from './ContractStackItem'; -export { EnumeratorStackItem } from './EnumeratorStackItem'; -export { TransactionStackItem } from './TransactionStackItem'; -export { AccountStackItem } from './AccountStackItem'; -export { AssetStackItem } from './AssetStackItem'; -export { AttributeStackItem } from './AttributeStackItem'; -export { InputStackItem } from './InputStackItem'; -export { IteratorStackItem } from './IteratorStackItem'; -export { MapStackItem } from './MapStackItem'; -export { OutputStackItem } from './OutputStackItem'; -export { ValidatorStackItem } from './ValidatorStackItem'; -export { StorageContextStackItem } from './StorageContextStackItem'; -export { ECPointStackItem } from './ECPointStackItem'; -export { StructStackItem } from './StructStackItem'; -export { StackItemEnumerator } from './StackItemEnumerator'; -export { StackItemIterator } from './StackItemIterator'; -export { WitnessStackItem } from './WitnessStackItem'; - -export { deserializeStackItem } from './deserializeStackItem'; -export { StackItem } from './StackItem'; - -export * from './StackItemType'; diff --git a/packages/neo-one-node-vm/src/stackItem/referenceCounter.ts b/packages/neo-one-node-vm/src/stackItem/referenceCounter.ts deleted file mode 100644 index a7672c3693..0000000000 --- a/packages/neo-one-node-vm/src/stackItem/referenceCounter.ts +++ /dev/null @@ -1,12 +0,0 @@ -// tslint:disable-next-line no-let -let id = 0; -// tslint:disable-next-line export-name -export const getNextID = () => { - id += 1; - /* istanbul ignore next */ - if (id === Number.MAX_SAFE_INTEGER) { - id = 0; - } - - return id; -}; diff --git a/packages/neo-one-node-vm/src/syscalls.ts b/packages/neo-one-node-vm/src/syscalls.ts deleted file mode 100644 index b91edca8d2..0000000000 --- a/packages/neo-one-node-vm/src/syscalls.ts +++ /dev/null @@ -1,1885 +0,0 @@ -/// -import { - assertContractParameterType, - assertStorageFlags, - assertSysCall, - common, - crypto, - ECPoint, - hasStorageFlag, - isContractParameterType, - SysCall as SysCallEnum, - SysCallHash, - SysCallName, - toSysCallHash, - UInt160, - UInt256, -} from '@neo-one/client-common'; -import { assertContractPropertyState, HasDynamicInvoke, HasStorage } from '@neo-one/client-full-common'; -import { - Account, - assertAssetType, - Asset, - AssetType, - BinaryReader, - Contract, - InvocationTransaction, - ScriptContainerType, - StorageFlags, - StorageItem, - TransactionType, - TriggerType, - utils, - Validator, - Witness, -} from '@neo-one/node-core'; -import { utils as commonUtils } from '@neo-one/utils'; -import { AsyncIterableX } from '@reactivex/ix-es2015-cjs/asynciterable/asynciterablex'; -import { map as asyncMap } from '@reactivex/ix-es2015-cjs/asynciterable/pipe/map'; -import { BN } from 'bn.js'; -import _ from 'lodash'; -import { defer } from 'rxjs'; -import { concatMap, map, toArray } from 'rxjs/operators'; -import { - BLOCK_HEIGHT_YEAR, - ExecutionContext, - FEES, - MAX_ARRAY_SIZE, - MAX_ITEM_SIZE, - OpInvoke, - OpInvokeArgs, - SysCall, -} from './constants'; -import { - AccountFrozenError, - BadWitnessCheckError, - ConstantStorageError, - ContainerTooLargeError, - ContractNoStorageError, - InvalidAssetTypeError, - InvalidContractGetStorageContextError, - InvalidGetBlockArgumentsError, - InvalidGetHeaderArgumentsError, - InvalidIndexError, - InvalidInvocationTransactionError, - InvalidVerifySyscallError, - ItemTooLargeError, - NotEligibleVoteError, - StackUnderflowError, - UnexpectedScriptContainerError, - UnknownSysCallError, -} from './errors'; -import { - AccountStackItem, - ArrayStackItem, - AssetStackItem, - AttributeStackItem, - BlockStackItem, - BooleanStackItem, - BufferStackItem, - ConsensusPayloadStackItem, - ContractStackItem, - deserializeStackItem, - ECPointStackItem, - EnumeratorStackItem, - HeaderStackItem, - InputStackItem, - IntegerStackItem, - IteratorStackItem, - OutputStackItem, - StackItem, - StackItemEnumerator, - StackItemIterator, - StorageContextStackItem, - TransactionStackItem, - UInt160StackItem, - UInt256StackItem, - ValidatorStackItem, - WitnessStackItem, -} from './stackItem'; -import { vmUtils } from './vmUtils'; - -export interface CreateSysCallArgs { - readonly context: ExecutionContext; -} -export type CreateSysCall = (input: CreateSysCallArgs) => SysCall; - -export const createSysCall = ({ - name, - in: _in = 0, - inAlt = 0, - out = 0, - outAlt = 0, - invocation = 0, - fee = FEES.ONE, - invoke, -}: { - readonly name: SysCallName; - readonly in?: number; - readonly inAlt?: number; - readonly out?: number; - readonly outAlt?: number; - readonly invocation?: number; - readonly fee?: BN; - readonly invoke: OpInvoke; -}): CreateSysCall => ({ context }) => ({ - context, - name, - in: _in, - inAlt, - out, - outAlt, - invocation, - fee, - invoke, -}); - -const getHashOrIndex = ({ - context, - arg, -}: { - readonly context: ExecutionContext; - readonly arg: StackItem; -}): UInt256 | number | undefined => { - const buffer = arg.asBuffer(); - let hashOrIndex; - if (buffer.length === 32) { - hashOrIndex = arg.asUInt256(); - } else if (buffer.length <= 5) { - hashOrIndex = arg.asBigInteger(context.blockchain.currentBlockIndex).toNumber(); - } - - return hashOrIndex; -}; - -function getIndex(context: ExecutionContext, index: number, values: readonly T[]): T { - if (index < 0 || index >= values.length) { - throw new InvalidIndexError(context); - } - - return values[index]; -} - -const checkWitness = async ({ context, hash }: { readonly context: ExecutionContext; readonly hash: UInt160 }) => { - const { scriptContainer, skipWitnessVerify } = context.init; - if (skipWitnessVerify) { - return true; - } - - let scriptHashesForVerifying; - switch (scriptContainer.type) { - case ScriptContainerType.Transaction: - scriptHashesForVerifying = await scriptContainer.value.getScriptHashesForVerifying({ - getOutput: context.blockchain.output.get, - getAsset: context.blockchain.asset.get, - }); - - break; - case ScriptContainerType.Block: - scriptHashesForVerifying = await scriptContainer.value.getScriptHashesForVerifying({ - getHeader: context.blockchain.header.get, - }); - - break; - case ScriptContainerType.Consensus: - scriptHashesForVerifying = await scriptContainer.value.getScriptHashesForVerifying({ - getValidators: async () => context.blockchain.getValidators([]), - currentBlockHash: context.blockchain.currentBlock.hash, - }); - - break; - default: - commonUtils.assertNever(scriptContainer); - throw new Error('For TS'); - } - - return scriptHashesForVerifying.has(common.uInt160ToHex(hash)); -}; - -const checkWitnessPublicKey = async ({ - context, - publicKey, -}: { - readonly context: ExecutionContext; - readonly publicKey: ECPoint; -}) => - checkWitness({ - context, - hash: crypto.getVerificationScriptHash(publicKey), - }); - -const checkWitnessBuffer = async ({ - context, - hashOrPublicKey, -}: { - readonly context: ExecutionContext; - readonly hashOrPublicKey: Buffer; -}) => { - if (hashOrPublicKey.length === common.ECPOINT_BUFFER_BYTES) { - return checkWitnessPublicKey({ - context, - publicKey: common.bufferToECPoint(hashOrPublicKey), - }); - } - - return checkWitness({ - context, - hash: common.bufferToUInt160(hashOrPublicKey), - }); -}; - -const createContract = async ({ - context, - args, -}: { - readonly context: ExecutionContext; - readonly args: readonly StackItem[]; -}) => { - const script = args[0].asBuffer(); - // Removed check of valid ContractParameterTypes to match neo - const parameterList = [...args[1].asBuffer()].filter(isContractParameterType); - - const returnType = assertContractParameterType(args[2].asBigIntegerUnsafe().toNumber()); - - const contractProperties = assertContractPropertyState(args[3].asBigIntegerUnsafe().toNumber()); - - const name = args[4].asString(); - const codeVersion = args[5].asString(); - const author = args[6].asString(); - const email = args[7].asString(); - const description = args[8].asString(); - const hash = crypto.hash160(script); - let contract = await context.blockchain.contract.tryGet({ hash }); - let created = false; - if (contract === undefined) { - contract = new Contract({ - script, - parameterList, - - returnType, - contractProperties, - name, - codeVersion, - author, - email, - description, - hash, - }); - - await context.blockchain.contract.add(contract); - created = true; - } - - return { contract, created }; -}; - -const checkStorage = async ({ context, hash }: { readonly context: ExecutionContext; readonly hash: UInt160 }) => { - const contract = await context.blockchain.contract.get({ hash }); - if (!contract.hasStorage) { - throw new ContractNoStorageError(context, common.uInt160ToString(hash)); - } - - return contract; -}; - -function getContractFee(func: (args: CreateSysCallArgs, fee: BN) => T): (args: CreateSysCallArgs) => T { - return (args) => { - const { context: contextIn } = args; - const contractProperties = assertContractPropertyState(contextIn.stack[3].asBigIntegerUnsafe().toNumber()); - - let fee = common.ONE_HUNDRED_FIXED8; - - if (HasStorage.has(contractProperties)) { - fee = fee.add(common.FOUR_HUNDRED_FIXED8); - } - if (HasDynamicInvoke.has(contractProperties)) { - fee = fee.add(common.FIVE_HUNDRED_FIXED8); - } - - return func(args, fee); - }; -} - -const destroyContract = async ({ context }: OpInvokeArgs) => { - const hash = context.scriptHash; - const contract = await context.blockchain.contract.tryGet({ hash }); - if (contract !== undefined) { - await Promise.all([ - context.blockchain.contract.delete({ hash }), - contract.hasStorage - ? context.blockchain.storageItem - .getAll$({ hash }) - .pipe( - concatMap((item) => - defer(async () => - context.blockchain.storageItem.delete({ - hash, - key: item.key, - }), - ), - ), - ) - .toPromise() - : Promise.resolve(), - ]); - } -}; - -const createPut = ({ name }: { readonly name: 'Neo.Storage.Put' | 'Neo.Storage.PutEx' }) => ({ - context: contextIn, -}: CreateSysCallArgs) => { - const keyIn = contextIn.stack[1] as StackItem | undefined; - const valueIn = contextIn.stack[2] as StackItem | undefined; - const expectedIn = name === 'Neo.Storage.Put' ? 3 : 4; - if (keyIn === undefined || valueIn === undefined) { - throw new StackUnderflowError(contextIn, 'SYSCALL', contextIn.stack.length, expectedIn); - } - const ratio = new BN(keyIn.asBuffer().length) - .add(new BN(valueIn.asBuffer().length)) - .sub(utils.ONE) - .div(utils.ONE_THOUSAND_TWENTY_FOUR) - .add(utils.ONE); - - return createSysCall({ - name, - in: expectedIn, - fee: FEES.ONE_THOUSAND.mul(ratio), - invoke: async ({ context, args }) => { - if (context.init.triggerType !== TriggerType.Application) { - throw new InvalidVerifySyscallError(context, name); - } - const hash = vmUtils.toStorageContext({ - context, - value: args[0], - write: true, - }).value; - await checkStorage({ context, hash }); - const key = args[1].asBuffer(); - if (key.length > 1024) { - throw new ItemTooLargeError(context); - } - - const value = args[2].asBuffer(); - const flags = - name === 'Neo.Storage.Put' ? StorageFlags.None : assertStorageFlags(args[3].asBigIntegerUnsafe().toNumber()); - const item = await context.blockchain.storageItem.tryGet({ hash, key }); - // if (item === undefined) { - // await context.blockchain.storageItem.add(new StorageItem({ hash, key, value, flags })); - // } else if (hasStorageFlag(item.flags, StorageFlags.Constant)) { - // throw new ConstantStorageError(context, key); - // } else { - // await context.blockchain.storageItem.update(item, { value, flags }); - // } - if (item !== undefined) { - if (hasStorageFlag(item.flags, StorageFlags.Constant)) { - throw new ConstantStorageError(context, key); - } - await context.blockchain.storageItem.update(item, { value, flags }); - } else { - await context.blockchain.storageItem.add(new StorageItem({ hash, key, value, flags })); - } - - return { context }; - }, - })({ context: contextIn }); -}; - -export const SYSCALLS: { readonly [K in SysCallEnum]: CreateSysCall } = { - 'System.Runtime.Platform': createSysCall({ - name: 'System.Runtime.Platform', - out: 1, - invoke: ({ context }) => ({ - context, - results: [new BufferStackItem(Buffer.from('NEO', 'ascii'))], - }), - }), - 'Neo.Runtime.GetTrigger': createSysCall({ - name: 'Neo.Runtime.GetTrigger', - out: 1, - invoke: ({ context }) => ({ - context, - results: [new IntegerStackItem(new BN(context.init.triggerType))], - }), - }), - - 'Neo.Runtime.CheckWitness': createSysCall({ - name: 'Neo.Runtime.CheckWitness', - in: 1, - out: 1, - fee: FEES.TWO_HUNDRED, - invoke: async ({ context, args }) => ({ - context, - results: [ - new BooleanStackItem( - await checkWitnessBuffer({ - context, - hashOrPublicKey: args[0].asBuffer(), - }), - ), - ], - }), - }), - - 'Neo.Runtime.Notify': createSysCall({ - name: 'Neo.Runtime.Notify', - in: 1, - invoke: async ({ context, args }) => { - const { onNotify } = context.init.listeners; - if (onNotify !== undefined) { - onNotify({ - scriptHash: context.scriptHash, - args: args[0].isArray() - ? args[0].asArray().map((item) => item.toContractParameter()) - : [args[0].toContractParameter()], - }); - } - - return { context }; - }, - }), - - 'Neo.Runtime.Log': createSysCall({ - name: 'Neo.Runtime.Log', - in: 1, - invoke: async ({ context, args }) => { - const { onLog } = context.init.listeners; - if (onLog !== undefined) { - onLog({ - scriptHash: context.scriptHash, - message: args[0].asString(), - }); - } - - return { context }; - }, - }), - - 'Neo.Runtime.GetTime': createSysCall({ - name: 'Neo.Runtime.GetTime', - out: 1, - invoke: async ({ context }) => { - const { persistingBlock } = context.init; - const time = - persistingBlock === undefined - ? context.blockchain.currentBlock.timestamp + context.blockchain.settings.secondsPerBlock - : persistingBlock.timestamp; - - return { - context, - results: [new IntegerStackItem(new BN(time))], - }; - }, - }), - - 'Neo.Runtime.Serialize': createSysCall({ - name: 'Neo.Runtime.Serialize', - in: 1, - out: 1, - invoke: async ({ context, args }) => { - const serialized = args[0].serialize(); - - if (serialized.length > MAX_ITEM_SIZE) { - throw new ItemTooLargeError(context); - } - - return { context, results: [new BufferStackItem(serialized)] }; - }, - }), - - 'Neo.Runtime.Deserialize': createSysCall({ - name: 'Neo.Runtime.Deserialize', - in: 1, - out: 1, - invoke: async ({ context, args }) => { - const deserialized = deserializeStackItem(args[0].asBuffer()); - - return { context, results: [deserialized] }; - }, - }), - - 'Neo.Blockchain.GetHeight': createSysCall({ - name: 'Neo.Blockchain.GetHeight', - out: 1, - invoke: ({ context }) => ({ - context, - results: [new IntegerStackItem(new BN(context.blockchain.currentBlock.index))], - }), - }), - - 'Neo.Blockchain.GetHeader': createSysCall({ - name: 'Neo.Blockchain.GetHeader', - in: 1, - out: 1, - fee: FEES.ONE_HUNDRED, - invoke: async ({ context, args }) => { - const hashOrIndex = getHashOrIndex({ context, arg: args[0] }); - if (hashOrIndex === undefined) { - throw new InvalidGetHeaderArgumentsError(context); - } - const header = await context.blockchain.header.get({ hashOrIndex }); - - return { - context, - results: [new HeaderStackItem(header)], - }; - }, - }), - - 'Neo.Blockchain.GetBlock': createSysCall({ - name: 'Neo.Blockchain.GetBlock', - in: 1, - out: 1, - fee: FEES.TWO_HUNDRED, - invoke: async ({ context, args }) => { - const hashOrIndex = getHashOrIndex({ - context, - arg: args[0], - }); - - if (hashOrIndex === undefined) { - throw new InvalidGetBlockArgumentsError(context, args[0].asBufferMaybe()); - } - const block = await context.blockchain.block.get({ hashOrIndex }); - - return { - context, - results: [new BlockStackItem(block)], - }; - }, - }), - - 'Neo.Blockchain.GetTransaction': createSysCall({ - name: 'Neo.Blockchain.GetTransaction', - in: 1, - out: 1, - fee: FEES.ONE_HUNDRED, - invoke: async ({ context, args }) => { - const transaction = await context.blockchain.transaction.get({ - hash: args[0].asUInt256(), - }); - - return { - context, - results: [new TransactionStackItem(transaction)], - }; - }, - }), - - 'Neo.Blockchain.GetTransactionHeight': createSysCall({ - name: 'Neo.Blockchain.GetTransactionHeight', - in: 1, - out: 1, - fee: FEES.ONE_HUNDRED, - invoke: async ({ context, args }) => { - const transactionData = await context.blockchain.transactionData.get({ - hash: args[0].asUInt256(), - }); - - return { - context, - results: [new IntegerStackItem(new BN(transactionData.startHeight))], - }; - }, - }), - - 'Neo.Blockchain.GetAccount': createSysCall({ - name: 'Neo.Blockchain.GetAccount', - in: 1, - out: 1, - fee: FEES.ONE_HUNDRED, - invoke: async ({ context, args }) => { - const hash = args[0].asUInt160(); - const account = await context.blockchain.account.tryGet({ - hash, - }); - - return { - context, - results: [new AccountStackItem(account === undefined ? new Account({ hash }) : account)], - }; - }, - }), - - 'Neo.Blockchain.GetValidators': createSysCall({ - name: 'Neo.Blockchain.GetValidators', - out: 1, - fee: FEES.TWO_HUNDRED, - invoke: async ({ context }) => { - const validators = await context.blockchain.validator.all$ - .pipe( - map(({ publicKey }) => new ECPointStackItem(publicKey)), - toArray(), - ) - .toPromise(); - - return { - context, - results: [new ArrayStackItem(validators)], - }; - }, - }), - - 'Neo.Blockchain.GetAsset': createSysCall({ - name: 'Neo.Blockchain.GetAsset', - in: 1, - out: 1, - fee: FEES.ONE_HUNDRED, - invoke: async ({ context, args }) => { - const asset = await context.blockchain.asset.get({ - hash: args[0].asUInt256(), - }); - - return { - context, - results: [new AssetStackItem(asset)], - }; - }, - }), - - 'Neo.Blockchain.GetContract': createSysCall({ - name: 'Neo.Blockchain.GetContract', - in: 1, - out: 1, - fee: FEES.ONE_HUNDRED, - invoke: async ({ context, args }) => { - const contract = await context.blockchain.contract.tryGet({ - hash: args[0].asUInt160(), - }); - - return { - context, - results: [contract === undefined ? new BufferStackItem(Buffer.alloc(0, 0)) : new ContractStackItem(contract)], - }; - }, - }), - - 'Neo.Header.GetHash': createSysCall({ - name: 'Neo.Header.GetHash', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new UInt256StackItem(args[0].asBlockBase().hash)], - }), - }), - - 'Neo.Header.GetVersion': createSysCall({ - name: 'Neo.Header.GetVersion', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new IntegerStackItem(new BN(args[0].asBlockBase().version))], - }), - }), - - 'Neo.Header.GetPrevHash': createSysCall({ - name: 'Neo.Header.GetPrevHash', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new UInt256StackItem(args[0].asBlockBase().previousHash)], - }), - }), - - 'Neo.Header.GetIndex': createSysCall({ - name: 'Neo.Header.GetIndex', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new IntegerStackItem(new BN(args[0].asBlockBase().index))], - }), - }), - - 'Neo.Header.GetMerkleRoot': createSysCall({ - name: 'Neo.Header.GetMerkleRoot', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new UInt256StackItem(args[0].asBlockBase().merkleRoot)], - }), - }), - - 'Neo.Header.GetTimestamp': createSysCall({ - name: 'Neo.Header.GetTimestamp', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new IntegerStackItem(new BN(args[0].asBlockBase().timestamp))], - }), - }), - - 'Neo.Header.GetConsensusData': createSysCall({ - name: 'Neo.Header.GetConsensusData', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new IntegerStackItem(args[0].asBlockBase().consensusData)], - }), - }), - - 'Neo.Header.GetNextConsensus': createSysCall({ - name: 'Neo.Header.GetNextConsensus', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new UInt160StackItem(args[0].asBlockBase().nextConsensus)], - }), - }), - - 'Neo.Block.GetTransactionCount': createSysCall({ - name: 'Neo.Block.GetTransactionCount', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new IntegerStackItem(new BN(args[0].asBlock().transactions.length))], - }), - }), - - 'Neo.Block.GetTransactions': createSysCall({ - name: 'Neo.Block.GetTransactions', - in: 1, - out: 1, - invoke: ({ context, args }) => { - if (args[0].asBlock().transactions.length > MAX_ARRAY_SIZE) { - throw new ContainerTooLargeError(context); - } - - return { - context, - results: [ - new ArrayStackItem( - args[0].asBlock().transactions.map((transaction) => new TransactionStackItem(transaction)), - ), - ], - }; - }, - }), - - 'Neo.Block.GetTransaction': createSysCall({ - name: 'Neo.Block.GetTransaction', - in: 2, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [ - new TransactionStackItem( - getIndex(context, args[1].asBigIntegerUnsafe().toNumber(), args[0].asBlock().transactions), - ), - ], - }), - }), - - 'Neo.Transaction.GetHash': createSysCall({ - name: 'Neo.Transaction.GetHash', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new UInt256StackItem(args[0].asTransaction().hash)], - }), - }), - - 'Neo.Transaction.GetType': createSysCall({ - name: 'Neo.Transaction.GetType', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new IntegerStackItem(new BN(args[0].asTransaction().type))], - }), - }), - - 'Neo.Transaction.GetAttributes': createSysCall({ - name: 'Neo.Transaction.GetAttributes', - in: 1, - out: 1, - invoke: ({ context, args }) => { - if (args[0].asTransaction().attributes.length > MAX_ARRAY_SIZE) { - /* istanbul ignore next */ - throw new ContainerTooLargeError(context); - } - - return { - context, - results: [ - new ArrayStackItem(args[0].asTransaction().attributes.map((attribute) => new AttributeStackItem(attribute))), - ], - }; - }, - }), - - 'Neo.Transaction.GetInputs': createSysCall({ - name: 'Neo.Transaction.GetInputs', - in: 1, - out: 1, - invoke: ({ context, args }) => { - if (args[0].asTransaction().inputs.length > MAX_ARRAY_SIZE) { - throw new ContainerTooLargeError(context); - } - - return { - context, - results: [new ArrayStackItem(args[0].asTransaction().inputs.map((input) => new InputStackItem(input)))], - }; - }, - }), - - 'Neo.Transaction.GetOutputs': createSysCall({ - name: 'Neo.Transaction.GetOutputs', - in: 1, - out: 1, - invoke: ({ context, args }) => { - if (args[0].asTransaction().outputs.length > MAX_ARRAY_SIZE) { - throw new ContainerTooLargeError(context); - } - - return { - context, - results: [new ArrayStackItem(args[0].asTransaction().outputs.map((output) => new OutputStackItem(output)))], - }; - }, - }), - - 'Neo.Transaction.GetReferences': createSysCall({ - name: 'Neo.Transaction.GetReferences', - in: 1, - out: 1, - fee: FEES.TWO_HUNDRED, - invoke: async ({ context, args }) => { - if (args[0].asTransaction().inputs.length > MAX_ARRAY_SIZE) { - throw new ContainerTooLargeError(context); - } - - const outputs = await args[0].asTransaction().getReferences({ - getOutput: context.blockchain.output.get, - }); - - return { - context, - results: [new ArrayStackItem(outputs.map((output) => new OutputStackItem(output)))], - }; - }, - }), - - 'Neo.Transaction.GetUnspentCoins': createSysCall({ - name: 'Neo.Transaction.GetUnspentCoins', - in: 1, - out: 1, - fee: FEES.TWO_HUNDRED, - invoke: async ({ context, args }) => { - const transaction = args[0].asTransaction(); - // tslint:disable-next-line readonly-array - let outputs: StackItem[]; - if ( - context.init.scriptContainer.type === ScriptContainerType.Transaction && - context.init.scriptContainer.value.equals(transaction) - ) { - outputs = context.init.scriptContainer.value.outputs.map((output) => new OutputStackItem(output)); - } else { - const spentCoins = await context.blockchain.transactionData.get({ - hash: transaction.hash, - }); - outputs = transaction.outputs - .filter((_output, idx) => (spentCoins.endHeights[idx] as number | undefined) === undefined) - .map((output) => new OutputStackItem(output)); - } - - if (outputs.length > MAX_ARRAY_SIZE) { - throw new ContainerTooLargeError(context); - } - - return { - context, - results: [new ArrayStackItem(outputs)], - }; - }, - }), - - 'Neo.Transaction.GetWitnesses': createSysCall({ - name: 'Neo.Transaction.GetWitnesses', - in: 1, - out: 1, - fee: FEES.TWO_HUNDRED, - invoke: async ({ context, args }) => { - const transaction = args[0].asTransaction(); - - if (transaction.scripts.length > MAX_ARRAY_SIZE) { - throw new ContainerTooLargeError(context); - } - - const hashes = await transaction.getSortedScriptHashesForVerifying({ - getOutput: context.blockchain.output.get, - getAsset: context.blockchain.asset.get, - }); - const witnesses = await Promise.all( - transaction.scripts.map(async (witness, idx) => { - if (witness.verification.length === 0) { - const contract = await context.blockchain.contract.get({ hash: common.stringToUInt160(hashes[idx]) }); - - return new Witness({ - invocation: witness.invocation, - verification: contract.script, - }); - } - - return witness; - }), - ); - - return { - context, - results: [new ArrayStackItem(witnesses.map((witness) => new WitnessStackItem(witness)))], - }; - }, - }), - - 'Neo.Witness.GetVerificationScript': createSysCall({ - name: 'Neo.Witness.GetVerificationScript', - in: 1, - out: 1, - fee: FEES.ONE_HUNDRED, - invoke: async ({ context, args }) => { - const witness = args[0].asWitness(); - - return { - context, - results: [new BufferStackItem(witness.verification)], - }; - }, - }), - - 'Neo.InvocationTransaction.GetScript': createSysCall({ - name: 'Neo.InvocationTransaction.GetScript', - in: 1, - out: 1, - invoke: async ({ context, args }) => { - const transaction = args[0].asTransaction(); - if (transaction instanceof InvocationTransaction) { - return { - context, - results: [new BufferStackItem(transaction.script)], - }; - } - - throw new InvalidInvocationTransactionError(context); - }, - }), - - 'Neo.Attribute.GetUsage': createSysCall({ - name: 'Neo.Attribute.GetUsage', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new IntegerStackItem(new BN(args[0].asAttribute().usage))], - }), - }), - - 'Neo.Attribute.GetData': createSysCall({ - name: 'Neo.Attribute.GetData', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [args[0].asAttributeStackItem().toValueStackItem()], - }), - }), - - 'Neo.Input.GetHash': createSysCall({ - name: 'Neo.Input.GetHash', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new UInt256StackItem(args[0].asInput().hash)], - }), - }), - - 'Neo.Input.GetIndex': createSysCall({ - name: 'Neo.Input.GetIndex', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new IntegerStackItem(new BN(args[0].asInput().index))], - }), - }), - - 'Neo.Output.GetAssetId': createSysCall({ - name: 'Neo.Output.GetAssetId', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new UInt256StackItem(args[0].asOutput().asset)], - }), - }), - - 'Neo.Output.GetValue': createSysCall({ - name: 'Neo.Output.GetValue', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new IntegerStackItem(args[0].asOutput().value)], - }), - }), - - 'Neo.Output.GetScriptHash': createSysCall({ - name: 'Neo.Output.GetScriptHash', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new UInt160StackItem(args[0].asOutput().address)], - }), - }), - - 'Neo.Account.GetScriptHash': createSysCall({ - name: 'Neo.Account.GetScriptHash', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new UInt160StackItem(args[0].asAccount().hash)], - }), - }), - - 'Neo.Account.GetVotes': createSysCall({ - name: 'Neo.Account.GetVotes', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new ArrayStackItem(args[0].asAccount().votes.map((vote) => new ECPointStackItem(vote)))], - }), - }), - - 'Neo.Account.GetBalance': createSysCall({ - name: 'Neo.Account.GetBalance', - in: 2, - out: 1, - invoke: async ({ context, args }) => { - const account = args[0].asAccount(); - const accountState = await context.blockchain.account.get({ - hash: account.hash, - }); - - const asset = common.uInt256ToHex(args[1].asUInt256()); - const balance = accountState.balances[asset]; - const result = balance === undefined ? utils.ZERO : balance; - - return { - context, - results: [new IntegerStackItem(result)], - }; - }, - }), - - 'Neo.Asset.GetAssetId': createSysCall({ - name: 'Neo.Asset.GetAssetId', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new UInt256StackItem(args[0].asAsset().hash)], - }), - }), - - 'Neo.Asset.GetAssetType': createSysCall({ - name: 'Neo.Asset.GetAssetType', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new IntegerStackItem(new BN(args[0].asAsset().type))], - }), - }), - - 'Neo.Asset.GetAmount': createSysCall({ - name: 'Neo.Asset.GetAmount', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new IntegerStackItem(new BN(args[0].asAsset().amount))], - }), - }), - - 'Neo.Asset.GetAvailable': createSysCall({ - name: 'Neo.Asset.GetAvailable', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new IntegerStackItem(new BN(args[0].asAsset().available))], - }), - }), - - 'Neo.Asset.GetPrecision': createSysCall({ - name: 'Neo.Asset.GetPrecision', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new IntegerStackItem(new BN(args[0].asAsset().precision))], - }), - }), - - 'Neo.Asset.GetOwner': createSysCall({ - name: 'Neo.Asset.GetOwner', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new ECPointStackItem(args[0].asAsset().owner)], - }), - }), - - 'Neo.Asset.GetAdmin': createSysCall({ - name: 'Neo.Asset.GetAdmin', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new UInt160StackItem(args[0].asAsset().admin)], - }), - }), - - 'Neo.Asset.GetIssuer': createSysCall({ - name: 'Neo.Asset.GetIssuer', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new UInt160StackItem(args[0].asAsset().issuer)], - }), - }), - - 'Neo.Contract.GetScript': createSysCall({ - name: 'Neo.Contract.GetScript', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new BufferStackItem(args[0].asContract().script)], - }), - }), - - 'Neo.Contract.IsPayable': createSysCall({ - name: 'Neo.Contract.IsPayable', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [new BooleanStackItem(args[0].asContract().payable)], - }), - }), - - 'Neo.Storage.GetContext': createSysCall({ - name: 'Neo.Storage.GetContext', - out: 1, - invoke: ({ context }) => ({ - context, - results: [new StorageContextStackItem(context.scriptHash)], - }), - }), - - 'Neo.Storage.GetReadOnlyContext': createSysCall({ - name: 'Neo.Storage.GetReadOnlyContext', - out: 1, - invoke: ({ context }) => ({ - context, - results: [new StorageContextStackItem(context.scriptHash).asReadOnly()], - }), - }), - - 'Neo.Storage.Get': createSysCall({ - name: 'Neo.Storage.Get', - in: 2, - out: 1, - fee: FEES.ONE_HUNDRED, - invoke: async ({ context, args }) => { - const hash = vmUtils.toStorageContext({ context, value: args[0] }).value; - await checkStorage({ context, hash }); - - const item = await context.blockchain.storageItem.tryGet({ - hash, - key: args[1].asBuffer(), - }); - - const result = item === undefined ? Buffer.from([]) : item.value; - - return { - context, - results: [new BufferStackItem(result)], - }; - }, - }), - - 'Neo.Storage.Find': createSysCall({ - name: 'Neo.Storage.Find', - in: 2, - out: 1, - invoke: async ({ context, args }) => { - const hash = vmUtils.toStorageContext({ context, value: args[0] }).value; - await checkStorage({ context, hash }); - - const prefix = args[1].asBuffer(); - const iterable = AsyncIterableX.from(context.blockchain.storageItem.getAll$({ hash, prefix })).pipe<{ - key: BufferStackItem; - value: BufferStackItem; - }>( - asyncMap(({ key, value }) => ({ - key: new BufferStackItem(key), - value: new BufferStackItem(value), - })), - ); - - return { - context, - results: [new IteratorStackItem(new StackItemIterator(iterable[Symbol.asyncIterator]()))], - }; - }, - }), - - 'Neo.StorageContext.AsReadOnly': createSysCall({ - name: 'Neo.StorageContext.AsReadOnly', - in: 1, - out: 1, - invoke: ({ context, args }) => ({ - context, - results: [vmUtils.toStorageContext({ context, value: args[0] }).asReadOnly()], - }), - }), - - 'Neo.Enumerator.Create': createSysCall({ - name: 'Neo.Enumerator.Create', - in: 1, - out: 1, - invoke: async ({ context, args }) => { - const iterable = AsyncIterableX.from(args[0].asArray().map((value) => ({ value }))); - - return { - context, - results: [new EnumeratorStackItem(new StackItemEnumerator(iterable[Symbol.asyncIterator]()))], - }; - }, - }), - - 'Neo.Enumerator.Next': createSysCall({ - name: 'Neo.Enumerator.Next', - in: 1, - out: 1, - invoke: async ({ context, args }) => { - const enumerator = args[0].asEnumerator(); - const value = await enumerator.next(); - - return { - context, - results: [new BooleanStackItem(value)], - }; - }, - }), - - 'Neo.Iterator.Create': createSysCall({ - name: 'Neo.Iterator.Create', - in: 1, - out: 1, - invoke: async ({ context, args }) => { - const iterable = args[0].isArray() - ? AsyncIterableX.from( - args[0].asArray().map((value, idx) => ({ - key: new IntegerStackItem(new BN(idx)), - value, - })), - ) - : AsyncIterableX.from( - commonUtils - .zip(args[0].asMapStackItem().keysArray(), args[0].asMapStackItem().valuesArray()) - .map(([key, value]) => ({ key, value })), - ); - - return { - context, - results: [new IteratorStackItem(new StackItemIterator(iterable[Symbol.asyncIterator]()))], - }; - }, - }), - - 'Neo.Iterator.Key': createSysCall({ - name: 'Neo.Iterator.Key', - in: 1, - out: 1, - invoke: async ({ context, args }) => ({ - context, - // tslint:disable-next-line no-any - results: [args[0].asIterator().key() as any], - }), - }), - - 'Neo.Enumerator.Value': createSysCall({ - name: 'Neo.Enumerator.Value', - in: 1, - out: 1, - invoke: async ({ context, args }) => ({ - context, - // tslint:disable-next-line no-any - results: [args[0].asEnumerator().value() as any], - }), - }), - - 'Neo.Enumerator.Concat': createSysCall({ - name: 'Neo.Enumerator.Concat', - in: 2, - out: 1, - invoke: async ({ context, args }) => ({ - context, - results: [new EnumeratorStackItem(args[0].asEnumerator().concat(args[1].asEnumerator()))], - }), - }), - - 'Neo.Iterator.Concat': createSysCall({ - name: 'Neo.Iterator.Concat', - in: 2, - out: 1, - invoke: async ({ context, args }) => ({ - context, - results: [new IteratorStackItem(args[0].asIterator().concatIterator(args[1].asIterator()))], - }), - }), - - 'Neo.Iterator.Keys': createSysCall({ - name: 'Neo.Iterator.Keys', - in: 1, - out: 1, - invoke: async ({ context, args }) => ({ - context, - results: [new EnumeratorStackItem(args[0].asIterator().keys())], - }), - }), - - 'Neo.Iterator.Values': createSysCall({ - name: 'Neo.Iterator.Values', - in: 1, - out: 1, - invoke: async ({ context, args }) => ({ - context, - results: [new EnumeratorStackItem(args[0].asIterator().values())], - }), - }), - - 'Neo.Account.SetVotes': createSysCall({ - name: 'Neo.Account.SetVotes', - in: 2, - fee: FEES.ONE_THOUSAND, - invoke: async ({ context, args }) => { - // This has been removed, but we keep it here so that we can do a full - // build of the chain - const address = args[0].asAccount().hash; - const votes = args[1].asArray().map((vote) => vote.asECPoint()); - const account = await context.blockchain.account.get({ hash: address }); - const asset = context.blockchain.settings.governingToken.hashHex; - const currentBalance = account.balances[asset]; - const balance = currentBalance === undefined ? utils.ZERO : currentBalance; - if (account.isFrozen) { - throw new AccountFrozenError(context); - } - if (balance.isZero() && votes.length > 0) { - throw new NotEligibleVoteError(context); - } - const valid = await checkWitness({ context, hash: address }); - if (!valid) { - throw new BadWitnessCheckError(context); - } - - const newAccount = await context.blockchain.account.update(account, { - votes, - }); - - if (context.init.listeners.onSetVotes !== undefined) { - context.init.listeners.onSetVotes({ address, votes }); - } - if (newAccount.isDeletable()) { - await context.blockchain.account.delete({ hash: address }); - } - - return { context }; - }, - }), - - 'Neo.Account.IsStandard': createSysCall({ - name: 'Neo.Account.IsStandard', - in: 1, - out: 1, - fee: FEES.ONE_HUNDRED, - invoke: async ({ context, args }) => { - const hash = args[0].asUInt160(); - const contract = await context.blockchain.contract.tryGet({ hash }); - - return { - context, - results: [new BooleanStackItem(contract === undefined || crypto.isStandardContract(contract.script))], - }; - }, - }), - - 'Neo.Validator.Register': createSysCall({ - name: 'Neo.Validator.Register', - in: 1, - out: 1, - fee: common.ONE_THOUSAND_FIXED8, - invoke: async ({ context, args }) => { - // This has been removed, but we keep it here so that we can do a full - // build of the chain - const publicKey = args[0].asECPoint(); - const valid = await checkWitnessPublicKey({ context, publicKey }); - if (!valid) { - throw new BadWitnessCheckError(context); - } - - let validator = await context.blockchain.validator.tryGet({ publicKey }); - if (validator === undefined) { - validator = new Validator({ publicKey }); - await context.blockchain.validator.add(validator); - } - - return { - context, - results: [new ValidatorStackItem(validator)], - }; - }, - }), - - 'Neo.Asset.Create': createSysCall({ - name: 'Neo.Asset.Create', - in: 7, - out: 1, - fee: common.FIVE_THOUSAND_FIXED8, - invoke: async ({ context, args }) => { - const { scriptContainer, triggerType } = context.init; - if (triggerType !== TriggerType.Application) { - throw new InvalidVerifySyscallError(context, 'Neo.Asset.Create'); - } - if (scriptContainer.type !== ScriptContainerType.Transaction) { - throw new UnexpectedScriptContainerError(context); - } - const transaction = scriptContainer.value; - if (transaction.type !== TransactionType.Invocation) { - throw new UnexpectedScriptContainerError(context); - } - - const assetType = assertAssetType(args[0].asBigIntegerUnsafe().toNumber()); - if (assetType === AssetType.GoverningToken || assetType === AssetType.UtilityToken) { - throw new InvalidAssetTypeError(context); - } - - const name = args[1].asString(); - const amount = args[2].asBigIntegerUnsafe(); - const precision = args[3].asBigIntegerUnsafe().toNumber(); - const owner = args[4].asECPoint(); - const admin = args[5].asUInt160(); - const issuer = args[6].asUInt160(); - - const valid = await checkWitnessPublicKey({ context, publicKey: owner }); - if (!valid) { - throw new BadWitnessCheckError(context); - } - - const asset = new Asset({ - hash: transaction.hash, - type: assetType, - name, - amount, - precision, - owner, - admin, - issuer, - expiration: context.blockchain.currentBlock.index + 1 + 2000000, - }); - - const result = new AssetStackItem(asset); - await context.blockchain.asset.add(asset); - - return { context, results: [result] }; - }, - }), - - 'Neo.Asset.Renew': ({ context: contextIn }) => { - const yearsIn = contextIn.stack[1].asBigInteger(contextIn.blockchain.currentBlockIndex); - - return createSysCall({ - name: 'Neo.Asset.Renew', - in: 2, - out: 1, - fee: common.FIVE_THOUSAND_FIXED8.mul(yearsIn), - invoke: async ({ context, args }) => { - if (context.init.triggerType !== TriggerType.Application) { - throw new InvalidVerifySyscallError(context, 'Neo.Asset.Renew'); - } - const { hash } = args[0].asAsset(); - const years = args[1].asBigInteger(contextIn.blockchain.currentBlockIndex); - - const asset = await context.blockchain.asset.get({ hash }); - let { expiration } = asset; - if (expiration < context.blockchain.currentBlock.index + 1) { - expiration = context.blockchain.currentBlock.index + 1; - } - - let newExpiration = new BN(expiration).add(years.mul(new BN(BLOCK_HEIGHT_YEAR))); - - if (newExpiration.gt(utils.UINT_MAX)) { - newExpiration = utils.UINT_MAX; - } - - await context.blockchain.asset.update(asset, { - expiration: newExpiration.toNumber(), - }); - - return { - context, - results: [new IntegerStackItem(newExpiration)], - }; - }, - })({ context: contextIn }); - }, - 'Neo.Contract.Create': getContractFee((argsIn, fee) => - createSysCall({ - name: 'Neo.Contract.Create', - in: 9, - out: 1, - fee, - invoke: async ({ context, args }) => { - if (context.init.triggerType !== TriggerType.Application) { - throw new InvalidVerifySyscallError(context, 'Neo.Contract.Create'); - } - const { contract } = await createContract({ context, args }); - const result = new ContractStackItem(contract); - - return { - context: { - ...context, - createdContracts: { - ...context.createdContracts, - [contract.hashHex]: context.scriptHash, - }, - }, - - results: [result], - }; - }, - })(argsIn), - ), - - 'Neo.Contract.Migrate': getContractFee((argsIn, fee) => - createSysCall({ - name: 'Neo.Contract.Migrate', - in: 9, - out: 1, - fee, - invoke: async (options) => { - if (options.context.init.triggerType !== TriggerType.Application) { - throw new InvalidVerifySyscallError(options.context, 'Neo.Contract.Migrate'); - } - const { context: contextIn, args } = options; - let context = contextIn; - const { contract, created } = await createContract({ context, args }); - if (contract.hasStorage && created) { - await context.blockchain.storageItem - .getAll$({ - hash: context.scriptHash, - }) - .pipe( - concatMap((item) => - defer(async () => - context.blockchain.storageItem.add( - new StorageItem({ - hash: contract.hash, - key: item.key, - value: item.value, - flags: StorageFlags.None, - }), - ), - ), - ), - ) - .toPromise(); - context = { - ...context, - createdContracts: { - ...context.createdContracts, - [contract.hashHex]: context.scriptHash, - }, - }; - } - - await destroyContract(options); - - if (context.init.listeners.onMigrateContract !== undefined) { - context.init.listeners.onMigrateContract({ - from: context.scriptHash, - to: contract.hash, - }); - } - - return { - context, - results: [new ContractStackItem(contract)], - }; - }, - })(argsIn), - ), - - 'Neo.Contract.GetStorageContext': createSysCall({ - name: 'Neo.Contract.GetStorageContext', - in: 1, - out: 1, - invoke: ({ context, args }) => { - const contract = args[0].asContract(); - const createdScriptHash = context.createdContracts[contract.hashHex]; - if (!common.uInt160Equal(createdScriptHash, context.scriptHash)) { - throw new InvalidContractGetStorageContextError(context); - } - - return { - context, - results: [new StorageContextStackItem(contract.hash)], - }; - }, - }), - - 'Neo.Contract.Destroy': createSysCall({ - name: 'Neo.Contract.Destroy', - invoke: async (options) => { - if (options.context.init.triggerType !== TriggerType.Application) { - throw new InvalidVerifySyscallError(options.context, 'Neo.Contract.Destroy'); - } - await destroyContract(options); - - return { context: options.context }; - }, - }), - - 'Neo.Storage.Put': createPut({ name: 'Neo.Storage.Put' }), - - 'Neo.Storage.PutEx': createPut({ name: 'Neo.Storage.PutEx' }), - - 'Neo.Storage.Delete': createSysCall({ - name: 'Neo.Storage.Delete', - in: 2, - fee: FEES.ONE_HUNDRED, - invoke: async ({ context, args }) => { - const hash = vmUtils.toStorageContext({ - context, - value: args[0], - write: true, - }).value; - await checkStorage({ context, hash }); - const key = args[1].asBuffer(); - const existing = await context.blockchain.storageItem.tryGet({ hash, key }); - if (existing !== undefined) { - if (hasStorageFlag(existing.flags, StorageFlags.Constant)) { - throw new ConstantStorageError(context, key); - } - - await context.blockchain.storageItem.delete({ hash, key }); - } - - return { context }; - }, - }), - - 'System.ExecutionEngine.GetScriptContainer': createSysCall({ - name: 'System.ExecutionEngine.GetScriptContainer', - out: 1, - invoke: async ({ context }) => { - let result; - const { scriptContainer } = context.init; - switch (scriptContainer.type) { - case ScriptContainerType.Transaction: - result = new TransactionStackItem(scriptContainer.value); - break; - case ScriptContainerType.Block: - result = new BlockStackItem(scriptContainer.value); - break; - case ScriptContainerType.Consensus: - result = new ConsensusPayloadStackItem(scriptContainer.value); - break; - /* istanbul ignore next */ - default: - commonUtils.assertNever(scriptContainer); - throw new Error('For TS'); - } - - return { context, results: [result] }; - }, - }), - - 'System.ExecutionEngine.GetExecutingScriptHash': createSysCall({ - name: 'System.ExecutionEngine.GetExecutingScriptHash', - out: 1, - invoke: async ({ context }) => ({ - context, - results: [new UInt160StackItem(context.scriptHash)], - }), - }), - - 'System.ExecutionEngine.GetCallingScriptHash': createSysCall({ - name: 'System.ExecutionEngine.GetCallingScriptHash', - out: 1, - invoke: async ({ context }) => ({ - context, - results: [ - context.scriptHashStack.length > 1 - ? new UInt160StackItem(context.scriptHashStack[1]) - : new BufferStackItem(Buffer.alloc(0, 0)), - ], - }), - }), - - 'System.ExecutionEngine.GetEntryScriptHash': createSysCall({ - name: 'System.ExecutionEngine.GetEntryScriptHash', - out: 1, - invoke: async ({ context }) => ({ - context, - results: [new UInt160StackItem(context.scriptHashStack[context.scriptHashStack.length - 1])], - }), - }), -}; - -export const SYSCALL_ALIASES: { readonly [key: string]: string | undefined } = { - 'Neo.Iterator.Next': 'Neo.Enumerator.Next', - 'Neo.Iterator.Value': 'Neo.Enumerator.Value', - 'System.Runtime.GetTrigger': 'Neo.Runtime.GetTrigger', - 'System.Runtime.CheckWitness': 'Neo.Runtime.CheckWitness', - 'System.Runtime.Notify': 'Neo.Runtime.Notify', - 'System.Runtime.Log': 'Neo.Runtime.Log', - 'System.Runtime.GetTime': 'Neo.Runtime.GetTime', - 'System.Runtime.Serialize': 'Neo.Runtime.Serialize', - 'System.Runtime.Deserialize': 'Neo.Runtime.Deserialize', - 'System.Blockchain.GetHeight': 'Neo.Blockchain.GetHeight', - 'System.Blockchain.GetHeader': 'Neo.Blockchain.GetHeader', - 'System.Blockchain.GetBlock': 'Neo.Blockchain.GetBlock', - 'System.Blockchain.GetTransaction': 'Neo.Blockchain.GetTransaction', - 'System.Blockchain.GetTransactionHeight': 'Neo.Blockchain.GetTransactionHeight', - 'System.Blockchain.GetContract': 'Neo.Blockchain.GetContract', - 'System.Header.GetIndex': 'Neo.Header.GetIndex', - 'System.Header.GetHash': 'Neo.Header.GetHash', - 'System.Header.GetPrevHash': 'Neo.Header.GetPrevHash', - 'System.Header.GetTimestamp': 'Neo.Header.GetTimestamp', - 'System.Block.GetTransactionCount': 'Neo.Block.GetTransactionCount', - 'System.Block.GetTransactions': 'Neo.Block.GetTransactions', - 'System.Block.GetTransaction': 'Neo.Block.GetTransaction', - 'System.Transaction.GetHash': 'Neo.Transaction.GetHash', - 'System.Contract.Destroy': 'Neo.Contract.Destroy', - 'System.Contract.GetStorageContext': 'Neo.Contract.GetStorageContext', - 'System.Storage.GetContext': 'Neo.Storage.GetContext', - 'System.Storage.GetReadOnlyContext': 'Neo.Storage.GetReadOnlyContext', - 'System.Storage.Get': 'Neo.Storage.Get', - 'System.Storage.Put': 'Neo.Storage.Put', - 'System.Storage.Delete': 'Neo.Storage.Delete', - 'System.StorageContext.AsReadOnly': 'Neo.StorageContext.AsReadOnly', - 'AntShares.Runtime.CheckWitness': 'Neo.Runtime.CheckWitness', - 'AntShares.Runtime.Notify': 'Neo.Runtime.Notify', - 'AntShares.Runtime.Log': 'Neo.Runtime.Log', - 'AntShares.Blockchain.GetHeight': 'Neo.Blockchain.GetHeight', - 'AntShares.Blockchain.GetHeader': 'Neo.Blockchain.GetHeader', - 'AntShares.Blockchain.GetBlock': 'Neo.Blockchain.GetBlock', - 'AntShares.Blockchain.GetTransaction': 'Neo.Blockchain.GetTransaction', - 'AntShares.Blockchain.GetAccount': 'Neo.Blockchain.GetAccount', - 'AntShares.Blockchain.GetValidators': 'Neo.Blockchain.GetValidators', - 'AntShares.Blockchain.GetAsset': 'Neo.Blockchain.GetAsset', - 'AntShares.Blockchain.GetContract': 'Neo.Blockchain.GetContract', - 'AntShares.Header.GetHash': 'Neo.Header.GetHash', - 'AntShares.Header.GetVersion': 'Neo.Header.GetVersion', - 'AntShares.Header.GetPrevHash': 'Neo.Header.GetPrevHash', - 'AntShares.Header.GetMerkleRoot': 'Neo.Header.GetMerkleRoot', - 'AntShares.Header.GetTimestamp': 'Neo.Header.GetTimestamp', - 'AntShares.Header.GetConsensusData': 'Neo.Header.GetConsensusData', - 'AntShares.Header.GetNextConsensus': 'Neo.Header.GetNextConsensus', - 'AntShares.Block.GetTransactionCount': 'Neo.Block.GetTransactionCount', - 'AntShares.Block.GetTransactions': 'Neo.Block.GetTransactions', - 'AntShares.Block.GetTransaction': 'Neo.Block.GetTransaction', - 'AntShares.Transaction.GetHash': 'Neo.Transaction.GetHash', - 'AntShares.Transaction.GetType': 'Neo.Transaction.GetType', - 'AntShares.Transaction.GetAttributes': 'Neo.Transaction.GetAttributes', - 'AntShares.Transaction.GetInputs': 'Neo.Transaction.GetInputs', - 'AntShares.Transaction.GetOutputs': 'Neo.Transaction.GetOutputs', - 'AntShares.Transaction.GetReferences': 'Neo.Transaction.GetReferences', - 'AntShares.Attribute.GetUsage': 'Neo.Attribute.GetUsage', - 'AntShares.Attribute.GetData': 'Neo.Attribute.GetData', - 'AntShares.Input.GetHash': 'Neo.Input.GetHash', - 'AntShares.Input.GetIndex': 'Neo.Input.GetIndex', - 'AntShares.Output.GetAssetId': 'Neo.Output.GetAssetId', - 'AntShares.Output.GetValue': 'Neo.Output.GetValue', - 'AntShares.Output.GetScriptHash': 'Neo.Output.GetScriptHash', - 'AntShares.Account.GetScriptHash': 'Neo.Account.GetScriptHash', - 'AntShares.Account.GetVotes': 'Neo.Account.GetVotes', - 'AntShares.Account.GetBalance': 'Neo.Account.GetBalance', - 'AntShares.Asset.GetAssetId': 'Neo.Asset.GetAssetId', - 'AntShares.Asset.GetAssetType': 'Neo.Asset.GetAssetType', - 'AntShares.Asset.GetAmount': 'Neo.Asset.GetAmount', - 'AntShares.Asset.GetAvailable': 'Neo.Asset.GetAvailable', - 'AntShares.Asset.GetPrecision': 'Neo.Asset.GetPrecision', - 'AntShares.Asset.GetOwner': 'Neo.Asset.GetOwner', - 'AntShares.Asset.GetAdmin': 'Neo.Asset.GetAdmin', - 'AntShares.Asset.GetIssuer': 'Neo.Asset.GetIssuer', - 'AntShares.Contract.GetScript': 'Neo.Contract.GetScript', - 'AntShares.Storage.GetContext': 'Neo.Storage.GetContext', - 'AntShares.Storage.Get': 'Neo.Storage.Get', - 'AntShares.Account.SetVotes': 'Neo.Account.SetVotes', - 'AntShares.Validator.Register': 'Neo.Validator.Register', - 'AntShares.Asset.Create': 'Neo.Asset.Create', - 'AntShares.Asset.Renew': 'Neo.Asset.Renew', - 'AntShares.Contract.Create': 'Neo.Contract.Create', - 'AntShares.Contract.Migrate': 'Neo.Contract.Migrate', - 'AntShares.Contract.GetStorageContext': 'Neo.Contract.GetStorageContext', - 'AntShares.Contract.Destroy': 'Neo.Contract.Destroy', - 'AntShares.Storage.Put': 'Neo.Storage.Put', - 'AntShares.Storage.Delete': 'Neo.Storage.Delete', -}; - -const SYS_CALL_STRING_LENGTH = 252; - -const SYSCALLS_BY_HASH = _.fromPairs( - Object.entries(SYSCALLS).map(([key, value]) => [toSysCallHash(key as SysCallEnum), value]), -); - -export const lookupSysCall = ({ context }: { readonly context: ExecutionContext }) => { - const { code, pc } = context; - const reader = new BinaryReader(code, pc); - - const sysCallBytes = reader.readVarBytesLE(SYS_CALL_STRING_LENGTH); - let key: SysCallHash; - let debugName: string; - if (sysCallBytes.length === 4) { - key = sysCallBytes.readUInt32LE(0) as SysCallHash; - debugName = sysCallBytes.toString('hex'); - } else { - const sysCallName = utils.toASCII(sysCallBytes); - const aliasName = SYSCALL_ALIASES[sysCallName]; - const canonicalName = aliasName === undefined ? sysCallName : aliasName; - key = toSysCallHash(assertSysCall(canonicalName)); - debugName = canonicalName; - } - const createCall = SYSCALLS_BY_HASH[key]; - // tslint:disable-next-line: strict-type-predicates - if (createCall === undefined) { - throw new UnknownSysCallError(context, debugName); - } - - const nextContext = { - ...context, - pc: reader.index, - }; - - return createCall({ context: nextContext }); -}; diff --git a/packages/neo-one-node-vm/src/types.ts b/packages/neo-one-node-vm/src/types.ts new file mode 100644 index 0000000000..4a08996439 --- /dev/null +++ b/packages/neo-one-node-vm/src/types.ts @@ -0,0 +1,26 @@ +// tslint:disable no-any + +// TODO: not implemented +export type ExecutionContext = any; + +export interface DispatchMethodNoArgs { + readonly returnType: Return; +} + +export interface DispatchMethodArgs extends DispatchMethodNoArgs { + readonly args: Args; +} + +export type DispatchMethod = V extends undefined + ? DispatchMethodNoArgs + : DispatchMethodArgs; + +export interface DefaultMethods { + readonly [k: string]: DispatchMethod; +} + +export type DispatcherFunc = ( + input: Methods[T] extends DispatchMethodArgs + ? { readonly method: T; readonly args: Methods[T]['args'] } + : { readonly method: T }, +) => Methods[T]['returnType']; diff --git a/packages/neo-one-node-vm/src/utils.ts b/packages/neo-one-node-vm/src/utils.ts new file mode 100644 index 0000000000..3521cd36cf --- /dev/null +++ b/packages/neo-one-node-vm/src/utils.ts @@ -0,0 +1,80 @@ +import { common, ECPoint } from '@neo-one/client-common'; +import { func, Params, Source, TSQL } from '@neo-one/edge'; +import { Settings } from '@neo-one/node-core'; +import path from 'path'; +import { InvalidByteError, InvalidIntError, InvalidUIntError } from './errors'; +import { ProtocolSettings } from './Methods'; +import { DefaultMethods, DispatcherFunc } from './types'; + +const directory = path.basename(__dirname); +const APP_ROOT = + directory === 'cjs' || directory === 'esm' ? path.resolve(__dirname, '..', '..') : path.resolve(__dirname, '..'); +const CSHARP_APP_ROOT = process.env.EDGE_APP_ROOT ?? path.resolve(APP_ROOT, 'lib', 'bin', 'Debug', 'netcoreapp3.0'); + +export const constants = { + APP_ROOT, + CSHARP_APP_ROOT, +}; + +type EdgeOptions = (() => void) | string | Params | Source | TSQL; + +export const createCSharpDispatchInvoke = ( + options: EdgeOptions, +): DispatcherFunc => { + if (process.env.EDGE_APP_ROOT === undefined) { + process.env.EDGE_APP_ROOT = CSHARP_APP_ROOT; + } + + if (process.env.EDGE_USE_CORECLR === undefined) { + process.env.EDGE_USE_CORECLR = '1'; + } + + const invokeFunction = func(options); + + return (input) => invokeFunction(input, true); +}; + +export const blockchainSettingsToProtocolSettings = (settingsIn: Settings) => ({ + magic: settingsIn.messageMagic, + addressVersion: settingsIn.addressVersion, + standbyCommittee: settingsIn.standbyCommittee.map((ecpoint: ECPoint) => common.ecPointToString(ecpoint)), + committeeMembersCount: settingsIn.standbyCommittee.length, + validatorsCount: settingsIn.validatorsCount, + millisecondsPerBlock: settingsIn.millisecondsPerBlock, + memoryPoolMaxTransactions: settingsIn.memoryPoolMaxTransactions, +}); + +const numIsUint = (num: number) => num >= 0 && num < 2 ** 32 - 1; +const numIsInt = (num: number) => num >= -(2 ** 32 / 2) && num <= 2 ** 32 / 2 - 1; +const numIsByte = (num: number) => num >= 0 && num <= 2 ** 8 - 1; + +export const validateProtocolSettings = (settings: ProtocolSettings) => { + const { + magic, + addressVersion, + committeeMembersCount, + validatorsCount, + millisecondsPerBlock, + memoryPoolMaxTransactions, + } = settings; + if (magic !== undefined && !numIsUint(magic)) { + throw new InvalidUIntError(magic); + } + if (addressVersion !== undefined && !numIsByte(addressVersion)) { + throw new InvalidByteError(addressVersion); + } + if (committeeMembersCount !== undefined && !numIsInt(committeeMembersCount)) { + throw new InvalidIntError(committeeMembersCount); + } + if (validatorsCount !== undefined && !numIsInt(validatorsCount)) { + throw new InvalidIntError(validatorsCount); + } + if (millisecondsPerBlock !== undefined && !numIsUint(millisecondsPerBlock)) { + throw new InvalidUIntError(millisecondsPerBlock); + } + if (memoryPoolMaxTransactions !== undefined && !numIsInt(memoryPoolMaxTransactions)) { + throw new InvalidIntError(memoryPoolMaxTransactions); + } + + return settings; +}; diff --git a/packages/neo-one-node-vm/src/vmUtils.ts b/packages/neo-one-node-vm/src/vmUtils.ts deleted file mode 100644 index 51b81501a1..0000000000 --- a/packages/neo-one-node-vm/src/vmUtils.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { utils } from '@neo-one/client-common'; -// tslint:disable-next-line:match-default-export-name -import bitwise from 'bitwise'; -// tslint:disable-next-line:no-submodule-imports -import { Bit, UInt8 } from 'bitwise/types'; -import { BN } from 'bn.js'; -import _ from 'lodash'; -import { ExecutionContext } from './constants'; -import { NumberTooLargeError, ReadOnlyStorageContextError } from './errors'; -import { StackItem, StorageContextStackItem } from './stackItem'; - -const toNumber = (context: ExecutionContext, value: BN): number => { - try { - return value.toNumber(); - } catch { - throw new NumberTooLargeError(context, value); - } -}; - -const shiftLeft = (value: BN, shift: BN): BN => value.mul(utils.TWO.pow(shift)); - -const shiftRight = (value: BN, shift: BN): BN => { - let result = utils.ZERO; - if (new BN(utils.toSignedBuffer(value).length * 8).gt(shift)) { - result = value.div(utils.TWO.pow(shift)); - if (result.mul(shift).lt(utils.ZERO)) { - result = result.sub(utils.ONE); - } - } - - if (result.eq(utils.ZERO) && value.isNeg()) { - result = utils.NEGATIVE_ONE; - } - - return result; -}; - -const toStorageContext = ({ - context, - value, - write = false, -}: { - readonly context: ExecutionContext; - readonly value: StackItem; - readonly write?: boolean; -}): StorageContextStackItem => { - const item = value.asStorageContextStackItem({ - currentBlockIndex: context.blockchain.currentBlockIndex, - vm: context.blockchain.settings.vm, - scriptHash: context.scriptHash, - callingScriptHash: context.callingScriptHash, - entryScriptHash: context.entryScriptHash, - }); - - if (write && item.isReadOnly) { - throw new ReadOnlyStorageContextError(context); - } - - return item; -}; - -const leftPad = (value: Buffer, length: number): Buffer => { - if (value.length === 0) { - return Buffer.alloc(0, length); - } - - const lastByte = bitwise.byte.read(value[value.length - 1] as UInt8); - - return Buffer.concat([ - value.slice(0, -1), - bitwise.buffer.create( - lastByte - .slice(0, -1) - .concat(_.range((length - value.length) * 8).map(() => 0 as Bit)) - .concat([lastByte[7]]), - ), - ]); -}; - -const bitwiseOp = (func: (a: Buffer, b: Buffer) => Buffer, a: BN, b: BN): BN => { - let aBuffer = utils.toSignedBuffer(a); - let bBuffer = utils.toSignedBuffer(b); - - if (aBuffer.length < bBuffer.length) { - aBuffer = leftPad(aBuffer, bBuffer.length); - } else if (aBuffer.length > bBuffer.length) { - bBuffer = leftPad(bBuffer, aBuffer.length); - } - - return utils.fromSignedBuffer(func(aBuffer, bBuffer)); -}; - -export const vmUtils = { - toNumber, - toStorageContext, - shiftLeft, - shiftRight, - bitwiseOp, -}; diff --git a/packages/neo-one-node-vm/tsconfig.json b/packages/neo-one-node-vm/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-node-vm/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-node/.npmignore b/packages/neo-one-node/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-node/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-node/CHANGELOG.json b/packages/neo-one-node/CHANGELOG.json new file mode 100644 index 0000000000..fe765ef4ce --- /dev/null +++ b/packages/neo-one-node/CHANGELOG.json @@ -0,0 +1,191 @@ +{ + "name": "@neo-one/node", + "entries": [ + { + "version": "3.0.0", + "tag": "@neo-one/node_v3.0.0", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "major": [ + { + "comment": "3.0.0preview3-alpha release bump" + } + ], + "none": [ + { + "comment": "Pin level-js and levelup deps." + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-blockchain\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-http-rpc\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-native\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-network\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-offline\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-protocol\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-storage-levelup\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-vm\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-neo-settings\" from `^2.7.0` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/node_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Add appropriate @types dependencies." + }, + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "dependency": [ + { + "comment": "Dependency @neo-one/client-switch version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.6.0` to `^2.6.1`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/node_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "remove opencensus metrics temporarily" + }, + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-blockchain\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-http-rpc\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-network\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-offline\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-protocol\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-storage-levelup\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-vm\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/node_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-blockchain\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-core\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-http-rpc\" from `^2.3.1` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-network\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-offline\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-protocol\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-storage-levelup\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-vm\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-node/CHANGELOG.md b/packages/neo-one-node/CHANGELOG.md index 506bf7c58c..85c6a6966d 100644 --- a/packages/neo-one-node/CHANGELOG.md +++ b/packages/neo-one-node/CHANGELOG.md @@ -1,193 +1,42 @@ -# Change Log +# Change Log - @neo-one/node -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -## [2.3.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node@2.3.0...@neo-one/node@2.3.1) (2019-11-20) +## 3.0.0 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/node +### Breaking changes +- 3.0.0preview3-alpha release bump +### Updates +- Pin level-js and levelup deps. +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node@2.1.8...@neo-one/node@2.3.0) (2019-10-23) +### Patches -**Note:** Version bump only for package @neo-one/node +- Add appropriate @types dependencies. +- Upgrade TypeScript from v3.8.3 to v3.9.5 +### Updates +- bump package version for future release clarity +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes -## [2.1.8](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node@2.1.7...@neo-one/node@2.1.8) (2019-10-23) +- remove opencensus metrics temporarily +- update package release process to take better advantage of rush tooling -**Note:** Version bump only for package @neo-one/node +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT +### Minor changes +- Migrate to Rush - - -## [2.1.7](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node@2.1.6...@neo-one/node@2.1.7) (2019-10-23) - -**Note:** Version bump only for package @neo-one/node - - - - - -## [2.1.6](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node@2.1.5...@neo-one/node@2.1.6) (2019-09-04) - -**Note:** Version bump only for package @neo-one/node - - - - - -## [2.1.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node@2.1.4...@neo-one/node@2.1.5) (2019-09-03) - -**Note:** Version bump only for package @neo-one/node - - - - - -## [2.1.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node@2.1.3...@neo-one/node@2.1.4) (2019-09-02) - -**Note:** Version bump only for package @neo-one/node - - - - - -## [2.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node@2.1.2...@neo-one/node@2.1.3) (2019-08-31) - -**Note:** Version bump only for package @neo-one/node - - - - - -## [2.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node@2.1.1...@neo-one/node@2.1.2) (2019-08-30) - -**Note:** Version bump only for package @neo-one/node - - - - - -## [2.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node@2.1.0...@neo-one/node@2.1.1) (2019-08-23) - -**Note:** Version bump only for package @neo-one/node - - - - - -# [2.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node@2.0.0...@neo-one/node@2.1.0) (2019-08-22) - - -### Bug Fixes - -* **build:** change tracing exports slightly ([#1698](https://github.com/neo-one-suite/neo-one/issues/1698)) ([d606d33](https://github.com/neo-one-suite/neo-one/commit/d606d33)) -* **web:** fix logging / opencensus imports for website ([#1691](https://github.com/neo-one-suite/neo-one/issues/1691)) ([1e8a886](https://github.com/neo-one-suite/neo-one/commit/1e8a886)) - - -### Features - -* **monitor:** remove @neo-one/monitor. replace with opencensus, pino, and debug ([#1597](https://github.com/neo-one-suite/neo-one/issues/1597)) ([4b1a28f](https://github.com/neo-one-suite/neo-one/commit/4b1a28f)) - - - - - -# [2.0.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node@1.1.4...@neo-one/node@2.0.0) (2019-07-29) - - -### chore - -* **node:** re-organize '@neo-one/node-bin' configuration layout ([1430584](https://github.com/neo-one-suite/neo-one/commit/1430584)), closes [#1102](https://github.com/neo-one-suite/neo-one/issues/1102) - - -### BREAKING CHANGES - -* **node:** old node-bin configs/.rc will almost surely not work. While I update the documentation you can refer here for a rough draft of the new layout: https://gist.github.com/danwbyrne/c6ee99309fea79d90ac3044c0e6c25fe - - - - - -## [1.1.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node@1.1.3...@neo-one/node@1.1.4) (2019-06-20) - -**Note:** Version bump only for package @neo-one/node - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node@1.1.2...@neo-one/node@1.1.3) (2019-06-04) - - -### Bug Fixes - -* **@neo-one/types:** eliminate global types from @neo-one/types ([004330d](https://github.com/neo-one-suite/neo-one/commit/004330d)) - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node@1.1.1...@neo-one/node@1.1.2) (2019-04-12) - - -### Bug Fixes - -* **deps:** update dependency leveldown to v5 ([b729c79](https://github.com/neo-one-suite/neo-one/commit/b729c79)) - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node@1.1.0...@neo-one/node@1.1.1) (2019-03-27) - -**Note:** Version bump only for package @neo-one/node - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node@1.0.2...@neo-one/node@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node@1.0.2-alpha.0...@neo-one/node@1.0.2) (2019-02-21) - -**Note:** Version bump only for package @neo-one/node - - - - - -## [1.0.2-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node@1.0.1...@neo-one/node@1.0.2-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **deps:** update dependency abstract-leveldown to v6.0.1 ([6e2dc61](https://github.com/neo-one-suite/neo-one/commit/6e2dc61)) -* **deps:** update dependency cross-fetch to v3.0.1 ([e7ed336](https://github.com/neo-one-suite/neo-one/commit/e7ed336)) -* **deps:** update dependency rxjs to v6.4.0 ([e28af2a](https://github.com/neo-one-suite/neo-one/commit/e28af2a)) - - -### Features - -* **node:** Add backup config and prepare the node for automated backups. ([523fa5b](https://github.com/neo-one-suite/neo-one/commit/523fa5b)) - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/node@1.0.0...@neo-one/node@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/node diff --git a/packages/neo-one-node/gulpfile.js b/packages/neo-one-node/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-node/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-node/package.json b/packages/neo-one-node/package.json index 641f8bcf10..ec080fa20b 100644 --- a/packages/neo-one-node/package.json +++ b/packages/neo-one-node/package.json @@ -1,31 +1,51 @@ { "name": "@neo-one/node", - "version": "2.3.1", + "version": "3.0.0", "description": "NEOβ€’ONE NEO full node.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/client-switch": "^2.3.0", - "@neo-one/logger": "^2.3.0", - "@neo-one/node-blockchain": "^2.3.0", - "@neo-one/node-core": "^2.3.0", - "@neo-one/node-http-rpc": "^2.3.1", - "@neo-one/node-network": "^2.3.0", - "@neo-one/node-offline": "^2.3.0", - "@neo-one/node-protocol": "^2.3.0", - "@neo-one/node-storage-levelup": "^2.3.0", - "@neo-one/node-vm": "^2.3.0", - "@neo-one/utils": "^2.3.0", + "@neo-one/client-switch": "^3.0.0", + "@neo-one/logger": "^2.6.1", + "@neo-one/node-blockchain": "^3.0.0", + "@neo-one/node-core": "^3.0.0", + "@neo-one/node-http-rpc": "^3.0.0", + "@neo-one/node-native": "^3.0.0", + "@neo-one/node-network": "^3.0.0", + "@neo-one/node-offline": "^3.0.0", + "@neo-one/node-protocol": "^3.0.0", + "@neo-one/node-storage-levelup": "^3.0.0", + "@neo-one/node-vm": "^3.0.0", + "@neo-one/utils": "^3.0.0", + "@types/abstract-leveldown": "^5.0.1", "abstract-leveldown": "^6.0.3", "fs-extra": "^8.1.0", "leveldown": "^5.1.1", - "levelup": "^4.1.0", + "levelup": "4.1.0", + "rocksdb": "^4.1.0", + "rxjs": "^6.5.3", "tslib": "^1.10.0" }, "devDependencies": { - "@types/abstract-leveldown": "^5.0.1", + "@neo-one/client-common": "^3.0.0", + "@neo-one/build-tools": "^1.0.0", + "@neo-one/node-neo-settings": "^3.0.0", "@types/fs-extra": "^8.0.0", + "@types/jest": "^24.0.18", "@types/leveldown": "^4.0.0", - "@types/levelup": "^3.1.1" - }, - "sideEffects": false + "@types/levelup": "^3.1.1", + "@types/memdown": "^3.0.0", + "@types/rocksdb": "3.0.0", + "bn.js": "^5.0.0", + "gulp": "~4.0.2", + "memdown": "^5.0.0" + } } diff --git a/packages/neo-one-node/src/__data__/data.ts b/packages/neo-one-node/src/__data__/data.ts new file mode 100644 index 0000000000..6ab55b78de --- /dev/null +++ b/packages/neo-one-node/src/__data__/data.ts @@ -0,0 +1,63 @@ +import { BlockJSON, common, crypto, JSONHelper, toWitnessScope, WitnessScopeModel } from '@neo-one/client-common'; +import { Block, ConsensusData, Signer, Transaction, Witness } from '@neo-one/node-core'; +import { BN } from 'bn.js'; +import { debugBlockJSON, genesisJSON, secondBlockJSON, thirdBlockJSON } from './jsonBlocks'; + +const convertBlock = (json: BlockJSON, messageMagic: number) => + new Block({ + version: json.version, + previousHash: JSONHelper.readUInt256(json.previousblockhash), + timestamp: new BN(json.time), + index: json.index, + nextConsensus: crypto.addressToScriptHash({ + addressVersion: common.NEO_ADDRESS_VERSION, + address: json.nextconsensus, + }), + merkleRoot: JSONHelper.readUInt256(json.merkleroot), + witness: new Witness({ + invocation: JSONHelper.readBase64Buffer(json.witnesses[0].invocation), + verification: JSONHelper.readBase64Buffer(json.witnesses[0].verification), + }), + transactions: json.tx.map( + (tx) => + new Transaction({ + hash: JSONHelper.readUInt256(tx.hash), + nonce: tx.nonce, + attributes: [], + script: JSONHelper.readBase64Buffer(tx.script), + systemFee: JSONHelper.readUInt64LE(tx.sysfee), + networkFee: JSONHelper.readUInt64LE(tx.netfee), + validUntilBlock: tx.validuntilblock, + witnesses: tx.witnesses.map( + (witness) => + new Witness({ + invocation: JSONHelper.readBase64Buffer(witness.invocation), + verification: JSONHelper.readBase64Buffer(witness.verification), + }), + ), + version: tx.version, + signers: tx.signers.map( + (signer) => + new Signer({ + account: JSONHelper.readUInt160(signer.account), + scopes: (signer.scopes as any) === 'FeeOnly' ? WitnessScopeModel.None : toWitnessScope(signer.scopes), + }), + ), + messageMagic, + }), + ), + consensusData: json.consensusdata + ? new ConsensusData({ + primaryIndex: json.consensusdata.primary, + nonce: new BN(json.consensusdata.nonce, 16), + }) + : undefined, + messageMagic, + }); + +export const getData = (messageMagic: number) => ({ + genesisBlock: convertBlock(genesisJSON as any, messageMagic), + secondBlock: convertBlock(secondBlockJSON as any, messageMagic), + thirdBlock: convertBlock(thirdBlockJSON as any, messageMagic), + debugBlock: convertBlock(debugBlockJSON as any, messageMagic), +}); diff --git a/packages/neo-one-node/src/__data__/index.ts b/packages/neo-one-node/src/__data__/index.ts new file mode 100644 index 0000000000..3707679222 --- /dev/null +++ b/packages/neo-one-node/src/__data__/index.ts @@ -0,0 +1 @@ +export * from './data'; diff --git a/packages/neo-one-node/src/__data__/jsonBlocks.ts b/packages/neo-one-node/src/__data__/jsonBlocks.ts new file mode 100644 index 0000000000..e048e1fc48 --- /dev/null +++ b/packages/neo-one-node/src/__data__/jsonBlocks.ts @@ -0,0 +1,150 @@ +export const genesisJSON = { + hash: '0xc359030132be10fd19cfd0a27e289fe04acb0c5c4ca5254af8a2d99498c7da45', + size: 172, + version: 0, + previousblockhash: '0x0000000000000000000000000000000000000000000000000000000000000000', + merkleroot: '0x948aad0908a742eec79c52a0a4d5f95b1683a9adc3c2700211f425d49693878d', + time: 1468595301000, + index: 0, + nextconsensus: 'NgPkjjLTNcQad99iRYeXRUuowE4gxLAnDL', + witnesses: [ + { + invocation: '', + verification: 'EQ==', + }, + ], + consensusdata: { + primary: 0, + nonce: '000000007c2bac1d', + }, + tx: [ + { + hash: '0x173dcbc4a88995a0cf7bdd006923d148f787f76ca75621dc4c440ca6d9afbc73', + size: 58, + version: 0, + nonce: 0, + sender: 'NeN4xPMn4kHoj7G8Lciq9oorgLTvqt4qi1', + sysfee: '0', + netfee: '0', + validuntilblock: 0, + signers: [ + { + account: '0xa7213b15cc18d19c810f644e37411d882ee561ca', + scopes: 'FeeOnly', // FeeOnly should be None. This indicates that this JSON data could be from Preview 2 or earlier, not Preview 3 + }, + ], + attributes: [], + script: 'QRI+f+g=', + witnesses: [ + { + invocation: '', + verification: 'EQ==', + }, + ], + }, + ], + confirmations: 291297, + nextblockhash: '0x8f30c34a8a8ef997155aa4a0ef6664d872a127ecc3bb6a85b7bbc55d6d9912f5', +}; + +export const secondBlockJSON = { + hash: '0x2cf3b022f8ef6b863f47746ce9a9e38e3f1762ea47f3ede3be81118c1fa1ee24', + size: 700, + version: 0, + previousblockhash: '0xc4d50ea6bd8e0d1422714f8edbd4eee182b9f6958b2b0795bf6f3e9f9117ee03', + merkleroot: '0x3443a50bc7b0e475ce658c9f089656b41c8bb26abf5c4ce1df88513e63b29ab8', + time: 1608609566819, + index: 1, + nextconsensus: 'NgPkjjLTNcQad99iRYeXRUuowE4gxLAnDL', + witnesses: [ + { + invocation: + 'DEBOggaxB6SzzC40ATwnTZ7MibqI2otBM0q1QtKHqmXnBU6PmHXOXASYcO1evD/yptiwRW/k1b2E5I50W933JdM4DEBfe8Tz4SYWgwYxznqpjoRftsxYNErtdKrkmmQiyd01DTIuE7k96KfoEkixwtzI00fJr90NB+upKXakAdN9sauWDEDkDsyC7mCGZoEMoAIE3oLDgvYclrYu+HNtDMBpNV1cDmh7dIo/QTDS4klaGoPq6plz/y8r9WEYSU1HueXkxPGDDEBDEN06fn+gPez+jkOHNVbddWImxlwHtR4CZtQyFyA8lo0x+rg3z6gq+mr4jrRGFKyuDoDUjvlanQiyT49z2WeRDEDDpBV3R0smZ2cNn2AVwX5K5uiCSosjg1JyQQVW7s2SXSOiMlhpdHMSIM3Dn+0QgCDDfyieOqclDSxOdiKgeSzY', + verification: + 'FQwhAwCbdUDhDyVi5f2PrJ6uwlFmpYsm5BI0j/WoaSe/rCKiDCEDAgXpzvrqWh38WAryDI1aokaLsBSPGl5GBfxiLIDmBLoMIQIUuvDO6jpm8X5+HoOeol/YvtbNgua7bmglAYkGX0T/AQwhAj6bMuqJuU0GbmSbEk/VDjlu6RNp6OKmrhsRwXDQIiVtDCEDQI3NQWOW9keDrFh+oeFZPFfZ/qiAyKahkg6SollHeAYMIQKng0vpsy4pgdFXy1u9OstCz9EepcOxAiTXpE6YxZEPGwwhAroscPWZbzV6QxmHBYWfriz+oT4RcpYoAHcrPViKnUq9FwtBE43vrw==', + }, + ], + consensusdata: { + primary: 6, + nonce: 'c4bea6633614241c', + }, + tx: [], + confirmations: 44876, + nextblockhash: '0x1fc795278c20f9a50ce6b9a9a2617ce2bb94e05c9737b7e94a3124029f3a786f', +}; + +export const thirdBlockJSON = { + hash: '0x1fc795278c20f9a50ce6b9a9a2617ce2bb94e05c9737b7e94a3124029f3a786f', + size: 700, + version: 0, + previousblockhash: '0x2cf3b022f8ef6b863f47746ce9a9e38e3f1762ea47f3ede3be81118c1fa1ee24', + merkleroot: '0x89378f1c6005485d124c1eae9fc82e8639fb7a5b4e167c15305edec80c81fac0', + time: 1608609583168, + index: 2, + nextconsensus: 'NgPkjjLTNcQad99iRYeXRUuowE4gxLAnDL', + witnesses: [ + { + invocation: + 'DEBvYhef2pK9W5sjqltgniuPFz7NvJ634EX2DcH5oHjh5/jxvjobPWNUZipHvp9FPkJwRxS/3+BL6UMYWxqslJ0ADEAsqKff5hGys7yVwtZUKS1oBklkJ/l9HlzglV/ETUp+f3uK1h9miqg19myjtAgM6YVdE3+4KEQ/hagfTks91DMdDEBOQbnr5gC5ADyFbHrVRHhwIgy4CaCILZAD+XghMN6yzyNCUzJMruTpcVLz6j4xO3vVhRrSYOc5Ys+G8lrXhKTyDEBOBG824/s6MgJ/pymHYoQeuaKH1owwV1UtOb0hkDiidZOS7+xrf74/MKuph0PObNY41NQcYEibOs57F7qQYkG5DECSVNLMQdDvlzBbPKx6nDUJlBIaMBf5rnwweukFFJ1wHhnNbX3d0ZnbJhjWGj/dhAkGvUvkQlciEEtMXa/HJVF1', + verification: + 'FQwhAwCbdUDhDyVi5f2PrJ6uwlFmpYsm5BI0j/WoaSe/rCKiDCEDAgXpzvrqWh38WAryDI1aokaLsBSPGl5GBfxiLIDmBLoMIQIUuvDO6jpm8X5+HoOeol/YvtbNgua7bmglAYkGX0T/AQwhAj6bMuqJuU0GbmSbEk/VDjlu6RNp6OKmrhsRwXDQIiVtDCEDQI3NQWOW9keDrFh+oeFZPFfZ/qiAyKahkg6SollHeAYMIQKng0vpsy4pgdFXy1u9OstCz9EepcOxAiTXpE6YxZEPGwwhAroscPWZbzV6QxmHBYWfriz+oT4RcpYoAHcrPViKnUq9FwtBE43vrw==', + }, + ], + consensusdata: { + primary: 2, + nonce: 'eff262be7f3dfa91', + }, + tx: [], + confirmations: 44886, + nextblockhash: '0x84ba503f0a990cdaa0f1336f375d6b382f0728a63ea4c3cf7fc958d578cef8f0', +}; + +export const debugBlockJSON = { + version: 0, + hash: '0x62b9c6556b0acfc6e8c1f650bf02b6e68970840fbfadc5a60ef3b2c15adba1d2', + size: 948, + previousblockhash: '0x4ee710e3c8ab3355782ea19bc6e8015a64dba5cb518aaba5f2a9e8191ecc44da', + merkleroot: '0x9ab319ff358ef291ce343994d5b6cb323254e00f3bd3dfa855ef8003cf0ac21e', + time: '1596623855243', + index: 5363, + nextconsensus: 'NUQ6Q4BWvHU71HNxPQ4LMSHPMK1jSz1nw4', + witnesses: [ + { + invocation: + 'DEAIdyv6wls3FN47Rw4//yXM2L0TE2ci3Eo3lC2cx7OmrzU6rlk5HKtg0NVS2tuAAgcV48h3cWVBf082zJiGzbCyDEDpfcTZoKaK0qp9vwkgDw5ysaLsQgcH4++NCcXc9z+dCl9wBkuJ+PGIKAPsV9JUGEXhMtJBCx1t8hdlUJKXy6JIDEAZet+oQR2V7A6VCRh0OPy8ai1fxi3uHnKlQqi7UrYC2PnD3/E6YFMR/hRLYUdZuyX+MYeLP+svnOQ/QLd63DdbDEB+XmnCR+UaOf4siFsjhtihcFc5DWKohAVSG8Nszak5RVaj3D5ot7JJmhba8rvO0mmyPkXSemmTsZeWMXLlhrL9DECF+j8cO7NY612P4TBjh+4Bifsa93mpbmRWzPDHnCik+mSPqE4MqMoiPyXYKyxekJyzMm95WHQm/f3KniYT6j4q', + verification: + 'FQwhAwCbdUDhDyVi5f2PrJ6uwlFmpYsm5BI0j/WoaSe/rCKiDCEDAgXpzvrqWh38WAryDI1aokaLsBSPGl5GBfxiLIDmBLoMIQIUuvDO6jpm8X5+HoOeol/YvtbNgua7bmglAYkGX0T/AQwhAj6bMuqJuU0GbmSbEk/VDjlu6RNp6OKmrhsRwXDQIiVtDCEDQI3NQWOW9keDrFh+oeFZPFfZ/qiAyKahkg6SollHeAYMIQKng0vpsy4pgdFXy1u9OstCz9EepcOxAiTXpE6YxZEPGwwhAroscPWZbzV6QxmHBYWfriz+oT4RcpYoAHcrPViKnUq9FwtBE43vrw==', + }, + ], + consensusdata: { + primary: 1, + nonce: '3d40ebb6a5bfe606', + }, + tx: [ + { + hash: '0x759ae7ce80a3a4349f6260dd5de13f9bd1edacf2acba736a4cdc958cd94d20f8', + size: 248, + version: 0, + nonce: 206553393, + sender: 'NTZJ91cwZWiad8uj8sLMF7X6j8Ed41Cim6', + sysfee: '0000000000897376', + netfee: '0000000000130c86', + validuntilblock: 2107762, + signers: [ + { + account: '0x41546d4fee9fe73744a08fc5055d76a88b17d853', + scopes: 'CalledByEntry', + }, + ], + attributes: [], + script: + 'AkBLTAAMFPpfQslsEOq7tFQTMHff69ZOoqWYDBRT2BeLqHZdBcWPoEQ355/uT21UQRPADAh0cmFuc2ZlcgwUJQWey0h406h1+RxRzt7TMNRXX95BYn1bUjg=', + witnesses: [ + { + invocation: 'DECNS6h+iFmdfL+CvqUBTAC7Wp1kka5WryQuXegpFelHdAye03+uhx2obUC8ULJ1Iz0tG3RM8iv5auSrT2cQexGN', + verification: 'DCEDWRO5WI2iOlw84Usohqa467ag65K9qpSFEN+1rlGU1ssLQZVEDXg=', + }, + ], + }, + ], +}; diff --git a/packages/neo-one-node/src/__tests__/blockchain.test.ts b/packages/neo-one-node/src/__tests__/blockchain.test.ts new file mode 100644 index 0000000000..1600ba30a5 --- /dev/null +++ b/packages/neo-one-node/src/__tests__/blockchain.test.ts @@ -0,0 +1,127 @@ +import { common, ScriptBuilder } from '@neo-one/client-common'; +import { Blockchain } from '@neo-one/node-blockchain'; +import { ContractState, StorageItem } from '@neo-one/node-core'; +import { NativeContainer } from '@neo-one/node-native'; +import { test as createTest } from '@neo-one/node-neo-settings'; +import { storage as levelupStorage } from '@neo-one/node-storage-levelup'; +import { blockchainSettingsToProtocolSettings, Dispatcher } from '@neo-one/node-vm'; +import LevelUp from 'levelup'; +import RocksDB from 'rocksdb'; +import Memdown from 'memdown'; +import { getData } from '../__data__'; +import { BN } from 'bn.js'; + +const rawReadStreamPromise = async (db: any, options: { readonly gte: Buffer; readonly lte: Buffer }) => + new Promise((resolve, reject) => { + db.createReadStream(options) + .on('data', (data: any) => { + console.log(common.uInt160ToString(data.key.slice(1))); + console.log( + JSON.stringify( + ContractState.deserializeWire({ + context: { messageMagic: 1951352142, validatorsCount: 1 }, + buffer: data.value, + }).serializeJSON(), + undefined, + 2, + ), + ); + }) + .on('error', reject) + .on('close', resolve) + .on('end', resolve); + }); + +describe('Blockchain invocation / storage tests', () => { + test('Can persist the first 3 blocks with disk storage', async () => { + const blockchainSettings = createTest(); + const levelDBPath = '/Users/danielbyrne/Desktop/node-data'; + const db = LevelUp(RocksDB(levelDBPath)); + const blockData = getData(blockchainSettings.messageMagic); + + const storage = levelupStorage({ + db, + context: { + messageMagic: blockchainSettings.messageMagic, + validatorsCount: blockchainSettings.validatorsCount, + }, + }); + + const dispatcher = new Dispatcher({ + levelDBPath, + protocolSettings: blockchainSettingsToProtocolSettings(blockchainSettings), + }); + + const native = new NativeContainer(blockchainSettings); + + const blockchain = await Blockchain.create({ + settings: blockchainSettings, + storage, + vm: dispatcher, + native, + }); + + await blockchain.persistBlock({ block: blockData.secondBlock }); + + expect(blockchain.currentBlockIndex).toEqual(1); + + await blockchain.persistBlock({ block: blockData.thirdBlock }); + + expect(blockchain.currentBlockIndex).toEqual(2); + }); +}); + +describe('VM memory store for testing', () => { + test('can persist 2 blocks in memory', async () => { + const settings = createTest(); + const blockData = getData(settings.messageMagic); + const db = LevelUp(Memdown()); + + const getChanges = async () => + new Promise>((resolve, reject) => { + let changesInternal: Array<{ key: Buffer; value: Buffer }> = []; + db.createReadStream() + .on('data', (data) => { + changesInternal = changesInternal.concat(data); + }) + .on('close', () => resolve(changesInternal)) + .on('end', () => resolve(changesInternal)) + .on('error', (reason) => reject(reason)); + }); + + const onPersist = async () => { + const changes = await getChanges(); + dispatcher.updateStore(changes); + }; + + const storage = levelupStorage({ + db, + context: { + messageMagic: settings.messageMagic, + validatorsCount: settings.validatorsCount, + }, + }); + + const dispatcher = new Dispatcher({ + protocolSettings: blockchainSettingsToProtocolSettings(settings), + }); + + const native = new NativeContainer(settings); + + const blockchain = await Blockchain.create({ + settings, + storage, + vm: dispatcher, + native, + onPersist, + }); + + await blockchain.persistBlock({ block: blockData.secondBlock }); + + expect(blockchain.currentBlockIndex).toEqual(1); + + await blockchain.persistBlock({ block: blockData.thirdBlock }); + + expect(blockchain.currentBlockIndex).toEqual(2); + }); +}); diff --git a/packages/neo-one-node/src/__tests__/consensus.test.ts b/packages/neo-one-node/src/__tests__/consensus.test.ts new file mode 100644 index 0000000000..3b45b2a4b0 --- /dev/null +++ b/packages/neo-one-node/src/__tests__/consensus.test.ts @@ -0,0 +1,90 @@ +import { common } from '@neo-one/client-common'; +import { Block } from '@neo-one/node-core'; +import { storage as levelupStorage } from '@neo-one/node-storage-levelup'; +import { blockchainSettingsToProtocolSettings, Dispatcher } from '@neo-one/node-vm'; +import fs from 'fs-extra'; +import LevelUp from 'levelup'; +import RocksDB from 'rocksdb'; +import { FullNode } from '../FullNode'; + +const timeout = 30000000; +jest.setTimeout(timeout); + +const config = { + path: '/Users/danielbyrne/Desktop/consensus-node-data', + telemetry: { + logging: { + level: 'debug' as const, + }, + }, + blockchain: { + genesisBlock: Block.deserializeWire({ + context: { messageMagic: 7630401, validatorsCount: 1 }, + buffer: Buffer.from( + '000000000000000000000000000000000000000000000000000000000000000000000000a2f039e5cb15af6ab9eecfcb383ddac95c9ddc7f5c09d96c88dd26003a793a81759cf1e17501000000000000d83cd15a5036b5399bb7e6b91db9365a77ddb2510100011102001dac2b7c000000000000000000000000000000000000000000000000000000000001ca61e52e881d41374e640f819cd118cc153b21a700000541123e7fe801000111', + 'hex', + ), + }), + decrementInterval: 2000000, + generationAmount: [8, 7, 6], + messageMagic: 7630401, + addressVersion: common.NEO_ADDRESS_VERSION, + privateKeyVersion: 128, + standbyValidators: ['0248be3c070df745a60f3b8b494efcc6caf90244d803a9a72fe95d9bae2120ec70'].map((p) => + common.stringToECPoint(p), + ), + standbyCommittee: ['0248be3c070df745a60f3b8b494efcc6caf90244d803a9a72fe95d9bae2120ec70'].map((p) => + common.stringToECPoint(p), + ), + validatorsCount: 1, + committeeMembersCount: 1, + millisecondsPerBlock: 1000, + maxTransactionsPerBlock: 500, + memoryPoolMaxTransactions: 50000, + }, + rpc: { + http: { + host: '0.0.0.0', + port: 8081, + }, + readyHealthCheck: {}, + liveHealthCheck: {}, + }, + node: { + consensus: { + privateKey: 'e35fa5d1652c4c65e296c86e63a3da6939bc471b741845be636e2daa320dc770', + privateNet: true, + }, + }, +}; + +describe('Consensus Testing', () => { + beforeEach(async () => { + try { + await fs.emptyDir(config.path); + } catch { + // do nothing; + } + }); + test('Consensus Runner', async () => { + const fullNode = new FullNode({ options: config }); + + await Promise.all([fullNode.start(), new Promise((resolve) => setTimeout(resolve, timeout))]); + }); + + test('', async () => { + const db = LevelUp(RocksDB(config.path)); + + const storage = levelupStorage({ + db, + context: { messageMagic: config.blockchain.messageMagic }, + }); + + const dispatcher = new Dispatcher({ + levelDBPath: config.path, + protocolSettings: blockchainSettingsToProtocolSettings(config.blockchain), + }); + + console.log(JSON.stringify(dispatcher.getConfig(), undefined, 2)); + }); +}); diff --git a/packages/neo-one-node/src/__tests__/fullNode.test.ts b/packages/neo-one-node/src/__tests__/fullNode.test.ts new file mode 100644 index 0000000000..d7a9534b9d --- /dev/null +++ b/packages/neo-one-node/src/__tests__/fullNode.test.ts @@ -0,0 +1,59 @@ +import { createTest } from '@neo-one/node-neo-settings'; +import { FullNode } from '../FullNode'; + +jest.setTimeout(30000000); + +describe('full node test', () => { + test('', async () => { + const path = '/Users/danielbyrne/Desktop/test-location'; + const blockchainSettings = createTest(); + const nodeOptions = { + externalPort: 8080, + rpcURLs: [ + 'http://seed1t.neo.org:20332', + 'http://seed2t.neo.org:20332', + 'http://seed3t.neo.org:20332', + 'http://seed4t.neo.org:20332', + 'http://seed5t.neo.org:20332', + ], + }; + + const networkOptions = { + seeds: [ + 'http://seed1t.neo.org:20333', + 'http://seed2t.neo.org:20333', + 'http://seed3t.neo.org:20333', + 'http://seed4t.neo.org:20333', + 'http://seed5t.neo.org:20333', + ], + }; + + const rpcOptions = { + http: { + port: 8080, + host: 'localhost', + }, + }; + + const telemetryOptions = { + logging: { + level: 'debug' as const, + }, + }; + + const options = { + options: { + path, + blockchain: blockchainSettings, + node: nodeOptions, + network: networkOptions, + rpc: rpcOptions, + telemetry: telemetryOptions, + }, + }; + + const fullNode = new FullNode(options); + + await fullNode.start(); + }); +}); diff --git a/packages/neo-one-node/src/startFullNode.ts b/packages/neo-one-node/src/startFullNode.ts index e89cd40f70..4c5c506317 100644 --- a/packages/neo-one-node/src/startFullNode.ts +++ b/packages/neo-one-node/src/startFullNode.ts @@ -1,27 +1,20 @@ -import { - getNewPropagation, - globalStats, - JaegerTraceExporter, - JaegerTraceExporterOptions, - PrometheusExporterOptions, - PrometheusStatsExporter, - startTracing, - TracingConfig, -} from '@neo-one/client-switch'; import { setGlobalLogLevel } from '@neo-one/logger'; import { Blockchain } from '@neo-one/node-blockchain'; import { Settings } from '@neo-one/node-core'; import { RPCServerOptions, setupRPCServer } from '@neo-one/node-http-rpc'; +import { NativeContainer } from '@neo-one/node-native'; import { Network, NetworkOptions } from '@neo-one/node-network'; import { dumpChain, loadChain } from '@neo-one/node-offline'; import { Node, NodeOptions } from '@neo-one/node-protocol'; -import { storage as levelupStorage } from '@neo-one/node-storage-levelup'; -import { vm } from '@neo-one/node-vm'; -import { composeDisposables, Disposable, noopDisposable } from '@neo-one/utils'; +import { storage as levelupStorage, streamToObservable } from '@neo-one/node-storage-levelup'; +import { blockchainSettingsToProtocolSettings, Dispatcher } from '@neo-one/node-vm'; +import { composeDisposable, Disposable, noopDisposable } from '@neo-one/utils'; import { AbstractLevelDOWN } from 'abstract-leveldown'; import fs from 'fs-extra'; -import LevelDOWN from 'leveldown'; import LevelUp from 'levelup'; +import RocksDB from 'rocksdb'; +import Memdown from 'memdown'; +import { toArray } from 'rxjs/operators'; export interface LoggingOptions { readonly level?: 'fatal' | 'error' | 'warn' | 'info' | 'debug' | 'trace' | 'silent'; @@ -29,9 +22,6 @@ export interface LoggingOptions { export interface TelemetryOptions { readonly logging?: LoggingOptions; - readonly prometheus?: Omit; - readonly jaeger?: Omit; - readonly tracing?: Omit; } export interface Options { @@ -50,6 +40,16 @@ export interface FullNodeOptions { readonly leveldown?: AbstractLevelDOWN; } +const getUpdateVMMemoryStore = (vm: Dispatcher, db: any) => async () => { + const updates = await streamToObservable<{ readonly key: Buffer; readonly value: Buffer }>(() => + db.createReadStream(), + ) + .pipe(toArray()) + .toPromise(); + + vm.updateStore(updates); +}; + export const startFullNode = async ({ options: { path: dataPath, @@ -64,49 +64,20 @@ export const startFullNode = async ({ leveldown: customLeveldown, }: FullNodeOptions): Promise => { let disposable = noopDisposable; + const isMemoryStore = customLeveldown !== undefined && customLeveldown instanceof Memdown; try { - await fs.ensureDir(dataPath); - - if (telemetry !== undefined) { - if (telemetry.logging !== undefined && telemetry.logging.level !== undefined) { - setGlobalLogLevel(telemetry.logging.level); - } - - if (telemetry.prometheus !== undefined) { - const exporter = new PrometheusStatsExporter({ - ...telemetry.prometheus, - startServer: true, - }); - - globalStats.registerExporter(exporter); - - disposable = composeDisposables(disposable, async () => { - await new Promise((resolve) => exporter.stopServer(resolve)); - globalStats.unregisterExporter(exporter); - }); - } - - if (telemetry.jaeger !== undefined && telemetry.tracing !== undefined) { - const exporter = new JaegerTraceExporter({ - ...telemetry.jaeger, - serviceName: 'NEO-ONE', - }); - - const propagation = await getNewPropagation(); - const stopTracing = await startTracing({ - ...telemetry.tracing, - propagation, - exporter, - }); + if (!isMemoryStore) { + await fs.ensureDir(dataPath); + } - disposable = composeDisposables(disposable, stopTracing); - } + if (telemetry !== undefined && telemetry.logging !== undefined && telemetry.logging.level !== undefined) { + setGlobalLogLevel(telemetry.logging.level); } - const levelDown = customLeveldown === undefined ? LevelDOWN(dataPath) : customLeveldown; - disposable = composeDisposables(disposable, async () => { + const level = customLeveldown === undefined ? RocksDB(dataPath) : customLeveldown; + disposable = composeDisposable(disposable, async () => { await new Promise((resolve, reject) => { - levelDown.close((err) => { + level.close((err) => { if (err) { reject(err); } else { @@ -116,23 +87,33 @@ export const startFullNode = async ({ }); }); + const db = LevelUp(level); + const storage = levelupStorage({ - db: LevelUp(levelDown), - context: { messageMagic: blockchainSettings.messageMagic }, + db, + context: { messageMagic: blockchainSettings.messageMagic, validatorsCount: blockchainSettings.validatorsCount }, }); - disposable = composeDisposables(disposable, async () => { - await storage.close(); + disposable = composeDisposable(async () => storage.close(), disposable); + + const native = new NativeContainer(blockchainSettings); + + const vm = new Dispatcher({ + levelDBPath: isMemoryStore ? undefined : dataPath, + protocolSettings: blockchainSettingsToProtocolSettings(blockchainSettings), }); + disposable = composeDisposable(async () => vm.dispose(), disposable); + const blockchain = await Blockchain.create({ settings: blockchainSettings, storage, + native, vm, + onPersist: isMemoryStore ? getUpdateVMMemoryStore(vm, db) : undefined, }); - disposable = composeDisposables(disposable, async () => { - await blockchain.stop(); - }); + + disposable = composeDisposable(async () => blockchain.stop(), disposable); if (chainFile !== undefined) { await loadChain({ @@ -150,6 +131,7 @@ export const startFullNode = async ({ const node = new Node({ blockchain, + native, options: nodeOptions, createNetwork: (options) => new Network({ @@ -158,14 +140,15 @@ export const startFullNode = async ({ }), }); const nodeDisposable = await node.start(); - disposable = composeDisposables(disposable, nodeDisposable); + disposable = composeDisposable(nodeDisposable, disposable); const rpcDisposable = await setupRPCServer({ blockchain, node, options: rpcOptions, + native, }); - disposable = composeDisposables(disposable, rpcDisposable); + disposable = composeDisposable(rpcDisposable, disposable); return disposable; } catch (err) { diff --git a/packages/neo-one-node/tsconfig.json b/packages/neo-one-node/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-node/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-react-common/.npmignore b/packages/neo-one-react-common/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-react-common/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-react-common/CHANGELOG.json b/packages/neo-one-react-common/CHANGELOG.json new file mode 100644 index 0000000000..1e48868cee --- /dev/null +++ b/packages/neo-one-react-common/CHANGELOG.json @@ -0,0 +1,82 @@ +{ + "name": "@neo-one/react-common", + "entries": [ + { + "version": "3.0.0", + "tag": "@neo-one/react-common_v3.0.0", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "major": [ + { + "comment": "3.0.0preview3-alpha release bump" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/react-common_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Add appropriate @types dependencies." + }, + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/react-common_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/react-core\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/react-common_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "patch": [ + { + "comment": "update dependencies" + }, + { + "comment": "update @types/react to 16.9.14 and @types/react-dom to 16.9.4" + }, + { + "comment": "Upgrade TS to v3.8.1-rc. Fix types." + } + ], + "minor": [ + { + "comment": "Migrate to Rush" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/react-core\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-react-common/CHANGELOG.md b/packages/neo-one-react-common/CHANGELOG.md index 0758899011..2f15364002 100644 --- a/packages/neo-one-react-common/CHANGELOG.md +++ b/packages/neo-one-react-common/CHANGELOG.md @@ -1,160 +1,43 @@ -# Change Log +# Change Log - @neo-one/react-common -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-common@1.2.1...@neo-one/react-common@2.3.0) (2019-10-23) +## 3.0.0 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/react-common +### Breaking changes +- 3.0.0preview3-alpha release bump +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT +### Patches +- Add appropriate @types dependencies. +- Upgrade TypeScript from v3.8.3 to v3.9.5 -## [1.2.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-common@1.2.0...@neo-one/react-common@1.2.1) (2019-10-23) +### Updates -**Note:** Version bump only for package @neo-one/react-common +- bump package version for future release clarity +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes +- update package release process to take better advantage of rush tooling +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-common@1.1.8...@neo-one/react-common@1.2.0) (2019-10-23) +### Minor changes +- Migrate to Rush -### Bug Fixes +### Patches -* **deps:** update dependency react-draggable to v4 ([c502a45](https://github.com/neo-one-suite/neo-one/commit/c502a45f04a542ac1ccf191c3bb3e1899a336eda)) -* **emotion types:** remove any typecast for TooltipBase and type properly ([fff10e2](https://github.com/neo-one-suite/neo-one/commit/fff10e29641db94fc7b6a467c785703301aefd70)) +- update dependencies +- update @types/react to 16.9.14 and @types/react-dom to 16.9.4 +- Upgrade TS to v3.8.1-rc. Fix types. - -### Features - -* **ts:** upgrade to TS v3.6.3 ([82595a9](https://github.com/neo-one-suite/neo-one/commit/82595a91c063a4fa08ef06f631cd1dab4cb965f3)) - - - - - -## [1.1.8](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-common@1.1.7...@neo-one/react-common@1.1.8) (2019-09-04) - -**Note:** Version bump only for package @neo-one/react-common - - - - - -## [1.1.7](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-common@1.1.6...@neo-one/react-common@1.1.7) (2019-08-30) - -**Note:** Version bump only for package @neo-one/react-common - - - - - -## [1.1.6](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-common@1.1.5...@neo-one/react-common@1.1.6) (2019-08-22) - -**Note:** Version bump only for package @neo-one/react-common - - - - - -## [1.1.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-common@1.1.4...@neo-one/react-common@1.1.5) (2019-07-29) - - -### Bug Fixes - -* **website:** fix the testrunner ([63cdeff](https://github.com/neo-one-suite/neo-one/commit/63cdeff)) - - - - - -## [1.1.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-common@1.1.3...@neo-one/react-common@1.1.4) (2019-06-20) - - -### Bug Fixes - -* **deps:** update dependency typescript to v3.5.1 ([#1365](https://github.com/neo-one-suite/neo-one/issues/1365)) ([ec89546](https://github.com/neo-one-suite/neo-one/commit/ec89546)) - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-common@1.1.2...@neo-one/react-common@1.1.3) (2019-06-04) - -**Note:** Version bump only for package @neo-one/react-common - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-common@1.1.1...@neo-one/react-common@1.1.2) (2019-04-12) - - -### Bug Fixes - -* **website:** fix DeveloperTools and other bugs ([0cf87ca](https://github.com/neo-one-suite/neo-one/commit/0cf87ca)) - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-common@1.1.0...@neo-one/react-common@1.1.1) (2019-03-27) - - -### Bug Fixes - -* **deps:** update dependency @types/react to v16.8.5 ([b8eea1e](https://github.com/neo-one-suite/neo-one/commit/b8eea1e)) -* **website:** large refactor / fixes for website ([b338261](https://github.com/neo-one-suite/neo-one/commit/b338261)) - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-common@1.0.3...@neo-one/react-common@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/react-common - - - - - -## [1.0.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-common@1.0.3-alpha.0...@neo-one/react-common@1.0.3) (2019-02-21) - -**Note:** Version bump only for package @neo-one/react-common - - - - - -## [1.0.3-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-common@1.0.2...@neo-one/react-common@1.0.3-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **build:** adjust several packages to allow emitting .d.ts files. ([27a2d88](https://github.com/neo-one-suite/neo-one/commit/27a2d88)) -* **deps:** update dependency @types/react to v16.8.1 and @types/react-dom to v16.0.11 ([deda24f](https://github.com/neo-one-suite/neo-one/commit/deda24f)) -* **deps:** update dependency @types/react to v16.8.2 ([45117b4](https://github.com/neo-one-suite/neo-one/commit/45117b4)) -* **deps:** update dependency @types/react-select to v2.0.11 ([4a73a69](https://github.com/neo-one-suite/neo-one/commit/4a73a69)) -* **deps:** update dependency @types/styled-components to v4.1.8 ([3349f97](https://github.com/neo-one-suite/neo-one/commit/3349f97)) -* **deps:** update dependency popper.js to v1.14.7 ([d746eeb](https://github.com/neo-one-suite/neo-one/commit/d746eeb)) -* **deps:** update dependency react and react-dom to v16.8.1 ([17a452b](https://github.com/neo-one-suite/neo-one/commit/17a452b)) -* **website:** Fix various bugs in website ([b4ebc17](https://github.com/neo-one-suite/neo-one/commit/b4ebc17)) - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-common@1.0.1...@neo-one/react-common@1.0.2) (2018-11-13) - -**Note:** Version bump only for package @neo-one/react-common - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-common@1.0.0...@neo-one/react-common@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/react-common diff --git a/packages/neo-one-react-common/gulpfile.js b/packages/neo-one-react-common/gulpfile.js new file mode 100644 index 0000000000..f27612b01b --- /dev/null +++ b/packages/neo-one-react-common/gulpfile.js @@ -0,0 +1,13 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); +const path = require('path'); + +build.copyStaticTask.glob = ['static/**/*']; +build.copyStaticTask.options = { + dest: 'static', +}; + +build.copyStaticTask.enabled = true; + +build.initialize(); diff --git a/packages/neo-one-react-common/package.json b/packages/neo-one-react-common/package.json index 1ee03b9bf7..81766472a9 100644 --- a/packages/neo-one-react-common/package.json +++ b/packages/neo-one-react-common/package.json @@ -1,25 +1,38 @@ { "name": "@neo-one/react-common", - "version": "2.3.0", + "version": "3.0.0", "description": "NEOβ€’ONE shared react.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": [ + "*.css" + ], "dependencies": { - "@emotion/core": "^10.0.16", - "@emotion/styled": "^10.0.15", - "@neo-one/react-core": "^2.3.0", + "@emotion/core": "^10.0.22", + "@emotion/styled": "^10.0.23", + "@neo-one/react-core": "^2.7.0", + "@types/react": "^16.9.15", "popper.js": "^1.15.0", - "react": "^16.11.0", - "react-dom": "^16.11.0", + "react": "^16.12.0", + "react-dom": "^16.12.0", "react-draggable": "^4.0.0", "react-select": "^3.0.4", "styled-tools": "^1.7.1", - "trackjs": "^3.7.0" + "trackjs": "^3.7.0", + "tslib": "^1.10.0" }, "devDependencies": { - "@types/react": "^16.9.2", - "@types/react-select": "^3.0.0" - }, - "sideEffects": [ - "*.css" - ] + "@neo-one/build-tools": "^1.0.0", + "@types/node": "^12.7.7", + "@types/react-dom": "^16.9.4", + "@types/react-select": "^3.0.0", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-react-common/src/Backdrop.tsx b/packages/neo-one-react-common/src/Backdrop.tsx index 2e81a73f5f..4e4f72268b 100644 --- a/packages/neo-one-react-common/src/Backdrop.tsx +++ b/packages/neo-one-react-common/src/Backdrop.tsx @@ -1,8 +1,9 @@ import styled from '@emotion/styled'; +import { ColorProps } from '@neo-one/react-core'; import { theme } from 'styled-tools'; import { Hidden } from './Hidden'; -export const Backdrop = styled(Hidden)` +export const Backdrop = styled(Hidden)` position: fixed; top: 0; left: 0; diff --git a/packages/neo-one-react-common/src/Background.tsx b/packages/neo-one-react-common/src/Background.tsx index 66928ea6e3..778aa13017 100644 --- a/packages/neo-one-react-common/src/Background.tsx +++ b/packages/neo-one-react-common/src/Background.tsx @@ -3,7 +3,7 @@ import { Box } from '@neo-one/react-core'; import { prop } from 'styled-tools'; import background from '../static/img/background.svg'; -export const Background = styled(Box)` +export const Background = styled(Box)` background-color: ${prop('theme.black')}; background-image: url('${background}'); `; diff --git a/packages/neo-one-react-common/src/FileDisplay.tsx b/packages/neo-one-react-common/src/FileDisplay.tsx index 7c6d5e0196..8c8d3cdac2 100644 --- a/packages/neo-one-react-common/src/FileDisplay.tsx +++ b/packages/neo-one-react-common/src/FileDisplay.tsx @@ -1,7 +1,7 @@ import styled from '@emotion/styled'; import { Box } from '@neo-one/react-core'; -import * as nodePath from 'path'; -import * as React from 'react'; +import nodePath from 'path'; +import React from 'react'; import { FileIcon } from './FileIcon'; import { File } from './types'; diff --git a/packages/neo-one-react-common/src/FileTab.tsx b/packages/neo-one-react-common/src/FileTab.tsx index c505207f5a..6ff916031f 100644 --- a/packages/neo-one-react-common/src/FileTab.tsx +++ b/packages/neo-one-react-common/src/FileTab.tsx @@ -10,7 +10,11 @@ const Wrapper = styled(ButtonBase)<{ readonly first: boolean; readonly selected: ${prop('theme.fontStyles.body1')}; padding: 8px; cursor: pointer; - ${ifProp('first', '', withProp('theme.lightBlack', (color: string) => `border-left: 2px solid ${color}`))}; + ${ifProp( + 'first', + '', + withProp('theme.lightBlack', (color: string) => `border-left: 2px solid ${color}`), + )}; outline: none; white-space: nowrap; `; diff --git a/packages/neo-one-react-common/src/Hidden.tsx b/packages/neo-one-react-common/src/Hidden.tsx index 96436adc06..c062432617 100644 --- a/packages/neo-one-react-common/src/Hidden.tsx +++ b/packages/neo-one-react-common/src/Hidden.tsx @@ -216,7 +216,17 @@ const hiddenTransition = (props: any) => { `; }; -export const Hidden = styled(HiddenComponent)` +export const Hidden = styled(HiddenComponent)< + ExpandProps & + SlideProps & { + readonly duration?: string; + readonly timing?: string; + readonly defaultSlide?: string | undefined; + readonly defaultExpand?: string | undefined; + readonly visible?: boolean; + readonly unmount?: boolean; + } +>` transform: ${translateWithProps}; ${hiddenTransformOrigin}; diff --git a/packages/neo-one-react-common/src/IconButton.tsx b/packages/neo-one-react-common/src/IconButton.tsx index ec060260ed..1e5d43c61b 100644 --- a/packages/neo-one-react-common/src/IconButton.tsx +++ b/packages/neo-one-react-common/src/IconButton.tsx @@ -2,7 +2,7 @@ import styled from '@emotion/styled'; import { ButtonBase } from '@neo-one/react-core'; import { prop } from 'styled-tools'; -export const IconButton = styled(ButtonBase)` +export const IconButton = styled(ButtonBase)` color: ${prop('theme.black')}; outline: none; cursor: pointer; diff --git a/packages/neo-one-react-common/src/Loading.tsx b/packages/neo-one-react-common/src/Loading.tsx index 469d7ea6f7..721e20c2be 100644 --- a/packages/neo-one-react-common/src/Loading.tsx +++ b/packages/neo-one-react-common/src/Loading.tsx @@ -19,7 +19,7 @@ const fadeInOut = keyframes` } `; -const LoadingWrapper = styled(Box)` +const LoadingWrapper = styled(Box)<{}, {}>` padding-top: 96px; flex: 1 1 auto; min-height: 512px; diff --git a/packages/neo-one-react-common/src/LoadingDots.tsx b/packages/neo-one-react-common/src/LoadingDots.tsx index 6974d3decd..ff47bc35eb 100644 --- a/packages/neo-one-react-common/src/LoadingDots.tsx +++ b/packages/neo-one-react-common/src/LoadingDots.tsx @@ -16,7 +16,7 @@ const animation = keyframes` } `; -const Wrapper = styled(Box)` +const Wrapper = styled(Box)<{}, {}>` height: 16px; display: grid; grid-auto-flow: column; @@ -32,11 +32,11 @@ const Wrapper = styled(Box)` animation-fill-mode: both; } - & > div:first-child { + & > div:first-of-type { animation-delay: -0.32s; } - & > div:nth-child(2) { + & > div:nth-of-type(2) { animation-delay: -0.16s; } `; diff --git a/packages/neo-one-react-common/src/Overlay.tsx b/packages/neo-one-react-common/src/Overlay.tsx index eaf45a016b..7dc2268fba 100644 --- a/packages/neo-one-react-common/src/Overlay.tsx +++ b/packages/neo-one-react-common/src/Overlay.tsx @@ -1,9 +1,10 @@ // tslint:disable no-object-mutation import styled from '@emotion/styled'; +import { ColorProps } from '@neo-one/react-core'; import { theme } from 'styled-tools'; import { Hidden } from './Hidden'; -export const Overlay = styled(Hidden)` +export const Overlay = styled(Hidden)` position: fixed; z-index: 19900410; left: 50%; diff --git a/packages/neo-one-react-common/src/Popover.tsx b/packages/neo-one-react-common/src/Popover.tsx index 5a86fdde93..b14eeb1ab9 100644 --- a/packages/neo-one-react-common/src/Popover.tsx +++ b/packages/neo-one-react-common/src/Popover.tsx @@ -1,6 +1,6 @@ // tslint:disable no-null-keyword no-object-mutation import styled from '@emotion/styled'; -import { getSelector } from '@neo-one/react-core'; +import { ColorProps, getSelector } from '@neo-one/react-core'; import Popper from 'popper.js'; import * as React from 'react'; import { theme } from 'styled-tools'; @@ -124,7 +124,7 @@ const PopoverComponent = forwardRef` position: absolute; top: 0; left: 0; diff --git a/packages/neo-one-react-common/src/PopoverArrow.tsx b/packages/neo-one-react-common/src/PopoverArrow.tsx index cbdd111d43..b57d589dd8 100644 --- a/packages/neo-one-react-common/src/PopoverArrow.tsx +++ b/packages/neo-one-react-common/src/PopoverArrow.tsx @@ -6,6 +6,8 @@ import { prop, theme } from 'styled-tools'; export interface PopoverArrowProps { readonly fillColor?: string; readonly strokeColor?: string; + readonly opaque?: boolean; + readonly palette?: string; } const PopoverArrowComponent = (props: PopoverArrowProps & React.ComponentPropsWithoutRef) => ( @@ -26,7 +28,7 @@ const PopoverArrowComponent = (props: PopoverArrowProps & React.ComponentPropsWi const popoverTheme = theme('PopoverArrow'); -export const PopoverArrow = styled(PopoverArrowComponent)` +export const PopoverArrow = styled(PopoverArrowComponent)<{}, {}>` position: absolute; font-size: 30px; width: 1em; diff --git a/packages/neo-one-react-common/src/Select.tsx b/packages/neo-one-react-common/src/Select.tsx index f2b0c880dd..6b038b3bf4 100644 --- a/packages/neo-one-react-common/src/Select.tsx +++ b/packages/neo-one-react-common/src/Select.tsx @@ -5,8 +5,7 @@ import * as React from 'react'; import SelectBase from 'react-select'; import { prop } from 'styled-tools'; -// tslint:disable-next-line:no-any -const StyledSelect: any = styled(SelectBase)` +const StyledSelect = styled(SelectBase)<{}, {}>` border: 1px solid rgba(0, 0, 0, 0.3); background-color: ${prop('theme.gray0')}; outline: none; diff --git a/packages/neo-one-react-common/src/Selector.tsx b/packages/neo-one-react-common/src/Selector.tsx index 08f4187dbc..e89463e533 100644 --- a/packages/neo-one-react-common/src/Selector.tsx +++ b/packages/neo-one-react-common/src/Selector.tsx @@ -4,7 +4,7 @@ import { Input } from '@neo-one/react-core'; import * as React from 'react'; import { prop } from 'styled-tools'; -const StyledInput = styled(Input.withComponent('select'))` +const StyledInput = styled(Input.withComponent('select'))<{}, {}>` background-color: ${prop('theme.gray0')}; outline: none; ${prop('theme.fonts.axiformaRegular')}; diff --git a/packages/neo-one-react-common/src/SplitPane.tsx b/packages/neo-one-react-common/src/SplitPane.tsx index 21b654956b..bff969bc32 100644 --- a/packages/neo-one-react-common/src/SplitPane.tsx +++ b/packages/neo-one-react-common/src/SplitPane.tsx @@ -39,7 +39,7 @@ const Wrapper: any = styled('div')` ${wrapperWithProps} `; -export const SplitPaneResizer = styled.div` +export const SplitPaneResizer = styled.div<{}, {}>` background-color: ${prop('theme.gray5')}; background-clip: padding-box; box-sizing: border-box; diff --git a/packages/neo-one-react-common/src/TooltipBase.tsx b/packages/neo-one-react-common/src/TooltipBase.tsx index c188b759ea..37dc016879 100644 --- a/packages/neo-one-react-common/src/TooltipBase.tsx +++ b/packages/neo-one-react-common/src/TooltipBase.tsx @@ -35,8 +35,9 @@ const TooltipBaseComponent = forwardRef; }); -// tslint:disable-next-line no-any -export const TooltipBase = styled(TooltipBaseComponent as any)<{}, {}>` +// type instantiation is excessively deep and possibly +// @ts-ignore +export const TooltipBase: any = styled(TooltipBaseComponent)<{}, {}>` ${theme('TooltipBase')}; `; diff --git a/packages/neo-one-react-common/src/index.ts b/packages/neo-one-react-common/src/index.ts index 5379fdfb31..6ddd61d0c7 100644 --- a/packages/neo-one-react-common/src/index.ts +++ b/packages/neo-one-react-common/src/index.ts @@ -1,3 +1,4 @@ +/// export * from './Backdrop'; export * from './Background'; export * from './DispatchWrapper'; diff --git a/packages/neo-one-react-common/tsconfig.json b/packages/neo-one-react-common/tsconfig.json new file mode 100644 index 0000000000..dadfe6c6f6 --- /dev/null +++ b/packages/neo-one-react-common/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json", + "include": ["src", "static/**/*.svg", "../neo-one-build-tools/types/global.d.ts"] +} diff --git a/packages/neo-one-react-core/.npmignore b/packages/neo-one-react-core/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-react-core/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-react-core/CHANGELOG.json b/packages/neo-one-react-core/CHANGELOG.json new file mode 100644 index 0000000000..0d9459fd17 --- /dev/null +++ b/packages/neo-one-react-core/CHANGELOG.json @@ -0,0 +1,57 @@ +{ + "name": "@neo-one/react-core", + "entries": [ + { + "version": "2.7.0", + "tag": "@neo-one/react-core_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/react-core_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/react-core_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "patch": [ + { + "comment": "update dependencies" + }, + { + "comment": "update @types/react to 16.9.14" + }, + { + "comment": "Upgrade TS to v3.8.1-rc. Fix types." + } + ], + "minor": [ + { + "comment": "Migrate to Rush" + } + ] + } + } + ] +} diff --git a/packages/neo-one-react-core/CHANGELOG.md b/packages/neo-one-react-core/CHANGELOG.md index 6dc09f3815..7a9ef8ba0b 100644 --- a/packages/neo-one-react-core/CHANGELOG.md +++ b/packages/neo-one-react-core/CHANGELOG.md @@ -1,135 +1,35 @@ -# Change Log +# Change Log - @neo-one/react-core -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-core@1.1.8...@neo-one/react-core@2.3.0) (2019-10-23) +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT -**Note:** Version bump only for package @neo-one/react-core +### Patches +- Upgrade TypeScript from v3.8.3 to v3.9.5 +### Updates +- bump package version for future release clarity +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT -## [1.1.8](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-core@1.1.7...@neo-one/react-core@1.1.8) (2019-10-23) +### Minor changes -**Note:** Version bump only for package @neo-one/react-core +- update package release process to take better advantage of rush tooling +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT +### Minor changes +- Migrate to Rush +### Patches -## [1.1.7](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-core@1.1.6...@neo-one/react-core@1.1.7) (2019-10-23) +- update dependencies +- update @types/react to 16.9.14 +- Upgrade TS to v3.8.1-rc. Fix types. -**Note:** Version bump only for package @neo-one/react-core - - - - - -## [1.1.6](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-core@1.1.5...@neo-one/react-core@1.1.6) (2019-08-22) - -**Note:** Version bump only for package @neo-one/react-core - - - - - -## [1.1.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-core@1.1.4...@neo-one/react-core@1.1.5) (2019-07-29) - - -### Bug Fixes - -* **website:** fix the testrunner ([63cdeff](https://github.com/neo-one-suite/neo-one/commit/63cdeff)) - - - - - -## [1.1.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-core@1.1.3...@neo-one/react-core@1.1.4) (2019-06-20) - - -### Bug Fixes - -* **deps:** update dependency typescript to v3.5.1 ([#1365](https://github.com/neo-one-suite/neo-one/issues/1365)) ([ec89546](https://github.com/neo-one-suite/neo-one/commit/ec89546)) - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-core@1.1.2...@neo-one/react-core@1.1.3) (2019-06-04) - - -### Bug Fixes - -* **@neo-one/types:** eliminate global types from @neo-one/types ([004330d](https://github.com/neo-one-suite/neo-one/commit/004330d)) - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-core@1.1.1...@neo-one/react-core@1.1.2) (2019-04-12) - - -### Bug Fixes - -* **website:** fix DeveloperTools and other bugs ([0cf87ca](https://github.com/neo-one-suite/neo-one/commit/0cf87ca)) - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-core@1.1.0...@neo-one/react-core@1.1.1) (2019-03-27) - - -### Bug Fixes - -* **deps:** update dependency @types/react to v16.8.8 ([966b5c9](https://github.com/neo-one-suite/neo-one/commit/966b5c9)) -* **deps:** update dependency @types/styled-components to v4.1.11 ([b362856](https://github.com/neo-one-suite/neo-one/commit/b362856)) -* **deps:** update dependency @types/styled-components to v4.1.12 ([6dbde93](https://github.com/neo-one-suite/neo-one/commit/6dbde93)) -* **deps:** update dependency styled-components to v4.2.0 ([604354c](https://github.com/neo-one-suite/neo-one/commit/604354c)) -* **web:** update some configs for dep upgrades ([712bdd9](https://github.com/neo-one-suite/neo-one/commit/712bdd9)) - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-core@1.0.2...@neo-one/react-core@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/react-core - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-core@1.0.2-alpha.0...@neo-one/react-core@1.0.2) (2019-02-21) - - -### Bug Fixes - -* **deps:** update dependency @types/styled-components to v4.1.10 ([c9a5f1d](https://github.com/neo-one-suite/neo-one/commit/c9a5f1d)) - - - - - -## [1.0.2-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-core@1.0.1...@neo-one/react-core@1.0.2-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **deps:** update dependency @types/react to v16.8.1 and @types/react-dom to v16.0.11 ([deda24f](https://github.com/neo-one-suite/neo-one/commit/deda24f)) -* **deps:** update dependency @types/styled-components to v4.1.7 ([f44807b](https://github.com/neo-one-suite/neo-one/commit/f44807b)) -* **deps:** update dependency @types/styled-components to v4.1.8 ([3349f97](https://github.com/neo-one-suite/neo-one/commit/3349f97)) -* **deps:** update dependency rxjs to v6.4.0 ([e28af2a](https://github.com/neo-one-suite/neo-one/commit/e28af2a)) -* **deps:** update dependency styled-tools to v1.7.0 ([22f9e08](https://github.com/neo-one-suite/neo-one/commit/22f9e08)) -* **deps:** update dependency styled-tools to v1.7.1 ([2368a77](https://github.com/neo-one-suite/neo-one/commit/2368a77)) -* **website:** Fix various bugs in website ([b4ebc17](https://github.com/neo-one-suite/neo-one/commit/b4ebc17)) - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react-core@1.0.0...@neo-one/react-core@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/react-core diff --git a/packages/neo-one-react-core/gulpfile.js b/packages/neo-one-react-core/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-react-core/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-react-core/package.json b/packages/neo-one-react-core/package.json index 1bef2f5dc8..9703965291 100644 --- a/packages/neo-one-react-core/package.json +++ b/packages/neo-one-react-core/package.json @@ -1,14 +1,28 @@ { "name": "@neo-one/react-core", - "version": "2.3.0", + "version": "2.7.0", "description": "NEOβ€’ONE shared react.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@emotion/core": "^10.0.16", - "@emotion/styled": "^10.0.15", - "react": "^16.11.0", - "rxjs": "^6.5.2", - "styled-tools": "^1.7.1" + "@emotion/core": "^10.0.22", + "@emotion/styled": "^10.0.23", + "@types/react": "^16.9.15", + "react": "^16.12.0", + "rxjs": "^6.5.3", + "styled-tools": "^1.7.1", + "tslib": "^1.10.0" }, - "sideEffects": false + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-react-core/src/Box.tsx b/packages/neo-one-react-core/src/Box.tsx index f9eec403df..c21de0ebc5 100644 --- a/packages/neo-one-react-core/src/Box.tsx +++ b/packages/neo-one-react-core/src/Box.tsx @@ -4,7 +4,7 @@ import { bgColorWithProps, ColorProps, textColorWithProps } from './styledProps' const boxTheme = theme('Box'); -export const Box = styled<'div', ColorProps>('div')` +export const Box = styled<'div', ColorProps>('div')<{}, {}>` margin: unset; padding: unset; border: unset; diff --git a/packages/neo-one-react-core/src/Button.tsx b/packages/neo-one-react-core/src/Button.tsx index 107d08de75..be4983d542 100644 --- a/packages/neo-one-react-core/src/Button.tsx +++ b/packages/neo-one-react-core/src/Button.tsx @@ -1,8 +1,9 @@ import styled from '@emotion/styled'; import { prop } from 'styled-tools'; import { ButtonBase } from './ButtonBase'; +import { ColorProps } from './styledProps'; -export const Button = styled(ButtonBase)` +export const Button = styled(ButtonBase)` background-color: ${prop('theme.accent')}; border: none; border-radius: 24px; diff --git a/packages/neo-one-react-core/src/ButtonBase.tsx b/packages/neo-one-react-core/src/ButtonBase.tsx index dbde609574..28848a9c11 100644 --- a/packages/neo-one-react-core/src/ButtonBase.tsx +++ b/packages/neo-one-react-core/src/ButtonBase.tsx @@ -1,3 +1,4 @@ import { Box } from './Box'; -export const ButtonBase = Box.withComponent('button'); +// tslint:disable-next-line: no-any +export const ButtonBase = Box.withComponent('button'); diff --git a/packages/neo-one-react-core/src/Image.tsx b/packages/neo-one-react-core/src/Image.tsx index c7f34e28a5..efc7cdc5ca 100644 --- a/packages/neo-one-react-core/src/Image.tsx +++ b/packages/neo-one-react-core/src/Image.tsx @@ -1,3 +1,4 @@ import { Box } from './Box'; -export const Image = Box.withComponent('img'); +// tslint:disable-next-line: no-any +export const Image = Box.withComponent('img'); diff --git a/packages/neo-one-react-core/src/Input.tsx b/packages/neo-one-react-core/src/Input.tsx index c8381956bb..cd6b13f0e7 100644 --- a/packages/neo-one-react-core/src/Input.tsx +++ b/packages/neo-one-react-core/src/Input.tsx @@ -1,6 +1,7 @@ import { Box } from './Box'; -export const Input = Box.withComponent('input'); +// tslint:disable-next-line: no-any +export const Input = Box.withComponent('input'); // tslint:disable-next-line:no-object-mutation Input.defaultProps = { diff --git a/packages/neo-one-react-core/src/Link.tsx b/packages/neo-one-react-core/src/Link.tsx index fd14b00e57..4d5bd84767 100644 --- a/packages/neo-one-react-core/src/Link.tsx +++ b/packages/neo-one-react-core/src/Link.tsx @@ -2,7 +2,8 @@ import styled from '@emotion/styled'; import { prop, switchProp } from 'styled-tools'; import { LinkBase } from './LinkBase'; -export const Link = styled(LinkBase)` +// tslint:disable-next-line: no-any +export const Link = styled(LinkBase)` color: ${switchProp('linkColor', { primary: prop('theme.primary'), accent: prop('theme.accent'), diff --git a/packages/neo-one-react-core/src/LinkBase.tsx b/packages/neo-one-react-core/src/LinkBase.tsx index b918c07e7b..d6012efdfa 100644 --- a/packages/neo-one-react-core/src/LinkBase.tsx +++ b/packages/neo-one-react-core/src/LinkBase.tsx @@ -1,7 +1,8 @@ import styled from '@emotion/styled'; import { Box } from './Box'; +import { ColorProps } from './styledProps'; -export const LinkBase = styled(Box.withComponent('a'))` +export const LinkBase = styled(Box.withComponent('a'))` cursor: pointer; `; diff --git a/packages/neo-one-react-core/src/TextInput.tsx b/packages/neo-one-react-core/src/TextInput.tsx index b825feb179..1bdc3f807b 100644 --- a/packages/neo-one-react-core/src/TextInput.tsx +++ b/packages/neo-one-react-core/src/TextInput.tsx @@ -2,7 +2,7 @@ import styled from '@emotion/styled'; import { prop } from 'styled-tools'; import { Input } from './Input'; -export const TextInput = styled(Input)` +export const TextInput = styled(Input)<{}, {}>` padding: 0 4px; outline: none; ${prop('theme.fonts.axiformaRegular')}; diff --git a/packages/neo-one-react-core/src/ToolbarContent.tsx b/packages/neo-one-react-core/src/ToolbarContent.tsx index 0802d1960e..c78a293a69 100644 --- a/packages/neo-one-react-core/src/ToolbarContent.tsx +++ b/packages/neo-one-react-core/src/ToolbarContent.tsx @@ -8,7 +8,10 @@ export interface ToolbarContentProps { const toolbarContentTheme = theme('ToolbarContent'); -export const ToolbarContent = styled(Box)` +export const ToolbarContent = styled(Box)< + { readonly align?: string }, + { readonly align?: string } +>` display: grid; grid-auto-flow: column; grid-auto-columns: min-content; diff --git a/packages/neo-one-react-core/src/ToolbarFocusable.tsx b/packages/neo-one-react-core/src/ToolbarFocusable.tsx index a56b0f4de2..0105e46e2a 100644 --- a/packages/neo-one-react-core/src/ToolbarFocusable.tsx +++ b/packages/neo-one-react-core/src/ToolbarFocusable.tsx @@ -135,6 +135,6 @@ export const ToolbarFocusableComponent = forwardRef( }, ); -export const ToolbarFocusable = styled(ToolbarFocusableComponent)` +export const ToolbarFocusable = styled(ToolbarFocusableComponent)<{}, {}>` ${theme('ToolbarFocusable')}; `; diff --git a/packages/neo-one-react-core/src/use.tsx b/packages/neo-one-react-core/src/use.tsx index 973f5e1a49..39ac8bcaa4 100644 --- a/packages/neo-one-react-core/src/use.tsx +++ b/packages/neo-one-react-core/src/use.tsx @@ -22,9 +22,7 @@ export type Without = Pick>; * @template U Union */ // tslint:disable-next-line:no-unused -export type UnionToIntersection = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) - ? I - : never; +export type UnionToIntersection = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never; /** * Use prop diff --git a/packages/neo-one-react-core/tsconfig.json b/packages/neo-one-react-core/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-react-core/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-react/.npmignore b/packages/neo-one-react/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-react/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-react/CHANGELOG.json b/packages/neo-one-react/CHANGELOG.json new file mode 100644 index 0000000000..1a871665e8 --- /dev/null +++ b/packages/neo-one-react/CHANGELOG.json @@ -0,0 +1,46 @@ +{ + "name": "@neo-one/react", + "entries": [ + { + "version": "2.7.0", + "tag": "@neo-one/react_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/react_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/react_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + } + ] + } + } + ] +} diff --git a/packages/neo-one-react/CHANGELOG.md b/packages/neo-one-react/CHANGELOG.md index 24c3f298f5..87b1e9b2ee 100644 --- a/packages/neo-one-react/CHANGELOG.md +++ b/packages/neo-one-react/CHANGELOG.md @@ -1,56 +1,29 @@ -# Change Log +# Change Log - @neo-one/react -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react@1.1.3...@neo-one/react@2.3.0) (2019-10-23) +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT -**Note:** Version bump only for package @neo-one/react +### Patches +- Upgrade TypeScript from v3.8.3 to v3.9.5 +### Updates +- bump package version for future release clarity +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react@1.1.2...@neo-one/react@1.1.3) (2019-10-23) +### Minor changes -**Note:** Version bump only for package @neo-one/react +- update package release process to take better advantage of rush tooling +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT +### Minor changes +- Migrate to Rush - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react@1.1.1...@neo-one/react@1.1.2) (2019-08-22) - -**Note:** Version bump only for package @neo-one/react - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react@1.1.0...@neo-one/react@1.1.1) (2019-06-20) - -**Note:** Version bump only for package @neo-one/react - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react@1.0.2...@neo-one/react@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/react - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react@1.0.1...@neo-one/react@1.0.2) (2019-02-21) - -**Note:** Version bump only for package @neo-one/react - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/react@1.0.0...@neo-one/react@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/react diff --git a/packages/neo-one-react/gulpfile.js b/packages/neo-one-react/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-react/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-react/package.json b/packages/neo-one-react/package.json index 8d47ecf1e3..b7c32a24cd 100644 --- a/packages/neo-one-react/package.json +++ b/packages/neo-one-react/package.json @@ -1,14 +1,27 @@ { "name": "@neo-one/react", - "version": "2.3.0", + "version": "2.7.0", "description": "NEOβ€’ONE React utilities.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, "dependencies": { "tslib": "^1.10.0" }, + "sideEffects": false, "peerDependencies": { + "@types/react": "^16.0.0", "react": "^16.0.0", "rxjs": "^6.0.0" }, - "sideEffects": false + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-react/tsconfig.json b/packages/neo-one-react/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-react/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-smart-contract-codegen/.npmignore b/packages/neo-one-smart-contract-codegen/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-smart-contract-codegen/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-smart-contract-codegen/CHANGELOG.json b/packages/neo-one-smart-contract-codegen/CHANGELOG.json new file mode 100644 index 0000000000..5da6e996c3 --- /dev/null +++ b/packages/neo-one-smart-contract-codegen/CHANGELOG.json @@ -0,0 +1,103 @@ +{ + "name": "@neo-one/smart-contract-codegen", + "entries": [ + { + "version": "2.7.1", + "tag": "@neo-one/smart-contract-codegen_v2.7.1", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/cli-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/smart-contract-codegen_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "fix #1997" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/smart-contract-codegen_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/cli-common\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/smart-contract-codegen_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + }, + { + "comment": "Upgrade TS to v3.8.1-rc" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/cli-common\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-smart-contract-codegen/CHANGELOG.md b/packages/neo-one-smart-contract-codegen/CHANGELOG.md index 1f7529e05c..9689b91267 100644 --- a/packages/neo-one-smart-contract-codegen/CHANGELOG.md +++ b/packages/neo-one-smart-contract-codegen/CHANGELOG.md @@ -1,201 +1,35 @@ -# Change Log +# Change Log - @neo-one/smart-contract-codegen -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -## [2.3.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-codegen@2.3.0...@neo-one/smart-contract-codegen@2.3.1) (2019-11-20) +## 2.7.1 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/smart-contract-codegen +*Version update only* +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT +### Patches +- fix #1997 +### Updates -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-codegen@1.2.1...@neo-one/smart-contract-codegen@2.3.0) (2019-10-23) +- bump package version for future release clarity -**Note:** Version bump only for package @neo-one/smart-contract-codegen +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes +- update package release process to take better advantage of rush tooling +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT +### Minor changes -## [1.2.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-codegen@1.2.0...@neo-one/smart-contract-codegen@1.2.1) (2019-10-23) +- Migrate to Rush +- Upgrade TS to v3.8.1-rc -**Note:** Version bump only for package @neo-one/smart-contract-codegen - - - - - -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-codegen@1.1.13...@neo-one/smart-contract-codegen@1.2.0) (2019-10-23) - - -### Features - -* **dapi codegen:** add DapiUserAccountProvider to client in codegen ([dc55a1d](https://github.com/neo-one-suite/neo-one/commit/dc55a1d1d60ecbf5682141e6dc275340f77d7ec3)), closes [#1687](https://github.com/neo-one-suite/neo-one/issues/1687) -* **dapi codegen:** setup DapiUserAccountProvider by default during codegen ([6b438db](https://github.com/neo-one-suite/neo-one/commit/6b438dba827b47272d5fc11f390f6912eb0303bc)) - - - - - -## [1.1.13](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-codegen@1.1.12...@neo-one/smart-contract-codegen@1.1.13) (2019-09-04) - - -### Bug Fixes - -* **web:** fix developer tools clipping ([#1732](https://github.com/neo-one-suite/neo-one/issues/1732)) ([54a459e](https://github.com/neo-one-suite/neo-one/commit/54a459e)) - - - - - -## [1.1.12](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-codegen@1.1.11...@neo-one/smart-contract-codegen@1.1.12) (2019-09-03) - -**Note:** Version bump only for package @neo-one/smart-contract-codegen - - - - - -## [1.1.11](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-codegen@1.1.10...@neo-one/smart-contract-codegen@1.1.11) (2019-09-02) - -**Note:** Version bump only for package @neo-one/smart-contract-codegen - - - - - -## [1.1.10](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-codegen@1.1.9...@neo-one/smart-contract-codegen@1.1.10) (2019-08-31) - -**Note:** Version bump only for package @neo-one/smart-contract-codegen - - - - - -## [1.1.9](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-codegen@1.1.8...@neo-one/smart-contract-codegen@1.1.9) (2019-08-31) - - -### Bug Fixes - -* **website:** fix typos in codegen ([d79b58f](https://github.com/neo-one-suite/neo-one/commit/d79b58f)) - - - - - -## [1.1.8](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-codegen@1.1.7...@neo-one/smart-contract-codegen@1.1.8) (2019-08-30) - -**Note:** Version bump only for package @neo-one/smart-contract-codegen - - - - - -## [1.1.7](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-codegen@1.1.6...@neo-one/smart-contract-codegen@1.1.7) (2019-08-23) - - -### Bug Fixes - -* **tests:** update snapshots ([#1699](https://github.com/neo-one-suite/neo-one/issues/1699)) ([21d566e](https://github.com/neo-one-suite/neo-one/commit/21d566e)) -* **tests:** update snapshots again ([#1700](https://github.com/neo-one-suite/neo-one/issues/1700)) ([eeb182e](https://github.com/neo-one-suite/neo-one/commit/eeb182e)) - - - - - -## [1.1.6](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-codegen@1.1.5...@neo-one/smart-contract-codegen@1.1.6) (2019-08-22) - -**Note:** Version bump only for package @neo-one/smart-contract-codegen - - - - - -## [1.1.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-codegen@1.1.4...@neo-one/smart-contract-codegen@1.1.5) (2019-07-29) - -**Note:** Version bump only for package @neo-one/smart-contract-codegen - - - - - -## [1.1.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-codegen@1.1.3...@neo-one/smart-contract-codegen@1.1.4) (2019-06-20) - -**Note:** Version bump only for package @neo-one/smart-contract-codegen - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-codegen@1.1.2...@neo-one/smart-contract-codegen@1.1.3) (2019-06-04) - -**Note:** Version bump only for package @neo-one/smart-contract-codegen - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-codegen@1.1.1...@neo-one/smart-contract-codegen@1.1.2) (2019-04-12) - -**Note:** Version bump only for package @neo-one/smart-contract-codegen - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-codegen@1.1.0...@neo-one/smart-contract-codegen@1.1.1) (2019-03-27) - -**Note:** Version bump only for package @neo-one/smart-contract-codegen - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-codegen@1.0.3...@neo-one/smart-contract-codegen@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/smart-contract-codegen - - - - - -## [1.0.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-codegen@1.0.3-alpha.0...@neo-one/smart-contract-codegen@1.0.3) (2019-02-21) - -**Note:** Version bump only for package @neo-one/smart-contract-codegen - - - - - -## [1.0.3-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-codegen@1.0.2...@neo-one/smart-contract-codegen@1.0.3-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **deps:** update dependency @types/lodash to v4.14.120 ([a76dae7](https://github.com/neo-one-suite/neo-one/commit/a76dae7)) -* **deps:** update dependency @types/prettier to v1.15.2 ([0cf04ac](https://github.com/neo-one-suite/neo-one/commit/0cf04ac)) -* **deps:** update dependency change-case to v3.1.0 ([4255281](https://github.com/neo-one-suite/neo-one/commit/4255281)) - - -### Features - -* **angular+vue:** Add codegen for angular & vue. ([0f5bf03](https://github.com/neo-one-suite/neo-one/commit/0f5bf03)) -* **browser compatibility:** Generate a browser-compatible bundle for client & client full packages. ([11c812b](https://github.com/neo-one-suite/neo-one/commit/11c812b)) - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-codegen@1.0.1...@neo-one/smart-contract-codegen@1.0.2) (2018-11-13) - -**Note:** Version bump only for package @neo-one/smart-contract-codegen - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-codegen@1.0.0...@neo-one/smart-contract-codegen@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/smart-contract-codegen diff --git a/packages/neo-one-smart-contract-codegen/gulpfile.js b/packages/neo-one-smart-contract-codegen/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-smart-contract-codegen/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-smart-contract-codegen/package.json b/packages/neo-one-smart-contract-codegen/package.json index 757b457c58..1cf825a8a2 100644 --- a/packages/neo-one-smart-contract-codegen/package.json +++ b/packages/neo-one-smart-contract-codegen/package.json @@ -1,21 +1,33 @@ { "name": "@neo-one/smart-contract-codegen", - "version": "2.3.1", + "version": "2.7.1", "description": "NEOβ€’ONE TypeScript smart contract codegen.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/cli-common": "^2.4.0", - "@neo-one/client-common": "^2.3.0", - "@neo-one/client-core": "^2.3.0", - "@neo-one/utils": "^2.3.0", + "@neo-one/cli-common": "^3.0.0", + "@neo-one/client-common": "^3.0.0", + "@neo-one/client-core": "^3.0.0", + "@neo-one/utils": "^3.0.0", "lodash": "^4.17.15", - "prettier": "^1.18.2", + "prettier": "^2.0.1", "safe-stable-stringify": "^1.1.0", - "source-map": "^0.7.3" + "source-map": "^0.7.3", + "tslib": "^1.10.0" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "@types/jest": "^24.0.18", "@types/lodash": "^4.14.138", - "@types/prettier": "^1.18.2" - }, - "sideEffects": false + "@types/prettier": "^1.18.2", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-smart-contract-codegen/src/__data__/nep5.ts b/packages/neo-one-smart-contract-codegen/src/__data__/nep5.ts index cc082aafb2..8a360e73e0 100644 --- a/packages/neo-one-smart-contract-codegen/src/__data__/nep5.ts +++ b/packages/neo-one-smart-contract-codegen/src/__data__/nep5.ts @@ -63,13 +63,19 @@ const abi = (decimals: number): ABI => ({ }, { name: 'forward', - parameters: [{ name: 'address', type: 'Address' }, { name: 'args', type: 'ForwardValue', rest: true }], + parameters: [ + { name: 'address', type: 'Address' }, + { name: 'args', type: 'ForwardValue', rest: true }, + ], returnType: { type: 'ForwardValue' }, }, { name: 'forwardConstant', constant: true, - parameters: [{ name: 'address', type: 'Address' }, { name: 'args', type: 'ForwardValue', rest: true }], + parameters: [ + { name: 'address', type: 'Address' }, + { name: 'args', type: 'ForwardValue', rest: true }, + ], returnType: { type: 'ForwardValue' }, }, { diff --git a/packages/neo-one-smart-contract-codegen/src/__tests__/__snapshots__/genCommonBrowserFiles.test.ts.snap b/packages/neo-one-smart-contract-codegen/src/__tests__/__snapshots__/genCommonBrowserFiles.test.ts.snap index 8b0e77dd8f..4203cf12f8 100644 --- a/packages/neo-one-smart-contract-codegen/src/__tests__/__snapshots__/genCommonBrowserFiles.test.ts.snap +++ b/packages/neo-one-smart-contract-codegen/src/__tests__/__snapshots__/genCommonBrowserFiles.test.ts.snap @@ -67,6 +67,7 @@ export class ContractsService { "js": "// tslint:disable /* eslint-disable */ import { + addLocalKeysSync, Client, DeveloperClient, LocalKeyStore, @@ -101,15 +102,10 @@ export const createClient = (getUserAccountProviders = getDefaultUserAccountProv if (localUserAccountProvider !== undefined) { const localKeyStore = localUserAccountProvider.keystore; if (localKeyStore instanceof LocalKeyStore) { - Promise.all([ - localKeyStore.addUserAccount({ - network: 'local', - name: 'master', - privateKey: 'L4qhHtwbiAMu1nrSmsTP5a3dJbxA3SNS6oheKnKd8E7KTJyCLcUv', - }), - ]).catch(() => { - // do nothing - }); + addLocalKeysSync( + [{ network: 'local', name: 'master', privateKey: 'L4qhHtwbiAMu1nrSmsTP5a3dJbxA3SNS6oheKnKd8E7KTJyCLcUv' }], + localKeyStore, + ); } } } @@ -124,6 +120,7 @@ export const createDeveloperClients = () => ({ "ts": "// tslint:disable /* eslint-disable */ import { + addLocalKeysSync, Client, DeveloperClient, DeveloperClients, @@ -170,15 +167,10 @@ export const createClient = { - // do nothing - }); + addLocalKeysSync( + [{ network: 'local', name: 'master', privateKey: 'L4qhHtwbiAMu1nrSmsTP5a3dJbxA3SNS6oheKnKd8E7KTJyCLcUv' }], + localKeyStore, + ); } } } @@ -216,7 +208,7 @@ export interface Contracts { readonly ico: ICOSmartContract; readonly token: TokenSmartContract; } - +// Refer to the MigrationSmartContract documentation at https://neo-one.io/docs/deployment for more information. export interface MigrationContracts { readonly ico: ICOMigrationSmartContract; readonly token: TokenMigrationSmartContract; diff --git a/packages/neo-one-smart-contract-codegen/src/__tests__/__snapshots__/genCommonFiles.test.ts.snap b/packages/neo-one-smart-contract-codegen/src/__tests__/__snapshots__/genCommonFiles.test.ts.snap index ea71cf55bc..e2d11bda0b 100644 --- a/packages/neo-one-smart-contract-codegen/src/__tests__/__snapshots__/genCommonFiles.test.ts.snap +++ b/packages/neo-one-smart-contract-codegen/src/__tests__/__snapshots__/genCommonFiles.test.ts.snap @@ -67,6 +67,7 @@ export class ContractsService { "js": "// tslint:disable /* eslint-disable */ import { + addLocalKeysSync, Client, DapiUserAccountProvider, DeveloperClient, @@ -127,15 +128,10 @@ export const createClient = (getUserAccountProvidersOrHost) => { if (localUserAccountProvider !== undefined) { const localKeyStore = localUserAccountProvider.keystore; if (localKeyStore instanceof LocalKeyStore) { - Promise.all([ - localKeyStore.addUserAccount({ - network: 'local', - name: 'master', - privateKey: 'L4qhHtwbiAMu1nrSmsTP5a3dJbxA3SNS6oheKnKd8E7KTJyCLcUv', - }), - ]).catch(() => { - // do nothing - }); + addLocalKeysSync( + [{ network: 'local', name: 'master', privateKey: 'L4qhHtwbiAMu1nrSmsTP5a3dJbxA3SNS6oheKnKd8E7KTJyCLcUv' }], + localKeyStore, + ); } } } @@ -150,6 +146,7 @@ export const createDeveloperClients = (host = 'localhost') => ({ "ts": "// tslint:disable /* eslint-disable */ import { + addLocalKeysSync, Client, DapiUserAccountProvider, DeveloperClient, @@ -226,15 +223,10 @@ export const createClient = { - // do nothing - }); + addLocalKeysSync( + [{ network: 'local', name: 'master', privateKey: 'L4qhHtwbiAMu1nrSmsTP5a3dJbxA3SNS6oheKnKd8E7KTJyCLcUv' }], + localKeyStore, + ); } } } @@ -272,7 +264,7 @@ export interface Contracts { readonly ico: ICOSmartContract; readonly token: TokenSmartContract; } - +// Refer to the MigrationSmartContract documentation at https://neo-one.io/docs/deployment for more information. export interface MigrationContracts { readonly ico: ICOMigrationSmartContract; readonly token: TokenMigrationSmartContract; diff --git a/packages/neo-one-smart-contract-codegen/src/__tests__/abi/__snapshots__/genABI.test.ts.snap b/packages/neo-one-smart-contract-codegen/src/__tests__/abi/__snapshots__/genABI.test.ts.snap index 8e976eb4ce..79311c2817 100644 --- a/packages/neo-one-smart-contract-codegen/src/__tests__/abi/__snapshots__/genABI.test.ts.snap +++ b/packages/neo-one-smart-contract-codegen/src/__tests__/abi/__snapshots__/genABI.test.ts.snap @@ -31,34 +31,34 @@ Object { \\"name\\": \\"name\\", \\"parameters\\": [], \\"returnType\\": { - \\"type\\": \\"String\\" - } + \\"type\\": \\"String\\" + } }, { \\"constant\\": true, \\"name\\": \\"symbol\\", \\"parameters\\": [], \\"returnType\\": { - \\"type\\": \\"String\\" - } + \\"type\\": \\"String\\" + } }, { \\"constant\\": true, \\"name\\": \\"decimals\\", \\"parameters\\": [], \\"returnType\\": { - \\"decimals\\": 0, - \\"type\\": \\"Integer\\" - } + \\"decimals\\": 0, + \\"type\\": \\"Integer\\" + } }, { \\"constant\\": true, \\"name\\": \\"totalSupply\\", \\"parameters\\": [], \\"returnType\\": { - \\"decimals\\": 4, - \\"type\\": \\"Integer\\" - } + \\"decimals\\": 4, + \\"type\\": \\"Integer\\" + } }, { \\"name\\": \\"transfer\\", @@ -128,34 +128,34 @@ export const tokenABI: ABI = { \\"name\\": \\"name\\", \\"parameters\\": [], \\"returnType\\": { - \\"type\\": \\"String\\" - } + \\"type\\": \\"String\\" + } }, { \\"constant\\": true, \\"name\\": \\"symbol\\", \\"parameters\\": [], \\"returnType\\": { - \\"type\\": \\"String\\" - } + \\"type\\": \\"String\\" + } }, { \\"constant\\": true, \\"name\\": \\"decimals\\", \\"parameters\\": [], \\"returnType\\": { - \\"decimals\\": 0, - \\"type\\": \\"Integer\\" - } + \\"decimals\\": 0, + \\"type\\": \\"Integer\\" + } }, { \\"constant\\": true, \\"name\\": \\"totalSupply\\", \\"parameters\\": [], \\"returnType\\": { - \\"decimals\\": 4, - \\"type\\": \\"Integer\\" - } + \\"decimals\\": 4, + \\"type\\": \\"Integer\\" + } }, { \\"name\\": \\"transfer\\", diff --git a/packages/neo-one-smart-contract-codegen/src/__tests__/client/__snapshots__/genBrowserClient.test.ts.snap b/packages/neo-one-smart-contract-codegen/src/__tests__/client/__snapshots__/genBrowserClient.test.ts.snap index 6c1f0d7443..3f3063aa76 100644 --- a/packages/neo-one-smart-contract-codegen/src/__tests__/client/__snapshots__/genBrowserClient.test.ts.snap +++ b/packages/neo-one-smart-contract-codegen/src/__tests__/client/__snapshots__/genBrowserClient.test.ts.snap @@ -4,6 +4,7 @@ exports[`genBrowserClient Token 1`] = ` Object { "js": " import { + addLocalKeysSync, Client, DeveloperClient, LocalKeyStore, @@ -41,11 +42,9 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') if (localUserAccountProvider !== undefined) { const localKeyStore = localUserAccountProvider.keystore; if (localKeyStore instanceof LocalKeyStore) { - Promise.all([ - localKeyStore.addUserAccount({ network: 'local', name: 'master', privateKey: 'L4qhHtwbiAMu1nrSmsTP5a3dJbxA3SNS6oheKnKd8E7KTJyCLcUv' }), - ]).catch(() => { - // do nothing - }); + addLocalKeysSync([ + { network: 'local', name: 'master', privateKey: 'L4qhHtwbiAMu1nrSmsTP5a3dJbxA3SNS6oheKnKd8E7KTJyCLcUv' }, + ], localKeyStore); } } } @@ -60,6 +59,7 @@ export const createDeveloperClients = () => ({ ", "ts": " import { + addLocalKeysSync, Client, DeveloperClient, DeveloperClients, @@ -105,11 +105,9 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') if (localUserAccountProvider !== undefined) { const localKeyStore = localUserAccountProvider.keystore; if (localKeyStore instanceof LocalKeyStore) { - Promise.all([ - localKeyStore.addUserAccount({ network: 'local', name: 'master', privateKey: 'L4qhHtwbiAMu1nrSmsTP5a3dJbxA3SNS6oheKnKd8E7KTJyCLcUv' }), - ]).catch(() => { - // do nothing - }); + addLocalKeysSync([ + { network: 'local', name: 'master', privateKey: 'L4qhHtwbiAMu1nrSmsTP5a3dJbxA3SNS6oheKnKd8E7KTJyCLcUv' }, + ], localKeyStore); } } } diff --git a/packages/neo-one-smart-contract-codegen/src/__tests__/client/__snapshots__/genClient.test.ts.snap b/packages/neo-one-smart-contract-codegen/src/__tests__/client/__snapshots__/genClient.test.ts.snap index b4fc464c81..62fb1f4c05 100644 --- a/packages/neo-one-smart-contract-codegen/src/__tests__/client/__snapshots__/genClient.test.ts.snap +++ b/packages/neo-one-smart-contract-codegen/src/__tests__/client/__snapshots__/genClient.test.ts.snap @@ -4,6 +4,7 @@ exports[`genClient Token 1`] = ` Object { "js": " import { + addLocalKeysSync, Client, DapiUserAccountProvider, DeveloperClient, @@ -57,11 +58,9 @@ export const createClient = (getUserAccountProvidersOrHost) => { if (localUserAccountProvider !== undefined) { const localKeyStore = localUserAccountProvider.keystore; if (localKeyStore instanceof LocalKeyStore) { - Promise.all([ - localKeyStore.addUserAccount({ network: 'local', name: 'master', privateKey: 'L4qhHtwbiAMu1nrSmsTP5a3dJbxA3SNS6oheKnKd8E7KTJyCLcUv' }), - ]).catch(() => { - // do nothing - }); + addLocalKeysSync([ + { network: 'local', name: 'master', privateKey: 'L4qhHtwbiAMu1nrSmsTP5a3dJbxA3SNS6oheKnKd8E7KTJyCLcUv' }, + ], localKeyStore); } } } @@ -75,6 +74,7 @@ export const createDeveloperClients = (host = 'localhost') => ({ ", "ts": " import { + addLocalKeysSync, Client, DapiUserAccountProvider, DeveloperClient, @@ -136,11 +136,9 @@ export const createClient = { - // do nothing - }); + addLocalKeysSync([ + { network: 'local', name: 'master', privateKey: 'L4qhHtwbiAMu1nrSmsTP5a3dJbxA3SNS6oheKnKd8E7KTJyCLcUv' }, + ], localKeyStore); } } } diff --git a/packages/neo-one-smart-contract-codegen/src/__tests__/contracts/__snapshots__/genContracts.test.ts.snap b/packages/neo-one-smart-contract-codegen/src/__tests__/contracts/__snapshots__/genContracts.test.ts.snap index 0b6cfb9ace..8f15e8f796 100644 --- a/packages/neo-one-smart-contract-codegen/src/__tests__/contracts/__snapshots__/genContracts.test.ts.snap +++ b/packages/neo-one-smart-contract-codegen/src/__tests__/contracts/__snapshots__/genContracts.test.ts.snap @@ -22,7 +22,7 @@ export interface Contracts { readonly ico: ICOSmartContract; readonly token: TokenSmartContract; } - +// Refer to the MigrationSmartContract documentation at https://neo-one.io/docs/deployment for more information. export interface MigrationContracts { readonly ico: ICOMigrationSmartContract; readonly token: TokenMigrationSmartContract; diff --git a/packages/neo-one-smart-contract-codegen/src/client/genBrowserClient.ts b/packages/neo-one-smart-contract-codegen/src/client/genBrowserClient.ts index e115aa19a1..ba47f38f3d 100644 --- a/packages/neo-one-smart-contract-codegen/src/client/genBrowserClient.ts +++ b/packages/neo-one-smart-contract-codegen/src/client/genBrowserClient.ts @@ -35,16 +35,11 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') if (localUserAccountProvider !== undefined) { const localKeyStore = localUserAccountProvider.keystore; if (localKeyStore instanceof LocalKeyStore) { - Promise.all([ + addLocalKeysSync([ ${wallets - .map( - ({ name, wif }) => - `localKeyStore.addUserAccount({ network: '${localDevNetworkName}', name: '${name}', privateKey: '${wif}' }),`, - ) + .map(({ name, wif }) => `{ network: '${localDevNetworkName}', name: '${name}', privateKey: '${wif}' },`) .join('\n ')} - ]).catch(() => { - // do nothing - }); + ], localKeyStore); } } }`; @@ -62,6 +57,7 @@ if (process.env.NODE_ENV !== 'production' || process.env.NEO_ONE_DEV === 'true') return { js: ` import { + addLocalKeysSync, Client, DeveloperClient, LocalKeyStore, @@ -87,6 +83,7 @@ export const createDeveloperClients = () => ${createDeveloperClients} `, ts: ` import { + addLocalKeysSync, Client, DeveloperClient, DeveloperClients, diff --git a/packages/neo-one-smart-contract-codegen/src/client/genClient.ts b/packages/neo-one-smart-contract-codegen/src/client/genClient.ts index 7c43a4146e..7add66ec95 100644 --- a/packages/neo-one-smart-contract-codegen/src/client/genClient.ts +++ b/packages/neo-one-smart-contract-codegen/src/client/genClient.ts @@ -32,16 +32,11 @@ export const genClient = ({ if (localUserAccountProvider !== undefined) { const localKeyStore = localUserAccountProvider.keystore; if (localKeyStore instanceof LocalKeyStore) { - Promise.all([ + addLocalKeysSync([ ${wallets - .map( - ({ name, wif }) => - `localKeyStore.addUserAccount({ network: '${localDevNetworkName}', name: '${name}', privateKey: '${wif}' }),`, - ) + .map(({ name, wif }) => `{ network: '${localDevNetworkName}', name: '${name}', privateKey: '${wif}' },`) .join('\n ')} - ]).catch(() => { - // do nothing - }); + ], localKeyStore); } } }`; @@ -76,6 +71,7 @@ export const genClient = ({ return { js: ` import { + addLocalKeysSync, Client, DapiUserAccountProvider, DeveloperClient, @@ -109,6 +105,7 @@ export const createDeveloperClients = (host = 'localhost') => ${createDeveloperC `, ts: ` import { + addLocalKeysSync, Client, DapiUserAccountProvider, DeveloperClient, diff --git a/packages/neo-one-smart-contract-codegen/src/contracts/genContracts.ts b/packages/neo-one-smart-contract-codegen/src/contracts/genContracts.ts index 8a204ae187..53bcb11cef 100644 --- a/packages/neo-one-smart-contract-codegen/src/contracts/genContracts.ts +++ b/packages/neo-one-smart-contract-codegen/src/contracts/genContracts.ts @@ -49,7 +49,7 @@ export interface Contracts { .map(({ name }) => `readonly ${lowerCaseFirst(name)}: ${getSmartContractName(name)};`) .join('\n ')} } - +// Refer to the MigrationSmartContract documentation at https://neo-one.io/docs/deployment for more information. export interface MigrationContracts { ${sortedPaths .map(({ name }) => `readonly ${lowerCaseFirst(name)}: ${getMigrationSmartContractName(name)};`) diff --git a/packages/neo-one-smart-contract-codegen/tsconfig.json b/packages/neo-one-smart-contract-codegen/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-smart-contract-codegen/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-smart-contract-compiler-node/.npmignore b/packages/neo-one-smart-contract-compiler-node/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-smart-contract-compiler-node/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-smart-contract-compiler-node/CHANGELOG.json b/packages/neo-one-smart-contract-compiler-node/CHANGELOG.json new file mode 100644 index 0000000000..72c9a7e712 --- /dev/null +++ b/packages/neo-one-smart-contract-compiler-node/CHANGELOG.json @@ -0,0 +1,91 @@ +{ + "name": "@neo-one/smart-contract-compiler-node", + "entries": [ + { + "version": "2.7.1", + "tag": "@neo-one/smart-contract-compiler-node_v2.7.1", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/smart-contract-lib\" from `^2.7.0` to `^2.7.1`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/smart-contract-compiler-node_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/smart-contract-compiler-node_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/smart-contract\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-lib\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/smart-contract-compiler-node_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + }, + { + "comment": "Upgrade TS to v3.8.1-rc" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/smart-contract\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-lib\" from `^2.3.1` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-smart-contract-compiler-node/CHANGELOG.md b/packages/neo-one-smart-contract-compiler-node/CHANGELOG.md index b4d931c8e6..b00e6a3f3e 100644 --- a/packages/neo-one-smart-contract-compiler-node/CHANGELOG.md +++ b/packages/neo-one-smart-contract-compiler-node/CHANGELOG.md @@ -1,134 +1,35 @@ -# Change Log +# Change Log - @neo-one/smart-contract-compiler-node -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler-node@1.2.1...@neo-one/smart-contract-compiler-node@2.3.0) (2019-10-23) +## 2.7.1 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/smart-contract-compiler-node +*Version update only* +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT +### Patches +- Upgrade TypeScript from v3.8.3 to v3.9.5 +### Updates -## [1.2.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler-node@1.2.0...@neo-one/smart-contract-compiler-node@1.2.1) (2019-10-23) +- bump package version for future release clarity -**Note:** Version bump only for package @neo-one/smart-contract-compiler-node +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes +- update package release process to take better advantage of rush tooling +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT +### Minor changes -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler-node@1.1.7...@neo-one/smart-contract-compiler-node@1.2.0) (2019-10-23) +- Migrate to Rush +- Upgrade TS to v3.8.1-rc - -### Bug Fixes - -* **ts:** revert back to TS v3.5.3 until v3.6.3 is released ([070d519](https://github.com/neo-one-suite/neo-one/commit/070d5190bdacbec433af37c69fef1cc7702b8bde)) - - -### Features - -* **ts:** upgrade to TS v3.6.3 ([82595a9](https://github.com/neo-one-suite/neo-one/commit/82595a91c063a4fa08ef06f631cd1dab4cb965f3)) - - - - - -## [1.1.7](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler-node@1.1.6...@neo-one/smart-contract-compiler-node@1.1.7) (2019-09-04) - -**Note:** Version bump only for package @neo-one/smart-contract-compiler-node - - - - - -## [1.1.6](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler-node@1.1.5...@neo-one/smart-contract-compiler-node@1.1.6) (2019-08-30) - -**Note:** Version bump only for package @neo-one/smart-contract-compiler-node - - - - - -## [1.1.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler-node@1.1.4...@neo-one/smart-contract-compiler-node@1.1.5) (2019-08-22) - -**Note:** Version bump only for package @neo-one/smart-contract-compiler-node - - - - - -## [1.1.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler-node@1.1.3...@neo-one/smart-contract-compiler-node@1.1.4) (2019-07-29) - -**Note:** Version bump only for package @neo-one/smart-contract-compiler-node - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler-node@1.1.2...@neo-one/smart-contract-compiler-node@1.1.3) (2019-06-20) - - -### Bug Fixes - -* **deps:** update dependency typescript to v3.5.1 ([#1365](https://github.com/neo-one-suite/neo-one/issues/1365)) ([ec89546](https://github.com/neo-one-suite/neo-one/commit/ec89546)) - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler-node@1.1.1...@neo-one/smart-contract-compiler-node@1.1.2) (2019-06-04) - -**Note:** Version bump only for package @neo-one/smart-contract-compiler-node - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler-node@1.1.0...@neo-one/smart-contract-compiler-node@1.1.1) (2019-03-27) - - -### Bug Fixes - -* **deps:** update dependency typescript to v3.3.3333 ([ad271bb](https://github.com/neo-one-suite/neo-one/commit/ad271bb)) -* **deps:** update dependency typescript to v3.3.4000 ([0b71078](https://github.com/neo-one-suite/neo-one/commit/0b71078)) - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler-node@1.0.2...@neo-one/smart-contract-compiler-node@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/smart-contract-compiler-node - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler-node@1.0.2-alpha.0...@neo-one/smart-contract-compiler-node@1.0.2) (2019-02-21) - -**Note:** Version bump only for package @neo-one/smart-contract-compiler-node - - - - - -## [1.0.2-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler-node@1.0.1...@neo-one/smart-contract-compiler-node@1.0.2-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **deps:** update dependency typescript to v3.2.1 ([54f2a64](https://github.com/neo-one-suite/neo-one/commit/54f2a64)) -* **deps:** update dependency typescript to v3.2.2 ([c5232a7](https://github.com/neo-one-suite/neo-one/commit/c5232a7)) -* **deps:** update dependency typescript to v3.2.4 ([ae72102](https://github.com/neo-one-suite/neo-one/commit/ae72102)) -* **deps:** update dependency typescript to v3.3.1 ([975bf8e](https://github.com/neo-one-suite/neo-one/commit/975bf8e)) -* **deps:** update dependency typescript to v3.3.3 ([1cde1b2](https://github.com/neo-one-suite/neo-one/commit/1cde1b2)) - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler-node@1.0.0...@neo-one/smart-contract-compiler-node@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/smart-contract-compiler-node diff --git a/packages/neo-one-smart-contract-compiler-node/gulpfile.js b/packages/neo-one-smart-contract-compiler-node/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-smart-contract-compiler-node/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-smart-contract-compiler-node/package.json b/packages/neo-one-smart-contract-compiler-node/package.json index 7689c1e6f5..a283088fb3 100644 --- a/packages/neo-one-smart-contract-compiler-node/package.json +++ b/packages/neo-one-smart-contract-compiler-node/package.json @@ -1,17 +1,30 @@ { "name": "@neo-one/smart-contract-compiler-node", - "version": "2.3.0", + "version": "2.7.1", "description": "NEOβ€’ONE TypeScript smart contract compiler node host.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/utils": "^2.3.0", + "@neo-one/smart-contract": "^2.7.0", + "@neo-one/smart-contract-lib": "^2.7.1", + "@neo-one/utils": "^3.0.0", "app-root-dir": "^1.0.2", "glob": "^7.1.4", - "typescript": "^3.6.3" + "tslib": "^1.10.0", + "typescript": "3.9.5" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", "@types/app-root-dir": "^0.1.0", - "@types/glob": "^7.1.1" - }, - "sideEffects": false + "@types/glob": "^7.1.1", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-smart-contract-compiler-node/tsconfig.json b/packages/neo-one-smart-contract-compiler-node/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-smart-contract-compiler-node/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-smart-contract-compiler/.npmignore b/packages/neo-one-smart-contract-compiler/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-smart-contract-compiler/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-smart-contract-compiler/CHANGELOG.json b/packages/neo-one-smart-contract-compiler/CHANGELOG.json new file mode 100644 index 0000000000..bd44764380 --- /dev/null +++ b/packages/neo-one-smart-contract-compiler/CHANGELOG.json @@ -0,0 +1,235 @@ +{ + "name": "@neo-one/smart-contract-compiler", + "entries": [ + { + "version": "3.0.0", + "tag": "@neo-one/smart-contract-compiler_v3.0.0", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "major": [ + { + "comment": "3.0.0preview3-alpha release bump" + } + ], + "none": [ + { + "comment": "Pin level-js and levelup deps." + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full-core\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/typescript-concatenator\" from `^2.6.1` to `^2.6.2`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-blockchain\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-neo-settings\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-storage-levelup\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-vm\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-compiler-node\" from `^2.7.0` to `^2.7.1`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/smart-contract-compiler_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "minor": [ + { + "comment": "add debug support" + } + ], + "patch": [ + { + "comment": "Fix number mismatches in ArrayStorage, SetStorage, MapStorage." + }, + { + "comment": "Fix broken switch statement inside SmartContract methods." + }, + { + "comment": "Add appropriate @types dependencies." + }, + { + "comment": "fixup utxo invocation transactions" + }, + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "dependency": [ + { + "comment": "Dependency @neo-one/node-blockchain version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Dependency @neo-one/node-neo-settings version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Dependency @neo-one/node-storage-levelup version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Dependency @neo-one/node-vm version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Updating dependency \"@neo-one/ts-utils\" from `^2.6.0` to `^2.6.1`" + }, + { + "comment": "Updating dependency \"@neo-one/typescript-concatenator\" from `^2.6.0` to `^2.6.1`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/smart-contract-compiler_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full-common\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full-core\" from `^2.4.1` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/ts-utils\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/typescript-concatenator\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-blockchain\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-neo-settings\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-storage-levelup\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-vm\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-compiler-node\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/smart-contract-compiler_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Add support for new language features in TS v3.7, v3.8" + }, + { + "comment": "Migrate to Rush" + }, + { + "comment": "Upgrade TS to v3.8.1-rc. Add support for Nullish Coalescing." + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full-common\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full-core\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/ts-utils\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/typescript-concatenator\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-switch\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-blockchain\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-neo-settings\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-storage-levelup\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-vm\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-compiler-node\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-smart-contract-compiler/CHANGELOG.md b/packages/neo-one-smart-contract-compiler/CHANGELOG.md index 6f77b9d7ae..ee4b473ac7 100644 --- a/packages/neo-one-smart-contract-compiler/CHANGELOG.md +++ b/packages/neo-one-smart-contract-compiler/CHANGELOG.md @@ -1,194 +1,50 @@ -# Change Log +# Change Log - @neo-one/smart-contract-compiler -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler@1.4.1...@neo-one/smart-contract-compiler@2.3.0) (2019-10-23) +## 3.0.0 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/smart-contract-compiler +### Breaking changes +- 3.0.0preview3-alpha release bump +### Updates +- Pin level-js and levelup deps. +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT -## [1.4.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler@1.4.0...@neo-one/smart-contract-compiler@1.4.1) (2019-10-23) +### Minor changes -**Note:** Version bump only for package @neo-one/smart-contract-compiler +- add debug support +### Patches +- Fix number mismatches in ArrayStorage, SetStorage, MapStorage. +- Fix broken switch statement inside SmartContract methods. +- Add appropriate @types dependencies. +- fixup utxo invocation transactions +- Upgrade TypeScript from v3.8.3 to v3.9.5 +### Updates +- bump package version for future release clarity -# [1.4.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler@1.3.4...@neo-one/smart-contract-compiler@1.4.0) (2019-10-23) +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes -### Bug Fixes +- update package release process to take better advantage of rush tooling -* **ts:** revert back to TS v3.5.3 until v3.6.3 is released ([070d519](https://github.com/neo-one-suite/neo-one/commit/070d5190bdacbec433af37c69fef1cc7702b8bde)) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT +### Minor changes -### Features +- Add support for new language features in TS v3.7, v3.8 +- Migrate to Rush +- Upgrade TS to v3.8.1-rc. Add support for Nullish Coalescing. -* **ts:** upgrade to TS v3.6.3 ([82595a9](https://github.com/neo-one-suite/neo-one/commit/82595a91c063a4fa08ef06f631cd1dab4cb965f3)) - - - - - -## [1.3.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler@1.3.3...@neo-one/smart-contract-compiler@1.3.4) (2019-09-04) - -**Note:** Version bump only for package @neo-one/smart-contract-compiler - - - - - -## [1.3.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler@1.3.2...@neo-one/smart-contract-compiler@1.3.3) (2019-08-31) - -**Note:** Version bump only for package @neo-one/smart-contract-compiler - - - - - -## [1.3.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler@1.3.1...@neo-one/smart-contract-compiler@1.3.2) (2019-08-30) - -**Note:** Version bump only for package @neo-one/smart-contract-compiler - - - - - -## [1.3.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler@1.3.0...@neo-one/smart-contract-compiler@1.3.1) (2019-08-23) - -**Note:** Version bump only for package @neo-one/smart-contract-compiler - - - - - -# [1.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler@1.2.1...@neo-one/smart-contract-compiler@1.3.0) (2019-08-22) - - -### Features - -* **monitor:** remove @neo-one/monitor. replace with opencensus, pino, and debug ([#1597](https://github.com/neo-one-suite/neo-one/issues/1597)) ([4b1a28f](https://github.com/neo-one-suite/neo-one/commit/4b1a28f)) - - - - - -## [1.2.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler@1.2.0...@neo-one/smart-contract-compiler@1.2.1) (2019-07-29) - -**Note:** Version bump only for package @neo-one/smart-contract-compiler - - - - - -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler@1.1.3...@neo-one/smart-contract-compiler@1.2.0) (2019-06-20) - - -### Bug Fixes - -* **@neo-one/smart-contract-compiler:** Fix undefined class properties ([675656f](https://github.com/neo-one-suite/neo-one/commit/675656f)), closes [#1342](https://github.com/neo-one-suite/neo-one/issues/1342) -* **deps:** update dependency typescript to v3.5.1 ([#1365](https://github.com/neo-one-suite/neo-one/issues/1365)) ([ec89546](https://github.com/neo-one-suite/neo-one/commit/ec89546)) -* **node:** First wave of node fixes ([d50fd34](https://github.com/neo-one-suite/neo-one/commit/d50fd34)) - - -### Features - -* **@neo-one/smart-contract-compiler:** Allow external contracts to return false on error ([c92ea68](https://github.com/neo-one-suite/neo-one/commit/c92ea68)) -* **@neo-one/smart-contract-compiler:** Do not persist storage on uncaught exception ([bf261ca](https://github.com/neo-one-suite/neo-one/commit/bf261ca)) -* **@neo-one/smart-contract-compiler:** Switch to throwing errors rather than returning false in exc ([1ffda5a](https://github.com/neo-one-suite/neo-one/commit/1ffda5a)) -* **@neo-one/smart-contract-compiler:** Use syscall hash to reduce bytecode size ([b1885d8](https://github.com/neo-one-suite/neo-one/commit/b1885d8)), closes [#1388](https://github.com/neo-one-suite/neo-one/issues/1388) [#745](https://github.com/neo-one-suite/neo-one/issues/745) - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler@1.1.2...@neo-one/smart-contract-compiler@1.1.3) (2019-06-04) - - -### Bug Fixes - -* **@neo-one/types:** eliminate global types from @neo-one/types ([004330d](https://github.com/neo-one-suite/neo-one/commit/004330d)) -* **deps:** update misc dependencies ([0c9bdde](https://github.com/neo-one-suite/neo-one/commit/0c9bdde)) - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler@1.1.1...@neo-one/smart-contract-compiler@1.1.2) (2019-04-12) - - -### Bug Fixes - -* **deps:** update dependency memdown to v4 ([ab094dd](https://github.com/neo-one-suite/neo-one/commit/ab094dd)) -* **website:** fix DeveloperTools and other bugs ([0cf87ca](https://github.com/neo-one-suite/neo-one/commit/0cf87ca)) - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler@1.1.0...@neo-one/smart-contract-compiler@1.1.1) (2019-03-27) - - -### Bug Fixes - -* **deps:** update dependency bignumber.js to v8.1.1 ([2d6f93a](https://github.com/neo-one-suite/neo-one/commit/2d6f93a)) -* **deps:** update dependency typescript to v3.3.3333 ([ad271bb](https://github.com/neo-one-suite/neo-one/commit/ad271bb)) -* **deps:** update dependency typescript to v3.3.4000 ([0b71078](https://github.com/neo-one-suite/neo-one/commit/0b71078)) - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler@1.0.3...@neo-one/smart-contract-compiler@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/smart-contract-compiler - - - - - -## [1.0.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler@1.0.3-alpha.0...@neo-one/smart-contract-compiler@1.0.3) (2019-02-21) - -**Note:** Version bump only for package @neo-one/smart-contract-compiler - - - - - -## [1.0.3-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler@1.0.2...@neo-one/smart-contract-compiler@1.0.3-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **build:** adjust several packages to allow emitting .d.ts files. ([27a2d88](https://github.com/neo-one-suite/neo-one/commit/27a2d88)) -* **deps:** update dependency @types/lodash to v4.14.120 ([a76dae7](https://github.com/neo-one-suite/neo-one/commit/a76dae7)) -* **deps:** update dependency bignumber.js to v8.0.2 ([6064f9e](https://github.com/neo-one-suite/neo-one/commit/6064f9e)) -* **deps:** update dependency typescript to v3.2.1 ([54f2a64](https://github.com/neo-one-suite/neo-one/commit/54f2a64)) -* **deps:** update dependency typescript to v3.2.2 ([c5232a7](https://github.com/neo-one-suite/neo-one/commit/c5232a7)) -* **deps:** update dependency typescript to v3.2.4 ([ae72102](https://github.com/neo-one-suite/neo-one/commit/ae72102)) -* **deps:** update dependency typescript to v3.3.1 ([975bf8e](https://github.com/neo-one-suite/neo-one/commit/975bf8e)) -* **deps:** update dependency typescript to v3.3.3 ([1cde1b2](https://github.com/neo-one-suite/neo-one/commit/1cde1b2)) - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler@1.0.1...@neo-one/smart-contract-compiler@1.0.2) (2018-11-13) - - -### Bug Fixes - -* Fix circular package dependencies. ([aa5f0ea](https://github.com/neo-one-suite/neo-one/commit/aa5f0ea)) - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-compiler@1.0.0...@neo-one/smart-contract-compiler@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/smart-contract-compiler diff --git a/packages/neo-one-smart-contract-compiler/gulpfile.js b/packages/neo-one-smart-contract-compiler/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-smart-contract-compiler/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-smart-contract-compiler/package.json b/packages/neo-one-smart-contract-compiler/package.json index e7b0cf9971..9c06c4f709 100644 --- a/packages/neo-one-smart-contract-compiler/package.json +++ b/packages/neo-one-smart-contract-compiler/package.json @@ -1,40 +1,54 @@ { "name": "@neo-one/smart-contract-compiler", - "version": "2.3.0", + "version": "3.0.0", "description": "NEOβ€’ONE TypeScript smart contract compiler.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { "@babel/code-frame": "^7.0.0", - "@neo-one/client-common": "^2.3.0", - "@neo-one/client-core": "^2.3.0", - "@neo-one/client-full-common": "^2.3.0", - "@neo-one/client-full-core": "^2.3.0", - "@neo-one/smart-contract": "^2.3.0", - "@neo-one/ts-utils": "^2.3.0", - "@neo-one/typescript-concatenator": "^2.3.0", - "@neo-one/utils": "^2.3.0", + "@neo-one/client-common": "^3.0.0", + "@neo-one/client-core": "^3.0.0", + "@neo-one/client-full-common": "^3.0.0", + "@neo-one/client-full-core": "^3.0.0", + "@neo-one/smart-contract": "^2.7.0", + "@neo-one/ts-utils": "^2.6.1", + "@neo-one/typescript-concatenator": "^2.6.2", + "@neo-one/utils": "^3.0.0", + "@types/bn.js": "^4.11.5", "bn.js": "^5.0.0", "lodash": "^4.17.15", "safe-stable-stringify": "^1.1.0", "source-map": "^0.7.3", - "typescript": "^3.6.3" + "tslib": "^1.10.0", + "typescript": "3.9.5" }, "devDependencies": { - "@neo-one/client-switch": "^2.3.0", - "@neo-one/node-blockchain": "^2.3.0", - "@neo-one/node-neo-settings": "^2.3.0", - "@neo-one/node-storage-levelup": "^2.3.0", - "@neo-one/node-vm": "^2.3.0", - "@neo-one/smart-contract-compiler-node": "^2.3.0", + "@neo-one/build-tools": "^1.0.0", + "@neo-one/client-switch": "^3.0.0", + "@neo-one/node-blockchain": "^3.0.0", + "@neo-one/node-native": "^3.0.0", + "@neo-one/node-neo-settings": "^3.0.0", + "@neo-one/node-storage-levelup": "^3.0.0", + "@neo-one/node-vm": "^3.0.0", + "@neo-one/smart-contract-compiler-node": "^2.7.1", + "@types/app-root-dir": "^0.1.0", "@types/babel__code-frame": "^7.0.1", - "@types/bn.js": "^4.11.5", + "@types/jest": "^24.0.18", "@types/levelup": "^3.1.1", "@types/lodash": "^4.14.138", "@types/memdown": "^3.0.0", "app-root-dir": "^1.0.2", "bignumber.js": "^9.0.0", - "levelup": "^4.1.0", + "gulp": "~4.0.2", + "levelup": "4.1.0", "memdown": "^5.0.0" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-smart-contract-compiler/src/__data__/helpers/executeScript.ts b/packages/neo-one-smart-contract-compiler/src/__data__/helpers/executeScript.ts index 899a8f4d0b..6ba12f7cca 100644 --- a/packages/neo-one-smart-contract-compiler/src/__data__/helpers/executeScript.ts +++ b/packages/neo-one-smart-contract-compiler/src/__data__/helpers/executeScript.ts @@ -2,12 +2,13 @@ import { CallReceiptJSON, common, crypto, scriptHashToAddress, SourceMaps } from import { Blockchain } from '@neo-one/node-blockchain'; import { test as testNet } from '@neo-one/node-neo-settings'; import { storage } from '@neo-one/node-storage-levelup'; -import { vm } from '@neo-one/node-vm'; +import { Dispatcher, blockchainSettingsToProtocolSettings } from '@neo-one/node-vm'; import LevelUp from 'levelup'; import MemDown from 'memdown'; import { RawSourceMap } from 'source-map'; import ts from 'typescript'; import { throwOnDiagnosticErrorOrWarning } from '../../utils'; +import { NativeContainer } from '@neo-one/node-native'; export interface ExecuteOptions { readonly prelude?: Buffer; @@ -28,13 +29,16 @@ export const executeScript = async ( readonly receipt: CallReceiptJSON; readonly sourceMaps: SourceMaps; }> => { + const settings = testNet(); + const dispatcher = new Dispatcher({ protocolSettings: blockchainSettingsToProtocolSettings(settings) }); const blockchain = await Blockchain.create({ - settings: testNet(), + settings, storage: storage({ - context: { messageMagic: testNet().messageMagic }, + context: { messageMagic: settings.messageMagic, validatorsCount: settings.validatorsCount }, db: LevelUp(MemDown()), }), - vm, + vm: dispatcher, + native: new NativeContainer(settings), }); throwOnDiagnosticErrorOrWarning(diagnostics, ignoreWarnings); @@ -45,9 +49,10 @@ export const executeScript = async ( const address = scriptHashToAddress(common.uInt160ToString(crypto.toScriptHash(code))); await blockchain.stop(); + // TODO: pickup here, how are we converting this? return { receipt: { - result: receipt.result.serializeJSON(blockchain.serializeJSONContext), + result: receipt, actions: receipt.actions.map((action) => action.serializeJSON(blockchain.serializeJSONContext)), }, sourceMaps: { diff --git a/packages/neo-one-smart-contract-compiler/src/__data__/helpers/extractors.ts b/packages/neo-one-smart-contract-compiler/src/__data__/helpers/extractors.ts index f4b3e4c107..11b88fd733 100644 --- a/packages/neo-one-smart-contract-compiler/src/__data__/helpers/extractors.ts +++ b/packages/neo-one-smart-contract-compiler/src/__data__/helpers/extractors.ts @@ -14,27 +14,29 @@ export const checkResult = async (receiptIn: CallReceiptJSON, sourceMaps: Source }; export const checkRawResult = async (receipt: RawCallReceipt, sourceMaps: SourceMaps, checkStack = false) => { - if (receipt.result.state === 'FAULT') { + if (receipt.state === 'FAULT') { enableConsoleLogForTest(); try { - const message = await processActionsAndMessage({ - actions: receipt.actions, - message: receipt.result.message, - sourceMaps, - }); + // TODO: reimplement this message processing + // const message = await processActionsAndMessage({ + // actions: receipt.actions, + // message: receipt.message, + // sourceMaps, + // }); - throw new Error(message); + throw new Error(receipt.stack as string); } finally { disableConsoleLogForTest(); } } - await processConsoleLogMessages({ - actions: receipt.actions, - sourceMaps, - }); + // TODO: reimplement this log processing + // await processConsoleLogMessages({ + // actions: receipt.actions, + // sourceMaps, + // }); - if (checkStack && receipt.result.stack.length !== 0) { - throw new Error(`Found leftover stack items, length: ${receipt.result.stack.length}`); + if (checkStack && receipt.stack.length !== 0) { + throw new Error(`Found leftover stack items, length: ${receipt.stack.length}`); } }; diff --git a/packages/neo-one-smart-contract-compiler/src/__data__/helpers/startNode.ts b/packages/neo-one-smart-contract-compiler/src/__data__/helpers/startNode.ts index a4cf3ab2f5..04b4c409a3 100644 --- a/packages/neo-one-smart-contract-compiler/src/__data__/helpers/startNode.ts +++ b/packages/neo-one-smart-contract-compiler/src/__data__/helpers/startNode.ts @@ -1,15 +1,17 @@ +/// + import { - ABI, common, Contract, crypto, InvocationResult, - InvocationTransaction, RawInvokeReceipt, scriptHashToAddress, SmartContractDefinition, SourceMaps, UserAccountID, + Transaction, + ContractABI, } from '@neo-one/client-common'; import { DeveloperClient, LocalKeyStore, LocalWallet, NEOONEDataProvider, SmartContract } from '@neo-one/client-core'; import { Client, InvokeExecuteTransactionOptions, ReadClient } from '@neo-one/client-full-core'; @@ -19,10 +21,10 @@ import { Modifiable } from '@neo-one/utils'; import * as appRootDir from 'app-root-dir'; import BigNumber from 'bignumber.js'; import ts from 'typescript'; -import { createNode } from '../../../../neo-one-smart-contract-test/src/createNode'; import { compile } from '../../compile'; import { CompileResult, LinkedContracts } from '../../compile/types'; import { Context } from '../../Context'; +import { createNode } from '@neo-one/smart-contract-test'; import { createContextForPath, createContextForSnippet } from '../../createContext'; import { throwOnDiagnosticErrorOrWarning } from '../../utils'; import { checkRawResult } from './extractors'; @@ -55,7 +57,7 @@ export interface TestNode { options?: InvokeExecuteTransactionOptions, ) => Promise<{ readonly receipt: RawInvokeReceipt; - readonly transaction: InvocationTransaction; + readonly transaction: Transaction; readonly sourceMaps: SourceMaps; }>; readonly compileScript: (script: string) => CompileResult; @@ -68,7 +70,7 @@ export interface TestNode { export interface Options { readonly script: Buffer; - readonly abi: ABI; + readonly abi: ContractABI; readonly diagnostics: ReadonlyArray; readonly ignoreWarnings?: boolean; } @@ -138,8 +140,8 @@ export const startNode = async (outerOptions: StartNodeOptions = {}): Promise { - // tslint:disable-next-line no-object-mutation - options.systemFee = new BigNumber(-1); + options.maxNetworkFee = new BigNumber(-1); + options.maxSystemFee = new BigNumber(-1); }); return { @@ -154,7 +156,7 @@ export const startNode = async (outerOptions: StartNodeOptions = {}): Promise { @@ -205,7 +203,7 @@ export const startNode = async (outerOptions: StartNodeOptions = {}): Promise { const test = (storage: ArrayStorage) => { assertEqual(storage instanceof ArrayStorage, true); assertEqual(storage.length, 0); + assertEqual(storage.length, 1 - 1); storage[0] = '10'; assertEqual(storage[0], '10'); @@ -84,6 +85,271 @@ describe('ArrayStorage', () => { `); }); + test('get index by hardcoded and computed values', async () => { + const node = await helpers.startNode(); + + const contract = await node.addContract(` + import { ArrayStorage, SmartContract } from '@neo-one/smart-contract'; + + const test = (storage: ArrayStorage) => { + storage[0] = '10'; + assertEqual(storage[0], '10'); + assertEqual(storage[1 - 1], '10'); + assertEqual(storage[0 + 0], '10'); + assertEqual(storage[9 * 0], '10'); + assertEqual(storage[0 / 9], '10'); + storage[1] = '100'; + assertEqual(storage[1], '100'); + assertEqual(storage[2 - 1], '100'); + assertEqual(storage[0 + 1], '100'); + assertEqual(storage[1 / 1], '100'); + assertEqual(storage[1 * 1], '100'); + storage[18] = '18'; + assertEqual(storage[18], '18'); + assertEqual(storage[36 - 18], '18'); + assertEqual(storage[13 + 5], '18'); + assertEqual(storage[36 / 2], '18'); + assertEqual(storage[3 * 6], '18'); + } + + export class StorageContract extends SmartContract { + public readonly properties = { + codeVersion: '1.0', + author: 'dicarlo2', + email: 'alex.dicarlo@neotracker.io', + description: 'StorageContract', + }; + private readonly storage = ArrayStorage.for(); + + public run(): void { + test(this.storage); + } + } + `); + + await node.executeString(` + import { Address, SmartContract } from '@neo-one/smart-contract'; + + interface Contract { + run(): void; + } + const contract = SmartContract.for(Address.from('${contract.address}')); + contract.run(); + `); + }); + + test('set index by subtracted values', async () => { + const node = await helpers.startNode(); + + const contract = await node.addContract(` + import { ArrayStorage, SmartContract } from '@neo-one/smart-contract'; + + const test = (storage: ArrayStorage) => { + storage[1 - 1] = '10'; + assertEqual(storage[0], '10'); + assertEqual(storage[2 - 2], '10'); + assertEqual(storage[0 + 0], '10'); + assertEqual(storage[9 * 0], '10'); + assertEqual(storage[0 / 9], '10'); + storage[2 - 1] = '100'; + assertEqual(storage[1], '100'); + assertEqual(storage[2 - 1], '100'); + assertEqual(storage[0 + 1], '100'); + assertEqual(storage[1 / 1], '100'); + assertEqual(storage[1 * 1], '100'); + storage[19 - 1] = '18'; + assertEqual(storage[18], '18'); + assertEqual(storage[36 - 18], '18'); + assertEqual(storage[13 + 5], '18'); + assertEqual(storage[36 / 2], '18'); + assertEqual(storage[3 * 6], '18'); + } + + export class StorageContract extends SmartContract { + public readonly properties = { + codeVersion: '1.0', + author: 'dicarlo2', + email: 'alex.dicarlo@neotracker.io', + description: 'StorageContract', + }; + private readonly storage = ArrayStorage.for(); + + public run(): void { + test(this.storage); + } + } + `); + + await node.executeString(` + import { Address, SmartContract } from '@neo-one/smart-contract'; + + interface Contract { + run(): void; + } + const contract = SmartContract.for(Address.from('${contract.address}')); + contract.run(); + `); + }); + + test('set index by added values', async () => { + const node = await helpers.startNode(); + + const contract = await node.addContract(` + import { ArrayStorage, SmartContract } from '@neo-one/smart-contract'; + + const test = (storage: ArrayStorage) => { + storage[0 + 0] = '10'; + assertEqual(storage[0], '10'); + assertEqual(storage[2 - 2], '10'); + assertEqual(storage[0 + 0], '10'); + assertEqual(storage[9 * 0], '10'); + assertEqual(storage[0 / 9], '10'); + storage[1 + 0] = '100'; + assertEqual(storage[1], '100'); + assertEqual(storage[2 - 1], '100'); + assertEqual(storage[0 + 1], '100'); + assertEqual(storage[1 / 1], '100'); + assertEqual(storage[1 * 1], '100'); + storage[17 + 1] = '18'; + assertEqual(storage[18], '18'); + assertEqual(storage[36 - 18], '18'); + assertEqual(storage[13 + 5], '18'); + assertEqual(storage[36 / 2], '18'); + assertEqual(storage[3 * 6], '18'); + } + + export class StorageContract extends SmartContract { + public readonly properties = { + codeVersion: '1.0', + author: 'dicarlo2', + email: 'alex.dicarlo@neotracker.io', + description: 'StorageContract', + }; + private readonly storage = ArrayStorage.for(); + + public run(): void { + test(this.storage); + } + } + `); + + await node.executeString(` + import { Address, SmartContract } from '@neo-one/smart-contract'; + + interface Contract { + run(): void; + } + const contract = SmartContract.for(Address.from('${contract.address}')); + contract.run(); + `); + }); + + test('set index by multiplied values', async () => { + const node = await helpers.startNode(); + + const contract = await node.addContract(` + import { ArrayStorage, SmartContract } from '@neo-one/smart-contract'; + + const test = (storage: ArrayStorage) => { + storage[0 * 9] = '10'; + assertEqual(storage[0], '10'); + assertEqual(storage[2 - 2], '10'); + assertEqual(storage[0 + 0], '10'); + assertEqual(storage[9 * 0], '10'); + assertEqual(storage[0 / 9], '10'); + storage[1 * 1] = '100'; + assertEqual(storage[1], '100'); + assertEqual(storage[2 - 1], '100'); + assertEqual(storage[0 + 1], '100'); + assertEqual(storage[1 / 1], '100'); + assertEqual(storage[1 * 1], '100'); + storage[6 * 3] = '18'; + assertEqual(storage[18], '18'); + assertEqual(storage[36 - 18], '18'); + assertEqual(storage[13 + 5], '18'); + assertEqual(storage[36 / 2], '18'); + assertEqual(storage[3 * 6], '18'); + } + + export class StorageContract extends SmartContract { + public readonly properties = { + codeVersion: '1.0', + author: 'dicarlo2', + email: 'alex.dicarlo@neotracker.io', + description: 'StorageContract', + }; + private readonly storage = ArrayStorage.for(); + + public run(): void { + test(this.storage); + } + } + `); + + await node.executeString(` + import { Address, SmartContract } from '@neo-one/smart-contract'; + + interface Contract { + run(): void; + } + const contract = SmartContract.for(Address.from('${contract.address}')); + contract.run(); + `); + }); + + test('set index by divided values', async () => { + const node = await helpers.startNode(); + + const contract = await node.addContract(` + import { ArrayStorage, SmartContract } from '@neo-one/smart-contract'; + + const test = (storage: ArrayStorage) => { + storage[0 / 9] = '10'; + assertEqual(storage[0], '10'); + assertEqual(storage[2 - 2], '10'); + assertEqual(storage[0 + 0], '10'); + assertEqual(storage[9 * 0], '10'); + assertEqual(storage[0 / 9], '10'); + storage[1 / 1] = '100'; + assertEqual(storage[1], '100'); + assertEqual(storage[2 - 1], '100'); + assertEqual(storage[0 + 1], '100'); + assertEqual(storage[1 / 1], '100'); + assertEqual(storage[1 * 1], '100'); + storage[36 / 2] = '18'; + assertEqual(storage[18], '18'); + assertEqual(storage[36 - 18], '18'); + assertEqual(storage[13 + 5], '18'); + assertEqual(storage[36 / 2], '18'); + assertEqual(storage[3 * 6], '18'); + } + + export class StorageContract extends SmartContract { + public readonly properties = { + codeVersion: '1.0', + author: 'dicarlo2', + email: 'alex.dicarlo@neotracker.io', + description: 'StorageContract', + }; + private readonly storage = ArrayStorage.for(); + + public run(): void { + test(this.storage); + } + } + `); + + await node.executeString(` + import { Address, SmartContract } from '@neo-one/smart-contract'; + + interface Contract { + run(): void; + } + const contract = SmartContract.for(Address.from('${contract.address}')); + contract.run(); + `); + }); + test('iteration', async () => { const node = await helpers.startNode(); @@ -128,6 +394,15 @@ describe('ArrayStorage', () => { indices += idx; keys += key; }); + storage.forEach((key, idx) => { + assertEqual(idx, idx + 0) + if (idx === 0) { + assertEqual(idx, 1 - 1); + } + if (idx === 1) { + assertEqual(idx, 2 - 1); + } + }); assertEqual(count, 4); assertEqual(indices, 6); assertEqual(keys, keyA + keyB + keyC + keyD); diff --git a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/builtins/contract/blockchain.test.ts b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/builtins/contract/blockchain.test.ts index 039e00ba55..0ab58f1c60 100644 --- a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/builtins/contract/blockchain.test.ts +++ b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/builtins/contract/blockchain.test.ts @@ -61,7 +61,9 @@ describe('Blockchain', () => { assertEqual(transaction.type, TransactionType.Invocation); const attributes = transaction.attributes; - assertEqual(attributes.length, 3); + if (attributes.length !== 3 && attributes.length !== 4) { + throw 'Failure'; + } const attribute = attributes[0]; diff --git a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/builtins/contract/mapStorage.test.ts b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/builtins/contract/mapStorage.test.ts index 57ae93f702..01cc51eeeb 100644 --- a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/builtins/contract/mapStorage.test.ts +++ b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/builtins/contract/mapStorage.test.ts @@ -73,6 +73,118 @@ describe('MapStorage', () => { `); }); + test('get, set, delete, has - computed values', async () => { + const node = await helpers.startNode(); + + const contract = await node.addContract(` + import { MapStorage, SmartContract } from '@neo-one/smart-contract'; + + const test = (storage: MapStorage) => { + storage.get(0); + assertEqual(storage.get(0), undefined); + assertEqual(storage.has(0), false); + assertEqual(storage instanceof MapStorage, true); + + assertEqual(storage.delete(0), false); + storage.delete(0); + storage.set(0, 10).set(1, 5).set(16, 16); + assertEqual(storage.get(0), 10); + assertEqual(storage.get(1), 5); + assertEqual(storage.get(16), 16); + assertEqual(storage.get(1 - 1), 10); + assertEqual(storage.get(2 - 1), 5); + assertEqual(storage.get(17 - 1), 16); + assertEqual(storage.has(0), true); + assertEqual(storage.has(1), true); + assertEqual(storage.has(16), true); + assertEqual(storage.has(1 - 1), true); + assertEqual(storage.has(2 - 1), true); + assertEqual(storage.has(17 - 1), true); + + assertEqual(storage.delete(1 - 1), true); + assertEqual(storage.delete(1 - 1), false); + assertEqual(storage.get(1 - 1), undefined); + assertEqual(storage.has(1 - 1), false); + assertEqual(storage.delete(2 - 1), true); + assertEqual(storage.delete(2 - 1), false); + assertEqual(storage.get(2 - 1), undefined); + assertEqual(storage.has(2 - 1), false); + assertEqual(storage.delete(17 - 1), true); + assertEqual(storage.delete(17 - 1), false); + assertEqual(storage.get(17 - 1), undefined); + assertEqual(storage.has(17 - 1), false); + + storage.set(1 - 1, 10).set(2 - 1, 5).set(17 - 1, 16); + assertEqual(storage.get(0), 10); + assertEqual(storage.get(1), 5); + assertEqual(storage.get(16), 16); + assertEqual(storage.get(1 - 1), 10); + assertEqual(storage.get(2 - 1), 5); + assertEqual(storage.get(17 - 1), 16); + assertEqual(storage.has(0), true); + assertEqual(storage.has(1), true); + assertEqual(storage.has(16), true); + assertEqual(storage.has(1 - 1), true); + assertEqual(storage.has(2 - 1), true); + assertEqual(storage.has(17 - 1), true); + + assertEqual(storage.delete(0), true); + assertEqual(storage.delete(0), false); + assertEqual(storage.get(0), undefined); + assertEqual(storage.has(0), false); + assertEqual(storage.delete(1), true); + assertEqual(storage.delete(1), false); + assertEqual(storage.get(1), undefined); + assertEqual(storage.has(1), false); + assertEqual(storage.delete(16), true); + assertEqual(storage.delete(16), false); + assertEqual(storage.get(16), undefined); + assertEqual(storage.has(16), false); + + interface Storage { + get(key: K): V | undefined; + has(key: K): boolean; + set(key: K, value: V): this; + delete(key: K): boolean; + [Symbol.iterator](): IterableIterator<[K, V]>; + } + + const storageLike: Storage | MapStorage = + storage as Storage | MapStorage; + + storageLike['get'](0); + storageLike['has'](0); + storageLike['set'](0, 9); + storageLike['delete'](0); + storageLike[Symbol.iterator](); + } + + export class StorageContract extends SmartContract { + public readonly properties = { + codeVersion: '1.0', + author: 'dicarlo2', + email: 'alex.dicarlo@neotracker.io', + description: 'StorageContract', + }; + private readonly storage = MapStorage.for(); + + public run(): void { + test(this.storage); + } + } + `); + + await node.executeString(` + import { Address, SmartContract } from '@neo-one/smart-contract'; + + interface Contract { + run(): void; + } + const contract = SmartContract.for(Address.from('${contract.address}')); + contract.run(); + `); + }); + test('multi-tier', async () => { const node = await helpers.startNode(); diff --git a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/builtins/contract/setStorage.test.ts b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/builtins/contract/setStorage.test.ts index 52da95f9bf..de6dcd1a5f 100644 --- a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/builtins/contract/setStorage.test.ts +++ b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/builtins/contract/setStorage.test.ts @@ -30,7 +30,7 @@ describe('SetStorage', () => { assertEqual(storage.has('foo'), true); assertEqual(storage.has('bar'), true); - storage.delete('bar') + storage.delete('bar'); assertEqual(storage.delete('foo'), true); assertEqual(storage.delete('foo'), false); assertEqual(storage.has('foo'), false); @@ -65,6 +65,81 @@ describe('SetStorage', () => { `); }); + test('add, delete, has - computed numbers', async () => { + const node = await helpers.startNode(); + + const contract = await node.addContract(` + import { SetStorage, SmartContract } from '@neo-one/smart-contract'; + + export class StorageContract extends SmartContract { + public readonly properties = { + codeVersion: '1.0', + author: 'dicarlo2', + email: 'alex.dicarlo@neotracker.io', + description: 'StorageContract', + }; + private readonly storage = SetStorage.for(); + + public run(): void { + const storage = this.storage; + storage.has(1); + assertEqual(storage.has(1), false); + + assertEqual(storage.delete(1), false); + storage.delete(1); + storage.add(0).add(1).add(16); + assertEqual(storage.has(1 - 1), true); + assertEqual(storage.has(2 - 1), true); + assertEqual(storage.has(17 - 1), true); + + storage.delete(0); + assertEqual(storage.delete(1), true); + assertEqual(storage.delete(1), false); + assertEqual(storage.delete(16), true); + assertEqual(storage.has(0), false); + assertEqual(storage.has(1), false); + assertEqual(storage.has(16), false); + + storage.add(1 - 1).add(2 - 1).add(17 - 1); + assertEqual(storage.has(0), true); + assertEqual(storage.has(1), true); + assertEqual(storage.has(16), true); + storage.delete(1 - 1); + storage.delete(2 - 1); + storage.delete(17 -1); + assertEqual(storage.has(1 - 1), false); + assertEqual(storage.has(2 - 1), false); + assertEqual(storage.has(17 - 1), false); + + interface Storage { + has(value: V): boolean; + add(value: V): this; + delete(value: V): boolean; + [Symbol.iterator](): IterableIterator<[V]>; + } + + const storageLike: Storage | SetStorage = + storage as Storage | SetStorage; + + storageLike['has'](0); + storageLike['add'](0); + storageLike['delete'](0); + storageLike[Symbol.iterator](); + } + } + `); + + await node.executeString(` + import { Address, SmartContract } from '@neo-one/smart-contract'; + + interface Contract { + run(): void; + } + const contract = SmartContract.for(Address.from('${contract.address}')); + contract.run(); + `); + }); + test('multi-tier - level 0', async () => { const node = await helpers.startNode(); diff --git a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/declaration/ClassDeclarationCompiler.test.ts b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/declaration/ClassDeclarationCompiler.test.ts index 21fc46dde5..f081393406 100644 --- a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/declaration/ClassDeclarationCompiler.test.ts +++ b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/declaration/ClassDeclarationCompiler.test.ts @@ -105,6 +105,74 @@ describe('ClassDeclarationCompiler', () => { `); }); + test('basic class with ECMAScript private member, inaccessible', async () => { + helpers.compileString( + ` + class Foo { + #x: string = 'bar'; + + ['bar'](): string { + return this.#x; + } + } + + const f = new Foo(); + f.#x; + `, + { type: 'error' }, + ); + }); + + test('ECMAScript private member, no public modifier allowed', async () => { + helpers.compileString( + ` + class Foo { + public #x: string = 'bar'; + } + `, + { type: 'error' }, + ); + }); + + test('ECMAScript private member, no private modifier allowed', async () => { + helpers.compileString( + ` + class Foo { + private #x: string = 'bar'; + } + `, + { type: 'error' }, + ); + }); + + test('ECMAScript private member, extends does not override private member', async () => { + await helpers.executeString( + ` + class Foo { + #x: string = 'bar'; + + getX(): string { + return this.#x; + } + } + + class Bar extends Foo { + #x: string = 'baz'; + + getX(): string { + return this.#x; + } + } + + const foo = new Foo(); + const bar = new Bar(); + + assertEqual(foo.getX(), 'bar'); + assertEqual(bar.getX(), 'baz'); + `, + ); + }); + test('basic class with get accessor', async () => { await helpers.executeString(` class Foo { diff --git a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/declaration/TypeAliasDeclarationCompiler.test.ts b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/declaration/TypeAliasDeclarationCompiler.test.ts index 362a1d4dae..45f86ad5eb 100644 --- a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/declaration/TypeAliasDeclarationCompiler.test.ts +++ b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/declaration/TypeAliasDeclarationCompiler.test.ts @@ -14,4 +14,26 @@ describe('TypeAliasDeclarationCompiler', () => { } `); }); + + test('recursive type alias does not emit', async () => { + await helpers.executeString(` + type Json = + | string + | number + | boolean + | null + | { [property: string]: Json } + | Json[]; + + type VirtualNode = + | string + | [string, { [key: string]: any }, ...VirtualNode[]]; + + const myNode: VirtualNode = + ["div", { id: "parent" }, + ["div", { id: "first-child" }, "I'm the first child"], + ["div", { id: "second-child" }, "I'm the second child"] + ]; + `); + }); }); diff --git a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/declaration/__snapshots__/ClassDeclarationCompiler.test.ts.snap b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/declaration/__snapshots__/ClassDeclarationCompiler.test.ts.snap index 2c2100c1ce..74a4b2103d 100644 --- a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/declaration/__snapshots__/ClassDeclarationCompiler.test.ts.snap +++ b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/declaration/__snapshots__/ClassDeclarationCompiler.test.ts.snap @@ -1,5 +1,40 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`ClassDeclarationCompiler ECMAScript private member, no private modifier allowed 1`] = ` +"snippetCode.ts (3,9): An accessibility modifier cannot be used with a private identifier. + + 1 | + 2 | class Foo { + > 3 | private #x: string = 'bar'; + | ^ + 4 | } + 5 | +" +`; + +exports[`ClassDeclarationCompiler ECMAScript private member, no public modifier allowed 1`] = ` +"snippetCode.ts (3,9): An accessibility modifier cannot be used with a private identifier. + + 1 | + 2 | class Foo { + > 3 | public #x: string = 'bar'; + | ^ + 4 | } + 5 | +" +`; + +exports[`ClassDeclarationCompiler basic class with ECMAScript private member, inaccessible 1`] = ` +"snippetCode.ts (11,9): Property '#x' is not accessible outside class 'Foo' because it has a private identifier. + + 9 | + 10 | const f = new Foo(); + > 11 | f.#x; + | ^ + 12 | +" +`; + exports[`ClassDeclarationCompiler decorators 1`] = ` "snippetCode.ts (7,9): Custom decorators are not supported diff --git a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/ArrayLiteralExpressionCompiler.test.ts b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/ArrayLiteralExpressionCompiler.test.ts index 7ab37ca2bf..c519fa71a7 100644 --- a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/ArrayLiteralExpressionCompiler.test.ts +++ b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/ArrayLiteralExpressionCompiler.test.ts @@ -22,6 +22,10 @@ describe('ArrayLiteralExpressionCompiler', () => { throw 'Failure'; } + if (x[1 - 1] !== 1) { + throw 'Failure'; + } + if (x[1] !== 2) { throw 'Failure'; } diff --git a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/AwaitExpressionCompiler.test.ts b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/AwaitExpressionCompiler.test.ts index 396334eec4..10f1ae4dcf 100644 --- a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/AwaitExpressionCompiler.test.ts +++ b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/AwaitExpressionCompiler.test.ts @@ -9,4 +9,15 @@ describe('AwaitFunctionCompiler', () => { { type: 'error' }, ); }); + + test('await', async () => { + helpers.compileString( + ` + await 2; + + export {}; + `, + { type: 'error' }, + ); + }); }); diff --git a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/BinaryExpressionCompiler3.test.ts b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/BinaryExpressionCompiler3.test.ts index c6d12688bb..7c4b06df73 100644 --- a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/BinaryExpressionCompiler3.test.ts +++ b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/BinaryExpressionCompiler3.test.ts @@ -104,6 +104,64 @@ describe('BinaryExpressionCompiler', () => { `); }); + test('null ?? short-circuit [QuestionQuestionToken]', async () => { + await helpers.executeString(` + const x = null; + const result = x ?? true; + if (!result) { + throw 'Failure'; + } + `); + }); + + test('undefined ?? short-circuit [QuestionQuestionToken]', async () => { + await helpers.executeString(` + const x = undefined; + const result = x ?? true; + if (!result) { + throw 'Failure'; + } + `); + }); + + test('1 ?? 0 [QuestionQuestionToken]', async () => { + await helpers.executeString(` + const x: number = 1 ?? 0; + if (!(x === 1)) { + throw 'Failure'; + } + `); + }); + + test('0 ?? 1 [QuestionQuestionToken]', async () => { + await helpers.executeString(` + const x: number = 1 ?? 0; + if (!(x === 1)) { + throw 'Failure'; + } + `); + }); + + test('[] ?? 0 [QuestionQuestionToken]', async () => { + await helpers.executeString(` + const x: Array = []; + const result = x ?? 0; + if (!(result === x)) { + throw 'Failure'; + } + `); + }); + + test('"" ?? 0 [QuestionQuestionToken]', async () => { + await helpers.executeString(` + const x: string = ""; + const result = x ?? 0; + if (!(result === "")) { + throw 'Failure'; + } + `); + }); + test('1 < 1 [LessThanToken]', async () => { await helpers.executeString(` if (1 < 1) { diff --git a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/CallExpressionCompiler.test.ts b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/CallExpressionCompiler.test.ts index 1774406bf8..037dacb501 100644 --- a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/CallExpressionCompiler.test.ts +++ b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/CallExpressionCompiler.test.ts @@ -79,6 +79,21 @@ describe('CallExpressionCompiler', () => { `); }); + test('nested property call', async () => { + await helpers.executeString(` + const foo = { + x: 1, + y: { + z(): number { + return 13; + } + } + }; + + assertEqual(foo.y.z(), 13); + `); + }); + test('method call', async () => { await helpers.executeString(` class Foo { @@ -264,4 +279,238 @@ describe('CallExpressionCompiler', () => { assertEqual(x[Symbol.iterator]() !== undefined, true); `); }); + + test('optional chain - element access with symbol - undefined', async () => { + await helpers.executeString(` + const foo = Symbol.for('hello'); + const bar: { [foo]: (() => number) | null | undefined } = { [foo]: undefined } as unknown as { [foo]: (() => number) | null | undefined }; + + assertEqual(bar[foo]?.(), undefined); + `); + }); + + test('optional chain - element access with symbol - null', async () => { + await helpers.executeString(` + const foo = Symbol.for('hello'); + const bar: { [foo]: (() => number) | null | undefined } = { [foo]: null } as unknown as { [foo]: (() => number) | null | undefined }; + + assertEqual(bar[foo]?.(), undefined); + `); + }); + + test('optional chain - element access with symbol - defined', async () => { + await helpers.executeString(` + const foo = Symbol.for('hello'); + const bar: { [foo]: (() => number) | null | undefined } = { [foo]: () => 10 } as unknown as { [foo]: (() => number) | null | undefined }; + + assertEqual(bar[foo]?.(), 10); + `); + }); + + test('optional chain - element access with symbol - nested undefined', async () => { + await helpers.executeString(` + const foo = Symbol.for('hello'); + const baz = Symbol.for('world'); + const bar: { [foo]: { [baz]: (() => number) | null | undefined } } = { [foo]: { [baz]: undefined } } as unknown as { [foo]: { [baz]: (() => number) | null | undefined } }; + + assertEqual(bar[foo][baz]?.(), undefined); + `); + }); + + test('optional chain - element access with symbol - nested null', async () => { + await helpers.executeString(` + const foo = Symbol.for('hello'); + const baz = Symbol.for('world'); + const bar: { [foo]: { [baz]: (() => number) | null | undefined } } = { [foo]: { [baz]: null } } as unknown as { [foo]: { [baz]: (() => number) | null | undefined } }; + + assertEqual(bar[foo][baz]?.(), undefined); + `); + }); + + test('optional chain - element access with symbol - nested defined', async () => { + await helpers.executeString(` + const foo = Symbol.for('hello'); + const baz = Symbol.for('world'); + const bar: { [foo]: { [baz]: (() => number) | null | undefined } } = { [foo]: { [baz]: () => 10 } } as unknown as { [foo]: { [baz]: (() => number) | null | undefined } }; + + assertEqual(bar[foo][baz]?.(), 10); + `); + }); + + test('optional chain - element access with number - undefined', async () => { + await helpers.executeString(` + const foo = 0; + const bar: { [foo]: (() => number) | null | undefined } = { [foo]: undefined } as unknown as { [foo]: (() => number) | null | undefined }; + + assertEqual(bar[foo]?.(), undefined); + `); + }); + + test('optional chain - element access with number - null', async () => { + await helpers.executeString(` + const foo = 0; + const bar: { [foo]: (() => number) | null | undefined } = { [foo]: null } as unknown as { [foo]: (() => number) | null | undefined }; + + assertEqual(bar[foo]?.(), undefined); + `); + }); + + test('optional chain - element access with number - defined', async () => { + await helpers.executeString(` + const foo = 0; + const bar: { [foo]: (() => number) | null | undefined } = { [foo]: () => 10 } as unknown as { [foo]: (() => number) | null | undefined }; + + assertEqual(bar[foo]?.(), 10); + `); + }); + + test('optional chain - element access with number - nested undefined', async () => { + await helpers.executeString(` + const foo = 0; + const baz = 2; + const bar: { [foo]: { [baz]: (() => number) | null | undefined } } = { [foo]: { [baz]: undefined } } as unknown as { [foo]: { [baz]: (() => number) | null | undefined } }; + + assertEqual(bar[foo][baz]?.(), undefined); + `); + }); + + test('optional chain - element access with number - nested null', async () => { + await helpers.executeString(` + const foo = 0; + const baz = 2; + const bar: { [foo]: { [baz]: (() => number) | null | undefined } } = { [foo]: { [baz]: null } } as unknown as { [foo]: { [baz]: (() => number) | null | undefined } }; + + assertEqual(bar[foo][baz]?.(), undefined); + `); + }); + + test('optional chain - element access with number - nested defined', async () => { + await helpers.executeString(` + const foo = 0; + const baz = 2; + const bar: { [foo]: { [baz]: (() => number) | null | undefined } } = { [foo]: { [baz]: () => 10 } } as unknown as { [foo]: { [baz]: (() => number) | null | undefined } }; + + assertEqual(bar[foo][baz]?.(), 10); + `); + }); + + test('optional chain - element access with string - undefined', async () => { + await helpers.executeString(` + const bar: { foo: (() => number) | null | undefined } = { foo: undefined } as unknown as { foo: (() => number) | null | undefined }; + + assertEqual(bar['foo']?.(), undefined); + `); + }); + + test('optional chain - element access with string - null', async () => { + await helpers.executeString(` + const bar: { foo: (() => number) | null | undefined } = { foo: null } as unknown as { foo: (() => number) | null | undefined }; + + assertEqual(bar['foo']?.(), undefined); + `); + }); + + test('optional chain - element access with string - defined', async () => { + await helpers.executeString(` + const bar: { foo: (() => number) | null | undefined } = { foo: () => 10 } as unknown as { foo: (() => number) | null | undefined }; + + assertEqual(bar['foo']?.(), 10); + `); + }); + + test('optional chain - element access with string - nested undefined', async () => { + await helpers.executeString(` + const bar: { foo: { baz: (() => number) | null | undefined } } = { foo: { baz: undefined } } as unknown as { foo: { baz: (() => number) | null | undefined } }; + + assertEqual(bar['foo']['baz']?.(), undefined); + `); + }); + + test('optional chain - element access with string - nested null', async () => { + await helpers.executeString(` + const bar: { foo: { baz: (() => number) | null | undefined } } = { foo: { baz: null } } as unknown as { foo: { baz: (() => number) | null | undefined } }; + + assertEqual(bar['foo']['baz']?.(), undefined); + `); + }); + + test('optional chain - element access with string - nested defined', async () => { + await helpers.executeString(` + const bar: { foo: { baz: (() => number) | null | undefined } } = { foo: { baz: () => 10 } } as unknown as { foo: { baz: (() => number) | null | undefined } }; + + assertEqual(bar['foo']['baz']?.(), 10); + `); + }); + + test('optional chain - call expression - undefined', async () => { + await helpers.executeString(` + const bar: (() => number) | null | undefined = null as unknown as (() => number) | null | undefined; + + assertEqual(bar?.(), undefined); + `); + }); + + test('optional chain - call expression - null', async () => { + await helpers.executeString(` + const bar: (() => number) | null | undefined = undefined as unknown as (() => number) | null | undefined; + + assertEqual(bar?.(), undefined); + `); + }); + + test('optional chain - call expression - defined', async () => { + await helpers.executeString(` + const bar: (() => number) | null | undefined = (() => 10) as unknown as (() => number) | null | undefined; + + assertEqual(bar?.(), 10); + `); + }); + + test('optional chain - property access - nested undefined', async () => { + await helpers.executeString(` + const bar: { foo: (() => number) | null | undefined } = { foo: undefined } as unknown as { foo: (() => number) | null | undefined }; + + assertEqual(bar.foo?.(), undefined); + `); + }); + + test('optional chain - property access - nested null', async () => { + await helpers.executeString(` + const bar: { foo: (() => number) | null | undefined } = { foo: null } as unknown as { foo: (() => number) | null | undefined }; + + assertEqual(bar.foo?.(), undefined); + `); + }); + + test('optional chain - property access - nested defined', async () => { + await helpers.executeString(` + const bar: { foo: (() => number) | null | undefined } = { foo: () => 10 } as unknown as { foo: (() => number) | null | undefined }; + + assertEqual(bar.foo?.(), 10); + `); + }); + + test('optional chain - property access - double nested undefined', async () => { + await helpers.executeString(` + const bar: { foo: { baz: (() => number) | null | undefined } } = { foo: { baz: undefined } } as unknown as { foo: { baz: (() => number) | null | undefined } }; + + assertEqual(bar.foo.baz?.(), undefined); + `); + }); + + test('optional chain - property access - double nested null', async () => { + await helpers.executeString(` + const bar: { foo: { baz: (() => number) | null | undefined } } = { foo: { baz: null } } as unknown as { foo: { baz: (() => number) | null | undefined } }; + + assertEqual(bar.foo.baz?.(), undefined); + `); + }); + + test('optional chain - property access - double nested defined', async () => { + await helpers.executeString(` + const bar: { foo: { baz: (() => number) | null | undefined } } = { foo: { baz: () => 10 } } as unknown as { foo: { baz: (() => number) | null | undefined } }; + + assertEqual(bar.foo.baz?.(), 10); + `); + }); }); diff --git a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/ElementAccessExpressionCompiler.test.ts b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/ElementAccessExpressionCompiler.test.ts index 7545164849..cc0961a1d7 100644 --- a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/ElementAccessExpressionCompiler.test.ts +++ b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/ElementAccessExpressionCompiler.test.ts @@ -17,6 +17,7 @@ describe('ElementAccessExpressionCompiler', () => { assertEqual(y[length], 3); assertEqual(y.length, 3); assertEqual(y[0], 0); + assertEqual(y[1 - 1], 0); assertEqual(y[1] as number | undefined, undefined); assertEqual(y[2], 2); assertEqual(y[2] += 1, 3); @@ -146,4 +147,28 @@ describe('ElementAccessExpressionCompiler', () => { { type: 'error' }, ); }); + + test('optional element access returns undefined when undefined', async () => { + await helpers.executeString(` + const bar: { optionalProp: number } | null | undefined = null as { optionalProp: number } | null | undefined; + + assertEqual(bar?.['optionalProp'], undefined); + `); + }); + + test('optional element access returns undefined when null', async () => { + await helpers.executeString(` + const bar: { optionalProp: number } | null | undefined = undefined as { optionalProp: number } | null | undefined; + + assertEqual(bar?.['optionalProp'], undefined); + `); + }); + + test('optional element access returns property when defined', async () => { + await helpers.executeString(` + const bar: { optionalProp: number } | null | undefined = { optionalProp: 10 } as { optionalProp: number } | null | undefined; + + assertEqual(bar?.['optionalProp'], 10); + `); + }); }); diff --git a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/ObjectLiteralExpressionCompiler.test.ts b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/ObjectLiteralExpressionCompiler.test.ts index fb694f3a28..60b5daff4e 100644 --- a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/ObjectLiteralExpressionCompiler.test.ts +++ b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/ObjectLiteralExpressionCompiler.test.ts @@ -108,6 +108,7 @@ describe('ObjectLiteralExpressionCompiler', () => { }; const x = { ...z, + //@ts-ignore f: 3, ...y, }; @@ -116,4 +117,41 @@ describe('ObjectLiteralExpressionCompiler', () => { assertEqual(x.f, 4); `); }); + + test('object with spread override errors', async () => { + helpers.compileString( + ` + const y = { + a: 0, + get f(): number { + return 4; + }, + }; + const z = { + a: 1, + }; + const x = { + ...z, + f: 3, + ...y, + }; + `, + { type: 'error' }, + ); + }); + + test('private field identifier fails outside class', async () => { + helpers.compileString( + ` + const y = { + a: 0, + #b: 10, + get f(): number { + return 4; + }, + }; + `, + { type: 'error' }, + ); + }); }); diff --git a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/PropertyAccessExpressionCompiler.test.ts b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/PropertyAccessExpressionCompiler.test.ts index fc2ca3c2a8..5d001fc22f 100644 --- a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/PropertyAccessExpressionCompiler.test.ts +++ b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/PropertyAccessExpressionCompiler.test.ts @@ -37,4 +37,60 @@ describe('PropertyAccessExpressionCompiler', () => { assertEqual(bar.length, 3); `); }); + + test('optional chaining returns undefined when undefined', async () => { + await helpers.executeString(` + const bar: { optionalProp: number } | null | undefined = null as { optionalProp: number } | null | undefined; + + assertEqual(bar?.optionalProp, undefined); + `); + }); + + test('optional chaining returns undefined when null', async () => { + await helpers.executeString(` + const bar: { optionalProp: number } | null | undefined = undefined as { optionalProp: number } | null | undefined; + + assertEqual(bar?.optionalProp, undefined); + `); + }); + + test('optional chaining returns property when defined', async () => { + await helpers.executeString(` + const bar: { optionalProp: number } | null | undefined = { optionalProp: 10 } as { optionalProp: number } | null | undefined; + + assertEqual(bar?.optionalProp, 10); + `); + }); + + test('nested optional chaining returns undefined when null', async () => { + await helpers.executeString(` + const bar: { first?: { second?: number } | null } | null | undefined = { first: null } as { first?: { second?: number } | null } | null | undefined; + + assertEqual(bar?.first?.second, undefined); + `); + }); + + test('nested optional chaining returns undefined when undefined', async () => { + await helpers.executeString(` + const bar: { first?: { second?: number } | null } | null | undefined = { first: undefined } as { first?: { second: number } | null } | null | undefined; + + assertEqual(bar?.first?.second, undefined); + `); + }); + + test('nested optional chaining returns property when defined', async () => { + await helpers.executeString(` + const bar: { first?: { second?: number } } | null | undefined = { first: { second: 10 } } as { first?: { second: number } } | null | undefined; + + assertEqual(bar?.first?.second, 10); + `); + }); + + test('nested optional chaining returns property when undefined with non-null assertion', async () => { + await helpers.executeString(` + const bar: { first?: { second?: number } } | null | undefined = undefined as { first?: { second: number } } | null | undefined; + + assertEqual(bar?.first!.second, undefined); + `); + }); }); diff --git a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/__snapshots__/AwaitExpressionCompiler.test.ts.snap b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/__snapshots__/AwaitExpressionCompiler.test.ts.snap index d3a76a2f7f..d2a7e78b16 100644 --- a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/__snapshots__/AwaitExpressionCompiler.test.ts.snap +++ b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/__snapshots__/AwaitExpressionCompiler.test.ts.snap @@ -1,7 +1,7 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`AwaitFunctionCompiler await 1`] = ` -"snippetCode.ts (2,7): 'await' expression is only allowed within an async function. +"snippetCode.ts (2,7): 'await' expressions are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module. 1 | > 2 | await 2; @@ -9,3 +9,15 @@ exports[`AwaitFunctionCompiler await 1`] = ` 3 | " `; + +exports[`AwaitFunctionCompiler await 2`] = ` +"snippetCode.ts (2,7): Unsupported syntax. + + 1 | + > 2 | await 2; + | ^ + 3 | + 4 | export {}; + 5 | +" +`; diff --git a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/__snapshots__/ObjectLiteralExpressionCompiler.test.ts.snap b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/__snapshots__/ObjectLiteralExpressionCompiler.test.ts.snap new file mode 100644 index 0000000000..66a8e86265 --- /dev/null +++ b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/expression/__snapshots__/ObjectLiteralExpressionCompiler.test.ts.snap @@ -0,0 +1,27 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`ObjectLiteralExpressionCompiler object with spread override errors 1`] = ` +"snippetCode.ts (13,9): 'f' is specified more than once, so this usage will be overwritten. + + 11 | const x = { + 12 | ...z, + > 13 | f: 3, + | ^ + 14 | ...y, + 15 | }; + 16 | +" +`; + +exports[`ObjectLiteralExpressionCompiler private field identifier fails outside class 1`] = ` +"snippetCode.ts (4,9): Private identifiers are not allowed outside class bodies. + + 2 | const y = { + 3 | a: 0, + > 4 | #b: 10, + | ^ + 5 | get f(): number { + 6 | return 4; + 7 | }, +" +`; diff --git a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/helper/contract/InvokeSmartContractHelper6.test.ts b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/helper/contract/InvokeSmartContractHelper6.test.ts index 4e0313d162..977c5a6706 100644 --- a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/helper/contract/InvokeSmartContractHelper6.test.ts +++ b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/helper/contract/InvokeSmartContractHelper6.test.ts @@ -494,7 +494,10 @@ describe('InvokeSmartContractHelper', () => { }, { name: 'issue', - parameters: [{ name: 'to', type: 'Address' }, { name: 'amount', type: 'Integer', decimals: 8 }], + parameters: [ + { name: 'to', type: 'Address' }, + { name: 'amount', type: 'Integer', decimals: 8 }, + ], returnType: { type: 'Boolean' }, }, ], diff --git a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/helper/types/boolean/ToNullishBooleanHelper.test.ts b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/helper/types/boolean/ToNullishBooleanHelper.test.ts new file mode 100644 index 0000000000..d92950639c --- /dev/null +++ b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/helper/types/boolean/ToNullishBooleanHelper.test.ts @@ -0,0 +1,253 @@ +import { helpers } from '../../../../../__data__'; + +describe('ToNullishBooleanHelper', () => { + test('array', async () => { + await helpers.executeString(` + const value: Array = []; + const bad = 'bad'; + const result = value ?? bad; + + assertEqual(result, value); + `); + }); + + test('boolean true', async () => { + await helpers.executeString(` + const value = true; + const bad = 'bad'; + const result = value ?? bad; + + assertEqual(result, value); + `); + }); + + test('boolean false', async () => { + await helpers.executeString(` + const value = false; + const bad = 'bad'; + const result = value ?? bad; + + assertEqual(result, value); + `); + }); + + test('buffer', async () => { + await helpers.executeString(` + const value: Buffer = Buffer.from('', 'hex'); + const bad = 'bad'; + const result = value ?? bad; + + assertEqual(result, value); + `); + }); + + test('null', async () => { + await helpers.executeString(` + const value = null; + const bad = 'bad'; + const result = value ?? bad; + + assertEqual(result, bad); + `); + }); + + test('number 0', async () => { + await helpers.executeString(` + const value = 0; + const bad = 'bad'; + const result = value ?? bad; + + assertEqual(result, value); + `); + }); + + test('number 1', async () => { + await helpers.executeString(` + const value = 1; + const bad = 'bad'; + const result = value ?? bad; + + assertEqual(result, value); + `); + }); + + test('object', async () => { + await helpers.executeString(` + const value: { [key: string]: string } = {}; + const bad = 'bad'; + const result = value ?? bad; + + assertEqual(result, value); + `); + }); + + test('string ""', async () => { + await helpers.executeString(` + const value: string = ''; + const bad = 'bad'; + const result = value ?? bad; + + assertEqual(result, value); + `); + }); + + test('string "a"', async () => { + await helpers.executeString(` + const value: string = 'a'; + const bad = 'bad'; + const result = value ?? bad; + + assertEqual(result, value); + `); + }); + + test('symbol', async () => { + await helpers.executeString(` + const value: symbol = Symbol.for('a'); + const bad = 'bad'; + const result = value ?? bad; + + assertEqual(result, value); + `); + }); + + test('undefined', async () => { + await helpers.executeString(` + const value: undefined = undefined; + const bad = 'bad'; + const result = value ?? bad; + + assertEqual(result, bad); + `); + }); + + test('array or undefined', async () => { + await helpers.executeString(` + const value: Array | undefined = [] as Array | undefined; + const bad = 'bad'; + const result = value ?? bad; + + assertEqual(result, value); + `); + }); + + test('boolean or undefined true', async () => { + await helpers.executeString(` + const value: boolean | undefined = true as boolean | undefined; + const bad = 'bad'; + const result = value ?? bad; + + assertEqual(result, value); + `); + }); + + test('boolean or undefined false', async () => { + await helpers.executeString(` + const value: boolean | undefined = false as boolean | undefined; + const bad = 'bad'; + const result = value ?? bad; + + assertEqual(result, value); + `); + }); + + test('buffer or undefined', async () => { + await helpers.executeString(` + const value: Buffer | undefined = Buffer.from('', 'hex') as Buffer | undefined; + const bad = 'bad'; + const result = value ?? bad; + + assertEqual(result, value); + `); + }); + + test('null or undefined', async () => { + await helpers.executeString(` + const value: null | undefined = null as null | undefined; + const bad = 'bad'; + const result = value ?? bad; + + assertEqual(result, bad); + `); + }); + + test('number or undefined 0', async () => { + await helpers.executeString(` + const value: number | undefined = 0 as number | undefined; + const bad = 'bad'; + const result = value ?? bad; + + assertEqual(result, value); + `); + }); + + test('number or undefined 1', async () => { + await helpers.executeString(` + const value: number | undefined = 1 as number | undefined; + const bad = 'bad'; + const result = value ?? bad; + + assertEqual(result, value); + `); + }); + + test('object or undefined', async () => { + await helpers.executeString(` + const value: { [key: string]: string } | undefined = {} as { [key: string]: string } | undefined; + const bad = 'bad'; + const result = value ?? bad; + + assertEqual(result, value); + `); + }); + + test('string or undefined ""', async () => { + await helpers.executeString(` + const value: string | undefined = '' as string | undefined; + const bad = 'bad'; + const result = value ?? bad; + + assertEqual(result, value); + `); + }); + + test('string or undefined "a"', async () => { + await helpers.executeString(` + const value: string | undefined = 'a' as string | undefined; + const bad = 'bad'; + const result = value ?? bad; + + assertEqual(result, value); + `); + }); + + test('symbol or undefined', async () => { + await helpers.executeString(` + const value: symbol | undefined = Symbol.for('a') as symbol | undefined; + const bad = 'bad'; + const result = value ?? bad; + + assertEqual(result, value); + `); + }); + + test('array or object', async () => { + await helpers.executeString(` + const value: Array | { [key: string]: number } = [] as Array | { [key: string]: number }; + const bad = 'bad'; + const result = value ?? bad; + + assertEqual(result, value); + `); + }); + + test('array or object or number', async () => { + await helpers.executeString(` + const value: Array | { [key: string]: number } | number = [] as Array | { [key: string]: number } | number; + const bad = 'bad'; + const result = value ?? bad; + + assertEqual(result, value); + `); + }); +}); diff --git a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/statement/BreakStatementCompiler.test.ts b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/statement/BreakStatementCompiler.test.ts index 1a0d1778bd..877b2093dc 100644 --- a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/statement/BreakStatementCompiler.test.ts +++ b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/statement/BreakStatementCompiler.test.ts @@ -40,6 +40,44 @@ describe('BreakStatementCompiler', () => { `); }); + test('break - inside SmartContract invocation', async () => { + const node = await helpers.startNode(); + const contract = await node.addContract(` + import { SmartContract } from '@neo-one/smart-contract'; + + export class TestContract extends SmartContract { + public foo() { + let result = 0; + for (let i = 0; i < 10; i++) { + result += 10; + if (i > 1) { + break; + } + } + + if (result != 30) { + throw 'Failure'; + } + + // checking that this code runs after the break statement + return 10; + } + } + `); + + await node.executeString(` + import { Address, SmartContract } from '@neo-one/smart-contract'; + + interface Contract { + deploy(): boolean; + foo(): number; + } + const contract = SmartContract.for(Address.from('${contract.address}')); + + assertEqual(contract.foo(), 10); + `); + }); + test('break label', async () => { helpers.compileString( ` diff --git a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/statement/SwitchStatementCompiler.test.ts b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/statement/SwitchStatementCompiler.test.ts index 5664bfce12..eb82772dd1 100644 --- a/packages/neo-one-smart-contract-compiler/src/__tests__/compile/statement/SwitchStatementCompiler.test.ts +++ b/packages/neo-one-smart-contract-compiler/src/__tests__/compile/statement/SwitchStatementCompiler.test.ts @@ -117,4 +117,39 @@ describe('SwitchStatementCompiler', () => { assertEqual(result, 'c'); `); }); + + test('switch break - inside SmartContract invocation', async () => { + const node = await helpers.startNode(); + const contract = await node.addContract(` + import { SmartContract } from '@neo-one/smart-contract'; + + export class TestSmartContract extends SmartContract { + + public foo(): number { + const attribute: number = 0; + + switch(attribute) { + case 0: + // do nothing + break; + } + + // checking that this code runs after the break statement + return 10; + } + } + `); + + await node.executeString(` + import { Address, SmartContract } from '@neo-one/smart-contract'; + + interface Contract { + deploy(): boolean; + foo(): number; + } + const contract = SmartContract.for(Address.from('${contract.address}')); + + assertEqual(contract.foo(), 10); + `); + }); }); diff --git a/packages/neo-one-smart-contract-compiler/src/compile/builtins/array/index.ts b/packages/neo-one-smart-contract-compiler/src/compile/builtins/array/index.ts index 08cf642453..0f6947489e 100644 --- a/packages/neo-one-smart-contract-compiler/src/compile/builtins/array/index.ts +++ b/packages/neo-one-smart-contract-compiler/src/compile/builtins/array/index.ts @@ -44,19 +44,19 @@ class ArrayValue extends BuiltinInstanceOf { class ArrayConstructorInterface extends BuiltinInterface {} const COMMON: ReadonlyArray = [ - ['filter', new ArrayFilter()] as const, - ['forEach', new ArrayForEach()] as const, - ['__@iterator', new ArrayIterator()] as const, - ['length', new ArrayLength()] as const, - ['map', new ArrayMap()] as const, - ['reduce', new ArrayReduce()] as const, - ['toString', new ArrayToString()] as const, - ['concat', new ArrayConcat()] as const, - ['join', new ArrayJoin()] as const, - ['slice', new ArraySlice()] as const, - ['some', new ArraySome()] as const, - ['every', new ArrayEvery()] as const, - ['entries', new ArrayEntries()] as const, + ['filter', new ArrayFilter()], + ['forEach', new ArrayForEach()], + ['__@iterator', new ArrayIterator()], + ['length', new ArrayLength()], + ['map', new ArrayMap()], + ['reduce', new ArrayReduce()], + ['toString', new ArrayToString()], + ['concat', new ArrayConcat()], + ['join', new ArrayJoin()], + ['slice', new ArraySlice()], + ['some', new ArraySome()], + ['every', new ArrayEvery()], + ['entries', new ArrayEntries()], ]; // tslint:disable-next-line export-name diff --git a/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/arrayStorage/pop.ts b/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/arrayStorage/pop.ts index 91595fd604..a233a51829 100644 --- a/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/arrayStorage/pop.ts +++ b/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/arrayStorage/pop.ts @@ -77,6 +77,8 @@ export class ArrayStoragePop extends BuiltinInstanceMemberCall { sb.emitOp(node, 'TUCK'); // [idx, val, idx, val] sb.emitOp(node, 'OVER'); + // [idx, val, idx, val] + sb.emitHelper(node, options, sb.helpers.coerceToInt); // [idxVal, val, idx, val] sb.emitHelper(node, options, sb.helpers.wrapNumber); if (optionsIn.pushValue) { diff --git a/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/arrayStorage/push.ts b/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/arrayStorage/push.ts index 3d8abdab91..bdb7dae498 100644 --- a/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/arrayStorage/push.ts +++ b/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/arrayStorage/push.ts @@ -36,6 +36,8 @@ export class ArrayStoragePush extends BuiltinInstanceMemberCall { sb.emitOp(node, 'TUCK'); // [idx, val, idx, val] sb.emitOp(node, 'OVER'); + // [idx, val, idx, val] + sb.emitHelper(node, options, sb.helpers.coerceToInt); // [idxVal, val, idx, val] sb.emitHelper(node, options, sb.helpers.wrapNumber); // [valueVal, idxVal, val, idx, val] diff --git a/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/mapStorage/get.ts b/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/mapStorage/get.ts index 460dd5c453..acf123bcd2 100644 --- a/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/mapStorage/get.ts +++ b/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/mapStorage/get.ts @@ -34,6 +34,14 @@ export class MapStorageGet extends BuiltinInstanceMemberCall { const type = sb.context.analysis.getType(arg); // [keyVal, val] sb.visit(arg, options); + if (arg.kind === ts.SyntaxKind.NumericLiteral) { + // [number, val] + sb.emitHelper(arg, options, sb.helpers.unwrapNumber); + // [number, val] + sb.emitHelper(arg, options, sb.helpers.coerceToInt); + // [keyVal, val] + sb.emitHelper(arg, options, sb.helpers.wrapNumber); + } // [val] sb.emitHelper(node, optionsIn, sb.helpers.getStructuredStorage({ type: Types.MapStorage, keyType: type })); } diff --git a/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/mapStorage/set.ts b/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/mapStorage/set.ts index 082fb1a17a..888a0b33e5 100644 --- a/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/mapStorage/set.ts +++ b/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/mapStorage/set.ts @@ -39,6 +39,14 @@ export class MapStorageSet extends BuiltinInstanceMemberCall { } // [keyVal, val] sb.visit(key, options); + if (key.kind === ts.SyntaxKind.NumericLiteral) { + // [number, val] + sb.emitHelper(key, options, sb.helpers.unwrapNumber); + // [number, val] + sb.emitHelper(key, options, sb.helpers.coerceToInt); + // [keyVal, val] + sb.emitHelper(key, options, sb.helpers.wrapNumber); + } // [valVal, keyVal, val] sb.visit(tsUtils.argumented.getArguments(node)[1], options); // [] diff --git a/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/setStorage/add.ts b/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/setStorage/add.ts index e392ee1d2a..c4be886c5b 100644 --- a/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/setStorage/add.ts +++ b/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/setStorage/add.ts @@ -39,6 +39,14 @@ export class SetStorageAdd extends BuiltinInstanceMemberCall { } // [keyVal, val] sb.visit(key, options); + if (key.kind === ts.SyntaxKind.NumericLiteral) { + // [number, val] + sb.emitHelper(key, options, sb.helpers.unwrapNumber); + // [number, val] + sb.emitHelper(key, options, sb.helpers.coerceToInt); + // [keyVal, val] + sb.emitHelper(key, options, sb.helpers.wrapNumber); + } // [value, keyVal, val] sb.emitPushBoolean(node, true); // [] diff --git a/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/storage/at.ts b/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/storage/at.ts index 60015421ba..afdcc12d93 100644 --- a/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/storage/at.ts +++ b/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/storage/at.ts @@ -38,6 +38,14 @@ export class StorageAt extends BuiltinInstanceMemberCall { const type = sb.context.analysis.getType(arg); // [keyVal, val] sb.visit(arg, options); + if (arg.kind === ts.SyntaxKind.NumericLiteral) { + // [number, val] + sb.emitHelper(arg, options, sb.helpers.unwrapNumber); + // [number, val] + sb.emitHelper(arg, options, sb.helpers.coerceToInt); + // [keyVal, val] + sb.emitHelper(arg, options, sb.helpers.wrapNumber); + } // [val] sb.emitHelper(node, optionsIn, sb.helpers.atStructuredStorage({ type: this.type, keyType: type })); } diff --git a/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/storage/delete.ts b/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/storage/delete.ts index da3e285344..9451612605 100644 --- a/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/storage/delete.ts +++ b/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/storage/delete.ts @@ -38,6 +38,14 @@ export class StorageDelete extends BuiltinInstanceMemberCall { const type = sb.context.analysis.getType(arg); // [keyVal, val] sb.visit(arg, options); + if (arg.kind === ts.SyntaxKind.NumericLiteral) { + // [number, val] + sb.emitHelper(arg, options, sb.helpers.unwrapNumber); + // [number, val] + sb.emitHelper(arg, options, sb.helpers.coerceToInt); + // [keyVal, val] + sb.emitHelper(arg, options, sb.helpers.wrapNumber); + } // [val] sb.emitHelper(node, optionsIn, sb.helpers.deleteStructuredStorage({ type: this.type, keyType: type })); } diff --git a/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/storage/has.ts b/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/storage/has.ts index 0c539536b3..0e0c8e0fdc 100644 --- a/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/storage/has.ts +++ b/packages/neo-one-smart-contract-compiler/src/compile/builtins/contract/storage/has.ts @@ -38,6 +38,14 @@ export class StorageHas extends BuiltinInstanceMemberCall { const type = sb.context.analysis.getType(arg); // [keyVal, val] sb.visit(arg, options); + if (arg.kind === ts.SyntaxKind.NumericLiteral) { + // [number, val] + sb.emitHelper(arg, options, sb.helpers.unwrapNumber); + // [number, val] + sb.emitHelper(arg, options, sb.helpers.coerceToInt); + // [keyVal, val] + sb.emitHelper(arg, options, sb.helpers.wrapNumber); + } // [val] sb.emitHelper(node, optionsIn, sb.helpers.hasStructuredStorage({ type: this.type, keyType: type })); } diff --git a/packages/neo-one-smart-contract-compiler/src/compile/builtins/map/index.ts b/packages/neo-one-smart-contract-compiler/src/compile/builtins/map/index.ts index fd61f99e23..006fd3ab1f 100644 --- a/packages/neo-one-smart-contract-compiler/src/compile/builtins/map/index.ts +++ b/packages/neo-one-smart-contract-compiler/src/compile/builtins/map/index.ts @@ -48,11 +48,11 @@ class MapValue extends BuiltinNew { class MapConstructorInterface extends BuiltinInterface {} const COMMON: ReadonlyArray = [ - ['__@iterator', new MapIterator()] as const, - ['forEach', new MapForEach()] as const, - ['get', new MapGet()] as const, - ['has', new MapHas()] as const, - ['size', new MapSize()] as const, + ['__@iterator', new MapIterator()], + ['forEach', new MapForEach()], + ['get', new MapGet()], + ['has', new MapHas()], + ['size', new MapSize()], ]; // tslint:disable-next-line export-name diff --git a/packages/neo-one-smart-contract-compiler/src/compile/builtins/set/index.ts b/packages/neo-one-smart-contract-compiler/src/compile/builtins/set/index.ts index 4ebb149792..7efcaf8c7a 100644 --- a/packages/neo-one-smart-contract-compiler/src/compile/builtins/set/index.ts +++ b/packages/neo-one-smart-contract-compiler/src/compile/builtins/set/index.ts @@ -77,10 +77,10 @@ class SetValue extends BuiltinNew { class SetConstructorInterface extends BuiltinInterface {} const COMMON: ReadonlyArray = [ - ['__@iterator', new SetIterator()] as const, - ['forEach', new SetForEach()] as const, - ['has', new MapHas()] as const, - ['size', new MapSize()] as const, + ['__@iterator', new SetIterator()], + ['forEach', new SetForEach()], + ['has', new MapHas()], + ['size', new MapSize()], ]; // tslint:disable-next-line export-name diff --git a/packages/neo-one-smart-contract-compiler/src/compile/compile.ts b/packages/neo-one-smart-contract-compiler/src/compile/compile.ts index 898fb28138..1886418b41 100644 --- a/packages/neo-one-smart-contract-compiler/src/compile/compile.ts +++ b/packages/neo-one-smart-contract-compiler/src/compile/compile.ts @@ -33,7 +33,7 @@ export const compileForDiagnostics = ({ context, sourceFile }: DiagnosticCompile export const compile = ({ context, sourceFile, linked = {}, sourceMaps = {} }: CompileOptions): CompileResult => { const helpers = createHelpers(); - const { contractInfo, abi, contract } = getSmartContractInfo(context, sourceFile); + const { contractInfo, abi, contract, debugInfo } = getSmartContractInfo(context, sourceFile); const helperScriptBuilder = new HelperCapturingScriptBuilder( context, @@ -75,6 +75,7 @@ export const compile = ({ context, sourceFile, linked = {}, sourceMaps = {} }: C }, abi, context, + debugInfo, sourceMap: finalResult.sourceMap, }; }; diff --git a/packages/neo-one-smart-contract-compiler/src/compile/expression/BinaryExpressionCompiler.ts b/packages/neo-one-smart-contract-compiler/src/compile/expression/BinaryExpressionCompiler.ts index f304aac8f7..3620ec6a3b 100644 --- a/packages/neo-one-smart-contract-compiler/src/compile/expression/BinaryExpressionCompiler.ts +++ b/packages/neo-one-smart-contract-compiler/src/compile/expression/BinaryExpressionCompiler.ts @@ -58,6 +58,7 @@ export class BinaryExpressionCompiler extends NodeCompiler break; case ts.SyntaxKind.AmpersandAmpersandToken: case ts.SyntaxKind.BarBarToken: + case ts.SyntaxKind.QuestionQuestionToken: this.visitLogicalExpressionOperator(sb, kind, expr, options); break; /* istanbul ignore next */ @@ -162,7 +163,7 @@ export class BinaryExpressionCompiler extends NodeCompiler private visitLogicalExpressionOperator( sb: ScriptBuilder, - kind: ts.LogicalOperator, + kind: ts.LogicalOperator | ts.SyntaxKind.QuestionQuestionToken, expr: ts.BinaryExpression, options: VisitOptions, ): void { @@ -419,7 +420,7 @@ export class BinaryExpressionCompiler extends NodeCompiler private visitLogicalExpressionOperatorBase( sb: ScriptBuilder, node: ts.Node, - kind: ts.LogicalOperator, + kind: ts.LogicalOperator | ts.SyntaxKind.QuestionQuestionToken, left: ts.Expression, right: ts.Expression, options: VisitOptions, @@ -483,6 +484,41 @@ export class BinaryExpressionCompiler extends NodeCompiler ); break; } + case ts.SyntaxKind.QuestionQuestionToken: { + sb.emitHelper( + node, + options, + sb.helpers.if({ + condition: () => { + // [left] + sb.visit(left, sb.pushValueOptions(options)); + if (options.pushValue) { + // [left, left] + sb.emitOp(left, 'DUP'); + } + // [leftBoolean, ?left] + sb.emitHelper( + left, + sb.pushValueOptions(options), + sb.helpers.toNullishBoolean({ type: sb.context.analysis.getType(left) }), + ); + }, + whenFalse: () => { + if (options.pushValue) { + sb.emitOp(node, 'DROP'); + } + sb.visit(right, options); + }, + whenTrue: () => { + if (options.pushValue) { + sb.emitOp(node, 'DROP'); + } + sb.visit(left, options); + }, + }), + ); + break; + } /* istanbul ignore next */ default: /* istanbul ignore next */ diff --git a/packages/neo-one-smart-contract-compiler/src/compile/expression/ElementAccessExpressionCompiler.ts b/packages/neo-one-smart-contract-compiler/src/compile/expression/ElementAccessExpressionCompiler.ts index 21ebd92f05..8e10d0fa81 100644 --- a/packages/neo-one-smart-contract-compiler/src/compile/expression/ElementAccessExpressionCompiler.ts +++ b/packages/neo-one-smart-contract-compiler/src/compile/expression/ElementAccessExpressionCompiler.ts @@ -12,6 +12,7 @@ export class ElementAccessExpressionCompiler extends NodeCompiler { + // [] + sb.emitOp(expr, 'DROP'); + // [undefinedVal] + sb.emitHelper(expr, innerOptions, sb.helpers.wrapUndefined); + }; + + const throwTypeErrorUnlessOptionalChain = (innerOptions: VisitOptions) => { + isOptionalChain ? processUndefined(innerOptions) : throwTypeError(innerOptions); + }; + const createHandleProp = ( handleString: (options: VisitOptions) => void, handleNumber: (options: VisitOptions) => void, @@ -277,6 +289,8 @@ export class ElementAccessExpressionCompiler extends NodeCompiler { // [number, objectVal] sb.emitHelper(prop, innerInnerOptions, sb.helpers.unwrapNumber); + // [number, objectVal] + sb.emitHelper(prop, innerInnerOptions, sb.helpers.coerceToInt); handleNumberBase(innerInnerOptions); }; @@ -469,12 +483,12 @@ export class ElementAccessExpressionCompiler extends NodeCompiler { + // [] + sb.emitOp(expr, 'DROP'); + // [undefinedVal] + sb.emitHelper(expr, innerOptions, sb.helpers.wrapUndefined); + }; + + const throwTypeErrorUnlessOptionalChain = (innerOptions: VisitOptions) => { + isOptionalChain ? processUndefined(innerOptions) : throwTypeError(innerOptions); + }; + const createProcessBuiltin = (valueName: string) => { const member = sb.context.builtins.getOnlyMember(valueName, nameValue); @@ -111,12 +123,12 @@ export class PropertyAccessExpressionCompiler extends NodeCompiler { export interface SmartContractInfo { readonly contractInfo: ContractInfo | undefined; readonly abi: ABI; + readonly debugInfo: DebugInfo; readonly contract: OmitStrict; } @@ -138,6 +147,7 @@ export const getSmartContractInfo = (context: Context, sourceFile: ts.SourceFile return { contractInfo, abi: getABI(context, contractInfo), + debugInfo: getDebugInfo(context, contractInfo), contract: { parameters: PARAMETERS, returnType: RETURN_TYPE, @@ -155,6 +165,12 @@ export const getSmartContractInfo = (context: Context, sourceFile: ts.SourceFile functions: [], events: [], }, + debugInfo: { + entrypoint: '', + documents: [], + methods: [], + events: [], + }, contract: { parameters: PARAMETERS, returnType: RETURN_TYPE, diff --git a/packages/neo-one-smart-contract-compiler/src/compile/helper/contract/utils.ts b/packages/neo-one-smart-contract-compiler/src/compile/helper/contract/utils.ts index 3edf4a0b26..b97d221d04 100644 --- a/packages/neo-one-smart-contract-compiler/src/compile/helper/contract/utils.ts +++ b/packages/neo-one-smart-contract-compiler/src/compile/helper/contract/utils.ts @@ -36,7 +36,7 @@ export const findSuperDeployPropInfo = ( (propInfo): propInfo is DeployPropInfo => propInfo.type === 'deploy', ); if (superDeployPropInfo !== undefined) { - return [superSmartContract, superDeployPropInfo] as const; + return [superSmartContract, superDeployPropInfo]; } return findSuperDeployPropInfo(superSmartContract); @@ -45,5 +45,5 @@ export const findSuperDeployPropInfo = ( export const findDeployInfo = (contractInfo: ContractInfo): readonly [ContractInfo, DeployPropInfo] | undefined => { const deployInfo = contractInfo.propInfos.find((propInfo): propInfo is DeployPropInfo => propInfo.type === 'deploy'); - return deployInfo === undefined ? findSuperDeployPropInfo(contractInfo) : ([contractInfo, deployInfo] as const); + return deployInfo === undefined ? findSuperDeployPropInfo(contractInfo) : [contractInfo, deployInfo]; }; diff --git a/packages/neo-one-smart-contract-compiler/src/compile/helper/createHelpers.ts b/packages/neo-one-smart-contract-compiler/src/compile/helper/createHelpers.ts index b2b4a043cc..7940ccc2db 100644 --- a/packages/neo-one-smart-contract-compiler/src/compile/helper/createHelpers.ts +++ b/packages/neo-one-smart-contract-compiler/src/compile/helper/createHelpers.ts @@ -276,6 +276,7 @@ import { import { ArrayLengthHelper, BufferLengthHelper, + CoerceToIntHelper, ConcatBufferHelper, CreateArrayHelper, CreateObjectHelper, @@ -347,6 +348,7 @@ import { SetPropertyObjectPropertyHelper, SetSymbolObjectPropertyHelper, ToBooleanHelper, + ToNullishBooleanHelper, ToNumberHelper, ToObjectHelper, ToPrimitiveHelper, @@ -528,6 +530,7 @@ export interface Helpers { readonly invokeConstruct: (options?: InvokeConstructHelperOptions) => InvokeConstructHelper; readonly new: (options?: NewHelperOptions) => NewHelper; readonly parameters: (options: ParametersHelperOptions) => ParametersHelper; + readonly coerceToInt: CoerceToIntHelper; readonly forLoop: (options: ForLoopHelperOptions) => ForLoopHelper; readonly if: (options: IfHelperOptions) => IfHelper; @@ -561,6 +564,7 @@ export interface Helpers { readonly unwrapSymbol: UnwrapSymbolHelper; readonly getObject: GetObjectHelper; readonly toBoolean: (options: TypedHelperOptions) => ToBooleanHelper; + readonly toNullishBoolean: (options: TypedHelperOptions) => ToNullishBooleanHelper; readonly toString: (options: ToStringHelperOptions) => ToStringHelper; readonly toNumber: (options: TypedHelperOptions) => ToNumberHelper; readonly toObject: (options: TypedHelperOptions) => ToObjectHelper; @@ -977,6 +981,7 @@ export const createHelpers = (prevHelpers?: Helpers): Helpers => { invokeConstruct: (options?) => new InvokeConstructHelper(options), new: (options?) => new NewHelper(options), parameters: (options) => new ParametersHelper(options), + coerceToInt: new CoerceToIntHelper(), forLoop: (options) => new ForLoopHelper(options), if: (options) => new IfHelper(options), @@ -1010,6 +1015,7 @@ export const createHelpers = (prevHelpers?: Helpers): Helpers => { unwrapSymbol: new UnwrapSymbolHelper(), getObject: new GetObjectHelper(), toBoolean: (options) => new ToBooleanHelper(options), + toNullishBoolean: (options) => new ToNullishBooleanHelper(options), toString: (options) => new ToStringHelper(options), toNumber: (options) => new ToNumberHelper(options), toObject: (options) => new ToObjectHelper(options), diff --git a/packages/neo-one-smart-contract-compiler/src/compile/helper/function/CallLikeHelper.ts b/packages/neo-one-smart-contract-compiler/src/compile/helper/function/CallLikeHelper.ts index 9976e063fd..ef782e932e 100644 --- a/packages/neo-one-smart-contract-compiler/src/compile/helper/function/CallLikeHelper.ts +++ b/packages/neo-one-smart-contract-compiler/src/compile/helper/function/CallLikeHelper.ts @@ -28,6 +28,7 @@ export class CallLikeHelper extends Helper { + // [argsarr] + sb.emitOp(expr, 'DROP'); + // [] + sb.emitOp(expr, 'DROP'); + // [undefinedVal] + sb.emitHelper(expr, innerOptions, sb.helpers.wrapUndefined); + }; + + const throwTypeErrorUnlessOptionalChain = (innerOptions: VisitOptions) => { + isOptionalChain ? processUndefined(innerOptions) : throwTypeError(innerOptions); + }; + const handleArguments = (innerOptions: VisitOptions) => { if (ts.isCallExpression(expression)) { // [argsarr] @@ -173,6 +187,67 @@ export class CallLikeHelper extends Helper { + // tslint:disable-next-line: no-loop-statement + for (let i = 0; i < n; i += 1) { + innerSb.emitOp(node, 'DROP'); + } + }; + + // Input: [...vals] + // Output: isNullOrUndefined ? [undefinedVal] : callCallback() + const callIfNotNullOrUndefined = ({ + innerOptions, + argsNum, + callback, + }: { + innerOptions: VisitOptions; + argsNum: number; + callback: () => void; + }) => { + sb.emitHelper( + expr, + optionsIn, + sb.helpers.if({ + condition: () => { + // [val, ...vals] + sb.emitOp(expr, 'DUP'); + // [isNull, ...vals] + sb.emitHelper(expr, optionsIn, sb.helpers.isNull); + }, + whenTrue: () => { + // [] + emitDropNTimes(sb, expr, argsNum); + // [undefinedVal] + sb.emitHelper(expr, innerOptions, sb.helpers.wrapUndefined); + }, + whenFalse: () => { + sb.emitHelper( + expr, + optionsIn, + sb.helpers.if({ + condition: () => { + // [val, ...vals] + sb.emitOp(expr, 'DUP'); + // [isUndefined, ...vals] + sb.emitHelper(expr, optionsIn, sb.helpers.isUndefined); + }, + whenTrue: () => { + // [] + emitDropNTimes(sb, expr, argsNum); + // [undefinedVal] + sb.emitHelper(expr, innerOptions, sb.helpers.wrapUndefined); + }, + whenFalse: () => { + callback(); + }, + }), + ); + }, + }), + ); + }; + const superExpression = ts.isCallExpression(expression) ? tsUtils.expression.getExpression(expression) : undefined; if ( ts.isCallExpression(expression) && @@ -236,7 +311,13 @@ export class CallLikeHelper extends Helper sb.emitHelper(expr, optionsIn, sb.helpers.invokeCall({ bindThis: true })), + }) + : sb.emitHelper(expr, optionsIn, sb.helpers.invokeCall({ bindThis: true })); }; const options = sb.pushValueOptions(sb.noSetValueOptions(optionsIn)); @@ -474,7 +555,14 @@ export class CallLikeHelper extends Helper { // [val, objectVal, argsarr] sb.emitHelper(expr, innerInnerOptions, sb.helpers.getPropertyObjectProperty); - sb.emitHelper(expr, optionsIn, sb.helpers.invokeCall({ bindThis: true })); + isOptionalChain + ? // valIsNullOrUndefined ? [undefinedVal] : invokeCall() + callIfNotNullOrUndefined({ + innerOptions, + argsNum: 3, + callback: () => sb.emitHelper(expr, optionsIn, sb.helpers.invokeCall({ bindThis: true })), + }) + : sb.emitHelper(expr, optionsIn, sb.helpers.invokeCall({ bindThis: true })); }; const handleNumber = (innerInnerOptions: VisitOptions) => { @@ -494,7 +582,14 @@ export class CallLikeHelper extends Helper sb.emitHelper(expr, optionsIn, sb.helpers.invokeCall({ bindThis: true })), + }) + : sb.emitHelper(expr, optionsIn, sb.helpers.invokeCall({ bindThis: true })); }; // [argsarr, objectVal, thisVal] @@ -580,6 +675,54 @@ export class CallLikeHelper extends Helper { + sb.emitHelper(expr, optionsIn, sb.helpers.invokeCall({ bindThis: false })); + }; + + const options = sb.pushValueOptions(sb.noSetValueOptions(optionsIn)); + // [argsarr] + handleArguments(options); + // [objectVal, argsarr] + sb.visit(expr, options); + sb.emitHelper( + value, + options, + sb.helpers.forBuiltinType({ + type: valueType, + array: throwTypeError, + arrayStorage: throwTypeError, + boolean: throwTypeError, + buffer: throwTypeError, + null: throwTypeErrorUnlessOptionalChain, + number: throwTypeError, + object: processCall, + string: throwTypeError, + symbol: throwTypeError, + undefined: throwTypeErrorUnlessOptionalChain, + map: throwTypeError, + mapStorage: throwTypeError, + set: throwTypeError, + setStorage: throwTypeError, + error: throwTypeError, + forwardValue: throwTypeError, + iteratorResult: throwTypeError, + iterable: throwTypeError, + iterableIterator: throwTypeError, + transaction: throwTypeError, + output: throwTypeError, + attribute: throwTypeError, + input: throwTypeError, + account: throwTypeError, + asset: throwTypeError, + contract: throwTypeError, + header: throwTypeError, + block: throwTypeError, + }), + ); } else { const options = sb.pushValueOptions(sb.noSetValueOptions(optionsIn)); // [argsarr] diff --git a/packages/neo-one-smart-contract-compiler/src/compile/helper/types/boolean/ToNullishBooleanHelper.ts b/packages/neo-one-smart-contract-compiler/src/compile/helper/types/boolean/ToNullishBooleanHelper.ts new file mode 100644 index 0000000000..1defeb2d39 --- /dev/null +++ b/packages/neo-one-smart-contract-compiler/src/compile/helper/types/boolean/ToNullishBooleanHelper.ts @@ -0,0 +1,65 @@ +import ts from 'typescript'; +import { ScriptBuilder } from '../../../sb'; +import { VisitOptions } from '../../../types'; +import { TypedHelper } from '../TypedHelper'; + +// Input: [val] +// Output: [boolean] +export class ToNullishBooleanHelper extends TypedHelper { + public emit(sb: ScriptBuilder, node: ts.Node, options: VisitOptions): void { + if (!options.pushValue) { + /* istanbul ignore next */ + sb.emitOp(node, 'DROP'); + + /* istanbul ignore next */ + return; + } + + const convertUndefinedOrNull = () => { + sb.emitOp(node, 'DROP'); + sb.emitPushBoolean(node, false); + }; + + const convertOther = () => { + sb.emitOp(node, 'DROP'); + sb.emitPushBoolean(node, true); + }; + + sb.emitHelper( + node, + options, + sb.helpers.forBuiltinType({ + type: this.type, + knownType: this.knownType, + array: convertOther, + arrayStorage: convertOther, + boolean: convertOther, + buffer: convertOther, + null: convertUndefinedOrNull, + number: convertOther, + object: convertOther, + string: convertOther, + symbol: convertOther, + undefined: convertUndefinedOrNull, + map: convertOther, + mapStorage: convertOther, + set: convertOther, + setStorage: convertOther, + error: convertOther, + forwardValue: convertOther, + iteratorResult: convertOther, + iterable: convertOther, + iterableIterator: convertOther, + transaction: convertOther, + output: convertOther, + attribute: convertOther, + input: convertOther, + account: convertOther, + asset: convertOther, + contract: convertOther, + header: convertOther, + block: convertOther, + }), + ); + } +} diff --git a/packages/neo-one-smart-contract-compiler/src/compile/helper/types/boolean/index.ts b/packages/neo-one-smart-contract-compiler/src/compile/helper/types/boolean/index.ts index 6493aaa74d..7fc829b986 100644 --- a/packages/neo-one-smart-contract-compiler/src/compile/helper/types/boolean/index.ts +++ b/packages/neo-one-smart-contract-compiler/src/compile/helper/types/boolean/index.ts @@ -2,5 +2,6 @@ export * from './WrapBooleanHelper'; export * from './UnwrapBooleanHelper'; export * from './IsBooleanHelper'; export * from './ToBooleanHelper'; +export * from './ToNullishBooleanHelper'; export * from './typeTests'; diff --git a/packages/neo-one-smart-contract-compiler/src/compile/helper/types/number/CoerceToIntHelper.ts b/packages/neo-one-smart-contract-compiler/src/compile/helper/types/number/CoerceToIntHelper.ts new file mode 100644 index 0000000000..1cedb3b18c --- /dev/null +++ b/packages/neo-one-smart-contract-compiler/src/compile/helper/types/number/CoerceToIntHelper.ts @@ -0,0 +1,16 @@ +import ts from 'typescript'; +import { Helper } from '../../../../compile/helper/Helper'; +import { ScriptBuilder } from '../../../sb'; +import { VisitOptions } from '../../../types'; + +// Input: [number] +// Output: [number] +export class CoerceToIntHelper extends Helper { + // We add 0 to input number to coerce it to an IntegerStackItem + public emit(sb: ScriptBuilder, node: ts.Node, _options: VisitOptions) { + // [0, number] + sb.emitPushInt(node, 0); + // [number] + sb.emitOp(node, 'ADD'); + } +} diff --git a/packages/neo-one-smart-contract-compiler/src/compile/helper/types/number/index.ts b/packages/neo-one-smart-contract-compiler/src/compile/helper/types/number/index.ts index ee6ae46b67..e4728e4bf0 100644 --- a/packages/neo-one-smart-contract-compiler/src/compile/helper/types/number/index.ts +++ b/packages/neo-one-smart-contract-compiler/src/compile/helper/types/number/index.ts @@ -1,3 +1,4 @@ +export * from './CoerceToIntHelper'; export * from './WrapNumberHelper'; export * from './UnwrapNumberHelper'; export * from './IsNumberHelper'; diff --git a/packages/neo-one-smart-contract-compiler/src/compile/sb/BaseScriptBuilder.ts b/packages/neo-one-smart-contract-compiler/src/compile/sb/BaseScriptBuilder.ts index 03356467c7..735a4cb442 100644 --- a/packages/neo-one-smart-contract-compiler/src/compile/sb/BaseScriptBuilder.ts +++ b/packages/neo-one-smart-contract-compiler/src/compile/sb/BaseScriptBuilder.ts @@ -57,7 +57,7 @@ export abstract class BaseScriptBuilder implements ScriptB private readonly mutableExportMap: { [K in string]?: Set } = {}; private mutableNextModuleIndex = 0; private mutableCurrentModuleIndex = 0; - private mutableFeatures: Features = { storage: false, dynamicInvoke: false }; + private mutableFeatures: Features = { dynamicInvoke: false }; public constructor( public readonly context: Context, @@ -213,7 +213,9 @@ export abstract class BaseScriptBuilder implements ScriptB const sourceFile = tsUtils.node.getSourceFile(node); const filePath = tsUtils.file.getFilePath(sourceFile); + const { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart()); + sourceMapGenerator.addMapping({ generated: { line: idx + 1, column: 0 }, original: { line: line + 1, column: character }, @@ -363,10 +365,6 @@ export abstract class BaseScriptBuilder implements ScriptB } public emitSysCall(node: ts.Node, name: SysCallName): void { - if (name === 'Neo.Storage.Put' || name === 'Neo.Storage.Delete') { - this.mutableFeatures = { ...this.mutableFeatures, storage: true }; - } - const sysCallBuffer = Buffer.allocUnsafe(4); sysCallBuffer.writeUInt32LE(toSysCallHash(assertSysCall(name)), 0); const writer = new BinaryWriter(); @@ -567,32 +565,11 @@ export abstract class BaseScriptBuilder implements ScriptB if (value.length <= Op.PUSHBYTES75) { this.emitOpByte(node, value.length, value); } else if (value.length < 0x100) { - this.emitOp( - node, - 'PUSHDATA1', - new ClientScriptBuilder() - .emitUInt8(value.length) - .emit(value) - .build(), - ); + this.emitOp(node, 'PUSHDATA1', new ClientScriptBuilder().emitUInt8(value.length).emit(value).build()); } else if (value.length < 0x10000) { - this.emitOp( - node, - 'PUSHDATA2', - new ClientScriptBuilder() - .emitUInt16LE(value.length) - .emit(value) - .build(), - ); + this.emitOp(node, 'PUSHDATA2', new ClientScriptBuilder().emitUInt16LE(value.length).emit(value).build()); } else if (value.length < 0x100000000) { - this.emitOp( - node, - 'PUSHDATA4', - new ClientScriptBuilder() - .emitUInt32LE(value.length) - .emit(value) - .build(), - ); + this.emitOp(node, 'PUSHDATA4', new ClientScriptBuilder().emitUInt32LE(value.length).emit(value).build()); } else { throw new Error('Value too large.'); } @@ -624,9 +601,9 @@ export abstract class BaseScriptBuilder implements ScriptB private push(node: ts.Node, tags: Tags, value: SingleBytecodeValue): void { if (this.mutableCapturedBytecode !== undefined) { - this.mutableCapturedBytecode.push([node, tags, value] as const); + this.mutableCapturedBytecode.push([node, tags, value]); } else { - this.mutableBytecode.push([node, tags, value] as const); + this.mutableBytecode.push([node, tags, value]); } } } diff --git a/packages/neo-one-smart-contract-compiler/src/compile/sb/resolveJumps.ts b/packages/neo-one-smart-contract-compiler/src/compile/sb/resolveJumps.ts index ab206b5fab..6fdde6e452 100644 --- a/packages/neo-one-smart-contract-compiler/src/compile/sb/resolveJumps.ts +++ b/packages/neo-one-smart-contract-compiler/src/compile/sb/resolveJumps.ts @@ -259,12 +259,12 @@ const getBytecode = (first: CodePoint): Bytecode => { if (current instanceof JumpCodePoint) { const pc = getTargetPC(current, current.target); if (current.type === 'CALL') { - mutableOut.push([current.node, current.tags, new Call(pc)] as const); + mutableOut.push([current.node, current.tags, new Call(pc)]); } else { - mutableOut.push([current.node, current.tags, new Jmp(current.type, pc)] as const); + mutableOut.push([current.node, current.tags, new Jmp(current.type, pc)]); } } else if (current instanceof BufferCodePoint) { - mutableOut.push([current.node, current.tags, current.value] as const); + mutableOut.push([current.node, current.tags, current.value]); } else if (current instanceof JumpStationCodePoint) { const target = current.target; const reverseTarget = new Jmp('JMP', getTargetPC(current, current.reverseTarget)); @@ -273,19 +273,19 @@ const getBytecode = (first: CodePoint): Bytecode => { current.node, current.tags, new Jmp('JMP', new KnownProgramCounter(current.pc + current.length)), - ] as const); - mutableOut.push([current.node, current.tags, reverseTarget] as const); + ]); + mutableOut.push([current.node, current.tags, reverseTarget]); } else { mutableOut.push([ current.node, current.tags, new Jmp('JMP', new KnownProgramCounter(current.pc + current.length)), - ] as const); - mutableOut.push([current.node, current.tags, reverseTarget] as const); - mutableOut.push([current.node, current.tags, new Jmp('JMP', getTargetPC(current, target))] as const); + ]); + mutableOut.push([current.node, current.tags, reverseTarget]); + mutableOut.push([current.node, current.tags, new Jmp('JMP', getTargetPC(current, target))]); } } else if (current instanceof LineCodePoint) { - mutableOut.push([current.node, current.tags, new Line()] as const); + mutableOut.push([current.node, current.tags, new Line()]); } else { throw new Error('Something went wrong.'); } diff --git a/packages/neo-one-smart-contract-compiler/src/compile/statement/SwitchStatementCompiler.ts b/packages/neo-one-smart-contract-compiler/src/compile/statement/SwitchStatementCompiler.ts index ea7a79c8fd..b9eecbe046 100644 --- a/packages/neo-one-smart-contract-compiler/src/compile/statement/SwitchStatementCompiler.ts +++ b/packages/neo-one-smart-contract-compiler/src/compile/statement/SwitchStatementCompiler.ts @@ -18,8 +18,10 @@ export class SwitchStatementCompiler extends NodeCompiler { sb.withProgramCounter((pc) => { const switchExpr = tsUtils.expression.getExpression(node); const switchExprType = sb.context.analysis.getType(switchExpr); - - const breakOptions = sb.breakPCOptions(sb.noPushValueOptions(options), pc.getLast()); + let breakOptions = sb.breakPCOptions(sb.noPushValueOptions(options), pc.getLast()); + if (breakOptions.finallyPC !== undefined) { + breakOptions = sb.finallyPCOptions(breakOptions, pc.getLast()); + } const caseBlock = tsUtils.statement.getCaseBlock(node); const clauses = tsUtils.statement.getClauses(caseBlock); diff --git a/packages/neo-one-smart-contract-compiler/src/compile/types.ts b/packages/neo-one-smart-contract-compiler/src/compile/types.ts index 06108387cb..3bcf4f0c66 100644 --- a/packages/neo-one-smart-contract-compiler/src/compile/types.ts +++ b/packages/neo-one-smart-contract-compiler/src/compile/types.ts @@ -3,6 +3,7 @@ import { ContractRegister } from '@neo-one/client-full-core'; import { RawSourceMap } from 'source-map'; import ts from 'typescript'; import { Context } from '../Context'; +import { DebugInfo } from '../contract'; import { ProgramCounter } from './pc'; import { Name } from './scope'; @@ -32,12 +33,11 @@ export interface VisitOptions { } export interface Features { - readonly storage: boolean; + // TODO: is dynamicInvoke even a thing now? readonly dynamicInvoke: boolean; } export interface ScriptBuilderResult { readonly code: Buffer; - readonly features: Features; readonly sourceMap: Promise; } export interface CompileResult { @@ -45,4 +45,5 @@ export interface CompileResult { readonly abi: ABI; readonly context: Context; readonly sourceMap: Promise; + readonly debugInfo: DebugInfo; } diff --git a/packages/neo-one-smart-contract-compiler/src/compileContract.ts b/packages/neo-one-smart-contract-compiler/src/compileContract.ts index 359556a04b..97cb19749f 100644 --- a/packages/neo-one-smart-contract-compiler/src/compileContract.ts +++ b/packages/neo-one-smart-contract-compiler/src/compileContract.ts @@ -1,4 +1,4 @@ -import { ABI } from '@neo-one/client-common'; +import { ContractManifestClient } from '@neo-one/client-common'; import { ContractRegister } from '@neo-one/client-full-core'; import { tsUtils } from '@neo-one/ts-utils'; import { normalizePath } from '@neo-one/utils'; @@ -6,6 +6,7 @@ import _ from 'lodash'; import { RawSourceMap } from 'source-map'; import ts from 'typescript'; import { compile, WithLinked } from './compile'; +import { DebugInfo } from './contract'; import { createContextForPath, updateContext } from './createContext'; import { transpile } from './transpile'; import { CompilerHost } from './types'; @@ -16,10 +17,11 @@ export interface CompileContractOptions extends WithLinked { } export interface CompileContractResult { - readonly abi: ABI; + readonly manifest: ContractManifestClient; readonly diagnostics: ReadonlyArray; readonly contract: ContractRegister; readonly sourceMap: Promise; + readonly debugInfo: DebugInfo; } export const compileContract = ({ @@ -39,7 +41,7 @@ export const compileContract = ({ ? transpileContext : updateContext(transpileContext, { [filePath]: transpileResult.text }); - const { abi, sourceMap: finalSourceMap, contract } = compile({ + const { manifest, sourceMap: finalSourceMap, contract, debugInfo } = compile({ sourceFile: tsUtils.file.getSourceFileOrThrow(context.program, filePath), context, linked, @@ -49,7 +51,8 @@ export const compileContract = ({ return { diagnostics: context.diagnostics, sourceMap: finalSourceMap, - abi, + manifest, contract, + debugInfo, }; }; diff --git a/packages/neo-one-smart-contract-compiler/src/contract/DebugInfoProcessor.ts b/packages/neo-one-smart-contract-compiler/src/contract/DebugInfoProcessor.ts new file mode 100644 index 0000000000..9a2ca217d5 --- /dev/null +++ b/packages/neo-one-smart-contract-compiler/src/contract/DebugInfoProcessor.ts @@ -0,0 +1,261 @@ +import { tsUtils } from '@neo-one/ts-utils'; +import { utils } from '@neo-one/utils'; +import _ from 'lodash'; +import ts from 'typescript'; +import { DiagnosticOptions } from '../analysis'; +import { Context } from '../Context'; +import { toABIReturn } from '../utils'; +import { AccessorPropInfo, ContractInfo } from './ContractInfoProcessor'; + +export interface DebugInfo { + readonly entrypoint: string; + readonly methods: readonly DebugMethod[]; + readonly events: readonly DebugEvent[]; + readonly documents: readonly string[]; +} + +interface DebugMethod { + readonly id: string; + readonly name: string; + readonly range: readonly [number, number]; + readonly params: readonly string[]; + readonly returnType: string; +} + +interface DebugEvent { + readonly id: string; + readonly name: string; + readonly params: readonly string[]; +} + +export class DebugInfoProcessor { + private readonly sourceFile: ts.SourceFile; + private readonly endLine: number; + + public constructor(private readonly context: Context, private readonly contractInfo: ContractInfo) { + this.sourceFile = contractInfo.smartContract.getSourceFile(); + this.endLine = this.sourceFile.getLineAndCharacterOfPosition(this.sourceFile.getEnd()).line; + } + + public process(): DebugInfo { + return { + entrypoint: '', + documents: [this.sourceFile.fileName], + methods: this.processMethods(), + events: [], + }; + } + + private processMethods(): ReadonlyArray { + const propInfos = this.contractInfo.propInfos.filter(utils.notNull); + + return _.flatten( + propInfos.map( + (propInfo): ReadonlyArray => { + switch (propInfo.type) { + case 'function': + const funcRange = this.getSourceRange(propInfo.decl); + + if (funcRange === undefined) { + return []; + } + + return [ + { + id: '', + name: propInfo.name, + params: this.getParameters({ + callSignature: propInfo.callSignature, + send: propInfo.send, + claim: propInfo.claim, + }), + range: funcRange, + returnType: this.toDebugReturn(propInfo.decl, propInfo.returnType), + }, + ]; + + case 'property': + const propRange = this.getSourceRange(propInfo.decl); + + if (propRange === undefined) { + return []; + } + + return [ + { + id: '', + name: propInfo.name, + params: [], + range: propRange, + returnType: this.toDebugReturn(propInfo.decl, propInfo.propertyType), + }, + ]; + + case 'accessor': + return [this.getGetterInfo(propInfo), this.getSetterInfo(propInfo)].filter(utils.notNull); + + default: + return []; + } + }, + ), + ); + } + + private getGetterInfo(propInfo: AccessorPropInfo): DebugMethod | undefined { + if (propInfo.getter === undefined) { + return undefined; + } + + const range = this.getSourceRange(propInfo.getter.decl); + if (range === undefined) { + return undefined; + } + + return { + id: '', + name: propInfo.getter.name, + params: [], + range, + returnType: this.toDebugReturn(propInfo.getter.decl, propInfo.propertyType), + }; + } + + private getSetterInfo(propInfo: AccessorPropInfo): DebugMethod | undefined { + if (propInfo.setter === undefined) { + return undefined; + } + + const range = this.getSourceRange(propInfo.setter.decl); + if (range === undefined) { + return undefined; + } + + return { + id: '', + name: propInfo.setter.name, + params: [ + this.toDebugParameter( + propInfo.name, + propInfo.getter === undefined ? propInfo.setter.decl : propInfo.getter.decl, + propInfo.propertyType, + false, + propInfo.getter === undefined ? { error: true } : undefined, + ), + ].filter(utils.notNull), + range, + returnType: 'Void', + }; + } + + private getParameters({ + callSignature, + claim = false, + send = false, + }: { + readonly callSignature: ts.Signature | undefined; + readonly claim?: boolean; + readonly send?: boolean; + }): ReadonlyArray { + if (callSignature === undefined) { + return []; + } + + let parameters = callSignature.getParameters(); + if (claim && this.checkLastParam(parameters, 'ClaimTransaction')) { + parameters = parameters.slice(0, -1); + } + + if (send && this.checkLastParam(parameters, 'Transfer')) { + parameters = parameters.slice(0, -1); + } + + return parameters.map((parameter) => this.paramToABIParameter(parameter)).filter(utils.notNull); + } + + private paramToABIParameter(param: ts.Symbol): string | undefined { + const decls = tsUtils.symbol.getDeclarations(param); + const decl = utils.nullthrows(decls[0]); + + const initializer = tsUtils.initializer.getInitializer(decl); + + return this.toDebugParameter( + tsUtils.symbol.getName(param), + decl, + this.getParamSymbolType(param), + initializer !== undefined, + ); + } + + private getParamSymbolType(param: ts.Symbol): ts.Type | undefined { + const decls = tsUtils.symbol.getDeclarations(param); + const decl = utils.nullthrows(decls[0]); + + return this.context.analysis.getTypeOfSymbol(param, decl); + } + + private checkLastParam(parameters: ReadonlyArray, value: string): boolean { + return this.checkLastParamBase(parameters, (decl, type) => this.context.builtins.isInterface(decl, type, value)); + } + + private checkLastParamBase( + parameters: ReadonlyArray, + checkParamType: (decl: ts.Node, type: ts.Type) => boolean, + ): boolean { + if (parameters.length === 0) { + return false; + } + + const lastParam = parameters[parameters.length - 1]; + const lastParamType = this.getParamSymbolType(lastParam); + + return lastParamType !== undefined && checkParamType(tsUtils.symbol.getDeclarations(lastParam)[0], lastParamType); + } + + private toDebugParameter( + nameIn: string, + node: ts.Node, + resolvedTypeIn: ts.Type | undefined, + optional = false, + options: DiagnosticOptions = { error: false, warning: false }, + ): string | undefined { + const name = nameIn.startsWith('_') ? nameIn.slice(1) : nameIn; + let resolvedType = resolvedTypeIn; + if (ts.isParameter(node) && tsUtils.parameter.isRestParameter(node) && resolvedType !== undefined) { + resolvedType = tsUtils.type_.getTypeArgumentsArray(resolvedType)[0]; + } + + const type = toABIReturn(this.context, node, resolvedType, optional, options); + if (type === undefined) { + return undefined; + } + + return `${name},${type.type}`; + } + + private toDebugReturn( + node: ts.Node, + resolvedType: ts.Type | undefined, + optional = false, + options: DiagnosticOptions = { error: false, warning: false }, + ): string { + const type = toABIReturn(this.context, node, resolvedType, optional, options); + + return type === undefined ? 'Void' : type.type; + } + + private getSourceRange(node: ts.Node): readonly [number, number] | undefined { + try { + const { line: start } = this.sourceFile.getLineAndCharacterOfPosition(node.getStart()); + const { line: end } = this.sourceFile.getLineAndCharacterOfPosition(node.getEnd()); + + if (start === this.endLine && end === this.endLine) { + return undefined; + } + + return [start, end]; + } catch { + return undefined; + } + } +} diff --git a/packages/neo-one-smart-contract-compiler/src/contract/getDebugInfo.ts b/packages/neo-one-smart-contract-compiler/src/contract/getDebugInfo.ts new file mode 100644 index 0000000000..fa1eabc353 --- /dev/null +++ b/packages/neo-one-smart-contract-compiler/src/contract/getDebugInfo.ts @@ -0,0 +1,6 @@ +import { Context } from '../Context'; +import { ContractInfo } from './ContractInfoProcessor'; +import { DebugInfoProcessor } from './DebugInfoProcessor'; + +export const getDebugInfo = (context: Context, contractInfo: ContractInfo) => + new DebugInfoProcessor(context, contractInfo).process(); diff --git a/packages/neo-one-smart-contract-compiler/src/contract/index.ts b/packages/neo-one-smart-contract-compiler/src/contract/index.ts index 5b9643f0ee..576bd5206e 100644 --- a/packages/neo-one-smart-contract-compiler/src/contract/index.ts +++ b/packages/neo-one-smart-contract-compiler/src/contract/index.ts @@ -1,5 +1,7 @@ export * from './getABI'; export * from './getAllPropInfos'; export * from './getContractInfo'; +export * from './getDebugInfo'; export * from './getContractProperties'; export * from './ContractInfoProcessor'; +export * from './DebugInfoProcessor'; diff --git a/packages/neo-one-smart-contract-compiler/tsconfig.json b/packages/neo-one-smart-contract-compiler/tsconfig.json new file mode 100644 index 0000000000..a16b70916f --- /dev/null +++ b/packages/neo-one-smart-contract-compiler/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json", + "compilerOptions": { + "typeRoots": ["node_modules/@types", "node_modules/@neo-one/build-tools/types"] + }, + "includes": ["node_modules/@neo-one/build-tools/types"], + "exclude": ["src/__data__/contracts/**/*.ts", "src/__data__/snippets/**/*.ts"] +} diff --git a/packages/neo-one-smart-contract-lib/.npmignore b/packages/neo-one-smart-contract-lib/.npmignore new file mode 100644 index 0000000000..1fee046c29 --- /dev/null +++ b/packages/neo-one-smart-contract-lib/.npmignore @@ -0,0 +1,21 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/src/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-smart-contract-lib/CHANGELOG.json b/packages/neo-one-smart-contract-lib/CHANGELOG.json new file mode 100644 index 0000000000..654f7badd4 --- /dev/null +++ b/packages/neo-one-smart-contract-lib/CHANGELOG.json @@ -0,0 +1,83 @@ +{ + "name": "@neo-one/smart-contract-lib", + "entries": [ + { + "version": "2.7.1", + "tag": "@neo-one/smart-contract-lib_v2.7.1", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.7.0` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/smart-contract-lib_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/smart-contract-lib_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/smart-contract\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.5.0` to `^2.6.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/smart-contract-lib_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/smart-contract\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-smart-contract-lib/CHANGELOG.md b/packages/neo-one-smart-contract-lib/CHANGELOG.md index e3430d9f75..7b42df5971 100644 --- a/packages/neo-one-smart-contract-lib/CHANGELOG.md +++ b/packages/neo-one-smart-contract-lib/CHANGELOG.md @@ -1,203 +1,34 @@ -# Change Log +# Change Log - @neo-one/smart-contract-lib -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -## [2.3.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-lib@2.3.0...@neo-one/smart-contract-lib@2.3.1) (2019-11-20) +## 2.7.1 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/smart-contract-lib +*Version update only* +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT +### Patches +- Upgrade TypeScript from v3.8.3 to v3.9.5 +### Updates -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-lib@1.5.10...@neo-one/smart-contract-lib@2.3.0) (2019-10-23) +- bump package version for future release clarity -**Note:** Version bump only for package @neo-one/smart-contract-lib +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes +- update package release process to take better advantage of rush tooling +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT +### Minor changes -## [1.5.10](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-lib@1.5.9...@neo-one/smart-contract-lib@1.5.10) (2019-10-23) +- Migrate to Rush -**Note:** Version bump only for package @neo-one/smart-contract-lib - - - - - -## [1.5.9](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-lib@1.5.8...@neo-one/smart-contract-lib@1.5.9) (2019-10-23) - -**Note:** Version bump only for package @neo-one/smart-contract-lib - - - - - -## [1.5.8](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-lib@1.5.7...@neo-one/smart-contract-lib@1.5.8) (2019-09-04) - -**Note:** Version bump only for package @neo-one/smart-contract-lib - - - - - -## [1.5.7](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-lib@1.5.6...@neo-one/smart-contract-lib@1.5.7) (2019-09-03) - -**Note:** Version bump only for package @neo-one/smart-contract-lib - - - - - -## [1.5.6](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-lib@1.5.5...@neo-one/smart-contract-lib@1.5.6) (2019-09-02) - -**Note:** Version bump only for package @neo-one/smart-contract-lib - - - - - -## [1.5.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-lib@1.5.4...@neo-one/smart-contract-lib@1.5.5) (2019-08-31) - -**Note:** Version bump only for package @neo-one/smart-contract-lib - - - - - -## [1.5.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-lib@1.5.3...@neo-one/smart-contract-lib@1.5.4) (2019-08-30) - -**Note:** Version bump only for package @neo-one/smart-contract-lib - - - - - -## [1.5.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-lib@1.5.2...@neo-one/smart-contract-lib@1.5.3) (2019-08-23) - -**Note:** Version bump only for package @neo-one/smart-contract-lib - - - - - -## [1.5.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-lib@1.5.1...@neo-one/smart-contract-lib@1.5.2) (2019-08-22) - -**Note:** Version bump only for package @neo-one/smart-contract-lib - - - - - -## [1.5.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-lib@1.5.0...@neo-one/smart-contract-lib@1.5.1) (2019-07-29) - -**Note:** Version bump only for package @neo-one/smart-contract-lib - - - - - -# [1.5.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-lib@1.4.0...@neo-one/smart-contract-lib@1.5.0) (2019-06-20) - - -### Bug Fixes - -* **@neo-one/smart-contract-compiler:** Fix undefined class properties ([675656f](https://github.com/neo-one-suite/neo-one/commit/675656f)), closes [#1342](https://github.com/neo-one-suite/neo-one/issues/1342) -* **build:** fix the build ([#1464](https://github.com/neo-one-suite/neo-one/issues/1464)) ([7eb87f9](https://github.com/neo-one-suite/neo-one/commit/7eb87f9)) - - -### Features - -* **@neo-one/smart-contract-compiler:** Do not persist storage on uncaught exception ([bf261ca](https://github.com/neo-one-suite/neo-one/commit/bf261ca)) -* **@neo-one/smart-contract-compiler:** Switch to throwing errors rather than returning false in exc ([1ffda5a](https://github.com/neo-one-suite/neo-one/commit/1ffda5a)) -* **@neo-one/smart-contract-compiler:** Use syscall hash to reduce bytecode size ([b1885d8](https://github.com/neo-one-suite/neo-one/commit/b1885d8)), closes [#1388](https://github.com/neo-one-suite/neo-one/issues/1388) [#745](https://github.com/neo-one-suite/neo-one/issues/745) - - - - - -# [1.4.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-lib@1.3.0...@neo-one/smart-contract-lib@1.4.0) (2019-06-04) - - -### Bug Fixes - -* **@neo-one/types:** eliminate global types from @neo-one/types ([004330d](https://github.com/neo-one-suite/neo-one/commit/004330d)) -* **deps:** update misc dependencies ([0c9bdde](https://github.com/neo-one-suite/neo-one/commit/0c9bdde)) - - -### Features - -* **mixin-ownable:** add Ownable mixin and test ([6f55ea7](https://github.com/neo-one-suite/neo-one/commit/6f55ea7)) -* **mixins-secondary:** add Secondary, allowing a primary caller ([af5d6c6](https://github.com/neo-one-suite/neo-one/commit/af5d6c6)) - - - - - -# [1.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-lib@1.2.0...@neo-one/smart-contract-lib@1.3.0) (2019-04-12) - - -### Features - -* **mixins:** add transferable ownership mix-in ([a9bc3d9](https://github.com/neo-one-suite/neo-one/commit/a9bc3d9)) - - - - - -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-lib@1.1.0...@neo-one/smart-contract-lib@1.2.0) (2019-03-27) - - -### Bug Fixes - -* **deps:** update dependency bignumber.js to v8.1.1 ([2d6f93a](https://github.com/neo-one-suite/neo-one/commit/2d6f93a)) - - -### Features - -* **contract-mixins:** add DesignatedCaller ([d73c5b6](https://github.com/neo-one-suite/neo-one/commit/d73c5b6)) - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-lib@1.0.3...@neo-one/smart-contract-lib@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/smart-contract-lib - - - - - -## [1.0.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-lib@1.0.3-alpha.0...@neo-one/smart-contract-lib@1.0.3) (2019-02-21) - -**Note:** Version bump only for package @neo-one/smart-contract-lib - - - - - -## [1.0.3-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-lib@1.0.2...@neo-one/smart-contract-lib@1.0.3-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **deps:** update dependency bignumber.js to v8.0.2 ([6064f9e](https://github.com/neo-one-suite/neo-one/commit/6064f9e)) - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-lib@1.0.1...@neo-one/smart-contract-lib@1.0.2) (2018-11-13) - -**Note:** Version bump only for package @neo-one/smart-contract-lib - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-lib@1.0.0...@neo-one/smart-contract-lib@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/smart-contract-lib diff --git a/packages/neo-one-smart-contract-lib/package.json b/packages/neo-one-smart-contract-lib/package.json index 517297e269..96aa9fe6dd 100644 --- a/packages/neo-one-smart-contract-lib/package.json +++ b/packages/neo-one-smart-contract-lib/package.json @@ -1,18 +1,22 @@ { "name": "@neo-one/smart-contract-lib", - "version": "2.3.1", + "version": "2.7.1", "description": "NEOβ€’ONE TypeScript common smart contracts.", "main": "./src/index.ts", "smartContract": true, + "scripts": { + "build": "", + "lint": "" + }, + "sideEffects": false, "dependencies": { - "@neo-one/smart-contract": "^2.3.0" + "@neo-one/smart-contract": "^2.7.0" }, "devDependencies": { - "@neo-one/client-common": "^2.3.0", - "@neo-one/client-core": "^2.3.0", - "@neo-one/smart-contract-test": "^2.3.1", + "@neo-one/client-common": "^3.0.0", + "@neo-one/client-core": "^3.0.0", + "@types/jest": "^24.0.18", "bignumber.js": "^9.0.0", "tslib": "^1.10.0" - }, - "sideEffects": false + } } diff --git a/packages/neo-one-smart-contract-lib/src/index.ts b/packages/neo-one-smart-contract-lib/src/index.ts index 077b35df10..e9d2e88062 100644 --- a/packages/neo-one-smart-contract-lib/src/index.ts +++ b/packages/neo-one-smart-contract-lib/src/index.ts @@ -1,2 +1,3 @@ export { NEP5Token } from './NEP5Token'; export { Ownable, Secondary } from './ownership'; +export { ICO } from './ICO'; diff --git a/packages/neo-one-smart-contract-lib/tsconfig.json b/packages/neo-one-smart-contract-lib/tsconfig.json index e7fade71aa..f8773d3b9a 100644 --- a/packages/neo-one-smart-contract-lib/tsconfig.json +++ b/packages/neo-one-smart-contract-lib/tsconfig.json @@ -1,25 +1,22 @@ { "compilerOptions": { + "baseUrl": ".", + "paths": { + "bn.js": ["node_modules/@neo-one/build-tools/types/bn.js.d.ts"] + }, "target": "esnext", "module": "commonjs", "moduleResolution": "node", - "noLib": true, - "typeRoots": [], - "pretty": true, - - "noEmit": true, - "declaration": false, - "allowSyntheticDefaultImports": true, "resolveJsonModule": false, "experimentalDecorators": true, - + "jsx": "react", "alwaysStrict": true, "strict": true, - "skipLibCheck": false, - "noUnusedLocals": true, + "skipLibCheck": true, + "noUnusedLocals": false, "noImplicitReturns": true, "allowUnusedLabels": false, "noUnusedParameters": false, @@ -27,9 +24,5 @@ "noFallthroughCasesInSwitch": true, "forceConsistentCasingInFileNames": true }, - "include": [ - "src/ICO.ts", - "src/index.ts", - "src/Token.ts" - ] + "exclude": ["./src/index.ts", "./src/ownership/*.ts", "./src/ICO.ts", "./src/NEP5Token.ts"] } diff --git a/packages/neo-one-smart-contract-test-browser/package.json b/packages/neo-one-smart-contract-test-browser/package.json index 62bb150a55..7c0c0ce61f 100644 --- a/packages/neo-one-smart-contract-test-browser/package.json +++ b/packages/neo-one-smart-contract-test-browser/package.json @@ -3,15 +3,25 @@ "version": "2.3.1", "description": "NEOβ€’ONE TypeScript smart contract test harness for browsers.", "main": "./src/index", + "scripts": { + "build": "", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/client-core": "^2.3.0", + "@neo-one/client-core": "^3.0.0", "@neo-one/local-browser": "^2.3.1", "@neo-one/local-singleton": "^2.3.1", "@neo-one/node-browser": "^2.3.0", - "@neo-one/smart-contract-test-common": "^2.3.1", - "@neo-one/utils": "^2.3.0", + "@neo-one/smart-contract-test-common": "^2.7.1", + "@neo-one/utils": "^3.0.0", "@neo-one/worker": "^2.3.0", + "core-js": "^3.2.1", "tslib": "^1.10.0" }, - "sideEffects": false + "devDependencies": { + "@neo-one/build-tools": "^1.0.0" + } } diff --git a/packages/neo-one-smart-contract-test-browser/tsconfig.json b/packages/neo-one-smart-contract-test-browser/tsconfig.json new file mode 100644 index 0000000000..3a3ae8b84f --- /dev/null +++ b/packages/neo-one-smart-contract-test-browser/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json", + "compilerOptions": { + "typeRoots": [] + }, + "include": ["src/ICO.ts", "src/index.ts", "src/Token.ts"] +} diff --git a/packages/neo-one-smart-contract-test-common/.npmignore b/packages/neo-one-smart-contract-test-common/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-smart-contract-test-common/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-smart-contract-test-common/CHANGELOG.json b/packages/neo-one-smart-contract-test-common/CHANGELOG.json new file mode 100644 index 0000000000..4fc36d27bd --- /dev/null +++ b/packages/neo-one-smart-contract-test-common/CHANGELOG.json @@ -0,0 +1,127 @@ +{ + "name": "@neo-one/smart-contract-test-common", + "entries": [ + { + "version": "2.7.1", + "tag": "@neo-one/smart-contract-test-common_v2.7.1", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/cli-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full-core\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-compiler\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/smart-contract-test-common_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.6.0` to `^2.6.1`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/smart-contract-test-common_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/cli-common\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full-core\" from `^2.4.1` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-compiler\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/smart-contract-test-common_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/cli-common\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-full-core\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/logger\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-compiler\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-smart-contract-test-common/CHANGELOG.md b/packages/neo-one-smart-contract-test-common/CHANGELOG.md index 73dccec476..bef6658bb7 100644 --- a/packages/neo-one-smart-contract-test-common/CHANGELOG.md +++ b/packages/neo-one-smart-contract-test-common/CHANGELOG.md @@ -1,170 +1,34 @@ -# Change Log +# Change Log - @neo-one/smart-contract-test-common -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -## [2.3.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test-common@2.3.0...@neo-one/smart-contract-test-common@2.3.1) (2019-11-20) +## 2.7.1 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/smart-contract-test-common +*Version update only* +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT +### Patches +- Upgrade TypeScript from v3.8.3 to v3.9.5 +### Updates -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test-common@1.1.13...@neo-one/smart-contract-test-common@2.3.0) (2019-10-23) +- bump package version for future release clarity -**Note:** Version bump only for package @neo-one/smart-contract-test-common +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes +- update package release process to take better advantage of rush tooling +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT +### Minor changes -## [1.1.13](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test-common@1.1.12...@neo-one/smart-contract-test-common@1.1.13) (2019-10-23) +- Migrate to Rush -**Note:** Version bump only for package @neo-one/smart-contract-test-common - - - - - -## [1.1.12](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test-common@1.1.11...@neo-one/smart-contract-test-common@1.1.12) (2019-10-23) - -**Note:** Version bump only for package @neo-one/smart-contract-test-common - - - - - -## [1.1.11](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test-common@1.1.10...@neo-one/smart-contract-test-common@1.1.11) (2019-09-04) - -**Note:** Version bump only for package @neo-one/smart-contract-test-common - - - - - -## [1.1.10](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test-common@1.1.9...@neo-one/smart-contract-test-common@1.1.10) (2019-09-02) - -**Note:** Version bump only for package @neo-one/smart-contract-test-common - - - - - -## [1.1.9](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test-common@1.1.8...@neo-one/smart-contract-test-common@1.1.9) (2019-08-31) - -**Note:** Version bump only for package @neo-one/smart-contract-test-common - - - - - -## [1.1.8](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test-common@1.1.7...@neo-one/smart-contract-test-common@1.1.8) (2019-08-30) - -**Note:** Version bump only for package @neo-one/smart-contract-test-common - - - - - -## [1.1.7](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test-common@1.1.6...@neo-one/smart-contract-test-common@1.1.7) (2019-08-23) - -**Note:** Version bump only for package @neo-one/smart-contract-test-common - - - - - -## [1.1.6](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test-common@1.1.5...@neo-one/smart-contract-test-common@1.1.6) (2019-08-22) - -**Note:** Version bump only for package @neo-one/smart-contract-test-common - - - - - -## [1.1.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test-common@1.1.4...@neo-one/smart-contract-test-common@1.1.5) (2019-07-29) - -**Note:** Version bump only for package @neo-one/smart-contract-test-common - - - - - -## [1.1.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test-common@1.1.3...@neo-one/smart-contract-test-common@1.1.4) (2019-06-20) - -**Note:** Version bump only for package @neo-one/smart-contract-test-common - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test-common@1.1.2...@neo-one/smart-contract-test-common@1.1.3) (2019-06-04) - - -### Bug Fixes - -* **@neo-one/types:** eliminate global types from @neo-one/types ([004330d](https://github.com/neo-one-suite/neo-one/commit/004330d)) -* **deps:** update misc dependencies ([0c9bdde](https://github.com/neo-one-suite/neo-one/commit/0c9bdde)) - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test-common@1.1.1...@neo-one/smart-contract-test-common@1.1.2) (2019-04-12) - -**Note:** Version bump only for package @neo-one/smart-contract-test-common - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test-common@1.1.0...@neo-one/smart-contract-test-common@1.1.1) (2019-03-27) - - -### Bug Fixes - -* **deps:** update dependency bignumber.js to v8.1.1 ([2d6f93a](https://github.com/neo-one-suite/neo-one/commit/2d6f93a)) - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test-common@1.0.3...@neo-one/smart-contract-test-common@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/smart-contract-test-common - - - - - -## [1.0.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test-common@1.0.3-alpha.0...@neo-one/smart-contract-test-common@1.0.3) (2019-02-21) - -**Note:** Version bump only for package @neo-one/smart-contract-test-common - - - - - -## [1.0.3-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test-common@1.0.2...@neo-one/smart-contract-test-common@1.0.3-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **deps:** update dependency change-case to v3.1.0 ([4255281](https://github.com/neo-one-suite/neo-one/commit/4255281)) - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test-common@1.0.1...@neo-one/smart-contract-test-common@1.0.2) (2018-11-13) - -**Note:** Version bump only for package @neo-one/smart-contract-test-common - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test-common@1.0.0...@neo-one/smart-contract-test-common@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/smart-contract-test-common diff --git a/packages/neo-one-smart-contract-test-common/gulpfile.js b/packages/neo-one-smart-contract-test-common/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-smart-contract-test-common/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-smart-contract-test-common/package.json b/packages/neo-one-smart-contract-test-common/package.json index 3ddd8dcbfd..791253d03c 100644 --- a/packages/neo-one-smart-contract-test-common/package.json +++ b/packages/neo-one-smart-contract-test-common/package.json @@ -1,18 +1,30 @@ { "name": "@neo-one/smart-contract-test-common", - "version": "2.3.1", + "version": "2.7.1", "description": "NEOβ€’ONE TypeScript smart contract test harness common code.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/cli-common": "^2.4.0", - "@neo-one/client-common": "^2.3.0", - "@neo-one/client-core": "^2.3.0", - "@neo-one/client-full-core": "^2.3.0", - "@neo-one/logger": "^2.3.0", - "@neo-one/smart-contract-compiler": "^2.3.0", - "@neo-one/utils": "^2.3.0", + "@neo-one/cli-common": "^3.0.0", + "@neo-one/client-common": "^3.0.0", + "@neo-one/client-core": "^3.0.0", + "@neo-one/client-full-core": "^3.0.0", + "@neo-one/logger": "^2.6.1", + "@neo-one/smart-contract-compiler": "^3.0.0", + "@neo-one/utils": "^3.0.0", "bignumber.js": "^9.0.0", "tslib": "^1.10.0" }, - "sideEffects": false + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-smart-contract-test-common/tsconfig.json b/packages/neo-one-smart-contract-test-common/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-smart-contract-test-common/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-smart-contract-test/.npmignore b/packages/neo-one-smart-contract-test/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-smart-contract-test/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-smart-contract-test/CHANGELOG.json b/packages/neo-one-smart-contract-test/CHANGELOG.json new file mode 100644 index 0000000000..98343d2169 --- /dev/null +++ b/packages/neo-one-smart-contract-test/CHANGELOG.json @@ -0,0 +1,148 @@ +{ + "name": "@neo-one/smart-contract-test", + "entries": [ + { + "version": "2.7.1", + "tag": "@neo-one/smart-contract-test_v2.7.1", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-neo-settings\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-compiler-node\" from `^2.7.0` to `^2.7.1`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-test-common\" from `^2.7.0` to `^2.7.1`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-lib\" from `^2.7.0` to `^2.7.1`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/smart-contract-test_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "dependency": [ + { + "comment": "Dependency @neo-one/node version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Dependency @neo-one/node-neo-settings version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + } + ], + "patch": [ + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/smart-contract-test_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.5.0` to `^2.6.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-neo-settings\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-compiler-node\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-test-common\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-lib\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/smart-contract-test_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/client-common\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/client-core\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node\" from `^2.3.1` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/node-neo-settings\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-compiler-node\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-test-common\" from `^2.3.1` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-lib\" from `^2.3.1` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-smart-contract-test/CHANGELOG.md b/packages/neo-one-smart-contract-test/CHANGELOG.md index c609258fa4..4857ee4bf2 100644 --- a/packages/neo-one-smart-contract-test/CHANGELOG.md +++ b/packages/neo-one-smart-contract-test/CHANGELOG.md @@ -1,186 +1,34 @@ -# Change Log +# Change Log - @neo-one/smart-contract-test -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -## [2.3.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test@2.3.0...@neo-one/smart-contract-test@2.3.1) (2019-11-20) +## 2.7.1 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/smart-contract-test +*Version update only* +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT +### Patches +- Upgrade TypeScript from v3.8.3 to v3.9.5 +### Updates -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test@1.2.8...@neo-one/smart-contract-test@2.3.0) (2019-10-23) +- bump package version for future release clarity -**Note:** Version bump only for package @neo-one/smart-contract-test +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes +- update package release process to take better advantage of rush tooling +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT +### Minor changes -## [1.2.8](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test@1.2.7...@neo-one/smart-contract-test@1.2.8) (2019-10-23) +- Migrate to Rush -**Note:** Version bump only for package @neo-one/smart-contract-test - - - - - -## [1.2.7](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test@1.2.6...@neo-one/smart-contract-test@1.2.7) (2019-10-23) - -**Note:** Version bump only for package @neo-one/smart-contract-test - - - - - -## [1.2.6](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test@1.2.5...@neo-one/smart-contract-test@1.2.6) (2019-09-04) - -**Note:** Version bump only for package @neo-one/smart-contract-test - - - - - -## [1.2.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test@1.2.4...@neo-one/smart-contract-test@1.2.5) (2019-09-03) - -**Note:** Version bump only for package @neo-one/smart-contract-test - - - - - -## [1.2.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test@1.2.3...@neo-one/smart-contract-test@1.2.4) (2019-09-02) - -**Note:** Version bump only for package @neo-one/smart-contract-test - - - - - -## [1.2.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test@1.2.2...@neo-one/smart-contract-test@1.2.3) (2019-08-31) - -**Note:** Version bump only for package @neo-one/smart-contract-test - - - - - -## [1.2.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test@1.2.1...@neo-one/smart-contract-test@1.2.2) (2019-08-30) - -**Note:** Version bump only for package @neo-one/smart-contract-test - - - - - -## [1.2.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test@1.2.0...@neo-one/smart-contract-test@1.2.1) (2019-08-23) - -**Note:** Version bump only for package @neo-one/smart-contract-test - - - - - -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test@1.1.5...@neo-one/smart-contract-test@1.2.0) (2019-08-22) - - -### Features - -* **monitor:** remove @neo-one/monitor. replace with opencensus, pino, and debug ([#1597](https://github.com/neo-one-suite/neo-one/issues/1597)) ([4b1a28f](https://github.com/neo-one-suite/neo-one/commit/4b1a28f)) - - - - - -## [1.1.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test@1.1.4...@neo-one/smart-contract-test@1.1.5) (2019-07-29) - -**Note:** Version bump only for package @neo-one/smart-contract-test - - - - - -## [1.1.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test@1.1.3...@neo-one/smart-contract-test@1.1.4) (2019-06-20) - -**Note:** Version bump only for package @neo-one/smart-contract-test - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test@1.1.2...@neo-one/smart-contract-test@1.1.3) (2019-06-04) - - -### Bug Fixes - -* **@neo-one/types:** eliminate global types from @neo-one/types ([004330d](https://github.com/neo-one-suite/neo-one/commit/004330d)) - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test@1.1.1...@neo-one/smart-contract-test@1.1.2) (2019-04-12) - - -### Bug Fixes - -* **deps:** update dependency memdown to v4 ([ab094dd](https://github.com/neo-one-suite/neo-one/commit/ab094dd)) - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test@1.1.0...@neo-one/smart-contract-test@1.1.1) (2019-03-27) - -**Note:** Version bump only for package @neo-one/smart-contract-test - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test@1.0.3...@neo-one/smart-contract-test@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/smart-contract-test - - - - - -## [1.0.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test@1.0.3-alpha.0...@neo-one/smart-contract-test@1.0.3) (2019-02-21) - -**Note:** Version bump only for package @neo-one/smart-contract-test - - - - - -## [1.0.3-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test@1.0.2...@neo-one/smart-contract-test@1.0.3-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **deps:** update dependency @types/lodash to v4.14.120 ([a76dae7](https://github.com/neo-one-suite/neo-one/commit/a76dae7)) -* **deps:** update dependency rxjs to v6.4.0 ([e28af2a](https://github.com/neo-one-suite/neo-one/commit/e28af2a)) - - -### Features - -* **node:** add configuration to @neo-one/node-bin ([5bffb32](https://github.com/neo-one-suite/neo-one/commit/5bffb32)) - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test@1.0.1...@neo-one/smart-contract-test@1.0.2) (2018-11-13) - -**Note:** Version bump only for package @neo-one/smart-contract-test - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-test@1.0.0...@neo-one/smart-contract-test@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/smart-contract-test diff --git a/packages/neo-one-smart-contract-test/gulpfile.js b/packages/neo-one-smart-contract-test/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-smart-contract-test/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-smart-contract-test/package.json b/packages/neo-one-smart-contract-test/package.json index 994d2eb2ab..96a3941e2f 100644 --- a/packages/neo-one-smart-contract-test/package.json +++ b/packages/neo-one-smart-contract-test/package.json @@ -1,23 +1,37 @@ { "name": "@neo-one/smart-contract-test", - "version": "2.3.1", + "version": "2.7.1", "description": "NEOβ€’ONE TypeScript smart contract test harness.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/client-common": "^2.3.0", - "@neo-one/client-core": "^2.3.0", - "@neo-one/node": "^2.3.1", - "@neo-one/node-neo-settings": "^2.3.0", - "@neo-one/smart-contract-compiler-node": "^2.3.0", - "@neo-one/smart-contract-test-common": "^2.3.1", - "@neo-one/utils": "^2.3.0", + "@neo-one/client-common": "^3.0.0", + "@neo-one/client-core": "^3.0.0", + "@neo-one/node": "^3.0.0", + "@neo-one/node-neo-settings": "^3.0.0", + "@neo-one/smart-contract-compiler-node": "^2.7.1", + "@neo-one/smart-contract-test-common": "^2.7.1", + "@neo-one/utils": "^3.0.0", "lodash": "^4.17.15", "memdown": "^5.0.0", "tslib": "^1.10.0" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "@neo-one/smart-contract": "^2.7.0", + "@neo-one/smart-contract-lib": "^2.7.1", + "@types/jest": "^24.0.18", "@types/lodash": "^4.14.138", - "@types/memdown": "^3.0.0" - }, - "sideEffects": false + "@types/memdown": "^3.0.0", + "bignumber.js": "^9.0.0", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-smart-contract-lib/src/__data__/contracts/RedToken.ts b/packages/neo-one-smart-contract-test/src/__data__/contracts/RedToken.ts similarity index 100% rename from packages/neo-one-smart-contract-lib/src/__data__/contracts/RedToken.ts rename to packages/neo-one-smart-contract-test/src/__data__/contracts/RedToken.ts diff --git a/packages/neo-one-smart-contract-lib/src/__data__/contracts/SimpleToken.ts b/packages/neo-one-smart-contract-test/src/__data__/contracts/SimpleToken.ts similarity index 90% rename from packages/neo-one-smart-contract-lib/src/__data__/contracts/SimpleToken.ts rename to packages/neo-one-smart-contract-test/src/__data__/contracts/SimpleToken.ts index 0d3a6071cf..a862c8558c 100644 --- a/packages/neo-one-smart-contract-lib/src/__data__/contracts/SimpleToken.ts +++ b/packages/neo-one-smart-contract-test/src/__data__/contracts/SimpleToken.ts @@ -1,5 +1,4 @@ import { Address, Fixed, SmartContract } from '@neo-one/smart-contract'; -// tslint:disable-next-line no-implicit-dependencies import { NEP5Token } from '@neo-one/smart-contract-lib'; export abstract class SimpleToken extends NEP5Token(SmartContract) { diff --git a/packages/neo-one-smart-contract-lib/src/__data__/contracts/TestICO.ts b/packages/neo-one-smart-contract-test/src/__data__/contracts/TestICO.ts similarity index 91% rename from packages/neo-one-smart-contract-lib/src/__data__/contracts/TestICO.ts rename to packages/neo-one-smart-contract-test/src/__data__/contracts/TestICO.ts index bc9dec50c6..f1ab27e9c8 100644 --- a/packages/neo-one-smart-contract-lib/src/__data__/contracts/TestICO.ts +++ b/packages/neo-one-smart-contract-test/src/__data__/contracts/TestICO.ts @@ -1,6 +1,5 @@ import { Address, Fixed, Integer, SmartContract } from '@neo-one/smart-contract'; -import { ICO } from '../../ICO'; -import { NEP5Token } from '../../NEP5Token'; +import { ICO, NEP5Token } from '@neo-one/smart-contract-lib'; export class TestICO extends ICO(NEP5Token(SmartContract)) { public readonly name: string = 'TestToken'; diff --git a/packages/neo-one-smart-contract-lib/src/__data__/contracts/TestToken.ts b/packages/neo-one-smart-contract-test/src/__data__/contracts/TestToken.ts similarity index 93% rename from packages/neo-one-smart-contract-lib/src/__data__/contracts/TestToken.ts rename to packages/neo-one-smart-contract-test/src/__data__/contracts/TestToken.ts index 8b2500eacb..3888140ac7 100644 --- a/packages/neo-one-smart-contract-lib/src/__data__/contracts/TestToken.ts +++ b/packages/neo-one-smart-contract-test/src/__data__/contracts/TestToken.ts @@ -1,5 +1,4 @@ import { Address, SmartContract } from '@neo-one/smart-contract'; -// tslint:disable-next-line no-implicit-dependencies import { NEP5Token } from '@neo-one/smart-contract-lib'; export class TestToken extends NEP5Token(SmartContract) { diff --git a/packages/neo-one-smart-contract-lib/src/__data__/contracts/ownership/TestOwnable.ts b/packages/neo-one-smart-contract-test/src/__data__/contracts/ownership/TestOwnable.ts similarity index 100% rename from packages/neo-one-smart-contract-lib/src/__data__/contracts/ownership/TestOwnable.ts rename to packages/neo-one-smart-contract-test/src/__data__/contracts/ownership/TestOwnable.ts diff --git a/packages/neo-one-smart-contract-lib/src/__data__/contracts/ownership/TestSecondary.ts b/packages/neo-one-smart-contract-test/src/__data__/contracts/ownership/TestSecondary.ts similarity index 100% rename from packages/neo-one-smart-contract-lib/src/__data__/contracts/ownership/TestSecondary.ts rename to packages/neo-one-smart-contract-test/src/__data__/contracts/ownership/TestSecondary.ts diff --git a/packages/neo-one-smart-contract-test/src/__data__/contracts/tsconfig.json b/packages/neo-one-smart-contract-test/src/__data__/contracts/tsconfig.json new file mode 100644 index 0000000000..5ffd571d07 --- /dev/null +++ b/packages/neo-one-smart-contract-test/src/__data__/contracts/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "commonjs", + "moduleResolution": "node", + + "noLib": true, + "typeRoots": [], + + "pretty": true, + + "noEmit": true, + "declaration": false, + + "allowSyntheticDefaultImports": true, + "resolveJsonModule": false, + "experimentalDecorators": true, + + "alwaysStrict": true, + "strict": true, + "skipLibCheck": false, + "noUnusedLocals": true, + "noImplicitReturns": true, + "allowUnusedLabels": false, + "noUnusedParameters": false, + "allowUnreachableCode": false, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true + } +} diff --git a/packages/neo-one-smart-contract-lib/src/__data__/index.ts b/packages/neo-one-smart-contract-test/src/__data__/index.ts similarity index 100% rename from packages/neo-one-smart-contract-lib/src/__data__/index.ts rename to packages/neo-one-smart-contract-test/src/__data__/index.ts diff --git a/packages/neo-one-smart-contract-lib/src/__data__/tokenUtils.ts b/packages/neo-one-smart-contract-test/src/__data__/tokenUtils.ts similarity index 96% rename from packages/neo-one-smart-contract-lib/src/__data__/tokenUtils.ts rename to packages/neo-one-smart-contract-test/src/__data__/tokenUtils.ts index 210a41842e..7ff9d0331a 100644 --- a/packages/neo-one-smart-contract-lib/src/__data__/tokenUtils.ts +++ b/packages/neo-one-smart-contract-test/src/__data__/tokenUtils.ts @@ -9,8 +9,8 @@ import { UserAccountID, } from '@neo-one/client-common'; import { SmartContractAny } from '@neo-one/client-core'; -import { withContracts } from '@neo-one/smart-contract-test'; import BigNumber from 'bignumber.js'; +import { withContracts } from '../withContracts'; export interface DeployOptions { readonly masterPrivateKey: string; @@ -165,9 +165,8 @@ export const testToken = async ({ expect(contract.description).toEqual(description); expect(contract.parameters).toEqual(['String', 'Array']); expect(contract.returnType).toEqual('Buffer'); - expect(contract.storage).toBeTruthy(); - expect(contract.dynamicInvoke).toBeTruthy(); - expect(contract.payable).toEqual(payable); + expect(contract.manifest.hasStorage).toBeTruthy(); + expect(contract.manifest.payable).toEqual(payable); }, { deploy: deploy === undefined }, ); diff --git a/packages/neo-one-smart-contract-lib/src/__tests__/RedToken.test.ts b/packages/neo-one-smart-contract-test/src/__tests__/RedToken.test.ts similarity index 100% rename from packages/neo-one-smart-contract-lib/src/__tests__/RedToken.test.ts rename to packages/neo-one-smart-contract-test/src/__tests__/RedToken.test.ts diff --git a/packages/neo-one-smart-contract-lib/src/__tests__/TestICO.test.ts b/packages/neo-one-smart-contract-test/src/__tests__/TestICO.test.ts similarity index 98% rename from packages/neo-one-smart-contract-lib/src/__tests__/TestICO.test.ts rename to packages/neo-one-smart-contract-test/src/__tests__/TestICO.test.ts index ceff5b02da..fadb50ad00 100644 --- a/packages/neo-one-smart-contract-lib/src/__tests__/TestICO.test.ts +++ b/packages/neo-one-smart-contract-test/src/__tests__/TestICO.test.ts @@ -1,8 +1,8 @@ import { common, crypto, privateKeyToAddress } from '@neo-one/client-common'; import { Hash256, SmartContractAny } from '@neo-one/client-core'; -import { withContracts } from '@neo-one/smart-contract-test'; import BigNumber from 'bignumber.js'; import * as path from 'path'; +import { withContracts } from '../withContracts'; const MINTER = { PRIVATE_KEY: '536f1e9f0466f6cd5b2ea5374d00f038786daa0f0e892161d6b0cb4d6b154740', diff --git a/packages/neo-one-smart-contract-lib/src/__tests__/TestToken.test.ts b/packages/neo-one-smart-contract-test/src/__tests__/TestToken.test.ts similarity index 100% rename from packages/neo-one-smart-contract-lib/src/__tests__/TestToken.test.ts rename to packages/neo-one-smart-contract-test/src/__tests__/TestToken.test.ts diff --git a/packages/neo-one-smart-contract-lib/src/__tests__/__snapshots__/RedToken.test.ts.snap b/packages/neo-one-smart-contract-test/src/__tests__/__snapshots__/RedToken.test.ts.snap similarity index 100% rename from packages/neo-one-smart-contract-lib/src/__tests__/__snapshots__/RedToken.test.ts.snap rename to packages/neo-one-smart-contract-test/src/__tests__/__snapshots__/RedToken.test.ts.snap diff --git a/packages/neo-one-smart-contract-lib/src/__tests__/__snapshots__/TestICO.test.ts.snap b/packages/neo-one-smart-contract-test/src/__tests__/__snapshots__/TestICO.test.ts.snap similarity index 58% rename from packages/neo-one-smart-contract-lib/src/__tests__/__snapshots__/TestICO.test.ts.snap rename to packages/neo-one-smart-contract-test/src/__tests__/__snapshots__/TestICO.test.ts.snap index cdb285339e..c0fe2f173b 100644 --- a/packages/neo-one-smart-contract-lib/src/__tests__/__snapshots__/TestICO.test.ts.snap +++ b/packages/neo-one-smart-contract-test/src/__tests__/__snapshots__/TestICO.test.ts.snap @@ -2,8 +2,8 @@ exports[`TestICO smart contract: deploy consumed 1`] = `"0"`; -exports[`TestICO smart contract: deploy cost 1`] = `"1.434"`; +exports[`TestICO smart contract: deploy cost 1`] = `"1.494"`; exports[`TestICO smart contract: mint consumed 1`] = `"0"`; -exports[`TestICO smart contract: mint cost 1`] = `"4.743"`; +exports[`TestICO smart contract: mint cost 1`] = `"4.809"`; diff --git a/packages/neo-one-smart-contract-lib/src/__tests__/__snapshots__/TestToken.test.ts.snap b/packages/neo-one-smart-contract-test/src/__tests__/__snapshots__/TestToken.test.ts.snap similarity index 100% rename from packages/neo-one-smart-contract-lib/src/__tests__/__snapshots__/TestToken.test.ts.snap rename to packages/neo-one-smart-contract-test/src/__tests__/__snapshots__/TestToken.test.ts.snap diff --git a/packages/neo-one-smart-contract-test/src/__tests__/createNode.test.ts b/packages/neo-one-smart-contract-test/src/__tests__/createNode.test.ts new file mode 100644 index 0000000000..515e62d7a8 --- /dev/null +++ b/packages/neo-one-smart-contract-test/src/__tests__/createNode.test.ts @@ -0,0 +1,68 @@ +/// +import { createNode } from '../createNode'; +import { + NEOONEDataProvider, + NEOONEProvider, + LocalMemoryStore, + LocalKeyStore, + LocalUserAccountProvider, +} from '@neo-one/client-core'; +import { common } from '@neo-one/client-common'; +import BigNumber from 'bignumber.js'; + +const secondaryKeyString = '04c1784140445016cf0f8cc86dd10ad8764e1a89c563c500e21ac19a5d905ab3'; + +describe('createNode tests', () => { + test('can send master transfer', async () => { + const { privateKey, node, rpcURL } = await createNode(); + one.addCleanup(async () => node.stop()); + + const dataProvider = new NEOONEDataProvider({ network: 'priv', rpcURL }); + const networkName = dataProvider.network; + const masterWalletName = 'master'; + + const keystore = new LocalKeyStore(new LocalMemoryStore()); + const [masterAccount, emptyAccount] = await Promise.all([ + keystore.addMultiSigUserAccount({ + network: networkName, + privateKeys: [privateKey], + name: masterWalletName, + }), + keystore.addUserAccount({ + network: networkName, + privateKey: secondaryKeyString, + name: 'empty', + }), + ]); + + const provider = new NEOONEProvider([dataProvider]); + + const localUserAccountProvider = new LocalUserAccountProvider({ + keystore, + provider, + }); + + const transfer = { + to: emptyAccount.userAccount.id.address, + asset: common.nativeScriptHashes.NEO, + amount: new BigNumber(10), + }; + + const result = await localUserAccountProvider.transfer([transfer], { + from: masterAccount.userAccount.id, + maxNetworkFee: new BigNumber(-1), + maxSystemFee: new BigNumber(-1), + }); + + await result.confirmed(); + + const receipt = await localUserAccountProvider.provider.getApplicationLogData('priv', result.transaction.hash); + + const stackReturn = receipt.stack[0]; + if (typeof stackReturn === 'string') { + throw new Error('expected good return'); + } + + expect(stackReturn.value).toEqual(true); + }); +}); diff --git a/packages/neo-one-smart-contract-lib/src/__tests__/ownership/TestOwnableContract.test.ts b/packages/neo-one-smart-contract-test/src/__tests__/ownership/TestOwnableContract.test.ts similarity index 98% rename from packages/neo-one-smart-contract-lib/src/__tests__/ownership/TestOwnableContract.test.ts rename to packages/neo-one-smart-contract-test/src/__tests__/ownership/TestOwnableContract.test.ts index c4479b39f5..8341c7d8fc 100644 --- a/packages/neo-one-smart-contract-lib/src/__tests__/ownership/TestOwnableContract.test.ts +++ b/packages/neo-one-smart-contract-test/src/__tests__/ownership/TestOwnableContract.test.ts @@ -1,7 +1,7 @@ import { common, crypto } from '@neo-one/client-common'; import { SmartContractAny } from '@neo-one/client-core'; -import { withContracts } from '@neo-one/smart-contract-test'; import * as path from 'path'; +import { withContracts } from '../../withContracts'; const RECIPIENT = { PRIVATE_KEY: '7d128a6d096f0c14c3a25a2b0c41cf79661bfcb4a8cc95aaaea28bde4d732344', diff --git a/packages/neo-one-smart-contract-lib/src/__tests__/ownership/TestSecondary.test.ts b/packages/neo-one-smart-contract-test/src/__tests__/ownership/TestSecondary.test.ts similarity index 97% rename from packages/neo-one-smart-contract-lib/src/__tests__/ownership/TestSecondary.test.ts rename to packages/neo-one-smart-contract-test/src/__tests__/ownership/TestSecondary.test.ts index a3cb414735..073af24292 100644 --- a/packages/neo-one-smart-contract-lib/src/__tests__/ownership/TestSecondary.test.ts +++ b/packages/neo-one-smart-contract-test/src/__tests__/ownership/TestSecondary.test.ts @@ -1,7 +1,7 @@ import { common, crypto } from '@neo-one/client-common'; import { SmartContractAny } from '@neo-one/client-core'; -import { withContracts } from '@neo-one/smart-contract-test'; import * as path from 'path'; +import { withContracts } from '../../withContracts'; const RECIPIENT = { PRIVATE_KEY: '9c111f04a34b3a07600fe701d308dce6e20c86268c105f21c2f30e9fef7e7968', diff --git a/packages/neo-one-smart-contract-lib/src/__tests__/ownership/__snapshots__/TestOwnableContract.test.ts.snap b/packages/neo-one-smart-contract-test/src/__tests__/ownership/__snapshots__/TestOwnableContract.test.ts.snap similarity index 100% rename from packages/neo-one-smart-contract-lib/src/__tests__/ownership/__snapshots__/TestOwnableContract.test.ts.snap rename to packages/neo-one-smart-contract-test/src/__tests__/ownership/__snapshots__/TestOwnableContract.test.ts.snap diff --git a/packages/neo-one-smart-contract-lib/src/__tests__/ownership/__snapshots__/TestSecondary.test.ts.snap b/packages/neo-one-smart-contract-test/src/__tests__/ownership/__snapshots__/TestSecondary.test.ts.snap similarity index 100% rename from packages/neo-one-smart-contract-lib/src/__tests__/ownership/__snapshots__/TestSecondary.test.ts.snap rename to packages/neo-one-smart-contract-test/src/__tests__/ownership/__snapshots__/TestSecondary.test.ts.snap diff --git a/packages/neo-one-smart-contract-test/src/createNode.ts b/packages/neo-one-smart-contract-test/src/createNode.ts index d9a665d480..298839907d 100644 --- a/packages/neo-one-smart-contract-test/src/createNode.ts +++ b/packages/neo-one-smart-contract-test/src/createNode.ts @@ -1,4 +1,4 @@ -import { common, crypto, privateKeyToScriptHash } from '@neo-one/client-common'; +import { common, crypto } from '@neo-one/client-common'; import { FullNode } from '@neo-one/node'; import { createMain } from '@neo-one/node-neo-settings'; import { constants } from '@neo-one/utils'; @@ -17,7 +17,7 @@ export const createNode = async () => { blockchain: createMain({ privateNet: true, standbyValidators: [constants.PRIVATE_NET_PUBLIC_KEY], - address: privateKeyToScriptHash(privateKey), + extraCommitteeMembers: [], }), path: '/tmp/fakePath/', rpc: { @@ -35,6 +35,7 @@ export const createNode = async () => { }, leveldown: MemDown(), }); + await node.start(); return { diff --git a/packages/neo-one-smart-contract-test/src/index.ts b/packages/neo-one-smart-contract-test/src/index.ts index 18545c2ffc..4d666e4b7a 100644 --- a/packages/neo-one-smart-contract-test/src/index.ts +++ b/packages/neo-one-smart-contract-test/src/index.ts @@ -1,2 +1,3 @@ export * from './createWithContracts'; export * from './withContracts'; +export * from './createNode'; diff --git a/packages/neo-one-smart-contract-test/tsconfig.json b/packages/neo-one-smart-contract-test/tsconfig.json new file mode 100644 index 0000000000..faa5429582 --- /dev/null +++ b/packages/neo-one-smart-contract-test/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json", + "compilerOptions": { + "noFallthroughCasesInSwitch": true + } +} diff --git a/packages/neo-one-smart-contract-typescript-plugin/.npmignore b/packages/neo-one-smart-contract-typescript-plugin/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-smart-contract-typescript-plugin/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.json b/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.json new file mode 100644 index 0000000000..2ab20c4cfc --- /dev/null +++ b/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.json @@ -0,0 +1,80 @@ +{ + "name": "@neo-one/smart-contract-typescript-plugin", + "entries": [ + { + "version": "2.7.1", + "tag": "@neo-one/smart-contract-typescript-plugin_v2.7.1", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/smart-contract-compiler\" from `^2.7.0` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-compiler-node\" from `^2.7.0` to `^2.7.1`" + } + ] + } + }, + { + "version": "2.7.0", + "tag": "@neo-one/smart-contract-typescript-plugin_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/smart-contract-typescript-plugin_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/smart-contract-compiler\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-compiler-node\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/smart-contract-typescript-plugin_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + }, + { + "comment": "Upgrade TS to v3.8.1-rc" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/smart-contract-compiler\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-compiler-node\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.md b/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.md index e8a87f46cb..60f3563b9f 100644 --- a/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.md +++ b/packages/neo-one-smart-contract-typescript-plugin/CHANGELOG.md @@ -1,166 +1,35 @@ -# Change Log +# Change Log - @neo-one/smart-contract-typescript-plugin -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-typescript-plugin@1.2.1...@neo-one/smart-contract-typescript-plugin@2.3.0) (2019-10-23) +## 2.7.1 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/smart-contract-typescript-plugin +*Version update only* +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT +### Patches +- Upgrade TypeScript from v3.8.3 to v3.9.5 +### Updates -## [1.2.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-typescript-plugin@1.2.0...@neo-one/smart-contract-typescript-plugin@1.2.1) (2019-10-23) +- bump package version for future release clarity -**Note:** Version bump only for package @neo-one/smart-contract-typescript-plugin +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes +- update package release process to take better advantage of rush tooling +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT +### Minor changes -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-typescript-plugin@1.1.10...@neo-one/smart-contract-typescript-plugin@1.2.0) (2019-10-23) +- Migrate to Rush +- Upgrade TS to v3.8.1-rc - -### Bug Fixes - -* **ts:** revert back to TS v3.5.3 until v3.6.3 is released ([070d519](https://github.com/neo-one-suite/neo-one/commit/070d5190bdacbec433af37c69fef1cc7702b8bde)) - - -### Features - -* **ts:** upgrade to TS v3.6.3 ([82595a9](https://github.com/neo-one-suite/neo-one/commit/82595a91c063a4fa08ef06f631cd1dab4cb965f3)) - - - - - -## [1.1.10](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-typescript-plugin@1.1.9...@neo-one/smart-contract-typescript-plugin@1.1.10) (2019-09-04) - -**Note:** Version bump only for package @neo-one/smart-contract-typescript-plugin - - - - - -## [1.1.9](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-typescript-plugin@1.1.8...@neo-one/smart-contract-typescript-plugin@1.1.9) (2019-08-31) - -**Note:** Version bump only for package @neo-one/smart-contract-typescript-plugin - - - - - -## [1.1.8](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-typescript-plugin@1.1.7...@neo-one/smart-contract-typescript-plugin@1.1.8) (2019-08-30) - -**Note:** Version bump only for package @neo-one/smart-contract-typescript-plugin - - - - - -## [1.1.7](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-typescript-plugin@1.1.6...@neo-one/smart-contract-typescript-plugin@1.1.7) (2019-08-23) - -**Note:** Version bump only for package @neo-one/smart-contract-typescript-plugin - - - - - -## [1.1.6](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-typescript-plugin@1.1.5...@neo-one/smart-contract-typescript-plugin@1.1.6) (2019-08-22) - -**Note:** Version bump only for package @neo-one/smart-contract-typescript-plugin - - - - - -## [1.1.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-typescript-plugin@1.1.4...@neo-one/smart-contract-typescript-plugin@1.1.5) (2019-07-29) - -**Note:** Version bump only for package @neo-one/smart-contract-typescript-plugin - - - - - -## [1.1.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-typescript-plugin@1.1.3...@neo-one/smart-contract-typescript-plugin@1.1.4) (2019-06-20) - - -### Bug Fixes - -* **deps:** update dependency typescript to v3.5.1 ([#1365](https://github.com/neo-one-suite/neo-one/issues/1365)) ([ec89546](https://github.com/neo-one-suite/neo-one/commit/ec89546)) - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-typescript-plugin@1.1.2...@neo-one/smart-contract-typescript-plugin@1.1.3) (2019-06-04) - -**Note:** Version bump only for package @neo-one/smart-contract-typescript-plugin - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-typescript-plugin@1.1.1...@neo-one/smart-contract-typescript-plugin@1.1.2) (2019-04-12) - -**Note:** Version bump only for package @neo-one/smart-contract-typescript-plugin - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-typescript-plugin@1.1.0...@neo-one/smart-contract-typescript-plugin@1.1.1) (2019-03-27) - - -### Bug Fixes - -* **deps:** update dependency typescript to v3.3.3333 ([ad271bb](https://github.com/neo-one-suite/neo-one/commit/ad271bb)) -* **deps:** update dependency typescript to v3.3.4000 ([0b71078](https://github.com/neo-one-suite/neo-one/commit/0b71078)) - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-typescript-plugin@1.0.3...@neo-one/smart-contract-typescript-plugin@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/smart-contract-typescript-plugin - - - - - -## [1.0.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-typescript-plugin@1.0.3-alpha.0...@neo-one/smart-contract-typescript-plugin@1.0.3) (2019-02-21) - -**Note:** Version bump only for package @neo-one/smart-contract-typescript-plugin - - - - - -## [1.0.3-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-typescript-plugin@1.0.2...@neo-one/smart-contract-typescript-plugin@1.0.3-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **deps:** update dependency typescript to v3.2.1 ([54f2a64](https://github.com/neo-one-suite/neo-one/commit/54f2a64)) -* **deps:** update dependency typescript to v3.2.2 ([c5232a7](https://github.com/neo-one-suite/neo-one/commit/c5232a7)) -* **deps:** update dependency typescript to v3.2.4 ([ae72102](https://github.com/neo-one-suite/neo-one/commit/ae72102)) -* **deps:** update dependency typescript to v3.3.1 ([975bf8e](https://github.com/neo-one-suite/neo-one/commit/975bf8e)) -* **deps:** update dependency typescript to v3.3.3 ([1cde1b2](https://github.com/neo-one-suite/neo-one/commit/1cde1b2)) - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-typescript-plugin@1.0.1...@neo-one/smart-contract-typescript-plugin@1.0.2) (2018-11-13) - -**Note:** Version bump only for package @neo-one/smart-contract-typescript-plugin - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract-typescript-plugin@1.0.0...@neo-one/smart-contract-typescript-plugin@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/smart-contract-typescript-plugin diff --git a/packages/neo-one-smart-contract-typescript-plugin/gulpfile.js b/packages/neo-one-smart-contract-typescript-plugin/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-smart-contract-typescript-plugin/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-smart-contract-typescript-plugin/package.json b/packages/neo-one-smart-contract-typescript-plugin/package.json index 9f254135fb..71fb28cd6d 100644 --- a/packages/neo-one-smart-contract-typescript-plugin/package.json +++ b/packages/neo-one-smart-contract-typescript-plugin/package.json @@ -1,12 +1,24 @@ { "name": "@neo-one/smart-contract-typescript-plugin", - "version": "2.3.0", + "version": "2.7.1", "description": "NEOβ€’ONE TypeScript typescript plugin.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/smart-contract-compiler": "^2.3.0", - "@neo-one/smart-contract-compiler-node": "^2.3.0", - "typescript": "^3.6.3" + "@neo-one/smart-contract-compiler": "^3.0.0", + "@neo-one/smart-contract-compiler-node": "^2.7.1", + "typescript": "3.9.5" }, - "sideEffects": false + "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-smart-contract-typescript-plugin/tsconfig.json b/packages/neo-one-smart-contract-typescript-plugin/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-smart-contract-typescript-plugin/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-smart-contract/.npmignore b/packages/neo-one-smart-contract/.npmignore new file mode 100644 index 0000000000..1fee046c29 --- /dev/null +++ b/packages/neo-one-smart-contract/.npmignore @@ -0,0 +1,21 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/src/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-smart-contract/CHANGELOG.json b/packages/neo-one-smart-contract/CHANGELOG.json new file mode 100644 index 0000000000..2a02267797 --- /dev/null +++ b/packages/neo-one-smart-contract/CHANGELOG.json @@ -0,0 +1,46 @@ +{ + "name": "@neo-one/smart-contract", + "entries": [ + { + "version": "2.7.0", + "tag": "@neo-one/smart-contract_v2.7.0", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/smart-contract_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/smart-contract_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + } + ] + } + } + ] +} diff --git a/packages/neo-one-smart-contract/CHANGELOG.md b/packages/neo-one-smart-contract/CHANGELOG.md index fdf793f779..5e69ba1faf 100644 --- a/packages/neo-one-smart-contract/CHANGELOG.md +++ b/packages/neo-one-smart-contract/CHANGELOG.md @@ -1,64 +1,29 @@ -# Change Log +# Change Log - @neo-one/smart-contract -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract@1.1.3...@neo-one/smart-contract@2.3.0) (2019-10-23) +## 2.7.0 +Thu, 23 Jul 2020 22:11:12 GMT -**Note:** Version bump only for package @neo-one/smart-contract +### Patches +- Upgrade TypeScript from v3.8.3 to v3.9.5 +### Updates +- bump package version for future release clarity +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract@1.1.2...@neo-one/smart-contract@1.1.3) (2019-10-23) +### Minor changes -**Note:** Version bump only for package @neo-one/smart-contract +- update package release process to take better advantage of rush tooling +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT +### Minor changes +- Migrate to Rush - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract@1.1.1...@neo-one/smart-contract@1.1.2) (2019-10-23) - -**Note:** Version bump only for package @neo-one/smart-contract - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract@1.1.0...@neo-one/smart-contract@1.1.1) (2019-06-20) - -**Note:** Version bump only for package @neo-one/smart-contract - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract@1.0.2...@neo-one/smart-contract@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/smart-contract - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract@1.0.2-alpha.0...@neo-one/smart-contract@1.0.2) (2019-02-21) - -**Note:** Version bump only for package @neo-one/smart-contract - - - - - -## [1.0.2-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract@1.0.1...@neo-one/smart-contract@1.0.2-alpha.0) (2019-02-15) - -**Note:** Version bump only for package @neo-one/smart-contract - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/smart-contract@1.0.0...@neo-one/smart-contract@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/smart-contract diff --git a/packages/neo-one-smart-contract/package.json b/packages/neo-one-smart-contract/package.json index f650018632..00bc819fc5 100644 --- a/packages/neo-one-smart-contract/package.json +++ b/packages/neo-one-smart-contract/package.json @@ -1,8 +1,12 @@ { "name": "@neo-one/smart-contract", - "version": "2.3.0", + "version": "2.7.0", "description": "NEOβ€’ONE smart contract apis.", "main": "./src/index.d.ts", + "scripts": { + "build": "", + "lint": "" + }, "smartContract": true, "sideEffects": false } diff --git a/packages/neo-one-smart-contract/src/global.d.ts b/packages/neo-one-smart-contract/src/global.d.ts index 0f6c5d0dff..7f731bb185 100644 --- a/packages/neo-one-smart-contract/src/global.d.ts +++ b/packages/neo-one-smart-contract/src/global.d.ts @@ -4,7 +4,7 @@ * * Makes it an error to pass values that would otherwise match the shape of the interface. * - * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information. + * See the [Standard Library](https://neo-one.io/docs/standard-library#Opaque-Tag-Symbol) chapter of the main guide for more information. */ declare const one0: unique symbol; /** @@ -12,7 +12,7 @@ declare const one0: unique symbol; * * Makes it an error to pass values that would otherwise match the shape of the interface. * - * See the [Standard Library](https://neo-one.io/docs/smart-contract-basics#Opaque-Tag-Symbol) chapter of the main guide for more information. + * See the [Standard Library](https://neo-one.io/docs/standard-library#Opaque-Tag-Symbol) chapter of the main guide for more information. */ declare const one1: unique symbol; diff --git a/packages/neo-one-smart-contract/src/index.d.ts b/packages/neo-one-smart-contract/src/index.d.ts index b9adcdfb4b..a8b9a0d2f7 100644 --- a/packages/neo-one-smart-contract/src/index.d.ts +++ b/packages/neo-one-smart-contract/src/index.d.ts @@ -1276,7 +1276,9 @@ type SmartContractArg = SmartContractValue | ForwardValue; type IsValidSmartContract = { [K in keyof T]: T[K] extends Function ? Parameters extends SmartContractArg[] - ? (ReturnType extends SmartContractArg ? T[K] : never) + ? ReturnType extends SmartContractArg + ? T[K] + : never : never : T[K] extends SmartContractValue ? T[K] @@ -1448,11 +1450,11 @@ export interface CryptoConstructor { /** * Returns a `Buffer` of the RMD160 hash of the SHA256 hash of the input. */ - readonly hash160: (value: Hashable) => Buffer; + readonly hash160: (value: Hashable) => Address; /** * Returns a `Buffer` of the SHA256 hash of the SHA256 hash of the input. */ - readonly hash256: (value: Hashable) => Buffer; + readonly hash256: (value: Hashable) => Hash256; } /** * Contains various cryptography functions. diff --git a/packages/neo-one-smart-contract/tsconfig.json b/packages/neo-one-smart-contract/tsconfig.json index b81abfab26..343e0a94ad 100644 --- a/packages/neo-one-smart-contract/tsconfig.json +++ b/packages/neo-one-smart-contract/tsconfig.json @@ -1,25 +1,4 @@ { - "compilerOptions": { - "target": "esnext", - "module": "esnext", - "moduleResolution": "node", - "noLib": true, - "typeRoots": [], - "pretty": true, - "noEmit": true, - "declaration": false, - "allowSyntheticDefaultImports": true, - "resolveJsonModule": false, - "experimentalDecorators": true, - "alwaysStrict": true, - "strict": true, - "skipLibCheck": false, - "noUnusedLocals": true, - "noImplicitReturns": true, - "allowUnusedLabels": false, - "noUnusedParameters": false, - "allowUnreachableCode": false, - "noFallthroughCasesInSwitch": true, - "forceConsistentCasingInFileNames": true - } + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json", + "exclude": ["./src/*.d.ts"] } diff --git a/packages/neo-one-suite/CHANGELOG.md b/packages/neo-one-suite/CHANGELOG.md deleted file mode 100644 index 964b942f19..0000000000 --- a/packages/neo-one-suite/CHANGELOG.md +++ /dev/null @@ -1,131 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [2.3.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/suite@2.3.0...@neo-one/suite@2.3.1) (2019-11-20) - -**Note:** Version bump only for package @neo-one/suite - - - - - -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/suite@1.2.12...@neo-one/suite@2.3.0) (2019-10-23) - -**Note:** Version bump only for package @neo-one/suite - - - - - -## [1.2.12](https://github.com/neo-one-suite/neo-one/compare/@neo-one/suite@1.2.11...@neo-one/suite@1.2.12) (2019-10-23) - -**Note:** Version bump only for package @neo-one/suite - - - - - -## [1.2.11](https://github.com/neo-one-suite/neo-one/compare/@neo-one/suite@1.2.10...@neo-one/suite@1.2.11) (2019-10-23) - -**Note:** Version bump only for package @neo-one/suite - - - - - -## [1.2.10](https://github.com/neo-one-suite/neo-one/compare/@neo-one/suite@1.2.9...@neo-one/suite@1.2.10) (2019-09-04) - -**Note:** Version bump only for package @neo-one/suite - - - - - -## [1.2.9](https://github.com/neo-one-suite/neo-one/compare/@neo-one/suite@1.2.8...@neo-one/suite@1.2.9) (2019-09-03) - -**Note:** Version bump only for package @neo-one/suite - - - - - -## [1.2.8](https://github.com/neo-one-suite/neo-one/compare/@neo-one/suite@1.2.7...@neo-one/suite@1.2.8) (2019-09-02) - -**Note:** Version bump only for package @neo-one/suite - - - - - -## [1.2.7](https://github.com/neo-one-suite/neo-one/compare/@neo-one/suite@1.2.6...@neo-one/suite@1.2.7) (2019-08-31) - -**Note:** Version bump only for package @neo-one/suite - - - - - -## [1.2.6](https://github.com/neo-one-suite/neo-one/compare/@neo-one/suite@1.2.5...@neo-one/suite@1.2.6) (2019-08-31) - -**Note:** Version bump only for package @neo-one/suite - - - - - -## [1.2.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/suite@1.2.4...@neo-one/suite@1.2.5) (2019-08-30) - - -### Bug Fixes - -* **suite:** add smart-contract-lib to @neo-one/suite ([#1706](https://github.com/neo-one-suite/neo-one/issues/1706)) ([4745825](https://github.com/neo-one-suite/neo-one/commit/4745825)) - - - - - -## [1.2.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/suite@1.2.3...@neo-one/suite@1.2.4) (2019-08-23) - -**Note:** Version bump only for package @neo-one/suite - - - - - -## [1.2.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/suite@1.2.2...@neo-one/suite@1.2.3) (2019-08-22) - -**Note:** Version bump only for package @neo-one/suite - - - - - -## [1.2.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/suite@1.2.1...@neo-one/suite@1.2.2) (2019-07-29) - -**Note:** Version bump only for package @neo-one/suite - - - - - -## [1.2.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/suite@1.2.0...@neo-one/suite@1.2.1) (2019-06-20) - -**Note:** Version bump only for package @neo-one/suite - - - - - -# 1.2.0 (2019-06-04) - - -### Bug Fixes - -* **@neo-one/types:** eliminate global types from @neo-one/types ([004330d](https://github.com/neo-one-suite/neo-one/commit/004330d)) - - -### Features - -* **suite:** add @neo-one/suite for one line install ([f85ed8f](https://github.com/neo-one-suite/neo-one/commit/f85ed8f)) diff --git a/packages/neo-one-suite/package.json b/packages/neo-one-suite/package.json deleted file mode 100644 index 0dc393cffa..0000000000 --- a/packages/neo-one-suite/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "@neo-one/suite", - "version": "2.3.1", - "description": "NEOβ€’ONE core dependencies for easy installation", - "dependencies": { - "@neo-one/cli": "^2.4.0", - "@neo-one/client": "^2.3.0", - "@neo-one/smart-contract": "^2.3.0", - "@neo-one/smart-contract-lib": "^2.3.1", - "@neo-one/smart-contract-test": "^2.3.1", - "@neo-one/smart-contract-typescript-plugin": "^2.3.0" - }, - "sideEffects": false -} diff --git a/packages/neo-one-ts-utils/.npmignore b/packages/neo-one-ts-utils/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-ts-utils/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-ts-utils/CHANGELOG.json b/packages/neo-one-ts-utils/CHANGELOG.json new file mode 100644 index 0000000000..316e7dd29b --- /dev/null +++ b/packages/neo-one-ts-utils/CHANGELOG.json @@ -0,0 +1,49 @@ +{ + "name": "@neo-one/ts-utils", + "entries": [ + { + "version": "2.6.1", + "tag": "@neo-one/ts-utils_v2.6.1", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/ts-utils_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/ts-utils_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + }, + { + "comment": "Upgrade TS to v3.8.1-rc" + } + ] + } + } + ] +} diff --git a/packages/neo-one-ts-utils/CHANGELOG.md b/packages/neo-one-ts-utils/CHANGELOG.md index 242763d34f..e14779830d 100644 --- a/packages/neo-one-ts-utils/CHANGELOG.md +++ b/packages/neo-one-ts-utils/CHANGELOG.md @@ -1,144 +1,26 @@ -# Change Log +# Change Log - @neo-one/ts-utils -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Thu, 23 Jul 2020 22:11:12 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/ts-utils@1.3.1...@neo-one/ts-utils@2.3.0) (2019-10-23) +## 2.6.1 +Thu, 23 Jul 2020 22:11:12 GMT -**Note:** Version bump only for package @neo-one/ts-utils +### Patches +- Upgrade TypeScript from v3.8.3 to v3.9.5 +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT +### Minor changes +- update package release process to take better advantage of rush tooling -## [1.3.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/ts-utils@1.3.0...@neo-one/ts-utils@1.3.1) (2019-10-23) +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT -**Note:** Version bump only for package @neo-one/ts-utils +### Minor changes +- Migrate to Rush +- Upgrade TS to v3.8.1-rc - - - -# [1.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/ts-utils@1.2.4...@neo-one/ts-utils@1.3.0) (2019-10-23) - - -### Bug Fixes - -* **ts:** revert back to TS v3.5.3 until v3.6.3 is released ([070d519](https://github.com/neo-one-suite/neo-one/commit/070d5190bdacbec433af37c69fef1cc7702b8bde)) - - -### Features - -* **ts:** upgrade to TS v3.6.3 ([82595a9](https://github.com/neo-one-suite/neo-one/commit/82595a91c063a4fa08ef06f631cd1dab4cb965f3)) - - - - - -## [1.2.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/ts-utils@1.2.3...@neo-one/ts-utils@1.2.4) (2019-09-04) - -**Note:** Version bump only for package @neo-one/ts-utils - - - - - -## [1.2.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/ts-utils@1.2.2...@neo-one/ts-utils@1.2.3) (2019-08-30) - -**Note:** Version bump only for package @neo-one/ts-utils - - - - - -## [1.2.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/ts-utils@1.2.1...@neo-one/ts-utils@1.2.2) (2019-08-22) - -**Note:** Version bump only for package @neo-one/ts-utils - - - - - -## [1.2.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/ts-utils@1.2.0...@neo-one/ts-utils@1.2.1) (2019-07-29) - -**Note:** Version bump only for package @neo-one/ts-utils - - - - - -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/ts-utils@1.1.2...@neo-one/ts-utils@1.2.0) (2019-06-20) - - -### Bug Fixes - -* **deps:** update dependency typescript to v3.5.1 ([#1365](https://github.com/neo-one-suite/neo-one/issues/1365)) ([ec89546](https://github.com/neo-one-suite/neo-one/commit/ec89546)) - - -### Features - -* **@neo-one/smart-contract-compiler:** Allow external contracts to return false on error ([c92ea68](https://github.com/neo-one-suite/neo-one/commit/c92ea68)) - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/ts-utils@1.1.1...@neo-one/ts-utils@1.1.2) (2019-06-04) - - -### Bug Fixes - -* **@neo-one/types:** eliminate global types from @neo-one/types ([004330d](https://github.com/neo-one-suite/neo-one/commit/004330d)) - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/ts-utils@1.1.0...@neo-one/ts-utils@1.1.1) (2019-03-27) - - -### Bug Fixes - -* **deps:** update dependency typescript to v3.3.3333 ([ad271bb](https://github.com/neo-one-suite/neo-one/commit/ad271bb)) -* **deps:** update dependency typescript to v3.3.4000 ([0b71078](https://github.com/neo-one-suite/neo-one/commit/0b71078)) - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/ts-utils@1.0.2...@neo-one/ts-utils@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/ts-utils - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/ts-utils@1.0.2-alpha.0...@neo-one/ts-utils@1.0.2) (2019-02-21) - -**Note:** Version bump only for package @neo-one/ts-utils - - - - - -## [1.0.2-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/ts-utils@1.0.1...@neo-one/ts-utils@1.0.2-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **build:** adjust several packages to allow emitting .d.ts files. ([27a2d88](https://github.com/neo-one-suite/neo-one/commit/27a2d88)) -* **deps:** update dependency @types/lodash to v4.14.120 ([a76dae7](https://github.com/neo-one-suite/neo-one/commit/a76dae7)) -* **deps:** update dependency typescript to v3.2.1 ([54f2a64](https://github.com/neo-one-suite/neo-one/commit/54f2a64)) -* **deps:** update dependency typescript to v3.2.2 ([c5232a7](https://github.com/neo-one-suite/neo-one/commit/c5232a7)) -* **deps:** update dependency typescript to v3.2.4 ([ae72102](https://github.com/neo-one-suite/neo-one/commit/ae72102)) -* **deps:** update dependency typescript to v3.3.1 ([975bf8e](https://github.com/neo-one-suite/neo-one/commit/975bf8e)) -* **deps:** update dependency typescript to v3.3.3 ([1cde1b2](https://github.com/neo-one-suite/neo-one/commit/1cde1b2)) - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/ts-utils@1.0.0...@neo-one/ts-utils@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/ts-utils diff --git a/packages/neo-one-ts-utils/gulpfile.js b/packages/neo-one-ts-utils/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-ts-utils/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-ts-utils/package.json b/packages/neo-one-ts-utils/package.json index 35d01cf8b1..228f7fc9f9 100644 --- a/packages/neo-one-ts-utils/package.json +++ b/packages/neo-one-ts-utils/package.json @@ -1,15 +1,26 @@ { "name": "@neo-one/ts-utils", - "version": "2.3.0", + "version": "2.6.1", "description": "NEOβ€’ONE TypeScript utils.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { "lodash": "^4.17.15", "source-map": "^0.7.3", - "typescript": "^3.6.3" + "tslib": "^1.10.0", + "typescript": "3.9.5" }, "devDependencies": { - "@types/lodash": "^4.14.138" - }, - "sideEffects": false + "@neo-one/build-tools": "^1.0.0", + "@types/lodash": "^4.14.138", + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-ts-utils/src/exportDeclaration.ts b/packages/neo-one-ts-utils/src/exportDeclaration.ts index 1858a7b222..ea06068d51 100644 --- a/packages/neo-one-ts-utils/src/exportDeclaration.ts +++ b/packages/neo-one-ts-utils/src/exportDeclaration.ts @@ -8,7 +8,7 @@ export function getNamedExports(node: ts.ExportDeclaration): readonly ts.ExportS return []; } - const exps = utils.getValueOrUndefined(namedExports.elements); + const exps = !ts.isNamedExports(namedExports) ? undefined : utils.getValueOrUndefined(namedExports.elements); return exps === undefined ? [] : exps; } diff --git a/packages/neo-one-ts-utils/src/literal.ts b/packages/neo-one-ts-utils/src/literal.ts index db96252785..8196381df9 100644 --- a/packages/neo-one-ts-utils/src/literal.ts +++ b/packages/neo-one-ts-utils/src/literal.ts @@ -1,8 +1,15 @@ import ts from 'typescript'; +import { getText } from './node'; export function getLiteralValue(node: ts.NumericLiteral): number; export function getLiteralValue( - node: ts.StringLiteral | ts.LiteralExpression | ts.TemplateHead | ts.TemplateMiddle | ts.TemplateTail, + node: + | ts.StringLiteral + | ts.LiteralExpression + | ts.TemplateHead + | ts.TemplateMiddle + | ts.TemplateTail + | ts.PrivateIdentifier, ): string; export function getLiteralValue( node: @@ -11,7 +18,8 @@ export function getLiteralValue( | ts.LiteralExpression | ts.TemplateHead | ts.TemplateMiddle - | ts.TemplateTail, + | ts.TemplateTail + | ts.PrivateIdentifier, ): string | number { if (ts.isStringLiteral(node)) { return node.text; @@ -25,5 +33,9 @@ export function getLiteralValue( return node.text; } + if (ts.isPrivateIdentifier(node)) { + return getText(node); + } + throw new Error('Never'); } diff --git a/packages/neo-one-ts-utils/src/symbol.ts b/packages/neo-one-ts-utils/src/symbol.ts index 6444b8a51a..8cf18799ab 100644 --- a/packages/neo-one-ts-utils/src/symbol.ts +++ b/packages/neo-one-ts-utils/src/symbol.ts @@ -29,6 +29,13 @@ export function getAliasedSymbol(typeChecker: ts.TypeChecker, node: ts.Symbol): return utils.getValueOrUndefined(typeChecker.getAliasedSymbol(node)); } + if (hasSymbolFlag(node, ts.SymbolFlags.TypeAlias)) { + const type = utils.getValueOrUndefined(typeChecker.getDeclaredTypeOfSymbol(node)); + if (type !== undefined) { + return utils.getValueOrUndefined(type.getSymbol()); + } + } + return undefined; } diff --git a/packages/neo-one-ts-utils/tsconfig.json b/packages/neo-one-ts-utils/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-ts-utils/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-typescript-concatenator/.npmignore b/packages/neo-one-typescript-concatenator/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-typescript-concatenator/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-typescript-concatenator/CHANGELOG.json b/packages/neo-one-typescript-concatenator/CHANGELOG.json new file mode 100644 index 0000000000..3e1d77de50 --- /dev/null +++ b/packages/neo-one-typescript-concatenator/CHANGELOG.json @@ -0,0 +1,100 @@ +{ + "name": "@neo-one/typescript-concatenator", + "entries": [ + { + "version": "2.6.2", + "tag": "@neo-one/typescript-concatenator_v2.6.2", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-compiler-node\" from `^2.7.0` to `^2.7.1`" + } + ] + } + }, + { + "version": "2.6.1", + "tag": "@neo-one/typescript-concatenator_v2.6.1", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "dependency": [ + { + "comment": "Dependency @neo-one/smart-contract-compiler-node version bump from ^2.6.0 to ^2.7.0." + }, + { + "comment": "Updating dependency \"@neo-one/ts-utils\" from `^2.6.0` to `^2.6.1`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + } + ], + "patch": [ + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/typescript-concatenator_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/ts-utils\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-compiler-node\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/typescript-concatenator_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Add support for new language features in TS v3.7, v3.8" + }, + { + "comment": "Migrate to Rush" + }, + { + "comment": "Upgrade TS to v3.8.1-rc. Add support for namespace exports." + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/ts-utils\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + }, + { + "comment": "Updating dependency \"@neo-one/smart-contract-compiler-node\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-typescript-concatenator/CHANGELOG.md b/packages/neo-one-typescript-concatenator/CHANGELOG.md index d3c0ae6676..b0b0f52102 100644 --- a/packages/neo-one-typescript-concatenator/CHANGELOG.md +++ b/packages/neo-one-typescript-concatenator/CHANGELOG.md @@ -1,139 +1,32 @@ -# Change Log +# Change Log - @neo-one/typescript-concatenator -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/typescript-concatenator@1.2.1...@neo-one/typescript-concatenator@2.3.0) (2019-10-23) +## 2.6.2 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/typescript-concatenator +*Version update only* +## 2.6.1 +Thu, 23 Jul 2020 22:11:12 GMT +### Patches +- Upgrade TypeScript from v3.8.3 to v3.9.5 +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT -## [1.2.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/typescript-concatenator@1.2.0...@neo-one/typescript-concatenator@1.2.1) (2019-10-23) +### Minor changes -**Note:** Version bump only for package @neo-one/typescript-concatenator +- update package release process to take better advantage of rush tooling +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT +### Minor changes +- Add support for new language features in TS v3.7, v3.8 +- Migrate to Rush +- Upgrade TS to v3.8.1-rc. Add support for namespace exports. - -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/typescript-concatenator@1.1.7...@neo-one/typescript-concatenator@1.2.0) (2019-10-23) - - -### Bug Fixes - -* **ts:** revert back to TS v3.5.3 until v3.6.3 is released ([070d519](https://github.com/neo-one-suite/neo-one/commit/070d5190bdacbec433af37c69fef1cc7702b8bde)) - - -### Features - -* **ts:** upgrade to TS v3.6.3 ([82595a9](https://github.com/neo-one-suite/neo-one/commit/82595a91c063a4fa08ef06f631cd1dab4cb965f3)) - - - - - -## [1.1.7](https://github.com/neo-one-suite/neo-one/compare/@neo-one/typescript-concatenator@1.1.6...@neo-one/typescript-concatenator@1.1.7) (2019-09-04) - -**Note:** Version bump only for package @neo-one/typescript-concatenator - - - - - -## [1.1.6](https://github.com/neo-one-suite/neo-one/compare/@neo-one/typescript-concatenator@1.1.5...@neo-one/typescript-concatenator@1.1.6) (2019-08-30) - -**Note:** Version bump only for package @neo-one/typescript-concatenator - - - - - -## [1.1.5](https://github.com/neo-one-suite/neo-one/compare/@neo-one/typescript-concatenator@1.1.4...@neo-one/typescript-concatenator@1.1.5) (2019-08-22) - -**Note:** Version bump only for package @neo-one/typescript-concatenator - - - - - -## [1.1.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/typescript-concatenator@1.1.3...@neo-one/typescript-concatenator@1.1.4) (2019-07-29) - -**Note:** Version bump only for package @neo-one/typescript-concatenator - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/typescript-concatenator@1.1.2...@neo-one/typescript-concatenator@1.1.3) (2019-06-20) - - -### Bug Fixes - -* **deps:** update dependency typescript to v3.5.1 ([#1365](https://github.com/neo-one-suite/neo-one/issues/1365)) ([ec89546](https://github.com/neo-one-suite/neo-one/commit/ec89546)) - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/typescript-concatenator@1.1.1...@neo-one/typescript-concatenator@1.1.2) (2019-06-04) - - -### Bug Fixes - -* **deps:** update dependency fs-extra to v8 ([b11630d](https://github.com/neo-one-suite/neo-one/commit/b11630d)) - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/typescript-concatenator@1.1.0...@neo-one/typescript-concatenator@1.1.1) (2019-03-27) - - -### Bug Fixes - -* **deps:** update dependency typescript to v3.3.3333 ([ad271bb](https://github.com/neo-one-suite/neo-one/commit/ad271bb)) -* **deps:** update dependency typescript to v3.3.4000 ([0b71078](https://github.com/neo-one-suite/neo-one/commit/0b71078)) - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/typescript-concatenator@1.0.2...@neo-one/typescript-concatenator@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/typescript-concatenator - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/typescript-concatenator@1.0.2-alpha.0...@neo-one/typescript-concatenator@1.0.2) (2019-02-21) - -**Note:** Version bump only for package @neo-one/typescript-concatenator - - - - - -## [1.0.2-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/typescript-concatenator@1.0.1...@neo-one/typescript-concatenator@1.0.2-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **deps:** update dependency @types/lodash to v4.14.120 ([a76dae7](https://github.com/neo-one-suite/neo-one/commit/a76dae7)) -* **deps:** update dependency @types/yargs to v12.0.8 ([39247ca](https://github.com/neo-one-suite/neo-one/commit/39247ca)) -* **deps:** update dependency typescript to v3.2.1 ([54f2a64](https://github.com/neo-one-suite/neo-one/commit/54f2a64)) -* **deps:** update dependency typescript to v3.2.2 ([c5232a7](https://github.com/neo-one-suite/neo-one/commit/c5232a7)) -* **deps:** update dependency typescript to v3.2.4 ([ae72102](https://github.com/neo-one-suite/neo-one/commit/ae72102)) -* **deps:** update dependency typescript to v3.3.1 ([975bf8e](https://github.com/neo-one-suite/neo-one/commit/975bf8e)) -* **deps:** update dependency typescript to v3.3.3 ([1cde1b2](https://github.com/neo-one-suite/neo-one/commit/1cde1b2)) - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/typescript-concatenator@1.0.0...@neo-one/typescript-concatenator@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/typescript-concatenator diff --git a/packages/neo-one-typescript-concatenator/gulpfile.js b/packages/neo-one-typescript-concatenator/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-typescript-concatenator/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-typescript-concatenator/package.json b/packages/neo-one-typescript-concatenator/package.json index ed523dd494..6ff42c508a 100644 --- a/packages/neo-one-typescript-concatenator/package.json +++ b/packages/neo-one-typescript-concatenator/package.json @@ -1,22 +1,37 @@ { "name": "@neo-one/typescript-concatenator", - "version": "2.3.0", + "version": "2.6.2", "description": "NEOβ€’ONE TypeScript Concatenator", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/ts-utils": "^2.3.0", - "@neo-one/utils": "^2.3.0", + "@neo-one/ts-utils": "^2.6.1", + "@neo-one/utils": "^3.0.0", "lodash": "^4.17.15", "toposort": "^2.0.2", - "typescript": "^3.6.3" + "tslib": "^1.10.0", + "typescript": "3.9.5" }, "devDependencies": { - "@neo-one/smart-contract-compiler-node": "^2.3.0", + "@neo-one/build-tools": "^1.0.0", + "@neo-one/smart-contract-compiler-node": "^2.7.1", + "@types/app-root-dir": "^0.1.0", + "@types/fs-extra": "^8.0.0", + "@types/jest": "^24.0.18", "@types/lodash": "^4.14.138", "@types/toposort": "^2.0.1", + "@types/yargs": "^13.0.3", "app-root-dir": "^1.0.2", "fs-extra": "^8.1.0", - "yargs": "^14.0.0" - }, - "sideEffects": false + "gulp": "~4.0.2", + "yargs": "^14.2.0" + } } diff --git a/packages/neo-one-typescript-concatenator/src/Concatenator.ts b/packages/neo-one-typescript-concatenator/src/Concatenator.ts index c2eb4009d5..eea88c405d 100644 --- a/packages/neo-one-typescript-concatenator/src/Concatenator.ts +++ b/packages/neo-one-typescript-concatenator/src/Concatenator.ts @@ -125,7 +125,7 @@ export class Concatenator { .filter(utils.notNull); } } - } else { + } else if (ts.isNamedExports(clause)) { elements = clause.elements .filter((element) => this.isExportedNode(element)) .map((element) => { @@ -140,6 +140,41 @@ export class Concatenator { return element; }); + } else { + const exportFile = tsUtils.importExport.getModuleSpecifierSourceFile(this.context.typeChecker, node); + const namespaceIdentifier = clause.name; + if (exportFile !== undefined) { + const exportedSymbols = tsUtils.file.getExportedSymbols(this.context.typeChecker, exportFile); + + return tsUtils.setOriginalRecursive( + ts.createVariableStatement( + [ts.createModifier(ts.SyntaxKind.ExportKeyword)], + ts.createVariableDeclarationList( + [ + ts.createVariableDeclaration( + this.getIdentifierForIdentifier(namespaceIdentifier), + undefined, + ts.createObjectLiteral( + exportedSymbols + .map((symbolIn) => { + const symbol = tsUtils.symbol.getSymbolOrAlias(this.context.typeChecker, symbolIn); + const identifier = this.getIdentifierForSymbol(symbol); + if (identifier === undefined) { + return undefined; + } + + return ts.createPropertyAssignment(tsUtils.symbol.getName(symbolIn), identifier); + }) + .filter(utils.notNull), + ), + ), + ], + ts.NodeFlags.Const, + ), + ), + node, + ); + } } if (elements.length > 0) { @@ -332,7 +367,7 @@ export class Concatenator { ); const sorted = _.reverse(toposort(graph)); const filePathToSourceFile = new Map( - [...sourceFilesMap.keys()].map((file) => [file.fileName, file] as const), + [...sourceFilesMap.keys()].map((file) => [file.fileName, file]), ); return sorted.map((filePath) => filePathToSourceFile.get(filePath)).filter(utils.notNull); diff --git a/packages/neo-one-typescript-concatenator/src/__data__/snippets/import/entry.ts b/packages/neo-one-typescript-concatenator/src/__data__/snippets/import/entry.ts index e044588ba2..303559a933 100644 --- a/packages/neo-one-typescript-concatenator/src/__data__/snippets/import/entry.ts +++ b/packages/neo-one-typescript-concatenator/src/__data__/snippets/import/entry.ts @@ -3,6 +3,7 @@ import * as bar from './bar'; import baz from './baz'; import { foo } from './foo'; import { Address, foo as foo2, Foo2SmartContract, SmartContract } from './foo2'; +import type { MyType } from './onlyTypes'; import incrementValue, { value } from './qux'; import { FooType } from './type'; @@ -80,3 +81,8 @@ export * from './foo3'; export * from './foo4'; // Export one of a multi-decl statement export { fizz } from './varDecl'; +// Namespace export +export * as foo5 from './foo5'; +export * as somethingElse from './foo5'; +// Type-only export +export type { MyType }; diff --git a/packages/neo-one-typescript-concatenator/src/__data__/snippets/import/foo5.ts b/packages/neo-one-typescript-concatenator/src/__data__/snippets/import/foo5.ts new file mode 100644 index 0000000000..3cb3f31802 --- /dev/null +++ b/packages/neo-one-typescript-concatenator/src/__data__/snippets/import/foo5.ts @@ -0,0 +1,3 @@ +export const one = 'one'; +export const two = 'two'; +export const func = () => 'three'; diff --git a/packages/neo-one-typescript-concatenator/src/__data__/snippets/import/onlyTypes.ts b/packages/neo-one-typescript-concatenator/src/__data__/snippets/import/onlyTypes.ts new file mode 100644 index 0000000000..eeab242b62 --- /dev/null +++ b/packages/neo-one-typescript-concatenator/src/__data__/snippets/import/onlyTypes.ts @@ -0,0 +1,3 @@ +type MyType = string; +// tslint:disable-next-line: export-name +export type { MyType }; diff --git a/packages/neo-one-typescript-concatenator/src/__data__/snippets/import/qux.ts b/packages/neo-one-typescript-concatenator/src/__data__/snippets/import/qux.ts index 382c716a5e..4ba3e9cc3a 100644 --- a/packages/neo-one-typescript-concatenator/src/__data__/snippets/import/qux.ts +++ b/packages/neo-one-typescript-concatenator/src/__data__/snippets/import/qux.ts @@ -4,6 +4,6 @@ export function value() { return val; } // tslint:disable-next-line no-default-export -export default function() { +export default function () { val += 1; } diff --git a/packages/neo-one-typescript-concatenator/src/__tests__/__snapshots__/concatenate.test.ts.snap b/packages/neo-one-typescript-concatenator/src/__tests__/__snapshots__/concatenate.test.ts.snap index 2c20e8bbda..478ac586b9 100644 --- a/packages/neo-one-typescript-concatenator/src/__tests__/__snapshots__/concatenate.test.ts.snap +++ b/packages/neo-one-typescript-concatenator/src/__tests__/__snapshots__/concatenate.test.ts.snap @@ -1,7 +1,10 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`concatenate import 1`] = ` -"const fizz = 'fizz', bang = 'bang'; +"const one = 'one'; +const two = 'two'; +const func = () => 'three'; +const fizz = 'fizz', bang = 'bang'; type Address = string; const foo = 'foo'; abstract class SmartContract { @@ -10,7 +13,7 @@ abstract class SmartContract { } } // tslint:disable-next-line no-default-export -class default52 extends SmartContract { +class default11 extends SmartContract { } // tslint:disable-next-line export-name class FooType { @@ -18,22 +21,23 @@ class FooType { } const fooType = 'fooType'; // tslint:disable-next-line no-let -let valc2 = 0; -function valuec1() { - return valc2; +let valc1 = 0; +function value48() { + return valc1; } -function defaultc3() { - valc2 += 1; +function default45() { + valc1 += 1; } -const defaultc4 = 'baz'; +type MyType = string; +const default35 = 'baz'; // tslint:disable-next-line no-let -let valc5 = 0; +let valc2 = 0; const x = 3; -const value39 = () => valc5; +const value52 = () => valc2; const incrementValue = () => { - valc5 += 1; + valc2 += 1; }; -const bar = { value: value39, incrementValue: incrementValue, x: x }; +const bar = { value: value52, incrementValue: incrementValue, x: x }; if (foo !== 'foo') { throw 'Failure'; } @@ -47,17 +51,17 @@ bar.incrementValue(); if (bar.value() !== 1) { throw 'Failure'; } -if (valuec1() !== 0) { +if (value48() !== 0) { throw 'Failure'; } -defaultc3(); -if (valuec1() !== 1) { +default45(); +if (value48() !== 1) { throw 'Failure'; } if (bar.x !== 3) { throw 'Failure'; } -if (defaultc4 !== 'baz') { +if (default35 !== 'baz') { throw 'Failure'; } // tslint:disable-next-line export-name @@ -70,7 +74,7 @@ const qux = new Qux(); if (qux.foo !== 'foo') { throw 'Failure'; } -const fooSC = new default52(); +const fooSC = new default11(); if (fooSC.foo !== 'foo') { throw 'Failure'; } @@ -78,11 +82,14 @@ export { fooSC as fooSC }; export { fooSC as barSC }; export { bar }; export { bar as bar2 }; -export { defaultc4 as baz }; -export { defaultc4 as baz2 }; +export { default35 as baz }; +export { default35 as baz2 }; export { FooType as FooType, fooType as fooType }; export { Address as Address, foo as foo, SmartContract as SmartContract }; -export { SmartContract as SmartContract2Level, default52 as FooSmartContract2Level, foo as foo2level, Address as Address2Level }; +export { SmartContract as SmartContract2Level, default11 as FooSmartContract2Level, foo as foo2level, Address as Address2Level }; export { fizz as fizz }; +export const foo5 = { one: one, two: two, func: func }; +export const somethingElse = { one: one, two: two, func: func }; +export { MyType as MyType }; " `; diff --git a/packages/neo-one-typescript-concatenator/tsconfig.json b/packages/neo-one-typescript-concatenator/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-typescript-concatenator/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-utils-node/.npmignore b/packages/neo-one-utils-node/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-utils-node/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-utils-node/CHANGELOG.json b/packages/neo-one-utils-node/CHANGELOG.json new file mode 100644 index 0000000000..104967c2aa --- /dev/null +++ b/packages/neo-one-utils-node/CHANGELOG.json @@ -0,0 +1,81 @@ +{ + "name": "@neo-one/utils-node", + "entries": [ + { + "version": "2.6.2", + "tag": "@neo-one/utils-node_v2.6.2", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.1` to `^3.0.0`" + } + ] + } + }, + { + "version": "2.6.1", + "tag": "@neo-one/utils-node_v2.6.1", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Add appropriate @types dependencies." + }, + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.6.0` to `^2.6.1`" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/utils-node_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "update package release process to take better advantage of rush tooling" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.4.0` to `^2.5.0`" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/utils-node_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + } + ], + "patch": [ + { + "comment": "update npm-package-arg to 7.0.0" + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@neo-one/utils\" from `^2.3.0` to `^2.4.0`" + } + ] + } + } + ] +} diff --git a/packages/neo-one-utils-node/CHANGELOG.md b/packages/neo-one-utils-node/CHANGELOG.md index f178d28d0f..a7de7c273f 100644 --- a/packages/neo-one-utils-node/CHANGELOG.md +++ b/packages/neo-one-utils-node/CHANGELOG.md @@ -1,102 +1,35 @@ -# Change Log +# Change Log - @neo-one/utils-node -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/utils-node@1.2.3...@neo-one/utils-node@2.3.0) (2019-10-23) +## 2.6.2 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/utils-node +*Version update only* +## 2.6.1 +Thu, 23 Jul 2020 22:11:12 GMT +### Patches +- Add appropriate @types dependencies. +- Upgrade TypeScript from v3.8.3 to v3.9.5 +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT -## [1.2.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/utils-node@1.2.2...@neo-one/utils-node@1.2.3) (2019-10-23) +### Minor changes -**Note:** Version bump only for package @neo-one/utils-node +- update package release process to take better advantage of rush tooling +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT +### Minor changes +- Migrate to Rush +### Patches -## [1.2.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/utils-node@1.2.1...@neo-one/utils-node@1.2.2) (2019-10-23) +- update npm-package-arg to 7.0.0 -**Note:** Version bump only for package @neo-one/utils-node - - - - - -## [1.2.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/utils-node@1.2.0...@neo-one/utils-node@1.2.1) (2019-08-30) - -**Note:** Version bump only for package @neo-one/utils-node - - - - - -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/utils-node@1.1.4...@neo-one/utils-node@1.2.0) (2019-08-23) - - -### Features - -* **e2e:** node-bin e2e consensus test ([0671932](https://github.com/neo-one-suite/neo-one/commit/0671932)) - - - - - -## [1.1.4](https://github.com/neo-one-suite/neo-one/compare/@neo-one/utils-node@1.1.3...@neo-one/utils-node@1.1.4) (2019-08-22) - -**Note:** Version bump only for package @neo-one/utils-node - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/utils-node@1.1.2...@neo-one/utils-node@1.1.3) (2019-07-29) - -**Note:** Version bump only for package @neo-one/utils-node - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/utils-node@1.1.1...@neo-one/utils-node@1.1.2) (2019-06-20) - -**Note:** Version bump only for package @neo-one/utils-node - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/utils-node@1.1.0...@neo-one/utils-node@1.1.1) (2019-06-04) - - -### Bug Fixes - -* **@neo-one/types:** eliminate global types from @neo-one/types ([004330d](https://github.com/neo-one-suite/neo-one/commit/004330d)) - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/utils-node@1.0.2...@neo-one/utils-node@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/utils-node - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/utils-node@1.0.2-alpha.0...@neo-one/utils-node@1.0.2) (2019-02-21) - -**Note:** Version bump only for package @neo-one/utils-node - - - - - -## 1.0.2-alpha.0 (2019-02-15) - -**Note:** Version bump only for package @neo-one/utils-node diff --git a/packages/neo-one-utils-node/gulpfile.js b/packages/neo-one-utils-node/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-utils-node/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-utils-node/package.json b/packages/neo-one-utils-node/package.json index 1050dd1e8a..e4bf3d1a9e 100644 --- a/packages/neo-one-utils-node/package.json +++ b/packages/neo-one-utils-node/package.json @@ -1,19 +1,31 @@ { "name": "@neo-one/utils-node", - "version": "2.3.0", + "version": "2.6.2", "description": "NEOβ€’ONE shared Nodejs utils.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "@neo-one/utils": "^2.3.0", + "@neo-one/utils": "^3.0.0", + "@types/pino": "^5.8.9", + "@types/yargs": "^13.0.3", "execa": "^3.2.0", - "npm-package-arg": "^6.1.0", + "npm-package-arg": "^7.0.0", "pino": "^5.12.6", - "yargs": "^14.0.0" + "tslib": "^1.10.0", + "yargs": "^14.2.0" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "@types/jest": "^24.0.18", "@types/npm-package-arg": "^6.1.0", - "@types/pino": "^5.8.9", - "@types/yargs": "^13.0.2" - }, - "sideEffects": false + "gulp": "~4.0.2" + } } diff --git a/packages/neo-one-utils-node/tsconfig.json b/packages/neo-one-utils-node/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-utils-node/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-utils/.npmignore b/packages/neo-one-utils/.npmignore new file mode 100644 index 0000000000..0138aa2098 --- /dev/null +++ b/packages/neo-one-utils/.npmignore @@ -0,0 +1,22 @@ + +# Ignore everything by default +** + +# Use negative patterns to bring back the specific things we want to publish +!/bin/** +!/dist/** + +# Ignore certain files in the above folder +/dist/**/*.map + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +## Project specific definitions +# ----------------------------- + +# (Add your exceptions here) diff --git a/packages/neo-one-utils/CHANGELOG.json b/packages/neo-one-utils/CHANGELOG.json new file mode 100644 index 0000000000..900856be10 --- /dev/null +++ b/packages/neo-one-utils/CHANGELOG.json @@ -0,0 +1,64 @@ +{ + "name": "@neo-one/utils", + "entries": [ + { + "version": "3.0.0", + "tag": "@neo-one/utils_v3.0.0", + "date": "Tue, 08 Dec 2020 19:29:01 GMT", + "comments": { + "major": [ + { + "comment": "3.0.0preview3-alpha release bump" + } + ] + } + }, + { + "version": "2.6.1", + "tag": "@neo-one/utils_v2.6.1", + "date": "Thu, 23 Jul 2020 22:11:12 GMT", + "comments": { + "patch": [ + { + "comment": "Upgrade TypeScript from v3.8.3 to v3.9.5" + } + ], + "none": [ + { + "comment": "bump package version for future release clarity" + } + ] + } + }, + { + "version": "2.5.0", + "tag": "@neo-one/utils_v2.5.0", + "date": "Wed, 20 May 2020 07:03:14 GMT", + "comments": { + "minor": [ + { + "comment": "remove opencensus metrics temporarily" + }, + { + "comment": "update package release process to take better advantage of rush tooling" + } + ] + } + }, + { + "version": "2.4.0", + "tag": "@neo-one/utils_v2.4.0", + "date": "Mon, 13 Apr 2020 23:20:32 GMT", + "comments": { + "minor": [ + { + "comment": "Migrate to Rush" + }, + { + "comment": "Upgrade TS to v3.8.1-rc" + } + ] + } + } + ] +} diff --git a/packages/neo-one-utils/CHANGELOG.md b/packages/neo-one-utils/CHANGELOG.md index 8138d260a0..0735d0e4ff 100644 --- a/packages/neo-one-utils/CHANGELOG.md +++ b/packages/neo-one-utils/CHANGELOG.md @@ -1,99 +1,34 @@ -# Change Log +# Change Log - @neo-one/utils -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +This log was last generated on Tue, 08 Dec 2020 19:29:01 GMT and should not be manually modified. -# [2.3.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/utils@1.2.2...@neo-one/utils@2.3.0) (2019-10-23) +## 3.0.0 +Tue, 08 Dec 2020 19:29:01 GMT -**Note:** Version bump only for package @neo-one/utils +### Breaking changes +- 3.0.0preview3-alpha release bump +## 2.6.1 +Thu, 23 Jul 2020 22:11:12 GMT +### Patches +- Upgrade TypeScript from v3.8.3 to v3.9.5 -## [1.2.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/utils@1.2.1...@neo-one/utils@1.2.2) (2019-10-23) +## 2.5.0 +Wed, 20 May 2020 07:03:14 GMT -**Note:** Version bump only for package @neo-one/utils +### Minor changes +- remove opencensus metrics temporarily +- update package release process to take better advantage of rush tooling +## 2.4.0 +Mon, 13 Apr 2020 23:20:32 GMT +### Minor changes +- Migrate to Rush +- Upgrade TS to v3.8.1-rc -## [1.2.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/utils@1.2.0...@neo-one/utils@1.2.1) (2019-08-30) - -**Note:** Version bump only for package @neo-one/utils - - - - - -# [1.2.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/utils@1.1.3...@neo-one/utils@1.2.0) (2019-08-22) - - -### Features - -* **monitor:** remove @neo-one/monitor. replace with opencensus, pino, and debug ([#1597](https://github.com/neo-one-suite/neo-one/issues/1597)) ([4b1a28f](https://github.com/neo-one-suite/neo-one/commit/4b1a28f)) - - - - - -## [1.1.3](https://github.com/neo-one-suite/neo-one/compare/@neo-one/utils@1.1.2...@neo-one/utils@1.1.3) (2019-07-29) - -**Note:** Version bump only for package @neo-one/utils - - - - - -## [1.1.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/utils@1.1.1...@neo-one/utils@1.1.2) (2019-06-20) - -**Note:** Version bump only for package @neo-one/utils - - - - - -## [1.1.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/utils@1.1.0...@neo-one/utils@1.1.1) (2019-06-04) - - -### Bug Fixes - -* **@neo-one/types:** eliminate global types from @neo-one/types ([004330d](https://github.com/neo-one-suite/neo-one/commit/004330d)) - - - - - -# [1.1.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/utils@1.0.2...@neo-one/utils@1.1.0) (2019-02-21) - -**Note:** Version bump only for package @neo-one/utils - - - - - -## [1.0.2](https://github.com/neo-one-suite/neo-one/compare/@neo-one/utils@1.0.2-alpha.0...@neo-one/utils@1.0.2) (2019-02-21) - -**Note:** Version bump only for package @neo-one/utils - - - - - -## [1.0.2-alpha.0](https://github.com/neo-one-suite/neo-one/compare/@neo-one/utils@1.0.1...@neo-one/utils@1.0.2-alpha.0) (2019-02-15) - - -### Bug Fixes - -* **deps:** update dependency @types/lodash to v4.14.120 ([a76dae7](https://github.com/neo-one-suite/neo-one/commit/a76dae7)) -* **deps:** update dependency change-case to v3.1.0 ([4255281](https://github.com/neo-one-suite/neo-one/commit/4255281)) -* **deps:** update dependency rxjs to v6.4.0 ([e28af2a](https://github.com/neo-one-suite/neo-one/commit/e28af2a)) - - - - - -## [1.0.1](https://github.com/neo-one-suite/neo-one/compare/@neo-one/utils@1.0.0...@neo-one/utils@1.0.1) (2018-11-13) - -**Note:** Version bump only for package @neo-one/utils diff --git a/packages/neo-one-utils/gulpfile.js b/packages/neo-one-utils/gulpfile.js new file mode 100644 index 0000000000..6267e6b0d6 --- /dev/null +++ b/packages/neo-one-utils/gulpfile.js @@ -0,0 +1,5 @@ +'use strict'; + +const build = require('@neo-one/build-tools'); + +build.initialize(); diff --git a/packages/neo-one-utils/package.json b/packages/neo-one-utils/package.json index 54f2291fef..89f8736333 100644 --- a/packages/neo-one-utils/package.json +++ b/packages/neo-one-utils/package.json @@ -1,15 +1,30 @@ { "name": "@neo-one/utils", - "version": "2.3.0", + "version": "3.0.0", "description": "NEOβ€’ONE shared utils.", - "main": "./src/index", + "main": "./dist/cjs/index", + "module": "./dist/esm/index", + "license": "MIT", + "scripts": { + "build": "gulp", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "pack": "gulp pack", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { + "@types/node": "^12.7.7", "lodash": "^4.17.15", - "rxjs": "^6.5.2", + "rxjs": "^6.5.3", "tslib": "^1.10.0" }, "devDependencies": { - "@types/lodash": "^4.14.138" - }, - "sideEffects": false + "@neo-one/build-tools": "^1.0.0", + "@types/jest": "^24.0.18", + "@types/lodash": "^4.14.138", + "gulp": "~4.0.2", + "jest": "^24.9.0", + "typescript": "3.9.5" + } } diff --git a/packages/neo-one-utils/src/Disposable.ts b/packages/neo-one-utils/src/Disposable.ts index 60828a0a25..4586147956 100644 --- a/packages/neo-one-utils/src/Disposable.ts +++ b/packages/neo-one-utils/src/Disposable.ts @@ -7,3 +7,15 @@ export const noopDisposable: Disposable = async () => { export const composeDisposables = (...disposables: readonly Disposable[]): Disposable => async () => { await Promise.all(disposables.map((dispose) => dispose())); }; + +export const composeInOrderDisposables = (...disposables: readonly Disposable[]): Disposable => async () => { + // tslint:disable-next-line: no-loop-statement + for (const disposable of disposables) { + await disposable(); + } +}; + +export const composeDisposable = (newDisposable: Disposable, prevDisposable: Disposable) => async () => { + await newDisposable(); + await prevDisposable(); +}; diff --git a/packages/neo-one-utils/src/JSONType.ts b/packages/neo-one-utils/src/JSONType.ts new file mode 100644 index 0000000000..48ebf7d10e --- /dev/null +++ b/packages/neo-one-utils/src/JSONType.ts @@ -0,0 +1,6 @@ +export type JSONValue = JSONPrimitive | JSONObject | JSONArray; +export type JSONPrimitive = string | number | boolean | null; +export interface JSONObject { + readonly [member: string]: JSONValue; +} +export interface JSONArray extends Array {} diff --git a/packages/neo-one-utils/src/index.ts b/packages/neo-one-utils/src/index.ts index 7da0028c40..87108ba0a0 100644 --- a/packages/neo-one-utils/src/index.ts +++ b/packages/neo-one-utils/src/index.ts @@ -13,3 +13,4 @@ export * from './onComplete'; export * from './retryBackoff'; export * from './timer'; export * from './utils'; +export * from './JSONType'; diff --git a/packages/neo-one-utils/src/labels.ts b/packages/neo-one-utils/src/labels.ts index 489edf7cf9..0ca69ae307 100644 --- a/packages/neo-one-utils/src/labels.ts +++ b/packages/neo-one-utils/src/labels.ts @@ -92,20 +92,3 @@ export enum Labels { JSONRPC_TYPE = 'jsonrpc.type', COMMAND_NAME = 'command.name', } - -export const labelToTag = (label: string) => ({ - name: label.replace(/\./g, '_'), -}); - -export const labelsToTags = (labels: readonly string[]) => labels.map(labelToTag); - -interface Span { - readonly addAttribute: (key: string, value: string | number | boolean) => void; -} - -// tslint:disable-next-line: export-name -export const addAttributesToSpan = (span: Span, attributes: Record) => { - Object.entries(attributes).forEach(([key, value]) => { - span.addAttribute(key, value); - }); -}; diff --git a/packages/neo-one-utils/src/utils.ts b/packages/neo-one-utils/src/utils.ts index 3946b9bbcb..5afda76571 100644 --- a/packages/neo-one-utils/src/utils.ts +++ b/packages/neo-one-utils/src/utils.ts @@ -10,6 +10,21 @@ function nullthrows(value: T | null | undefined): T { return value; } +function numCompAscending(a: number, b: number): -1 | 0 | 1 { + if (a < b) { + return -1; + } + if (b < a) { + return 1; + } + + return 0; +} + +function numCompDescending(a: number, b: number) { + return numCompAscending(a, b) * -1; +} + function assertNever(_value: never): void { // do nothing } @@ -35,6 +50,8 @@ function zip(...arrays: Array | null | undefined>): T[][] { export const utils = { nowSeconds, nullthrows, + numCompAscending, + numCompDescending, assertNever, notNull, isPromise, diff --git a/packages/neo-one-utils/tsconfig.json b/packages/neo-one-utils/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-utils/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/packages/neo-one-website/blog/2020-07-23-neo-one-2-7-announcement.md b/packages/neo-one-website/blog/2020-07-23-neo-one-2-7-announcement.md new file mode 100644 index 0000000000..9653b2e9d8 --- /dev/null +++ b/packages/neo-one-website/blog/2020-07-23-neo-one-2-7-announcement.md @@ -0,0 +1,67 @@ +--- +slug: 2020/07/23/neo-one-2-7-announcement +title: NEOβ€’ONE 2.7 Announcement +author: The NEOβ€’ONE Team +twitter: https://twitter.com/neo_one_suite +--- + +## NEOβ€’ONE 2.7 + +We are excited to announce our latest [release](https://www.npmjs.com/package/@neo-one/cli) of NEOβ€’ONE. For this release we have been focused on cleaning up bugs, adding new compiler features, expanding documentation, and preparing for future versions of NEOβ€’ONE as we draw closer to the Neo3 release. + +To get started with NEOβ€’ONE you can install our CLI with +`yarn add @neo-one/cli` + +## Compile + +Starting with NEOβ€’ONE 2.7 you will be able to output your compiled smart contract to various format types as well as generate debug information as per the spec listed [here](https://github.com/ngdseattle/design-notes/blob/master/NDX-DN11%20-%20NEO%20Debug%20Info%20Specification.md). We hope this will give our users more freedom in the end-to-end tooling they choose to use for developing their smart contracts. To get started with testing these new features you can use: + +`yarn add @neo-one/cli`\ +`yarn neo-one init`\ +`yarn neo-one compile --json --avm --debug --opcodes` + +For more information on how to enable AVM / debug generation use + +`yarn neo-one compile --help` + +or see the [pull request](https://github.com/neo-one-suite/neo-one/pull/2071). + +### Further Work + +While we have added the ability to output our compiled smart contracts as `.debug` and `.avm` files there is still work to be done to integrate these features with other tooling, like the Neo Blockchain Toolkit. See the PR linked above or visit the new issue page [here](https://github.com/neo-one-suite/neo-one/issues/2113) for more information. Also be sure to check out our [documentation](/docs/how-to-contribute#How-Can-I-Contribute) on building from source if you would like to help contribute to the project! + +## Typescript Updates + +In continuing with our efforts to keep NEOβ€’ONE up to date with Typescript we have [updated](https://github.com/neo-one-suite/neo-one/pull/2063) the project to use TypeScript version 3.9.5. While there aren’t as many new features available in the compiler as our [last](https://github.com/neo-one-suite/neo-one/pull/1984) update we want to keep our feature set as familiar to new developers as we can, especially as we gear up for Neo3. + +## Documentation + +We’ve added several new sections of documentation to the website: + +- [Deployment documentation](/docs/deployment) +- [The NEOβ€’ONE CLI](/docs/cli) +- [Network configuration](/docs/config-options) +- [Project contribution](/docs/how-to-contribute#How-Can-I-Contribute) +- [Compiler contribution](/docs/smart-contract-compiler) + +Stumped on something and can’t find documentation for it? Feel free to submit a new [issue](https://github.com/neo-one-suite/neo-one/issues) to request it! + +## Bug Fixes / Feature Changes + +In NEOβ€’ONE 2.7 several bugs have been fixed and features have been updated. You can see all the changes listed below. + +- [#2056 Generated createClient does not wait For account setup](https://github.com/neo-one-suite/neo-one/pull/2056) +- [#2051 Update default network options](https://github.com/neo-one-suite/neo-one/pull/2051) +- [#2093 Fix switch-statement execution](https://github.com/neo-one-suite/neo-one/pull/2093) +- [#2095 Fix number mismatches in SetStorage, ArrayStorage and MapStorage](https://github.com/neo-one-suite/neo-one/pull/2095) +- [#2086 Export defaultnetwork helper from CLI](https://github.com/neo-one-suite/neo-one/pull/2086) +- [#2080 Fix missing type declarations in shipped packages](https://github.com/neo-one-suite/neo-one/pull/2091) +- [#2096 Fix β€˜receive’ invocations when relaying transactions to a live network](https://github.com/neo-one-suite/neo-one/pull/2096) +- [#2112 Fix error when using typescript migration file for deployment](https://github.com/neo-one-suite/neo-one/pull/2112) +- [#2034 Update npm release process for smoother releases](https://github.com/neo-one-suite/neo-one/pull/2034) + +## Future + +NEOβ€’ONE 2.7 will be the last milestone release for NEOβ€’ONE 2.x, while small bug fixes and integration fixes (like https://github.com/neo-one-suite/neo-one/pull/2034) will continue to be released on the 2.x version our work will primarily focus on updating NEOβ€’ONE to be compatible with the Neo3 protocol. Look out for the upcoming releases that will include Neo3 Preview, TestNet and MainNet compatibility. + +Questions or concerns? Feel free to reach out to us on [GitHub](https://github.com/neo-one-suite/neo-one) or [Twitter](https://twitter.com/neo_one_suite) diff --git a/packages/neo-one-website/courses/0-tokenomics/0-token/5-methods/chapter.md b/packages/neo-one-website/courses/0-tokenomics/0-token/5-methods/chapter.md index 387883bac2..981908d930 100644 --- a/packages/neo-one-website/courses/0-tokenomics/0-token/5-methods/chapter.md +++ b/packages/neo-one-website/courses/0-tokenomics/0-token/5-methods/chapter.md @@ -14,7 +14,7 @@ export class Example extends SmartContract { public myMethod(addr: Address): Fixed<8> { this.myMapStorage.set(addr, 10); - const value = this.myMapStorage.get(addr) + const value = this.myMapStorage.get(addr); return value === undefined ? 0 : value; } @@ -23,20 +23,20 @@ export class Example extends SmartContract { Look familiar? This is the same example from Chapter 3: Structured Storage. In terms of the smart contract, there's not much to add, a method that does not have the `@constant` decorator can mutate primitive and structured storage properties. Otherwise, they're free to contain any valid TypeScript just like `@constant` methods. -The main difference for the NEOβ€’ONE client APIs is that methods require relaying a transaction to the blockchain. This makes sense because a non-constant method by definiton mutates storage, and we need to persist those changes to the blockchain. +The main difference for the NEOβ€’ONE client APIs is that non-constant methods require relaying a transaction to the blockchain. This makes sense because a non-constant method by definiton mutates storage, and we need to persist those changes to the blockchain. ## Instructions - 1. Add a simple method `issue` which takes two parameters, the `Address` to issue tokens to and a `Fixed<8>` for the amount of tokens to issue. This method should do two things: - 1. Increase the balance of the `Address` by the `Fixed<8>` amount. - 2. Increase the `mutableSupply` by the `Fixed<8>` amount. - 2. Add a check for `Address.isCaller(owner)` and throw an `Error` if it does not return true. +1. Add a simple method `issue` which takes two parameters, the `Address` to issue tokens to and a `Fixed<8>` for the amount of tokens to issue. This method should do two things: + 1. Increase the balance of the `Address` by the `Fixed<8>` amount. + 2. Increase the `mutableSupply` by the `Fixed<8>` amount. +2. Add a check for `Address.isCaller(owner)` and throw an `Error` if it does not return true. ## Test Take a look at the tests for this chapter in `Token.test.ts`. Notice how unlike the `@constant` methods and `readonly` properties, we check that the invocation succeeded. We also have a test that makes sure the invocation failed when the `from` address is not the `owner`. -Hover over the return values and you'll see that they return a `InvokeReceipt`, which is the "receipt" for the confirmed transaction on the blockchain. When a transaction, like a smart contract invocation, is relayed to the blockchain, we wait for it to be confirmed in a block. Once it has been confirmed, we receive a β€œreceipt” of that confirmation which lets us know whether the transaction succeeded and gives us access to any return values. Since the `issue` method doesn't return anything, we receive a `void` value in the receipt. We'll talk more about `TokenEvent` in the next chapter, so for now you can ignore that. +Hover over the return values and you'll see that they return a `InvokeReceipt`, which is the "receipt" for the confirmed transaction on the blockchain. When a transaction, like a smart contract invocation, is relayed to the blockchain, we wait for it to be confirmed in a block. Once it has been confirmed, we receive a β€œreceipt” of that confirmation which lets us know whether the transaction succeeded and gives us access to any return values. Since the `issue` method doesn't return anything, we receive a `void` value in the receipt. We'll talk more about `TokenEvent` in the next chapter, so for now you can ignore that. In our test, we use the shortcut method `confirmed` to do both steps in one call, but you can also make two invocations - in later lessons we'll cover both in more detail. Another thing you might notice is that the NEOβ€’ONE client APIs generate methods that are nearly identical to the methods you've defined in your smart contract, making it feel like you're just calling the same methods you defined. diff --git a/packages/neo-one-website/courses/0-tokenomics/2-launch/0-info/package.json b/packages/neo-one-website/courses/0-tokenomics/2-launch/0-info/package.json index 1a440a5e90..a90ce0cfc5 100644 --- a/packages/neo-one-website/courses/0-tokenomics/2-launch/0-info/package.json +++ b/packages/neo-one-website/courses/0-tokenomics/2-launch/0-info/package.json @@ -1,16 +1,16 @@ { "dependencies": { - "@emotion/core": "10.0.22", - "@emotion/styled": "10.0.23", - "@neo-one/react": "1.1.2", - "@neo-one/react-core": "1.1.8", - "@types/react": "16.9.9", + "@emotion/core": "10.0.27", + "@emotion/styled": "10.0.27", + "@neo-one/react": "2.3.0", + "@neo-one/react-core": "2.3.0", + "@types/react": "16.9.19", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", - "emotion-theming": "10.0.19", + "emotion-theming": "10.0.27", "react": "16.10.0", "react-dom": "16.10.0", - "rxjs": "6.5.3", + "rxjs": "6.5.4", "styled-tools": "1.7.1" } } diff --git a/packages/neo-one-website/courses/0-tokenomics/2-launch/0-info/src/ICO.tsx b/packages/neo-one-website/courses/0-tokenomics/2-launch/0-info/src/ICO.tsx index 80c457e3e4..27bb740c90 100644 --- a/packages/neo-one-website/courses/0-tokenomics/2-launch/0-info/src/ICO.tsx +++ b/packages/neo-one-website/courses/0-tokenomics/2-launch/0-info/src/ICO.tsx @@ -10,7 +10,7 @@ import { prop } from 'styled-tools'; import { WithContracts } from '../one/generated'; import { getTokenInfo } from './utils'; -const StyledGrid = styled(Box)` +const StyledGrid = styled(Box)<{}, {}>` display: grid; ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.body1')}; diff --git a/packages/neo-one-website/courses/0-tokenomics/2-launch/1-balance/package.json b/packages/neo-one-website/courses/0-tokenomics/2-launch/1-balance/package.json index 1a440a5e90..a90ce0cfc5 100644 --- a/packages/neo-one-website/courses/0-tokenomics/2-launch/1-balance/package.json +++ b/packages/neo-one-website/courses/0-tokenomics/2-launch/1-balance/package.json @@ -1,16 +1,16 @@ { "dependencies": { - "@emotion/core": "10.0.22", - "@emotion/styled": "10.0.23", - "@neo-one/react": "1.1.2", - "@neo-one/react-core": "1.1.8", - "@types/react": "16.9.9", + "@emotion/core": "10.0.27", + "@emotion/styled": "10.0.27", + "@neo-one/react": "2.3.0", + "@neo-one/react-core": "2.3.0", + "@types/react": "16.9.19", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", - "emotion-theming": "10.0.19", + "emotion-theming": "10.0.27", "react": "16.10.0", "react-dom": "16.10.0", - "rxjs": "6.5.3", + "rxjs": "6.5.4", "styled-tools": "1.7.1" } } diff --git a/packages/neo-one-website/courses/0-tokenomics/2-launch/1-balance/src/ICO.tsx b/packages/neo-one-website/courses/0-tokenomics/2-launch/1-balance/src/ICO.tsx index 211b59c438..7ce5e5e782 100644 --- a/packages/neo-one-website/courses/0-tokenomics/2-launch/1-balance/src/ICO.tsx +++ b/packages/neo-one-website/courses/0-tokenomics/2-launch/1-balance/src/ICO.tsx @@ -9,7 +9,7 @@ import { prop } from 'styled-tools'; import { WithContracts } from '../one/generated'; import { getTokenInfo } from './utils'; -const StyledGrid = styled(Box)` +const StyledGrid = styled(Box)<{}, {}>` display: grid; ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.body1')}; diff --git a/packages/neo-one-website/courses/0-tokenomics/2-launch/2-participate/package.json b/packages/neo-one-website/courses/0-tokenomics/2-launch/2-participate/package.json index 1a440a5e90..a90ce0cfc5 100644 --- a/packages/neo-one-website/courses/0-tokenomics/2-launch/2-participate/package.json +++ b/packages/neo-one-website/courses/0-tokenomics/2-launch/2-participate/package.json @@ -1,16 +1,16 @@ { "dependencies": { - "@emotion/core": "10.0.22", - "@emotion/styled": "10.0.23", - "@neo-one/react": "1.1.2", - "@neo-one/react-core": "1.1.8", - "@types/react": "16.9.9", + "@emotion/core": "10.0.27", + "@emotion/styled": "10.0.27", + "@neo-one/react": "2.3.0", + "@neo-one/react-core": "2.3.0", + "@types/react": "16.9.19", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", - "emotion-theming": "10.0.19", + "emotion-theming": "10.0.27", "react": "16.10.0", "react-dom": "16.10.0", - "rxjs": "6.5.3", + "rxjs": "6.5.4", "styled-tools": "1.7.1" } } diff --git a/packages/neo-one-website/courses/0-tokenomics/2-launch/2-participate/src/ICO.tsx b/packages/neo-one-website/courses/0-tokenomics/2-launch/2-participate/src/ICO.tsx index f80765b37f..39533378a6 100644 --- a/packages/neo-one-website/courses/0-tokenomics/2-launch/2-participate/src/ICO.tsx +++ b/packages/neo-one-website/courses/0-tokenomics/2-launch/2-participate/src/ICO.tsx @@ -11,7 +11,7 @@ import { prop } from 'styled-tools'; import { TokenSmartContract, WithContracts } from '../one/generated'; import { getTokenInfo, handleMint } from './utils'; -const InfoGrid = styled(Box)` +const InfoGrid = styled(Box)<{}, {}>` display: grid; ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.body1')}; @@ -24,7 +24,7 @@ const InfoGrid = styled(Box)` gap: 0; `; -const ContributeGrid = styled(Box)` +const ContributeGrid = styled(Box)<{}, {}>` display: grid; ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.body1')}; diff --git a/packages/neo-one-website/courses/0-tokenomics/2-launch/3-reactive/chapter.md b/packages/neo-one-website/courses/0-tokenomics/2-launch/3-reactive/chapter.md index 00f48b0fbf..7be9a37dc5 100644 --- a/packages/neo-one-website/courses/0-tokenomics/2-launch/3-reactive/chapter.md +++ b/packages/neo-one-website/courses/0-tokenomics/2-launch/3-reactive/chapter.md @@ -31,7 +31,7 @@ export class Example extends SmartContract { import { combineLatest } from 'rxjs'; import { switchMap } from 'rxjs/operators'; -const value$ = combineLatest(client.currentUserAccount$, client.block$).pipe( +const value$ = combineLatest([client.currentUserAccount$, client.block$]).pipe( switchMap(async ([userAccount]) => { const value = await example.myConstantFunction(userAccount.id.address); diff --git a/packages/neo-one-website/courses/0-tokenomics/2-launch/3-reactive/package.json b/packages/neo-one-website/courses/0-tokenomics/2-launch/3-reactive/package.json index 1a440a5e90..a90ce0cfc5 100644 --- a/packages/neo-one-website/courses/0-tokenomics/2-launch/3-reactive/package.json +++ b/packages/neo-one-website/courses/0-tokenomics/2-launch/3-reactive/package.json @@ -1,16 +1,16 @@ { "dependencies": { - "@emotion/core": "10.0.22", - "@emotion/styled": "10.0.23", - "@neo-one/react": "1.1.2", - "@neo-one/react-core": "1.1.8", - "@types/react": "16.9.9", + "@emotion/core": "10.0.27", + "@emotion/styled": "10.0.27", + "@neo-one/react": "2.3.0", + "@neo-one/react-core": "2.3.0", + "@types/react": "16.9.19", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", - "emotion-theming": "10.0.19", + "emotion-theming": "10.0.27", "react": "16.10.0", "react-dom": "16.10.0", - "rxjs": "6.5.3", + "rxjs": "6.5.4", "styled-tools": "1.7.1" } } diff --git a/packages/neo-one-website/courses/0-tokenomics/2-launch/3-reactive/src/ICO.tsx b/packages/neo-one-website/courses/0-tokenomics/2-launch/3-reactive/src/ICO.tsx index 059334210b..992bc4780a 100644 --- a/packages/neo-one-website/courses/0-tokenomics/2-launch/3-reactive/src/ICO.tsx +++ b/packages/neo-one-website/courses/0-tokenomics/2-launch/3-reactive/src/ICO.tsx @@ -11,7 +11,7 @@ import { prop } from 'styled-tools'; import { TokenSmartContract, WithContracts } from '../one/generated'; import { createTokenInfoStream$, handleMint } from './utils'; -const InfoGrid = styled(Box)` +const InfoGrid = styled(Box)<{}, {}>` display: grid; ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.body1')}; @@ -24,7 +24,7 @@ const InfoGrid = styled(Box)` gap: 0; `; -const ContributeGrid = styled(Box)` +const ContributeGrid = styled(Box)<{}, {}>` display: grid; ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.body1')}; diff --git a/packages/neo-one-website/courses/0-tokenomics/2-launch/3-reactive/src/utils.solution.ts b/packages/neo-one-website/courses/0-tokenomics/2-launch/3-reactive/src/utils.solution.ts index 8405764b84..dffe991dbe 100644 --- a/packages/neo-one-website/courses/0-tokenomics/2-launch/3-reactive/src/utils.solution.ts +++ b/packages/neo-one-website/courses/0-tokenomics/2-launch/3-reactive/src/utils.solution.ts @@ -58,7 +58,7 @@ export const handleMint = async ( }; export const createTokenInfoStream$ = (client: Client, token: TokenSmartContract): Observable => - combineLatest(client.currentUserAccount$, client.block$).pipe( + combineLatest([client.currentUserAccount$, client.block$]).pipe( switchMap(async ([userAccount]) => getTokenInfo(token, userAccount === undefined ? undefined : userAccount.id.address), ), diff --git a/packages/neo-one-website/courses/0-tokenomics/2-launch/4-transfer/package.json b/packages/neo-one-website/courses/0-tokenomics/2-launch/4-transfer/package.json index 1a440a5e90..a90ce0cfc5 100644 --- a/packages/neo-one-website/courses/0-tokenomics/2-launch/4-transfer/package.json +++ b/packages/neo-one-website/courses/0-tokenomics/2-launch/4-transfer/package.json @@ -1,16 +1,16 @@ { "dependencies": { - "@emotion/core": "10.0.22", - "@emotion/styled": "10.0.23", - "@neo-one/react": "1.1.2", - "@neo-one/react-core": "1.1.8", - "@types/react": "16.9.9", + "@emotion/core": "10.0.27", + "@emotion/styled": "10.0.27", + "@neo-one/react": "2.3.0", + "@neo-one/react-core": "2.3.0", + "@types/react": "16.9.19", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", - "emotion-theming": "10.0.19", + "emotion-theming": "10.0.27", "react": "16.10.0", "react-dom": "16.10.0", - "rxjs": "6.5.3", + "rxjs": "6.5.4", "styled-tools": "1.7.1" } } diff --git a/packages/neo-one-website/courses/0-tokenomics/2-launch/4-transfer/src/ICO.tsx b/packages/neo-one-website/courses/0-tokenomics/2-launch/4-transfer/src/ICO.tsx index fbd62afdce..c8502ebd67 100644 --- a/packages/neo-one-website/courses/0-tokenomics/2-launch/4-transfer/src/ICO.tsx +++ b/packages/neo-one-website/courses/0-tokenomics/2-launch/4-transfer/src/ICO.tsx @@ -13,7 +13,7 @@ import { prop } from 'styled-tools'; import { TokenSmartContract, WithContracts } from '../one/generated'; import { createTokenInfoStream$, handleMint, handleTransfer } from './utils'; -const InfoGrid = styled(Box)` +const InfoGrid = styled(Box)<{}, {}>` display: grid; ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.body1')}; @@ -26,7 +26,7 @@ const InfoGrid = styled(Box)` gap: 0; `; -const ContributeGrid = styled(Box)` +const ContributeGrid = styled(Box)<{}, {}>` display: grid; ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.body1')}; @@ -40,7 +40,7 @@ const ContributeGrid = styled(Box)` margin: 8px; `; -const TransferGrid = styled(Box)` +const TransferGrid = styled(Box)<{}, {}>` display: grid; ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.body1')}; diff --git a/packages/neo-one-website/courses/0-tokenomics/2-launch/4-transfer/src/utils.solution.ts b/packages/neo-one-website/courses/0-tokenomics/2-launch/4-transfer/src/utils.solution.ts index f93dd52c13..7be18c6840 100644 --- a/packages/neo-one-website/courses/0-tokenomics/2-launch/4-transfer/src/utils.solution.ts +++ b/packages/neo-one-website/courses/0-tokenomics/2-launch/4-transfer/src/utils.solution.ts @@ -58,7 +58,7 @@ export const handleMint = async ( }; export const createTokenInfoStream$ = (client: Client, token: TokenSmartContract): Observable => - combineLatest(client.currentUserAccount$, client.block$).pipe( + combineLatest([client.currentUserAccount$, client.block$]).pipe( switchMap(async ([userAccount]) => getTokenInfo(token, userAccount === undefined ? undefined : userAccount.id.address), ), diff --git a/packages/neo-one-website/courses/0-tokenomics/2-launch/4-transfer/src/utils.ts b/packages/neo-one-website/courses/0-tokenomics/2-launch/4-transfer/src/utils.ts index dc207b3435..b996f3634d 100644 --- a/packages/neo-one-website/courses/0-tokenomics/2-launch/4-transfer/src/utils.ts +++ b/packages/neo-one-website/courses/0-tokenomics/2-launch/4-transfer/src/utils.ts @@ -58,7 +58,7 @@ export const handleMint = async ( }; export const createTokenInfoStream$ = (client: Client, token: TokenSmartContract): Observable => - combineLatest(client.currentUserAccount$, client.block$).pipe( + combineLatest([client.currentUserAccount$, client.block$]).pipe( switchMap(async ([userAccount]) => getTokenInfo(token, userAccount === undefined ? undefined : userAccount.id.address), ), diff --git a/packages/neo-one-website/courses/0-tokenomics/2-launch/5-withdraw/package.json b/packages/neo-one-website/courses/0-tokenomics/2-launch/5-withdraw/package.json index 1a440a5e90..a90ce0cfc5 100644 --- a/packages/neo-one-website/courses/0-tokenomics/2-launch/5-withdraw/package.json +++ b/packages/neo-one-website/courses/0-tokenomics/2-launch/5-withdraw/package.json @@ -1,16 +1,16 @@ { "dependencies": { - "@emotion/core": "10.0.22", - "@emotion/styled": "10.0.23", - "@neo-one/react": "1.1.2", - "@neo-one/react-core": "1.1.8", - "@types/react": "16.9.9", + "@emotion/core": "10.0.27", + "@emotion/styled": "10.0.27", + "@neo-one/react": "2.3.0", + "@neo-one/react-core": "2.3.0", + "@types/react": "16.9.19", "@types/react-dom": "16.9.1", "bignumber.js": "9.0.0", - "emotion-theming": "10.0.19", + "emotion-theming": "10.0.27", "react": "16.10.0", "react-dom": "16.10.0", - "rxjs": "6.5.3", + "rxjs": "6.5.4", "styled-tools": "1.7.1" } } diff --git a/packages/neo-one-website/courses/0-tokenomics/2-launch/5-withdraw/src/ICO.tsx b/packages/neo-one-website/courses/0-tokenomics/2-launch/5-withdraw/src/ICO.tsx index 397c463495..08fe88929c 100644 --- a/packages/neo-one-website/courses/0-tokenomics/2-launch/5-withdraw/src/ICO.tsx +++ b/packages/neo-one-website/courses/0-tokenomics/2-launch/5-withdraw/src/ICO.tsx @@ -13,7 +13,7 @@ import { prop } from 'styled-tools'; import { TokenSmartContract, WithContracts } from '../one/generated'; import { createTokenInfoStream$, handleMint, handleTransfer, handleWithdraw } from './utils'; -const InfoGrid = styled(Box)` +const InfoGrid = styled(Box)<{}, {}>` display: grid; ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.body1')}; @@ -26,7 +26,7 @@ const InfoGrid = styled(Box)` gap: 0; `; -const ContributeGrid = styled(Box)` +const ContributeGrid = styled(Box)<{}, {}>` display: grid; ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.body1')}; @@ -40,7 +40,7 @@ const ContributeGrid = styled(Box)` margin: 8px; `; -const TransferGrid = styled(Box)` +const TransferGrid = styled(Box)<{}, {}>` display: grid; ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.body1')}; @@ -54,7 +54,7 @@ const TransferGrid = styled(Box)` margin: 8px; `; -const WithdrawGrid = styled(Box)` +const WithdrawGrid = styled(Box)<{}, {}>` display: grid; ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.body1')}; diff --git a/packages/neo-one-website/courses/0-tokenomics/2-launch/5-withdraw/src/utils.solution.ts b/packages/neo-one-website/courses/0-tokenomics/2-launch/5-withdraw/src/utils.solution.ts index f97eca1cca..4914c0425a 100644 --- a/packages/neo-one-website/courses/0-tokenomics/2-launch/5-withdraw/src/utils.solution.ts +++ b/packages/neo-one-website/courses/0-tokenomics/2-launch/5-withdraw/src/utils.solution.ts @@ -58,7 +58,7 @@ export const handleMint = async ( }; export const createTokenInfoStream$ = (client: Client, token: TokenSmartContract): Observable => - combineLatest(client.currentUserAccount$, client.block$).pipe( + combineLatest([client.currentUserAccount$, client.block$]).pipe( switchMap(async ([userAccount]) => getTokenInfo(token, userAccount === undefined ? undefined : userAccount.id.address), ), diff --git a/packages/neo-one-website/courses/0-tokenomics/2-launch/5-withdraw/src/utils.ts b/packages/neo-one-website/courses/0-tokenomics/2-launch/5-withdraw/src/utils.ts index 6bbd237f76..6dfa038f22 100644 --- a/packages/neo-one-website/courses/0-tokenomics/2-launch/5-withdraw/src/utils.ts +++ b/packages/neo-one-website/courses/0-tokenomics/2-launch/5-withdraw/src/utils.ts @@ -58,7 +58,7 @@ export const handleMint = async ( }; export const createTokenInfoStream$ = (client: Client, token: TokenSmartContract): Observable => - combineLatest(client.currentUserAccount$, client.block$).pipe( + combineLatest([client.currentUserAccount$, client.block$]).pipe( switchMap(async ([userAccount]) => getTokenInfo(token, userAccount === undefined ? undefined : userAccount.id.address), ), diff --git a/packages/neo-one-website/docs/0-installation/1-environment-setup.md b/packages/neo-one-website/docs/0-installation/1-environment-setup.md index baf26a60bb..05b10e51ae 100644 --- a/packages/neo-one-website/docs/0-installation/1-environment-setup.md +++ b/packages/neo-one-website/docs/0-installation/1-environment-setup.md @@ -31,15 +31,7 @@ This page describes how to setup NEOβ€’ONE using `yarn` or `npm`. **Once you have a project setup**, the next step is to add NEOβ€’ONE to it. NEOβ€’ONE is organized into multiple individual packages. Use as much or as little as you like. Each package may be installed using either [yarn](https://yarnpkg.com/) (`yarn add `) or [npm](https://www.npmjs.com/) (`npm install `). Each package has the form `@neo-one/`, for example, `@neo-one/client`. -Not sure which packages to use from NEOβ€’ONE? Go ahead and install everything using - -```bash -yarn add @neo-one/suite -``` - -and then follow the [main guide](/docs/hello-world) or the [tutorial](/tutorial). By the end of it you'll know which features of NEOβ€’ONE you're using and which packages to keep. - -If you are already comfortable with neo-one packages, install everything individually with yarn by running: +Install all the neo-one packages with yarn by running: ```bash yarn add @neo-one/client @neo-one/cli @neo-one/smart-contract @neo-one/smart-contract-test @neo-one/smart-contract-lib @neo-one/smart-contract-typescript-plugin @@ -51,6 +43,8 @@ Install everything individually with npm by running: npm install @neo-one/client @neo-one/cli @neo-one/smart-contract @neo-one/smart-contract-test @neo-one/smart-contract-lib @neo-one/smart-contract-typescript-plugin ``` +and then follow the [main guide](/docs/hello-world) or the [tutorial](/tutorial). By the end of it you'll know which features of NEOβ€’ONE you're using and which packages to keep. + Know what you want to use from NEOβ€’ONE? Read on to see which packages to install for specific functionality. For interacting with smart contracts, you should install diff --git a/packages/neo-one-website/docs/0-installation/2-cli.md b/packages/neo-one-website/docs/0-installation/2-cli.md new file mode 100644 index 0000000000..1ceb3b3472 --- /dev/null +++ b/packages/neo-one-website/docs/0-installation/2-cli.md @@ -0,0 +1,103 @@ +--- +slug: cli +title: CLI +--- + +The NEOβ€’ONE CLI is your entry point for all of NEOβ€’ONE's functionality. + +Run `yarn neo-one --help` to see the CLI commands available and their descriptions. +Run `yarn neo-one --help` to see what arguments are available for that command. +Run `yarn neo-one --version` to get the version of NEOβ€’ONE that you are running. + +--- + +[[toc]] + +--- + +## neo-one init + +Initializes a new project in the current directory. This will create a default `.neo-one.config.ts` configuration file, +a sample `Hello World` smart contract in `neo-one/contracts/HelloWorld.ts`, and a unit test in +`src/__tests__/HelloWorld.ts`. + +| Argument | Type | Default | Description | +| --------- | --------- | ------- | -------------------------------------------------------------------------------------------------------- | +| `--react` | `boolean` | `false` | Setting this to true will generate an example. React component that uses the `HelloWorld` smart contract | + +--- + +## neo-one build + +Builds the project and deploys it to the local development network based on the configuration found in the +NEOβ€’ONE config file. + +| Argument | Type | Default | Description | +| --------- | --------- | ------- | ------------------------------------------------- | +| `--reset` | `boolean` | `false` | Setting this to true will reset the local project | + +--- + +## neo-one new + +Create new resources. `neo-one new private-key` is the only available option for now, which will generate a +new private key. + +--- + +## neo-one start + +Start NEOβ€’ONE services. This command takes one argument after the command (`neo-one start `) which +can be either `network` or `neotracker`. `neo-one start network` will start the local development network. +`neo-one start neotracker` will start the local NEO Tracker instance. + +--- + +## neo-one stop + +Stop NEOβ€’ONE services. This command takes one argument after the command (`neo-one stop `) which +can be either `network` or `neotracker`. `neo-one stop network` will stop the local development network. +`neo-one stop neotracker` will stop the local NEO Tracker instance. + +--- + +## neo-one deploy + +Deploys the project using the migration file. + +| Argument | Type | Default | Description | +| ----------- | -------- | -------- | ------------------------------- | +| `--network` | `string` | `"test"` | Network to run the migration on | + +--- + +## neo-one info + +Prints the project configuration. + +--- + +## neo-one compile + +Compiles a project's smart contracts and outputs the code to a local directory. You can set the arguments for this command +either in the NEOβ€’ONE config file (`.neo-one.config.ts`) or as a CLI argument. A CLI argument will override what is found in the +config file. If an argument is not defined as a CLI argument and is not defined in the config file then the below defaults will be used. + +| Argument | Type | Default | Description | +| ----------- | --------- | ------------------- | ---------------------------------------------------------------------------- | +| `--outDir` | `string` | `neo-one/compiled` | Directory to output the compiled code | +| `--path` | `string` | `neo-one/contracts` | Path to the smart contract directory | +| `--json` | `boolean` | `true` | Output the contract with the JSON format | +| `--avm` | `boolean` | `false` | Output the contract with the AVM format | +| `--debug` | `boolean` | `false` | Output additional debug information | +| `--opcodes` | `boolean` | `false` | Output the AVM in a human-readable format for debugging (requires `--debug`) | + +--- + +## neo-one console + +Starts a REPL with project contracts and NEOβ€’ONE Client APIs. + +| Argument | Type | Default | Description | +| ------------ | ------- | ----------- | ----------------------------------------------- | +| `--networks` | `array` | `["local"]` | Networks to initialize before starting the REPL | diff --git a/packages/neo-one-website/docs/0-installation/2-playground.md b/packages/neo-one-website/docs/0-installation/3-playground.md similarity index 100% rename from packages/neo-one-website/docs/0-installation/2-playground.md rename to packages/neo-one-website/docs/0-installation/3-playground.md diff --git a/packages/neo-one-website/docs/1-main-concepts/10-testing.md b/packages/neo-one-website/docs/1-main-concepts/10-testing.md index da3208ca80..d6401893a8 100644 --- a/packages/neo-one-website/docs/1-main-concepts/10-testing.md +++ b/packages/neo-one-website/docs/1-main-concepts/10-testing.md @@ -155,7 +155,7 @@ describe('Token', () => { - `reset(): Promise` - reset the local network to it's initial state starting at the genesis block. - `getSettings(): Promise` - Get the current settings of the private network. - `updateSettings(options: Partial): Promise` - update settings for the private network. Currently only has a property for controlling the seconds per block. -- `getNEOTrackerURL(): Promise` - fetches the NEO tracker URL for the project. +- `getNEOTrackerURL(): Promise` - fetches the NEO Tracker URL for the project. Putting it all together, we might test a time dependent ICO contract like so: diff --git a/packages/neo-one-website/docs/1-main-concepts/12-deployment.md b/packages/neo-one-website/docs/1-main-concepts/12-deployment.md index 80faa59420..396684c765 100644 --- a/packages/neo-one-website/docs/1-main-concepts/12-deployment.md +++ b/packages/neo-one-website/docs/1-main-concepts/12-deployment.md @@ -36,7 +36,7 @@ These properties have no impact on the execution of the contract, they're simply Every NEOβ€’ONE smart contract automatically contains a public `upgrade` method. This method replaces the smart contract code as well as the static metadata associated with the contract while preserving the smart contract's storage. In other words, this method can be used to change the logic of your smart contract without losing the data. -In order to make it possible to upgrade your contract, you _must_ specify the `approveUpgrade` `protected` method. This method should return a `boolean` indicating if the `upgrade` is approved: +In order to make it possible to upgrade your contract, you _must_ specify the `approveUpgrade` `public` method. This method should return a `boolean` indicating if the `upgrade` is approved: ```typescript export class Contract extends SmartContract { @@ -103,6 +103,42 @@ export default ({ token, ico, escrow }: MigrationContracts, _network: string) => }; ``` +### MigrationSmartContract + +You may have noticed the new type we use in the above `migration` file, `MigrationContracts`. This is another type generated by NEOβ€’ONE for use specifically in `migration` files and while it looks the same as its counterpart `SmartContract` it has a key difference in that there is no `.confirmed(...)` properties for any of its contract methods. This is because during migration _every_ contract invocation will be be awaited before proceeding to this next invocation. This can be useful when you would like to deploy contracts in series or if you would like to do some additional bootstrapping after the deployment of a contract. + +As an example, lets say you have an ICO contract and you would like to make sure you are the first person to mint a portion of the tokens. Then, going off the migration file above, we could run something like: + +```typescript +import BigNumber from 'bignumber.js'; +import { Hash256 } from '@neo-one/client'; +import { MigrationContracts } from '../src/neo-one'; + +export default ({ token, ico, escrow }: MigrationContracts, _network: string) => { + token.deploy(); + // here we set the startTime of the ICO to be immediate + ico.deploy(undefined, new BigNumber(0), undefined); + ico.mintTokens([{ amount: new BigNumber(10), asset: Hash256.NEO }]); + escrow.deploy(); +}; +``` + +This will ensure that after deploying the `ico` contract (and confirming it is deployed) the next action before deploying the `escrow` contract is to mint some of the ICO tokens to the currently selected `UserAccount`. While a more elegant and safe solution might be to allow the owner of the ICO to mint tokens before the timer has started this should make it clear how you can bootstrap a contract during migration. + ## Deploying to a Public Network -Good news! This feature is now available. With that said, we want to work closely with the first few users to deploy to the TestNet or MainNet to ensure a smooth, bug-free experience. Please reach out if you are ready and we will quickly work with you to deploy. +Once you have successfully configured your `migration` file as explained above you are all set to deploy your Smart Contract! Using the set of [networks](/docs/config-options) defined in `.neo-one.config.js` you can deploy using the command: + +```bash +yarn neo-one deploy -- +``` + +where `network` is one of the keys provided by your configuration. By default `yarn neo-one deploy` will use the `test` key. + +::: warning + +Note + +We HIGHLY recommend deploying to both a local private network _and_ the Neo TestNet before attempting to deploy to the MainNet. + +::: diff --git a/packages/neo-one-website/docs/2-advanced-guides/02-user-accounts.md b/packages/neo-one-website/docs/2-advanced-guides/02-user-accounts.md index 08c87d522f..009c20ff76 100644 --- a/packages/neo-one-website/docs/2-advanced-guides/02-user-accounts.md +++ b/packages/neo-one-website/docs/2-advanced-guides/02-user-accounts.md @@ -21,7 +21,7 @@ The `createClient` helper function generated by the NEOβ€’ONE toolchain is confi (provider: NEOONEProvider) => { [name: string]: UserAccountProvider } ``` -This callback will be passed a default `NEOOneProvider` that's been configured to work with your local private network as well as public nodes for the OneNet, TestNet and MainNet. The return value will be used to configure the `Client`. +This callback will be passed a default `NEOONEProvider` that's been configured to work with your local private network as well as public nodes for the TestNet and MainNet. The return value will be used to configure the `Client`. ::: warning diff --git a/packages/neo-one-website/docs/2-advanced-guides/06-angular.md b/packages/neo-one-website/docs/2-advanced-guides/06-angular.md index 32ce28365f..ea311167b5 100644 --- a/packages/neo-one-website/docs/2-advanced-guides/06-angular.md +++ b/packages/neo-one-website/docs/2-advanced-guides/06-angular.md @@ -75,6 +75,6 @@ export class BlockCounter implements OnInit { ### Important Notes -- For the smoothest experience using NEOβ€’ONE with Angular 6+, you should use the browserified version of NEOβ€’ONE. This version of NEOβ€’ONE replaces Node.js builtin modules with their browser compatible shims. To use this version, you simply need to import any NEOβ€’ONE client modules with the `-browserify` suffix. So, `@neo-one/client` is imported as `@neo-one/client-browserify`. If you're importing `@neo-one/suite`, then import the browserified version with `@neo-one/suite-browserify`. +- For the smoothest experience using NEOβ€’ONE with Angular 6+, you should use the browserified version of NEOβ€’ONE. This version of NEOβ€’ONE replaces Node.js builtin modules with their browser compatible shims. To use this version, you simply need to import any NEOβ€’ONE client modules with the `-browserify` suffix. So, `@neo-one/client` is imported as `@neo-one/client-browserify`. - `allowSyntheticDefaultImports` must be set to `true` in the top level `tsconfig.json`. - `(window as any).global = window;` must be added in the `polyfill.ts` file. diff --git a/packages/neo-one-website/docs/2-advanced-guides/09-configuration-options.md b/packages/neo-one-website/docs/2-advanced-guides/09-configuration-options.md index d9099db5bc..8089421fb1 100644 --- a/packages/neo-one-website/docs/2-advanced-guides/09-configuration-options.md +++ b/packages/neo-one-website/docs/2-advanced-guides/09-configuration-options.md @@ -3,7 +3,7 @@ slug: config-options title: Configuration Options --- -NEOβ€’ONE compiler configuration options +NEOβ€’ONE compiler configuration options. Configure NEOβ€’ONE for your project. @@ -20,8 +20,18 @@ import { defaultNetworks } from '@neo-one/cli'; export default { contracts: { + // The NEOβ€’ONE compile command will output the compile results in this directory. + outDir: 'neo-one/compiled', // NEOβ€’ONE will look for smart contracts in this directory. path: 'neo-one/contracts', + // Set this to true if you want the compile command to output JSON. + // json: true, + // Set this to true if you want the compile command to output AVM. + // avm: false, + // Set this to true if you want the compile command to output additional debug information. + // debug: false, + // Set this to true if you want the compile command to output the AVM in a human-readable format for debugging (requires debug: true). + // opcodes: false, }, artifacts: { // NEOβ€’ONE will store build and deployment artifacts that should be checked in to vcs in this directory. @@ -29,7 +39,7 @@ export default { }, migration: { // NEOβ€’ONE will load the deployment migration from this path. - path: 'neo-one/migration.js', + path: 'neo-one/migration.ts', }, codegen: { // NEOβ€’ONE will write source artifacts to this directory. This directory should be committed. @@ -50,15 +60,81 @@ export default { port: 9040, }, // NEOβ€’ONE will configure various parts of the CLI that require network accounts using the value provided here, for example, when deploying contracts. - // Refer to the documentation at https://neo-one.io/docs/configuration for more information. + // Refer to the documentation at https://neo-one.io/docs/config-options for more information. networks: defaultNetworks, neotracker: { - // NEOβ€’ONE will start an instance of NEO tracker using this path for local data. This directory should not be committed. + // NEOβ€’ONE will start an instance of NEO Tracker using this path for local data. This directory should not be committed. path: '.neo-one/neotracker', - // NEOβ€’ONE will start an instance of NEO tracker using this port. + // NEOβ€’ONE will start an instance of NEO Tracker using this port. port: 9041, - // Set to true if you'd like NEOβ€’ONE to skip starting a NEO tracker instance when running 'neo-one build'. - skip: false, + // Set to false if you'd like NEOβ€’ONE to start an instance of NEO Tracker when running 'neo-one build'. You will need @neotracker/core installed as a dependency for this to work. + skip: true, }, }; ``` + +## Networks + +While we provide defaults for deployment networks it is also possible to use your own! You can provide a `name` and `rpcUrl` to our helper function `createUserAccountProviderFunc` from `@neo-one/cli`, which will prompt you to provide a list of `privateKeys` for use on the network when deploying: + +```typescript +import { createUserAccountProviderFunc, defaultNetworks } from '@neo-one/cli'; + +export default { + // ... + networks: { + ...defaultNetworks, + exampleNetwork: createUserAccountProviderFunc('exampleNetwork', 'exampleRpcUrl.io/rpc'); + } + // ... +} +``` + +This is what the `createUserAccountProviderFunc` will do to create the new `LocalUserAccountProvider`: + +```typescript +export const createUserAccountProviderFunc = (network: string, rpcURL: string) => async () => { + const keystore = new LocalKeyStore(new LocalMemoryStore()); + const { privateKeys } = await prompts({ + type: 'list', + name: 'privateKeys', + message: `Please enter one or more private keys separated by commas for use on the "${network}" network.`, + validate: (value) => (value.length > 0 ? true : 'Must enter at least one private key.'), + }); + await Promise.all(privateKeys.map((privateKey: string) => keystore.addUserAccount({ network, privateKey }))); + + return new LocalUserAccountProvider({ + keystore, + provider: new NEOONEProvider([{ network, rpcURL }]), + }); +}; +``` + +Or you can create your own hard-coded `async` function that returns a `UserAccountProvider`, like so: + +```typescript +export default { + // ... + networks: { + ...defaultNetworks, + exampleNetwork: async () => { + const keystore = new LocalKeyStore(new LocalMemoryStore()); + await keystore.addUserAccount('exampleNetwork', 'PRIVATE_KEY'); + + return new LocalUserAccountProvider({ + keystore, + provider: new NEOONEProvider([{ network: 'exampleNetwork', rpcUrl: 'exampleRpcUrl.io/rpc' }]), + }); + }, + }, + // ... +}; +``` + +::: warning + +Note + +While hard-coding the `LocalUserAccountProvider` is a viable option in testing this also requires storing a private key as plain text in the `.neo-one.config.ts` file that is traditionally checked into version control, like Git/GitHub. For this reason we recommend only using a hard coded private key value for local on-the-fly testing and debugging. + +::: diff --git a/packages/neo-one-website/docs/4-contributing/0-how-to-contribute.md b/packages/neo-one-website/docs/4-contributing/0-how-to-contribute.md index 074d108f3b..ec9c271bea 100644 --- a/packages/neo-one-website/docs/4-contributing/0-how-to-contribute.md +++ b/packages/neo-one-website/docs/4-contributing/0-how-to-contribute.md @@ -31,6 +31,25 @@ Well-written bug reports with consistently reproducible steps are invaluable to Feature requests are welcome. But take a moment to find out whether your idea fits with the scope and aims of the project. It's up to you to make a strong case to convince the project's developers of the merits of this feature. Please provide as much detail and context as possible. +### How to Get Started in the NEOβ€’ONE Repo + +- Make sure you have [Node](https://nodejs.org) >= 10.16.0 installed (We recommend the latest version). + - Linux and Mac: We recommend using [Node Version Manager](https://github.com/creationix/nvm). + - Windows: We recommend using [Chocolatey](https://chocolatey.org/). +- Install [RushJS](https://rushjs.io/) with `npm install -g @microsoft/rush`. + - We use RushJS for monorepo management. When you get started in the NEOβ€’ONE repo you will use RushJS for nearly every task, like installing dependencies, building the packages, running tests, etc. + - For more information on RushJS, see the [docs](https://rushjs.io/pages/intro/welcome/). + - All Rush commands should be run inside the NEOβ€’ONE repo. +- Clone the repo with `git clone https://github.com/neo-one-suite/neo-one.git`. +- Then run `rush install` to install the dependencies. +- Then run `rush build` to build the packages. Rush will perform an "incremental build", which means that it will only build packages whose source files have changed since the last successful build and the packages that depend on those packages. +- You should now be ready to start making changes to the source code. Once you're done making changes make sure to run `rush build` before running E2E tests or trying to run a bin. +- To run all the unit tests run `rush test`. To run all the E2E tests run `rush e2e`. + - There are A LOT of unit tests, which can take a few minutes to run all the way through. To only run a smaller set of tests you can specify a file or blob of tests to run with `rush test -t` or `rush e2e -t`. + - For example, if you wanted to only run the unit tests in `neo-one-client-common` you would run `rush test -t packages/neo-one-client-common/src/__tests__/**/*` +- If you want to test your changes with the NEOβ€’ONE CLI run `rush build`. Then, to start the CLI you'd run `node packages/neo-one-cli/bin/neo-one.js` from inside the NEOβ€’ONE repository. You will then be running the new NEOβ€’ONE CLI with your changes. From there you can see your new code directly in action. +- To see all the available RushJS commands run `rush --help`. + ### Your First Code Contribution Unsure where to begin contributing to NEOβ€’ONE? Here are some great ways to get started: diff --git a/packages/neo-one-website/docs/4-contributing/1-codebase-overview.md b/packages/neo-one-website/docs/4-contributing/1-codebase-overview.md index 458d6c5df3..02f6174339 100644 --- a/packages/neo-one-website/docs/4-contributing/1-codebase-overview.md +++ b/packages/neo-one-website/docs/4-contributing/1-codebase-overview.md @@ -3,4 +3,270 @@ slug: codebase-overview title: Codebase Overview --- -Coming soon! +NEOβ€’ONE is a very large project, which is organized into 50+ interdependent packages. Below is a breakdown +of what each package is used for, grouped by functionality. + +--- + +[[toc]] + +--- + +## Client + +### neo-one-client + +Exports nearly everything from `neo-one-client-common` and `neo-one-client-core`, plus `DeveloperTools` from `neo-one-developer-tools`. + +### neo-one-client-common + +One of the core client packages, which provides APIs for cryptography, commonly used client functions, reading binary input, building scripts, and more. + +### neo-one-client-core + +The core client package, which exports the NEOβ€’ONE Client, which is used to construct and send transactions, read accounts, hold keys, read the blockchain, and much more. + +### neo-one-client-full + +Exports nearly everything from `neo-one-client` and `neo-one-client-full-core`. + +### neo-one-client-full-common + +Exports common models. + +### neo-one-client-full-core + +Contains an extension of the Client in `neo-one-client-core` which provides extra APIs and functionality, plus the ReadClient, and more. + +### neo-one-client-switch + +Provides NEOβ€’ONE Client functionality that switches between NodeJS and browser environments. + +## Node + +### neo-one-node + +Contains the `FullNode` class which is used by the NEOβ€’ONE CLI, `neo-one-node-bin`, and for testing purposes. + +### neo-one-node-bin + +Contains the `bin` for staring the NEOβ€’ONE node. + +### neo-one-node-blockchain + +Primarily contains the `Blockchain` class which handles nearly every blockchain function for the node. + +### neo-one-node-browser + +Creates the full NEOβ€’ONE node used in the browser, especially for the NEOβ€’ONE website courses. + +### neo-one-node-browser-worker + +The web worker wrapper for the NEOβ€’ONE node used in the browser. + +### neo-one-node-concensus + +Handles concensus for the node. + +### neo-one-node-core + +Contains all the objects for Accounts, Blocks, Transactions, Contracts, Headers, etc. used in the node and other packages. + +### neo-one-node-http-rpc + +Creates the actual HTTP server used by the node for relaying RPC calls. + +### neo-one-node-neo-settings + +Handles the node settings, like creating the genesis block, defining the governing token, and setting other key blockchain constants. + +### neo-one-node-network + +Contains the functionality for relaying information between the NEOβ€’ONE node and other nodes in the network. + +### neo-one-node-offline + +Handles offline operations for the node, like dumping and loading chainfile data. + +### neo-one-node-protocol + +Handles the protocol for connecting to other nodes in the network. + +### neo-one-node-rpc-handler + +Contains the function which creates the RPC handlers for the node. These handlers are what are called by the node when it receives RPC requests. + +### neo-one-node-storage-cache + +Handles storage data caching for the node. + +### neo-one-node-storage-common + +Contains common functions used by node storage. + +### neo-one-node-storage-levelup + +Creates the storage and the storage APIs used by the node to store and access blockchain data. + +### neo-one-node-tools + +Primarily provides the entrypoint for restoring a NEOβ€’ONE node from blockchain data, like in a chainfile. + +### neo-one-node-vm + +Contains the NEOβ€’ONE implementation of the NeoVM, used in the NEOβ€’ONE node and used for testing the compiler. + +### neo-one-http + +Contains very basic Koa HTTP server utils. + +### neo-one-http-context + +Contains very basic server utils, plus common functions and constants. + +## CLI + +### neo-one-cli + +This is the main entrypoint for the NEOβ€’ONE CLI code. It handles all NEOβ€’ONE CLI commands. + +### neo-one-cli-common + +Handles more CLI functionality, like configuration, setting up wallets, setting up a NEOβ€’ONE Client, etc. + +### neo-one-cli-common-node + +Contains more CLI features, like configuration and network setup. + +## Compiler + +### neo-one-smart-contract + +Exports declaration files that define custom types used in a NEOβ€’ONE smart contract. + +### neo-one-smart-contract-codegen + +Generates helpers for invoking smart contracts, and generates other code for creating dApps around smart contracts. + +### neo-one-smart-contract-compiler + +The largest package in NEOβ€’ONE. Contains the entire smart contract compiler, which creates the actual compiled NeoVM bytecode. + +### neo-one-smart-contract-compiler-node + +Creates the environment for compiling smart contracts, which is then used in the CLI and other packages. + +### neo-one-smart-contract-lib + +Defines NEP5 tokens and ICOs. + +### neo-one-smart-contract-test + +Creates the environment for testing smart contracts. + +### neo-one-smart-contract-test-browser + +Creates the environment for testing smart contracts in the browser. + +### neo-one-smart-contract-test-common + +Runs smart contract unit tests. + +### neo-one-smart-contract-typescript-plugin + +Creates a plugin for the NEOβ€’ONE smart contract compiler. + +## Website + +### neo-one-react + +Primarily creates and exports a `FromStream` React component for subscribing to `Observables` in React. + +### neo-one-react-common + +Creates additional React components that are used by the NEOβ€’ONE website and exports everything from `neo-one-react-core`. + +### neo-one-react-core + +Creates all the base React components that are used by the NEOβ€’ONE website and other React components. + +### neo-one-website + +Contains the entire NEOβ€’ONE website. + +### neo-one-worker + +Contains helpers for creating and connecting web workers, especially for the NEOβ€’ONE website. + +### neo-one-local-browser + +Handles a lot of the setup and execution of the courses on the NEOβ€’ONE website, like loading files into a browser-implemented +DB, compiling smart contracts, deploying contracts, testing contracts, etc. + +### neo-one-local-browser-worker + +A web worker wrapper for `neo-one-local-browser`. + +### neo-one-local-singleton + +Contains functions that are used in the browser for the NEOβ€’ONE courses. + +### neo-one-editor + +Contains the code for the code editor used in the NEOβ€’ONE website. + +### neo-one-editor-server + +Contains the code for the code editor server used in the NEOβ€’ONE website. + +## Build + +### neo-one-build-common + +Common build modules. + +### neo-one-build-tests + +Environment setup for running Jest unit and end-to-end tests. + +### neo-one-build-tools + +Contains all the build tools for checking, cleaning, formatting, preparing, and building NEOβ€’ONE packages. + +### neo-one-build-tools-web + +Contains all the webpack compilers and build configurations, primarily for the NEOβ€’ONE website. + +## Other + +### neo-one-logger + +Handles almost all the logging for NEOβ€’ONE packages. + +### neo-one-logger-config + +Handles configuration for `neo-one-logger`. + +### neo-one-developer-tools + +Provides the interface for controlling a private development network. + +### neo-one-developer-tools-frame + +Creates the developer tools iframe for controlling a private network. + +### neo-one-ts-utils + +Primarily exports TypeScript compiler API helper functions for use in build tools, the compiler, and more. + +### neo-one-typescript-concatenator + +Handles the concatenation of multiple TypeScript files into one file for the TypeScript compiler. + +### neo-one-utils + +Contains various helper functions, utilities, and constants that are used throughout NEOβ€’ONE. + +### neo-one-utils-node + +Contains various helper functions, utilities, and constants that are used primarily in the node. diff --git a/packages/neo-one-website/docs/4-contributing/2-smart-contract-compiler.md b/packages/neo-one-website/docs/4-contributing/2-smart-contract-compiler.md index c1b9c8f035..170dac5dbf 100644 --- a/packages/neo-one-website/docs/4-contributing/2-smart-contract-compiler.md +++ b/packages/neo-one-website/docs/4-contributing/2-smart-contract-compiler.md @@ -3,4 +3,60 @@ slug: smart-contract-compiler title: Smart Contract Compiler --- -Coming soon! +## How Can I Add New Features or Fix Bugs in the Smart Contract Compiler? + +### Basics of the Smart Contract Compiler + +The NEOβ€’ONE Smart Contract Compiler is by far the _largest_ NEOβ€’ONE package. The compiler takes in (almost) regular +TypeScript code and compiles it to [NeoVM](https://docs.neo.org/docs/en-us/basic/technology/neovm.html) bytecode, which can +then be deployed to the Neo blockchain and run on the NeoVM. NEOβ€’ONE uses the TypeScript compiler API to parse the TypeScript code +into a tree of "nodes" with information about each node. Our compiler then "visits" each node and begins to output specific +bytecode for the VM instructions that are needed in order to execute the logic that is specified by the TypeScript code. +The bytecode outputted by the compiler corresponds to human-readable opcodes that each correspond to an action that the +NeoVM will perform. These actions are the manipulation of data by the NeoVM that will ultimately translate to changes to the +state of the Neo blockchain. + +### Where to Look in the Code + +Now that you have a _very_ basic understanding of how the NEOβ€’ONE compiler works, you can start digging into the `neo-one-smart-contract-compiler` +package. Most likely you'll be looking in `neo-one-smart-contract-compiler/compiler/` (where `` is one of `constants`, `declaration`, `expression`, `helper`, `scope`, `statement`) +for the specific syntax that is broken or where you want to add a feature. For example, if you want to change how we compile the `==` token, you would +look for `EqualsEqualsEqualsHelper.ts` in `neo-one-smart-contract-compiler/compiler/helper/relational/EqualsEqualsHelper.ts`. In there you'll see +how this helper will "emit" different opcodes, syscalls, and other helpers to manipulate the Evaluation Stack. The comment line above each emit shows a +representation of the Evaluation Stack _after_ that bytecode is evaluated. + +### Write Unit Tests for What You're Working On + +Once you have an understanding of what helpers or syntax compilers you need to change in order to make your compiler change, the best way to begin is to write +a unit test that you will run to test your change. You'll see that nearly every helper and syntax compiler has a corresponding set of unit tests in `neo-one-smart-contract-compiler/src/__tests__`. +For example, the `IfStatementCompiler.ts` has a set of unit tests in `IfStatementCompiler.test.ts`. In there you'll see that we typically use the built in `assertEqual` method to +test if values are what we expect them to be. You'll also see that we have helpers, like the `helpers.executeString()` helper, that make it easy to compile a string and test for certain behavior. + +Here is an example unit test you would write to test your changes: + +```ts +import { helpers } from '../../../__data__'; + +describe('MyNewCompiler', () => { + test.only('simple test', async () => { + await helpers.executeString(` + if (!true) { + throw 'Failure'; + } + + const x = '10'; + assertEqual(x, '10'); + `); + }); +}); +``` + +### Start Hacking + +Once you've created a unit test that either recreates the bug you're trying to fix, or tests for the expected behavior of your new feature, you can start to make changes +to the compiler's source code and run your unit test. If you want to add logging (ie. `console.log`) to the source code to get more information you can, just make sure +to change the console settings in `neo-one-build-tests/environments/test/jestSetup.js`. From there you should make sure to only run one unit test at a time +so that you're only getting logs from the compilation of that one unit test. This will make it easier to learn what the compiler is doing when compiling a specific string. +To run a specific unit test, rather than all unit tests, run `rush test -t `. + +And that's it! Once you have this workflow setup you can hack away at the compiler code and run the unit test to test your changes, get logs, etc. diff --git a/packages/neo-one-website/package.json b/packages/neo-one-website/package.json index 7850fd4e0c..450542060b 100644 --- a/packages/neo-one-website/package.json +++ b/packages/neo-one-website/package.json @@ -3,23 +3,38 @@ "version": "2.4.0", "description": "NEOβ€’ONE website.", "main": "./src/index", + "scripts": { + "build": "", + "lint": "", + "lint:staged": "lint-staged --relative", + "tsc": "node node_modules/.bin/tsc --noEmit" + }, + "sideEffects": [ + "src/polyfill.ts", + "src/Modernizr.js", + "*.css" + ], "dependencies": { - "@babel/runtime": "^7.5.4", - "@emotion/core": "^10.0.16", - "@emotion/styled": "^10.0.15", + "@babel/runtime": "^7.6.3", + "@emotion/core": "^10.0.22", + "@emotion/styled": "^10.0.23", + "@emotion/styled-base": "^10.0.24", "@neo-one/editor": "^2.3.1", - "@neo-one/react": "^2.3.0", - "@neo-one/react-common": "^2.3.0", + "@neo-one/react": "^2.7.0", + "@neo-one/react-common": "^3.0.0", "@reach/router": "^1.2.1", "@render-props/viewport": "^0.3.1", + "babel-plugin-emotion": "^10.0.21", + "babel-plugin-universal-import": "^4.0.0", "clipboard": "^2.0.3", - "core-js": "^3.1.4", + "core-js": "^3.2.1", "dgeni": "^0.4.12", "dgeni-packages": "^0.28.1", + "emotion": "^10.0.17", "emotion-theming": "^10.0.14", "fs-extra": "^8.1.0", "gray-matter": "^4.0.2", - "immer": "^4.0.0", + "immer": "^5.0.0", "localforage": "^1.7.3", "lodash": "^4.17.15", "markdown-it": "^10.0.0", @@ -28,42 +43,49 @@ "modernizr": "^3.7.1", "prismjs": "^1.17.1", "prop-types": "^15.6.2", - "react": "^16.11.0", - "react-dom": "^16.11.0", + "react": "^16.12.0", + "react-dom": "^16.12.0", "react-headroom": "^3.0.0", "react-hot-loader": "^4.12.12", "react-icons": "^3.7.0", "react-redux": "^7.0.3", "react-static": "^7.1.0", + "react-static-plugin-emotion": "^7.2.2", + "react-static-plugin-reach-router": "^7.2.3", + "react-static-plugin-source-filesystem": "^7.2.3", "react-transition-group": "^4.2.1", "react-universal-component": "^4.0.0", "redux": "^4.0.4", "redux-persist": "^6.0.0", "regenerator-runtime": "^0.13.3", + "serve": "^11.2.0", "slugify": "^1.3.3", "styled-tools": "^1.7.1", - "ts-node": "^8.3.0", - "typescript-fsa": "^3.0.0", + "ts-node": "^8.4.1", + "tslib": "^1.10.0", + "typescript": "3.9.5", + "typescript-fsa": "^3.0.0-beta-2", "typescript-fsa-reducers": "^1.2.1", - "webpack": "^4.39.3" + "webpack": "^4.40.2" }, "devDependencies": { + "@neo-one/build-tools": "^1.0.0", + "@neo-one/client": "^3.0.0", + "@neo-one/react-core": "^2.7.0", "@types/clipboard": "^2.0.1", "@types/fs-extra": "^8.0.0", + "@types/jest": "^24.0.18", "@types/lodash": "^4.14.138", "@types/markdown-it": "^0.0.9", "@types/markdown-it-anchor": "^4.0.3", "@types/modernizr": "^3.5.3", "@types/prismjs": "^1.16.0", "@types/reach__router": "^1.2.4", - "@types/react": "^16.9.2", - "@types/react-dom": "^16.9.0", + "@types/react": "^16.9.15", + "@types/react-dom": "^16.9.4", "@types/react-redux": "^7.1.1", - "@types/webpack": "^4.39.0" - }, - "sideEffects": [ - "src/polyfill.ts", - "src/Modernizr.js", - "*.css" - ] + "@types/webpack": "^4.39.0", + "bignumber.js": "^9.0.0", + "rxjs": "^6.5.3" + } } diff --git a/packages/neo-one-website/src/components/Footer.tsx b/packages/neo-one-website/src/components/Footer.tsx index 4888cfcfb3..31c6cf1bf5 100644 --- a/packages/neo-one-website/src/components/Footer.tsx +++ b/packages/neo-one-website/src/components/Footer.tsx @@ -5,7 +5,7 @@ import { prop } from 'styled-tools'; import { LayoutWrapper } from './common'; import { StyledRouterLink } from './StyledRouterLink'; -const LinkSectionTitle = styled(Box)` +const LinkSectionTitle = styled(Box)<{}, {}>` ${prop('theme.fonts.axiformaBold')}; ${prop('theme.fontStyles.body1')}; color: ${prop('theme.gray2')}; @@ -44,7 +44,7 @@ const LinkSection = ({ ); -const FooterWrapper = styled(Box)` +const FooterWrapper = styled(Box)<{}, {}>` display: grid; justify-content: center; grid-gap: 64px; @@ -56,14 +56,14 @@ const FooterWrapper = styled(Box)` } `; -const Copyright = styled(Box)` +const Copyright = styled(Box)<{}, {}>` ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.caption')}; color: ${prop('theme.gray3')}; text-align: center; `; -const LinksGrid = styled(Box)` +const LinksGrid = styled(Box)<{}, {}>` display: grid; grid-auto-flow: column; grid-gap: 64px; @@ -73,7 +73,7 @@ const LinksGrid = styled(Box)` } `; -const Wrapper = styled(Box)` +const Wrapper = styled(Box)<{}, {}>` display: grid; background-color: ${prop('theme.black')}; box-shadow: inset 0 10px 10px -5px rgba(0, 0, 0, 0.2); diff --git a/packages/neo-one-website/src/components/Header.tsx b/packages/neo-one-website/src/components/Header.tsx index cf104d74ac..de38b37689 100644 --- a/packages/neo-one-website/src/components/Header.tsx +++ b/packages/neo-one-website/src/components/Header.tsx @@ -5,7 +5,7 @@ import * as React from 'react'; import { ifProp, prop, withProp } from 'styled-tools'; import { StyledRouterLinkBase } from './StyledRouterLink'; -const Wrapper = styled(Box)` +const Wrapper = styled(Box)<{}, {}>` display: flex; width: 100%; justify-content: center; @@ -18,7 +18,8 @@ const Wrapper = styled(Box)` } `; -const StyledToolbar = styled(Toolbar)` +// tslint:disable-next-line: no-any +const StyledToolbar = styled(Toolbar)` && { height: 100%; grid-gap: 8px; @@ -26,16 +27,13 @@ const StyledToolbar = styled(Toolbar)` overflow-x: auto; } - ${ToolbarFocusable} { - outline: none; - } - @media (min-width: ${prop('theme.breakpoints.sm')}) { padding: 0 16px; } `; -const LogoLink = styled(StyledRouterLinkBase)` +// tslint:disable-next-line: no-any +const LogoLink = styled(StyledRouterLinkBase)` display: block; margin-right: 0; margin-bottom: 8px; @@ -49,13 +47,17 @@ const LogoLink = styled(StyledRouterLinkBase)` } `; -const NavigationLink = styled(StyledRouterLinkBase)` +// tslint:disable-next-line: no-any +const NavigationLink = styled(StyledRouterLinkBase)` display: flex; align-items: center; ${prop('theme.fontStyles.headline')}; height: 100%; padding-top: 5px; - ${ifProp('active', withProp('theme.accent', (color) => `color: ${color};`))}; + ${ifProp( + 'active', + withProp('theme.accent', (color) => `color: ${color};`), + )}; border-bottom: 5px solid ${ifProp('active', prop('theme.accent'), 'transparent')}; text-decoration: none; @@ -74,19 +76,19 @@ const NavigationLink = styled` @media (max-width: ${prop('theme.breakpoints.sm')}) { display: none; } `; -const CourseLink = styled(NavigationLink)` +const CourseLink = styled(NavigationLink)<{}, {}>` @media (max-width: ${prop('theme.breakpoints.sm')}) { display: none; } `; -const LeftHeader = styled(ToolbarContent)` +const LeftHeader = styled(ToolbarContent)<{}, {}>` grid-gap: 32px; @media (max-width: ${prop('theme.breakpoints.md')}) { diff --git a/packages/neo-one-website/src/components/Hero.tsx b/packages/neo-one-website/src/components/Hero.tsx index 6bd58ef79e..d82d2d94e6 100644 --- a/packages/neo-one-website/src/components/Hero.tsx +++ b/packages/neo-one-website/src/components/Hero.tsx @@ -4,7 +4,8 @@ import * as React from 'react'; import { prop } from 'styled-tools'; import { Tagline } from '../elements'; -const StyledBackground = styled(Background)` +// tslint:disable-next-line: no-any +const StyledBackground = styled(Background)` display: flex; color: ${prop('theme.gray0')}; justify-content: center; @@ -12,7 +13,7 @@ const StyledBackground = styled(Background)` width: 100%; `; -const Headline = styled(H1)` +const Headline = styled(H1)<{}, {}>` align-self: start; justify-self: start; color: ${prop('theme.primary')}; diff --git a/packages/neo-one-website/src/components/StyledRouterLink.tsx b/packages/neo-one-website/src/components/StyledRouterLink.tsx index 7c426277d8..59ef2c4cb9 100644 --- a/packages/neo-one-website/src/components/StyledRouterLink.tsx +++ b/packages/neo-one-website/src/components/StyledRouterLink.tsx @@ -6,7 +6,7 @@ interface StyledRouterLinkBaseProps { readonly linkColor: 'primary' | 'gray' | 'accent' | 'light'; } -export const StyledRouterLinkBase = styled(RouterLink)` +export const StyledRouterLinkBase = styled(RouterLink)<{}, {}>` color: ${switchProp('linkColor', { primary: prop('theme.primary'), accent: prop('theme.accent'), @@ -31,7 +31,7 @@ export const StyledRouterLinkBase = styled` ${prop('theme.fonts.axiformaBold')}; ${prop('theme.fontStyles.body1')}; `; diff --git a/packages/neo-one-website/src/components/blog/BlogAll.tsx b/packages/neo-one-website/src/components/blog/BlogAll.tsx index 7f4cc81ce6..945d415185 100644 --- a/packages/neo-one-website/src/components/blog/BlogAll.tsx +++ b/packages/neo-one-website/src/components/blog/BlogAll.tsx @@ -16,7 +16,7 @@ export interface BlogAllProps { readonly posts: readonly BlogPost[]; } -const PostsGrid = styled(Box)` +const PostsGrid = styled(Box)<{}, {}>` display: grid; border-top: 1px solid ${prop('theme.gray3')}; grid-template-columns: 1fr; @@ -43,7 +43,7 @@ const PostsGrid = styled(Box)` } `; -const Title = styled(Box)` +const Title = styled(Box)<{}, {}>` ${prop('theme.fontStyles.display2')}; margin-bottom: 16px; @@ -57,7 +57,7 @@ const Title = styled(Box)` } `; -const Wrapper = styled(Box)` +const Wrapper = styled(Box)<{}, {}>` padding-left: 16px; padding-right: 16px; padding-top: 16px; diff --git a/packages/neo-one-website/src/components/blog/PostLink.tsx b/packages/neo-one-website/src/components/blog/PostLink.tsx index 824b5eee02..ec9c3d48f2 100644 --- a/packages/neo-one-website/src/components/blog/PostLink.tsx +++ b/packages/neo-one-website/src/components/blog/PostLink.tsx @@ -12,16 +12,17 @@ interface Props { readonly author: Author; } -const StyledLink = styled(StyledRouterLink)` +// tslint:disable-next-line: no-any +const StyledLink = styled(StyledRouterLink)` ${prop('theme.fontStyles.headline')}; `; -const PostInfo = styled(Box)` +const PostInfo = styled(Box)<{}, {}>` color: ${prop('theme.gray5')}; ${prop('theme.fontStyles.subheading')}; `; -const Wrapper = styled(List)` +const Wrapper = styled(List)<{}, {}>` list-style-type: none; max-width: 320px; border-bottom: 1px solid ${prop('theme.gray3')}; diff --git a/packages/neo-one-website/src/components/common/LayoutWrapper.tsx b/packages/neo-one-website/src/components/common/LayoutWrapper.tsx index 1890f80746..f35311e388 100644 --- a/packages/neo-one-website/src/components/common/LayoutWrapper.tsx +++ b/packages/neo-one-website/src/components/common/LayoutWrapper.tsx @@ -5,7 +5,7 @@ import * as React from 'react'; import { prop } from 'styled-tools'; import { SidebarSpacer } from './SidebarSpacer'; -const Wrapper = styled(Box)` +const Wrapper = styled(Box)<{}, {}>` display: grid; grid: 'content' 'sidebar' auto diff --git a/packages/neo-one-website/src/components/common/SidebarSpacer.tsx b/packages/neo-one-website/src/components/common/SidebarSpacer.tsx index c8324b189a..386939fe55 100644 --- a/packages/neo-one-website/src/components/common/SidebarSpacer.tsx +++ b/packages/neo-one-website/src/components/common/SidebarSpacer.tsx @@ -2,7 +2,7 @@ import styled from '@emotion/styled'; import { Box } from '@neo-one/react-common'; import { prop } from 'styled-tools'; -export const SidebarSpacer = styled(Box)` +export const SidebarSpacer = styled(Box)<{}, {}>` display: none; @media (min-width: ${prop('theme.breakpoints.sm')}) { diff --git a/packages/neo-one-website/src/components/content/AdjacentLink.tsx b/packages/neo-one-website/src/components/content/AdjacentLink.tsx index ddfec2e6cc..e57947c4ac 100644 --- a/packages/neo-one-website/src/components/content/AdjacentLink.tsx +++ b/packages/neo-one-website/src/components/content/AdjacentLink.tsx @@ -10,7 +10,7 @@ export interface Props { readonly next?: boolean; } -const ArticleText = styled(Box)` +const ArticleText = styled(Box)<{ readonly next: boolean }, { readonly next: boolean }>` ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.caption')}; color: ${prop('theme.gray0')}; @@ -18,7 +18,8 @@ const ArticleText = styled(Box)` padding-bottom: 8px; `; -const StyledLink = styled(StyledRouterLink)` +// tslint:disable-next-line: no-any +const StyledLink = styled(StyledRouterLink)` ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.display1')}; diff --git a/packages/neo-one-website/src/components/content/DateAndAuthor.tsx b/packages/neo-one-website/src/components/content/DateAndAuthor.tsx index 9bb1daf7b6..0781f92cf5 100644 --- a/packages/neo-one-website/src/components/content/DateAndAuthor.tsx +++ b/packages/neo-one-website/src/components/content/DateAndAuthor.tsx @@ -4,13 +4,13 @@ import * as React from 'react'; import { prop } from 'styled-tools'; import { Author } from './types'; -const Text = styled(Box)` +const Text = styled(Box)<{}, {}>` ${prop('theme.fonts.axiformaRegular')} ${prop('theme.fontStyles.subheading')} color: ${prop('theme.black')}; `; -const StyledLink = styled(Link)` +const StyledLink = styled(Link)<{}, {}>` ${prop('theme.fonts.axiformaRegular')} ${prop('theme.fontStyles.subheading')} `; diff --git a/packages/neo-one-website/src/components/content/DocFooter.tsx b/packages/neo-one-website/src/components/content/DocFooter.tsx index f31c85646f..5ea7088d93 100644 --- a/packages/neo-one-website/src/components/content/DocFooter.tsx +++ b/packages/neo-one-website/src/components/content/DocFooter.tsx @@ -7,7 +7,7 @@ import { AdjacentInfo } from '../../types'; import { LayoutWrapper } from '../common'; import { AdjacentLink } from './AdjacentLink'; -const Wrapper = styled(Box)` +const Wrapper = styled(Box)<{}, {}>` display: grid; justify-items: center; padding-top: 64px; @@ -16,7 +16,7 @@ const Wrapper = styled(Box)` width: 100%; `; -const LinkWrapper = styled(Box)` +const LinkWrapper = styled(Box)<{}, {}>` display: grid; grid-auto-flow: column; justify-content: space-between; diff --git a/packages/neo-one-website/src/components/content/EditPageLink.tsx b/packages/neo-one-website/src/components/content/EditPageLink.tsx index e1c9e087f6..591bd8dfa8 100644 --- a/packages/neo-one-website/src/components/content/EditPageLink.tsx +++ b/packages/neo-one-website/src/components/content/EditPageLink.tsx @@ -4,7 +4,7 @@ import { Link } from '@neo-one/react-common'; import * as React from 'react'; import { prop } from 'styled-tools'; -const StyledLink = styled(Link)` +const StyledLink = styled(Link)<{}, {}>` ${prop('theme.fonts.axiformaRegular')} ${prop('theme.fontStyles.subheading')} `; diff --git a/packages/neo-one-website/src/components/content/MainContent.tsx b/packages/neo-one-website/src/components/content/MainContent.tsx index 0960f92dde..60d28b43e8 100644 --- a/packages/neo-one-website/src/components/content/MainContent.tsx +++ b/packages/neo-one-website/src/components/content/MainContent.tsx @@ -37,6 +37,36 @@ const StyledMarkdown = styled(Markdown)` color: ${prop('theme.black')}; min-width: 0; + & table { + border-collapse: collapse; + } + & td, th { + padding: 8px; + } + & th { + border: 1px solid ${prop('theme.black')}; + } + & td { + border-left: 1px solid ${prop('theme.black')}; + border-right: 1px solid ${prop('theme.black')}; + border-top: 1px solid ${prop('theme.black')}; + } + & th { + border-top: none; + } + & th:last-child { + border-right: none; + } + & th:first-child { + border-left: none; + } + & td:first-child { + border-left: none; + } + & td:last-child { + border-right: none; + } + @media (min-width: ${prop('theme.breakpoints.md')}) { ${prop('theme.fontStyles.subheading')}; } diff --git a/packages/neo-one-website/src/components/content/SectionHeader.tsx b/packages/neo-one-website/src/components/content/SectionHeader.tsx index 93c903029c..6f0b7dce15 100644 --- a/packages/neo-one-website/src/components/content/SectionHeader.tsx +++ b/packages/neo-one-website/src/components/content/SectionHeader.tsx @@ -10,7 +10,7 @@ interface Props { readonly toggle?: () => void; } -const SectionButton = styled(ButtonBase)` +const SectionButton = styled(ButtonBase)<{}, {}>` ${prop('theme.fonts.axiformaBold')}; ${prop('theme.fontStyles.subheading')}; line-height: 3; diff --git a/packages/neo-one-website/src/components/content/Sidebar.tsx b/packages/neo-one-website/src/components/content/Sidebar.tsx index b11197944b..c5430c3f25 100644 --- a/packages/neo-one-website/src/components/content/Sidebar.tsx +++ b/packages/neo-one-website/src/components/content/Sidebar.tsx @@ -10,7 +10,7 @@ import { SidebarList } from './SidebarList'; const Wrapper = styled(Box)``; -const DesktopSidebarWrapper = styled(Box)` +const DesktopSidebarWrapper = styled(Box)<{}, {}>` background-color: ${prop('theme.gray1')}; position: fixed; height: 100vh; @@ -26,7 +26,7 @@ const DesktopSidebarWrapper = styled(Box)` } `; -const MobileWrapper = styled(Box)` +const MobileWrapper = styled(Box)<{}, {}>` @media (min-width: ${prop('theme.breakpoints.sm')}) { display: none; } @@ -73,12 +73,12 @@ const StyledHidden = styled(Hidden)` } `; -const MobileSidebarWrapper = styled(Box)` +const MobileSidebarWrapper = styled(Box)<{}, {}>` width: 100%; background-color: ${prop('theme.gray1')}; `; -const MobileButton = styled(ButtonBase)` +const MobileButton = styled(ButtonBase)<{}, {}>` position: fixed; bottom: 48px; right: 24px; diff --git a/packages/neo-one-website/src/components/content/SidebarList.tsx b/packages/neo-one-website/src/components/content/SidebarList.tsx index e177ad4fee..1050b217ce 100644 --- a/packages/neo-one-website/src/components/content/SidebarList.tsx +++ b/packages/neo-one-website/src/components/content/SidebarList.tsx @@ -7,7 +7,7 @@ import { Section } from './Section'; const { useEffect } = React; -const Wrapper = styled(Box)` +const Wrapper = styled(Box)<{}, {}>` background-color: ${prop('theme.gray1')}; padding-top: 16px; padding-bottom: 16px; diff --git a/packages/neo-one-website/src/components/content/SubsectionLink.tsx b/packages/neo-one-website/src/components/content/SubsectionLink.tsx index 8a8056eaab..9dc547cdd3 100644 --- a/packages/neo-one-website/src/components/content/SubsectionLink.tsx +++ b/packages/neo-one-website/src/components/content/SubsectionLink.tsx @@ -5,7 +5,8 @@ import React from 'react'; import { ifProp, prop } from 'styled-tools'; import { StyledRouterLink } from '../StyledRouterLink'; -const Link = styled(StyledRouterLink)` +// tslint:disable-next-line: no-any +const Link = styled(StyledRouterLink)` ${ifProp('active', prop('theme.fonts.axiformaBold'), prop('theme.fonts.axiformaRegular'))}; ${prop('theme.fontStyles.subheading')}; @@ -22,7 +23,7 @@ const Link = styled(Style } `; -const TutorialLink = styled(BaseLink)` +const TutorialLink = styled(BaseLink)<{}, {}>` ${ifProp('active', prop('theme.fonts.axiformaBold'), prop('theme.fonts.axiformaRegular'))}; ${prop('theme.fontStyles.subheading')}; @@ -39,7 +40,7 @@ const TutorialLink = styled(BaseL } `; -const ActiveBorder = styled.span` +const ActiveBorder = styled.span<{}, {}>` width: 4px; height: 24px; border-left: 4px solid ${prop('theme.accent')}; diff --git a/packages/neo-one-website/src/components/course/App.tsx b/packages/neo-one-website/src/components/course/App.tsx index 0e0d1cb725..f95e70b9bd 100644 --- a/packages/neo-one-website/src/components/course/App.tsx +++ b/packages/neo-one-website/src/components/course/App.tsx @@ -54,13 +54,13 @@ const ChapterRoute = ({ course, lesson, chapter }: RouteComponentProps` @media (max-width: ${prop('theme.breakpoints.sm')}) { display: none; } `; -const MobileWrapper = styled(Box)` +const MobileWrapper = styled(Box)<{}, {}>` display: none; @media (max-width: ${prop('theme.breakpoints.sm')}) { @@ -70,14 +70,14 @@ const MobileWrapper = styled(Box)` } `; -const Header = styled.h1` +const Header = styled.h1<{}, {}>` ${prop('theme.fonts.axiformaBold')} ${prop('theme.fontStyles.headline')} color: ${prop('theme.gray0')}; margin: 0; `; -const Text = styled(Box)` +const Text = styled(Box)<{}, {}>` ${prop('theme.fonts.axiformaRegular')} ${prop('theme.fontStyles.subheading')} color: ${prop('theme.gray0')}; diff --git a/packages/neo-one-website/src/components/course/CourseHeader.tsx b/packages/neo-one-website/src/components/course/CourseHeader.tsx index ef2d29de77..85af1b9ea1 100644 --- a/packages/neo-one-website/src/components/course/CourseHeader.tsx +++ b/packages/neo-one-website/src/components/course/CourseHeader.tsx @@ -5,7 +5,7 @@ import * as React from 'react'; import { prop } from 'styled-tools'; import { RouterLink } from '../RouterLink'; -const Wrapper = styled(Box)` +const Wrapper = styled(Box)<{}, {}>` display: flex; width: 100%; justify-content: center; @@ -17,19 +17,16 @@ const Wrapper = styled(Box)` } `; -const StyledToolbar = styled(Toolbar)` +// tslint:disable-next-line: no-any +const StyledToolbar = styled(Toolbar)` &&& { height: 100%; grid-gap: 8px; padding: 0 8px; } - - ${/* sc-sel */ ToolbarFocusable as any} { - outline: none; - } `; -const LogoLink = styled(RouterLink)` +const LogoLink = styled(RouterLink)<{}, {}>` display: block; margin-right: 24px; margin-bottom: 16px; diff --git a/packages/neo-one-website/src/components/course/CourseRequirementError.tsx b/packages/neo-one-website/src/components/course/CourseRequirementError.tsx index 6317d3beb8..8b6084e8d3 100644 --- a/packages/neo-one-website/src/components/course/CourseRequirementError.tsx +++ b/packages/neo-one-website/src/components/course/CourseRequirementError.tsx @@ -13,7 +13,7 @@ const Wrapper = styled(Box)` width: 100%; `; -const BoxWrapper = styled(Box)` +const BoxWrapper = styled(Box)<{}, {}>` display: grid; background-color: ${prop('theme.gray6')}; padding-top: 64px; @@ -23,7 +23,7 @@ const BoxWrapper = styled(Box)` place-content: center; `; -const InnerWrapper = styled(Box)` +const InnerWrapper = styled(Box)<{}, {}>` display: grid; background-color: ${prop('theme.black')}; max-width: 480px; @@ -32,7 +32,7 @@ const InnerWrapper = styled(Box)` box-shadow: 0 6px 4px 4px rgba(0, 0, 0, 0.2); `; -const Text = styled(Box)` +const Text = styled(Box)<{}, {}>` color: ${prop('theme.gray0')}; ${prop('theme.fontStyles.subheading')}; `; diff --git a/packages/neo-one-website/src/components/course/chapter/DocsFooter.tsx b/packages/neo-one-website/src/components/course/chapter/DocsFooter.tsx index 08c8951120..7f664ef24c 100644 --- a/packages/neo-one-website/src/components/course/chapter/DocsFooter.tsx +++ b/packages/neo-one-website/src/components/course/chapter/DocsFooter.tsx @@ -10,7 +10,7 @@ import { DocsSolution } from './DocsSolution'; import { NextButton } from './NextButton'; import { PreviousButton } from './PreviousButton'; -const Wrapper = styled(DispatchWrapper)` +const Wrapper = styled(DispatchWrapper)<{}, {}>` display: grid; grid: 'solution' auto diff --git a/packages/neo-one-website/src/components/course/chapter/Editor.tsx b/packages/neo-one-website/src/components/course/chapter/Editor.tsx index 7cff554042..9edc6b6950 100644 --- a/packages/neo-one-website/src/components/course/chapter/Editor.tsx +++ b/packages/neo-one-website/src/components/course/chapter/Editor.tsx @@ -43,9 +43,6 @@ const EditorBase = ({ selected, onTestsPass, ...props }: Props) => { ); }; -export const Editor = connect( - undefined, - (dispatch, { selected }: ExternalProps) => ({ - onTestsPass: () => dispatch(completeChapter(selected)), - }), -)(EditorBase); +export const Editor = connect(undefined, (dispatch, { selected }: ExternalProps) => ({ + onTestsPass: () => dispatch(completeChapter(selected)), +}))(EditorBase); diff --git a/packages/neo-one-website/src/components/course/chapter/NextButton.tsx b/packages/neo-one-website/src/components/course/chapter/NextButton.tsx index fd8b869534..90ab85b7a2 100644 --- a/packages/neo-one-website/src/components/course/chapter/NextButton.tsx +++ b/packages/neo-one-website/src/components/course/chapter/NextButton.tsx @@ -26,7 +26,8 @@ const getNextLesson = (selected: SelectedChapter) => { return course.lessons[selected.lesson + 1] as Lesson | undefined; }; -const ButtonLink = Button.withComponent(RouterLink); +// tslint:disable-next-line: no-any +const ButtonLink = Button.withComponent(RouterLink); const NextButtonBase = ({ selected, onClick, complete, ...props }: Props) => { const nextChapter = getNextChapter(selected); @@ -52,14 +53,11 @@ const NextButtonBase = ({ selected, onClick, complete, ...props }: Props) => { ); }; -export const NextButton = connect( - undefined, - (dispatch, { selected, complete, onClick }: Props) => ({ - onClick: () => { - if (!complete) { - dispatch(completeChapter(selected)); - } - onClick(); - }, - }), -)(NextButtonBase); +export const NextButton = connect(undefined, (dispatch, { selected, complete, onClick }: Props) => ({ + onClick: () => { + if (!complete) { + dispatch(completeChapter(selected)); + } + onClick(); + }, +}))(NextButtonBase); diff --git a/packages/neo-one-website/src/components/course/chapter/PreviousButton.tsx b/packages/neo-one-website/src/components/course/chapter/PreviousButton.tsx index e90b48f1f2..7c360b294c 100644 --- a/packages/neo-one-website/src/components/course/chapter/PreviousButton.tsx +++ b/packages/neo-one-website/src/components/course/chapter/PreviousButton.tsx @@ -23,7 +23,8 @@ const getPreviousLesson = (selected: SelectedChapter) => { return course.lessons[selected.lesson - 1] as Lesson | undefined; }; -const ButtonLink = Button.withComponent(RouterLink); +// tslint:disable-next-line: no-any +const ButtonLink = Button.withComponent(RouterLink); export const PreviousButton = ({ selected, onClick, ...props }: Props) => { const previousChapter = getPreviousChapter(selected); diff --git a/packages/neo-one-website/src/components/course/courses/CourseExplainer.tsx b/packages/neo-one-website/src/components/course/courses/CourseExplainer.tsx index 0226737c5d..c2d8ee44ba 100644 --- a/packages/neo-one-website/src/components/course/courses/CourseExplainer.tsx +++ b/packages/neo-one-website/src/components/course/courses/CourseExplainer.tsx @@ -5,17 +5,17 @@ import { prop } from 'styled-tools'; import { maxWidth } from './constants'; import { ContentWrapper } from './ContentWrapper'; -const NavLink = styled(Link)` +const NavLink = styled(Link)<{}, {}>` ${prop('theme.fontStyles.subheading')}; `; -const Text = styled(Box)` +const Text = styled(Box)<{}, {}>` ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.subheading')}; color: ${prop('theme.black')}; `; -const Header = styled(H2)` +const Header = styled(H2)<{}, {}>` ${prop('theme.fonts.axiformaRegular')} ${prop('theme.fontStyles.headline')} color: ${prop('theme.black')}; diff --git a/packages/neo-one-website/src/components/course/courses/CoursesView.tsx b/packages/neo-one-website/src/components/course/courses/CoursesView.tsx index 8afd5b314f..32d5148ceb 100644 --- a/packages/neo-one-website/src/components/course/courses/CoursesView.tsx +++ b/packages/neo-one-website/src/components/course/courses/CoursesView.tsx @@ -8,7 +8,8 @@ import { courses } from '../coursesData'; import { CourseExplainer } from './CourseExplainer'; import { CourseSection } from './CourseSection'; -const StyledBackground = styled(Background)` +// tslint:disable-next-line: no-any +const StyledBackground = styled(Background)` display: flex; color: ${prop('theme.gray0')}; justify-content: center; @@ -16,7 +17,7 @@ const StyledBackground = styled(Background)` width: 100%; `; -const Headline = styled(Box)` +const Headline = styled(Box)<{}, {}>` color: ${prop('theme.gray0')}; ${prop('theme.fontStyles.display1')}; ${prop('theme.fonts.axiformaRegular')}; diff --git a/packages/neo-one-website/src/components/course/courses/LessonItem.tsx b/packages/neo-one-website/src/components/course/courses/LessonItem.tsx index 3b8d3dd9d6..8629bdda60 100644 --- a/packages/neo-one-website/src/components/course/courses/LessonItem.tsx +++ b/packages/neo-one-website/src/components/course/courses/LessonItem.tsx @@ -15,7 +15,7 @@ const Wrapper = styled(Box)` / auto; `; -const Title = styled(ButtonBase.withComponent(RouterLink))` +const Title = styled(ButtonBase.withComponent(RouterLink))<{}, {}>` width: 100%; ${prop('theme.fontStyles.headline')}; ${prop('theme.fonts.axiformaMedium')}; diff --git a/packages/neo-one-website/src/components/course/lesson/LessonView.tsx b/packages/neo-one-website/src/components/course/lesson/LessonView.tsx index ff49663067..b7246d1393 100644 --- a/packages/neo-one-website/src/components/course/lesson/LessonView.tsx +++ b/packages/neo-one-website/src/components/course/lesson/LessonView.tsx @@ -18,7 +18,7 @@ const Wrapper = styled(Box)` width: 100%; `; -const BoxWrapper = styled(Box)` +const BoxWrapper = styled(Box)<{}, {}>` display: grid; background-color: ${prop('theme.gray6')}; padding-top: 64px; @@ -28,7 +28,7 @@ const BoxWrapper = styled(Box)` place-content: center; `; -const InnerWrapper = styled(Box)` +const InnerWrapper = styled(Box)<{}, {}>` display: grid; background-color: ${prop('theme.black')}; max-width: 720px; @@ -36,13 +36,14 @@ const InnerWrapper = styled(Box)` box-shadow: 0 6px 4px 4px rgba(0, 0, 0, 0.2); `; -const StartButton = styled(Button.withComponent(RouterLink))` +// tslint:disable-next-line: no-any +const StartButton = styled(Button.withComponent(RouterLink))` text-decoration: none; cursor: pointer; border-radius: 16px; `; -const ButtonWrapper = styled(Box)` +const ButtonWrapper = styled(Box)<{}, {}>` display: grid; color: ${prop('theme.gray0')}; background-color: ${prop('theme.gray4')}; @@ -54,7 +55,7 @@ const ButtonWrapper = styled(Box)` padding: 8px; `; -const Text = styled(Box)` +const Text = styled(Box)<{}, {}>` ${prop('theme.fontStyles.headline')}; `; diff --git a/packages/neo-one-website/src/components/home/AssetSectionGrid.tsx b/packages/neo-one-website/src/components/home/AssetSectionGrid.tsx index ade82f9c8d..12e5bd1190 100644 --- a/packages/neo-one-website/src/components/home/AssetSectionGrid.tsx +++ b/packages/neo-one-website/src/components/home/AssetSectionGrid.tsx @@ -10,7 +10,7 @@ interface Props { readonly children: React.ReactNode; } -const StyledHeading = styled.h2` +const StyledHeading = styled.h2<{}, {}>` ${prop('theme.fonts.axiformaMedium')}; ${prop('theme.fontStyles.headline')}; /* stylelint-disable-next-line */ @@ -18,7 +18,7 @@ const StyledHeading = styled.h2` margin: 0; `; -const Content = styled(Box)` +const Content = styled(Box)<{}, {}>` display: grid; ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.subheading')}; @@ -40,7 +40,7 @@ const ContentItem = styled(Box)` gap: 16; `; -const Wrapper = styled(Box)` +const Wrapper = styled(Box)<{}, {}>` display: grid; grid-template: 'content asset' auto diff --git a/packages/neo-one-website/src/components/home/ContentWrapperBase.tsx b/packages/neo-one-website/src/components/home/ContentWrapperBase.tsx index 68540bccd5..c960511fc0 100644 --- a/packages/neo-one-website/src/components/home/ContentWrapperBase.tsx +++ b/packages/neo-one-website/src/components/home/ContentWrapperBase.tsx @@ -2,7 +2,7 @@ import styled from '@emotion/styled'; import { Box } from '@neo-one/react-common'; import { prop } from 'styled-tools'; -export const ContentWrapperBase = styled(Box)` +export const ContentWrapperBase = styled(Box)<{}, {}>` display: grid; max-width: 1260px; padding-left: 24px; diff --git a/packages/neo-one-website/src/components/home/EditorContent.tsx b/packages/neo-one-website/src/components/home/EditorContent.tsx index dc253d30d1..5f0bf8bc26 100644 --- a/packages/neo-one-website/src/components/home/EditorContent.tsx +++ b/packages/neo-one-website/src/components/home/EditorContent.tsx @@ -18,7 +18,7 @@ const InnerEditorWrapper = styled(ContentWrapperBase)` justify-content: stretch; `; -const TextWrapper = styled(ContentWrapperBase)` +const TextWrapper = styled(ContentWrapperBase)<{}, {}>` grid-gap: 24px; border-bottom: 1px solid ${prop('theme.gray2')}; padding-bottom: 32px; @@ -31,19 +31,19 @@ const InnerTextWrapper = styled(Box)` grid-gap: 24px; `; -const StyledHeading = styled(H2)` +const StyledHeading = styled(H2)<{}, {}>` ${prop('theme.fontStyles.headline')}; ${prop('theme.fonts.axiformaBold')}; color: ${prop('theme.gray1')}; `; -const Text = styled(Box)` +const Text = styled(Box)<{}, {}>` ${prop('theme.fontStyles.subheading')}; ${prop('theme.fonts.axiformaRegular')}; color: ${prop('theme.gray1')}; `; -const Wrapper = styled(Box)` +const Wrapper = styled(Box)<{}, {}>` display: grid; padding-top: 64px; background-color: ${prop('theme.black')}; @@ -56,7 +56,8 @@ const Wrapper = styled(Box)` } `; -const StyledLink = StyledRouterLink; +// tslint:disable-next-line: no-any +const StyledLink = styled(StyledRouterLink)``; export const EditorContent = () => ( diff --git a/packages/neo-one-website/src/components/home/Home.tsx b/packages/neo-one-website/src/components/home/Home.tsx index 943214b121..2280f139a4 100644 --- a/packages/neo-one-website/src/components/home/Home.tsx +++ b/packages/neo-one-website/src/components/home/Home.tsx @@ -10,7 +10,8 @@ import { EditorContent } from './EditorContent'; import { Proof } from './Proof'; import { Testing } from './Testing'; -const StyledBackground = styled(Background)` +// tslint:disable-next-line: no-any +const StyledBackground = styled(Background)` display: grid; place-content: center; place-items: center; @@ -28,7 +29,7 @@ const StyledLineLogoPrimary = styled(LineLogoPrimary)` } `; -const Headline = styled(Box)` +const Headline = styled(Box)<{}, {}>` ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.display1')}; text-align: center; @@ -41,12 +42,14 @@ const ButtonWrapper = styled(Box)` grid-gap: 24px; `; -const LinkButton = Button.withComponent(StyledRouterLinkBase); -const StyledLinkButton = styled(LinkButton)` +// tslint:disable-next-line: no-any +const LinkButton = Button.withComponent(StyledRouterLinkBase); +const StyledLinkButton = styled(LinkButton)<{}, {}>` ${prop('theme.fontStyles.subheading')}; `; -const StyledLink = styled(StyledRouterLinkBase)` +// tslint:disable-next-line: no-any +const StyledLink = styled(StyledRouterLinkBase)` ${prop('theme.fontStyles.subheading')}; color: ${prop('theme.accent')}; @@ -60,7 +63,7 @@ const CenterContentWrapper = styled(ContentWrapperBase)` justify-content: center; `; -const ProofsWrapper = styled(Box)` +const ProofsWrapper = styled(Box)<{}, {}>` display: grid; grid-auto-flow: column; padding-top: 64px; @@ -73,7 +76,7 @@ const ProofsWrapper = styled(Box)` } `; -const ProofsInnerWrapper = styled(Box)` +const ProofsInnerWrapper = styled(Box)<{}, {}>` display: grid; grid-auto-flow: column; @@ -83,7 +86,7 @@ const ProofsInnerWrapper = styled(Box)` } `; -const FeaturesWrapper = styled(Box)` +const FeaturesWrapper = styled(Box)<{}, {}>` display: grid; padding-top: 64px; padding-bottom: 64px; @@ -111,7 +114,7 @@ export const Home = (props: {}) => ( Get Started - Take Course > + Take Course {'>'} diff --git a/packages/neo-one-website/src/components/home/Proof.tsx b/packages/neo-one-website/src/components/home/Proof.tsx index 546aa7a586..0103825377 100644 --- a/packages/neo-one-website/src/components/home/Proof.tsx +++ b/packages/neo-one-website/src/components/home/Proof.tsx @@ -3,7 +3,7 @@ import { Box } from '@neo-one/react-common'; import * as React from 'react'; import { prop } from 'styled-tools'; -const Wrapper = styled(Box)` +const Wrapper = styled(Box)<{}, {}>` display: grid; margin-left: 8px; margin-right: 24px; @@ -17,14 +17,14 @@ const Wrapper = styled(Box)` } `; -const Title = styled.h2` +const Title = styled.h2<{}, {}>` ${prop('theme.fonts.axiformaThin')}; ${prop('theme.fontStyles.headline')}; color: ${prop('theme.gray5')}; margin: 0; `; -const Line = styled.p` +const Line = styled.p<{}, {}>` ${prop('theme.fonts.axiformaRegular')}; ${prop('theme.fontStyles.subheading')}; color: ${prop('theme.black')}; diff --git a/packages/neo-one-website/src/components/reference/ReferenceLink.tsx b/packages/neo-one-website/src/components/reference/ReferenceLink.tsx index 1b8445197d..9b732297c9 100644 --- a/packages/neo-one-website/src/components/reference/ReferenceLink.tsx +++ b/packages/neo-one-website/src/components/reference/ReferenceLink.tsx @@ -12,7 +12,8 @@ interface Props { readonly type: ReferenceType; } -const StyledLink = styled(StyledRouterLink)` +// tslint:disable-next-line: no-any +const StyledLink = styled(StyledRouterLink)` ${prop('theme.fontStyles.subheading')}; ${prop('theme.fonts.axiformaRegular')}; `; diff --git a/packages/neo-one-website/src/components/reference/TypeFilterOption.tsx b/packages/neo-one-website/src/components/reference/TypeFilterOption.tsx index 6efaf3c6c0..1fc0800117 100644 --- a/packages/neo-one-website/src/components/reference/TypeFilterOption.tsx +++ b/packages/neo-one-website/src/components/reference/TypeFilterOption.tsx @@ -9,7 +9,7 @@ interface Props { readonly type: TypeFilterOptions; } -const StyledBox = styled(Box)` +const StyledBox = styled(Box)<{}, {}>` ${prop('theme.fontStyles.subheading')}; ${prop('theme.fonts.axiformaRegular')}; `; diff --git a/packages/neo-one-website/src/components/reference/common/Example.tsx b/packages/neo-one-website/src/components/reference/common/Example.tsx index c39ed823ed..8c866c036d 100644 --- a/packages/neo-one-website/src/components/reference/common/Example.tsx +++ b/packages/neo-one-website/src/components/reference/common/Example.tsx @@ -10,7 +10,7 @@ interface Props { readonly className?: string; } -const PreWrapper = styled(Box.withComponent('pre'))` +const PreWrapper = styled(Box.withComponent('pre'))<{}, {}>` background-color: ${prop('theme.gray6')}; ${prop('theme.fontStyles.subheading')}; font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; @@ -18,7 +18,7 @@ const PreWrapper = styled(Box.withComponent('pre'))` border-radius: 4px; `; -const CodeWrapper = styled(Box.withComponent('code'))` +const CodeWrapper = styled(Box.withComponent('code'))<{}, {}>` ${prop('theme.fontStyles.subheading')}; font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; `; diff --git a/packages/neo-one-website/src/components/reference/common/Text.tsx b/packages/neo-one-website/src/components/reference/common/Text.tsx index e769e49b53..30900c1577 100644 --- a/packages/neo-one-website/src/components/reference/common/Text.tsx +++ b/packages/neo-one-website/src/components/reference/common/Text.tsx @@ -5,7 +5,7 @@ import { prop } from 'styled-tools'; import { WordTokens } from '../types'; import { buildText } from './utils'; -export const StyledText = styled(Box)` +export const StyledText = styled(Box)<{}, {}>` ${prop('theme.fontStyles.subheading')}; ${prop('theme.fonts.axiformaRegular')}; `; diff --git a/packages/neo-one-website/src/components/reference/common/TextSection.tsx b/packages/neo-one-website/src/components/reference/common/TextSection.tsx index 3c52b80398..03e79d052e 100644 --- a/packages/neo-one-website/src/components/reference/common/TextSection.tsx +++ b/packages/neo-one-website/src/components/reference/common/TextSection.tsx @@ -6,7 +6,7 @@ import { WordTokens } from '../types'; import { Text } from './Text'; import { Title } from './Title'; -const Wrapper = styled(Box)` +const Wrapper = styled(Box)<{}, {}>` display: grid; grid-auto-flow: row; grid-gap: 32px; diff --git a/packages/neo-one-website/src/components/reference/common/Title.tsx b/packages/neo-one-website/src/components/reference/common/Title.tsx index 2ec7728f09..664eb7c253 100644 --- a/packages/neo-one-website/src/components/reference/common/Title.tsx +++ b/packages/neo-one-website/src/components/reference/common/Title.tsx @@ -2,7 +2,7 @@ import styled from '@emotion/styled'; import { H2, ifProp, prop } from '@neo-one/react-common'; -export const Title = styled(H2)<{ readonly subheading?: boolean }>` +export const Title = styled(H2)<{ readonly subheading?: boolean }, { readonly subheading?: boolean }>` ${prop('theme.fonts.axiformaBold')}; ${ifProp('subheading', prop('theme.fontStyles.headline'), prop('theme.fontStyles.display1'))}; `; diff --git a/packages/neo-one-website/src/components/reference/common/TypeIcon.tsx b/packages/neo-one-website/src/components/reference/common/TypeIcon.tsx index a0e3a18fd4..3833def565 100644 --- a/packages/neo-one-website/src/components/reference/common/TypeIcon.tsx +++ b/packages/neo-one-website/src/components/reference/common/TypeIcon.tsx @@ -10,12 +10,14 @@ interface Props { readonly fullIcon?: boolean; } +// tslint:disable-next-line: no-unused interface StyledIconBoxProps { readonly bg: TypeFilterOptions; readonly fullIcon: boolean; } -const IconBox = styled(Box)` +// tslint:disable-next-line: no-any +const IconBox = styled(Box)` background-color: ${switchProp('bg', { All: 'transparent', Class: prop('theme.primary'), diff --git a/packages/neo-one-website/src/components/reference/common/utils.tsx b/packages/neo-one-website/src/components/reference/common/utils.tsx index df855116a9..66787797ab 100644 --- a/packages/neo-one-website/src/components/reference/common/utils.tsx +++ b/packages/neo-one-website/src/components/reference/common/utils.tsx @@ -12,7 +12,8 @@ const checkPunctuation = (idx: number, example: WordTokens, value: string) => ? `${value}` : `${value} `; -const StyledReferenceLink = styled(StyledRouterLink)` +// tslint:disable-next-line: no-any +const StyledReferenceLink = styled(StyledRouterLink)` font-family: ${ifProp('code', "Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace")}; ${prop('theme.fontStyles.subheading')}; `; diff --git a/packages/neo-one-website/src/components/reference/components/Extra.tsx b/packages/neo-one-website/src/components/reference/components/Extra.tsx index 8db826bc78..1f957d021f 100644 --- a/packages/neo-one-website/src/components/reference/components/Extra.tsx +++ b/packages/neo-one-website/src/components/reference/components/Extra.tsx @@ -6,7 +6,7 @@ import { prop } from 'styled-tools'; import { Example, Text, Title } from '../common'; import { ExtraData } from '../types'; -const Wrapper = styled(Box)` +const Wrapper = styled(Box)<{}, {}>` display: grid; grid-auto-flow: row; grid-gap: 32px; diff --git a/packages/neo-one-website/src/components/reference/components/InterfaceClassItems.tsx b/packages/neo-one-website/src/components/reference/components/InterfaceClassItems.tsx index 3e7a04a5e9..65f4392280 100644 --- a/packages/neo-one-website/src/components/reference/components/InterfaceClassItems.tsx +++ b/packages/neo-one-website/src/components/reference/components/InterfaceClassItems.tsx @@ -14,7 +14,7 @@ export interface Props { readonly data: ClassData | InterfaceData; } -const Wrapper = styled(Box)` +const Wrapper = styled(Box)<{}, {}>` display: grid; grid-auto-flow: row; grid-gap: 40px; diff --git a/packages/neo-one-website/src/components/reference/components/MethodItem.tsx b/packages/neo-one-website/src/components/reference/components/MethodItem.tsx index e919e763bd..6c903067aa 100644 --- a/packages/neo-one-website/src/components/reference/components/MethodItem.tsx +++ b/packages/neo-one-website/src/components/reference/components/MethodItem.tsx @@ -12,7 +12,7 @@ export interface Props { readonly method: Method; } -const Layout = styled(Box)` +const Layout = styled(Box)<{}, {}>` display: grid; grid-auto-flow: row; grid-gap: 16px; @@ -24,7 +24,7 @@ const Layout = styled(Box)` } `; -const Wrapper = styled(Box)` +const Wrapper = styled(Box)<{}, {}>` display: grid; grid-auto-flow: row; grid-gap: 16px; @@ -35,7 +35,7 @@ const Wrapper = styled(Box)` } `; -const StyledTitle = styled(Title)` +const StyledTitle = styled(Title)<{}, {}>` background-color: ${prop('theme.gray1')}; padding: 16px 32px; border-bottom: 1px solid rgba(0, 0, 0, 0.3); diff --git a/packages/neo-one-website/src/components/reference/components/MethodList.tsx b/packages/neo-one-website/src/components/reference/components/MethodList.tsx index f4a9f4c28a..9e73ffbf79 100644 --- a/packages/neo-one-website/src/components/reference/components/MethodList.tsx +++ b/packages/neo-one-website/src/components/reference/components/MethodList.tsx @@ -6,7 +6,7 @@ import { Title } from '../common'; import { Method } from '../types'; import { MethodItem } from './MethodItem'; -const ParameterLayout = styled(Box)` +const ParameterLayout = styled(Box)<{}, {}>` display: grid; grid-auto-flow: row; grid-gap: 32px; diff --git a/packages/neo-one-website/src/components/reference/components/ParameterPropertyItem.tsx b/packages/neo-one-website/src/components/reference/components/ParameterPropertyItem.tsx index 5cd3b511c4..10a371b841 100644 --- a/packages/neo-one-website/src/components/reference/components/ParameterPropertyItem.tsx +++ b/packages/neo-one-website/src/components/reference/components/ParameterPropertyItem.tsx @@ -16,7 +16,7 @@ const ParameterLayout = styled(Box)` border-bottom: 1px solid rgba(0, 0, 0, 0.3); `; -const Name = styled(Box)` +const Name = styled(Box)<{}, {}>` ${prop('theme.fonts.axiformaBold')}; ${prop('theme.fontStyles.body1')}; `; diff --git a/packages/neo-one-website/src/components/reference/components/ParameterPropertyList.tsx b/packages/neo-one-website/src/components/reference/components/ParameterPropertyList.tsx index c2e679cbd4..f363ec5ee0 100644 --- a/packages/neo-one-website/src/components/reference/components/ParameterPropertyList.tsx +++ b/packages/neo-one-website/src/components/reference/components/ParameterPropertyList.tsx @@ -6,7 +6,7 @@ import { Title } from '../common'; import { Parameter, Property } from '../types'; import { ParameterPropertyItem } from './ParameterPropertyItem'; -const ParameterLayout = styled(Box)` +const ParameterLayout = styled(Box)<{}, {}>` display: grid; grid-auto-flow: row; grid-gap: 32px; diff --git a/packages/neo-one-website/src/components/reference/components/ParameterReturns.tsx b/packages/neo-one-website/src/components/reference/components/ParameterReturns.tsx index 3c1357fa1d..3116e465cc 100644 --- a/packages/neo-one-website/src/components/reference/components/ParameterReturns.tsx +++ b/packages/neo-one-website/src/components/reference/components/ParameterReturns.tsx @@ -13,7 +13,7 @@ export interface Props { readonly subheading?: boolean; } -const Wrapper = styled(Box)` +const Wrapper = styled(Box)<{}, {}>` display: grid; grid-auto-flow: row; grid-gap: 32px; diff --git a/packages/neo-one-website/src/components/reference/components/ReferenceHeader.tsx b/packages/neo-one-website/src/components/reference/components/ReferenceHeader.tsx index 8ead33f4ef..0d359c34ea 100644 --- a/packages/neo-one-website/src/components/reference/components/ReferenceHeader.tsx +++ b/packages/neo-one-website/src/components/reference/components/ReferenceHeader.tsx @@ -11,7 +11,7 @@ interface Props { readonly definition: WordTokens; } -const Wrapper = styled(Box)` +const Wrapper = styled(Box)<{}, {}>` display: grid; grid-gap: 16px; diff --git a/packages/neo-one-website/src/components/reference/components/ReferencePage.tsx b/packages/neo-one-website/src/components/reference/components/ReferencePage.tsx index 976cede378..fdfd59ffd1 100644 --- a/packages/neo-one-website/src/components/reference/components/ReferencePage.tsx +++ b/packages/neo-one-website/src/components/reference/components/ReferencePage.tsx @@ -14,7 +14,7 @@ export interface Props { readonly content: ReferenceItem; } -const PageLayout = styled(Box)` +const PageLayout = styled(Box)<{}, {}>` display: grid; grid-gap: 32px; diff --git a/packages/neo-one-website/src/containers/Collapse.tsx b/packages/neo-one-website/src/containers/Collapse.tsx index 15bb50a95d..5b56e7acce 100644 --- a/packages/neo-one-website/src/containers/Collapse.tsx +++ b/packages/neo-one-website/src/containers/Collapse.tsx @@ -1,6 +1,7 @@ // tslint:disable no-any no-object-mutation readonly-keyword no-null-keyword no-submodule-imports no-unnecessary-type-annotation strict-boolean-expressions import styled from '@emotion/styled'; import React from 'react'; +// @ts-ignore import Transition from 'react-transition-group/Transition'; import { ifProp } from 'styled-tools'; diff --git a/packages/neo-one-website/src/elements/markdownTOC.ts b/packages/neo-one-website/src/elements/markdownTOC.ts index d7e893348a..095c57ede2 100644 --- a/packages/neo-one-website/src/elements/markdownTOC.ts +++ b/packages/neo-one-website/src/elements/markdownTOC.ts @@ -1,12 +1,6 @@ // tslint:disable -const slugify = (s: any) => - encodeURIComponent( - String(s) - .trim() - .toLowerCase() - .replace(/\s+/g, '-'), - ); +const slugify = (s: any) => encodeURIComponent(String(s).trim().toLowerCase().replace(/\s+/g, '-')); const defaults = { includeLevel: [1, 2], containerClass: 'table-of-contents', @@ -49,7 +43,7 @@ export const markdownTOC = (md: any, o: any) => { match = tocRegexp.exec(state.src.substr(state.pos)); match = !match ? [] - : match.filter(function(m: any) { + : match.filter(function (m: any) { return m; }); if (match.length < 1) { @@ -76,7 +70,7 @@ export const markdownTOC = (md: any, o: any) => { return true; } - md.renderer.rules[open] = function() { + md.renderer.rules[open] = function () { var tocOpenHtml = `
`; if (options.containerHeaderHtml) { @@ -86,7 +80,7 @@ export const markdownTOC = (md: any, o: any) => { return tocOpenHtml; }; - md.renderer.rules[close] = function() { + md.renderer.rules[close] = function () { var tocFooterHtml = ''; if (options.containerFooterHtml) { @@ -96,7 +90,7 @@ export const markdownTOC = (md: any, o: any) => { return tocFooterHtml + `
`; }; - md.renderer.rules[body] = function() { + md.renderer.rules[body] = function () { if (options.forceFullToc) { /* @@ -186,7 +180,7 @@ export const markdownTOC = (md: any, o: any) => { } // Catch all the tokens for iteration later - md.core.ruler.push('grab_state', function(state: any) { + md.core.ruler.push('grab_state', function (state: any) { if (gstate === undefined) { gstate = state; } diff --git a/packages/neo-one-website/src/index.tsx b/packages/neo-one-website/src/index.tsx index 7105baac48..c0bd41ba7c 100644 --- a/packages/neo-one-website/src/index.tsx +++ b/packages/neo-one-website/src/index.tsx @@ -1,3 +1,4 @@ +/// // tslint:disable-next-line no-import-side-effect import './polyfill'; diff --git a/packages/neo-one-website/src/layout/CoreLayout.tsx b/packages/neo-one-website/src/layout/CoreLayout.tsx index 054b41006e..8ef54d3dfc 100644 --- a/packages/neo-one-website/src/layout/CoreLayout.tsx +++ b/packages/neo-one-website/src/layout/CoreLayout.tsx @@ -19,7 +19,7 @@ const StyledHeadroom = styled(Headroom)` z-index: 9999; `; -const Content = styled(Box)` +const Content = styled(Box)<{}, {}>` width: 100%; background-color: ${prop('theme.gray0')}; `; diff --git a/packages/neo-one-website/src/layout/CourseLayout.tsx b/packages/neo-one-website/src/layout/CourseLayout.tsx index 23fc7e5345..35d512f397 100644 --- a/packages/neo-one-website/src/layout/CourseLayout.tsx +++ b/packages/neo-one-website/src/layout/CourseLayout.tsx @@ -4,7 +4,7 @@ import React from 'react'; import { prop } from 'styled-tools'; import { CourseHeader } from '../components'; -const Wrapper = styled(Box)` +const Wrapper = styled(Box)<{}, {}>` &&& { display: flex; flex-direction: column; diff --git a/packages/neo-one-website/src/loaders/coursesLoader.ts b/packages/neo-one-website/src/loaders/coursesLoader.ts index 6e5c0d9cd2..677caaa056 100644 --- a/packages/neo-one-website/src/loaders/coursesLoader.ts +++ b/packages/neo-one-website/src/loaders/coursesLoader.ts @@ -56,7 +56,7 @@ const getCourse = async (courseDir: string): Promise => { const [config, lessonDirs] = await Promise.all([ fs.readFile(path.resolve(coursePath, CONFIG), 'utf8'), getDirectories(coursePath), - ]); + ] as const); const lessons = await Promise.all(lessonDirs.map(async (dir) => getLesson(courseDir, dir))); const configParsed = JSON.parse(config); @@ -75,7 +75,7 @@ const getLesson = async (courseDir: string, lesson: string): Promise => fs.readFile(path.resolve(lessonPath, CONFIG), 'utf8'), fs.readFile(path.resolve(lessonPath, LESSON), 'utf8'), getDirectories(lessonPath), - ]); + ] as const); const chapters = await Promise.all(chapterDirs.map(async (dir) => getChapter(courseDir, lesson, dir))); return { @@ -128,7 +128,7 @@ const getChapterFile = async (dir: string, initial: string | undefined, solution const [initialContent, solutionContent] = await Promise.all([ initial === undefined ? Promise.resolve(undefined) : readFile(initial), readFile(solution), - ]); + ] as const); return { path: initial === undefined ? solution : initial, diff --git a/packages/neo-one-website/src/utils/dgeniSetup.ts b/packages/neo-one-website/src/utils/dgeniSetup.ts index f632ded185..4c4f52fc22 100644 --- a/packages/neo-one-website/src/utils/dgeniSetup.ts +++ b/packages/neo-one-website/src/utils/dgeniSetup.ts @@ -27,7 +27,7 @@ const docFiles: readonly string[] = [ // Configuration of the typescript processor (typescript as any) // Configure additional jsdoc style tags to be recognized by the processor - .config(function(parseTagsProcessor: any) { + .config(function (parseTagsProcessor: any) { const tagDefs = parseTagsProcessor.tagDefinitions; // Register '@example' tags with the processor. Multiple instances allowed. tagDefs.push({ name: 'example', multi: true }); @@ -37,7 +37,7 @@ const docFiles: readonly string[] = [ tagDefs.push({ name: 'internal' }); }) // Configure output paths for additional doc types - .config(function(computeIdsProcessor: any, computePathsProcessor: any) { + .config(function (computeIdsProcessor: any, computePathsProcessor: any) { // Configure ID for "getters". Must be manually configured to avoid potential conflict with a property. computeIdsProcessor.idTemplates.push({ docTypes: ['get-accessor-info'], @@ -75,7 +75,12 @@ export const dgeniSetup = new Package('neo-one-docs', [ // Register our custom processor for our specific use case. .processor(textProcessor) // Configure subprocessors from typescript and nunjucks - .config(function(readFilesProcessor: any, readTypeScriptModules: any, templateFinder: any, writeFilesProcessor: any) { + .config(function ( + readFilesProcessor: any, + readTypeScriptModules: any, + templateFinder: any, + writeFilesProcessor: any, + ) { // Register basePath used for resolving paths to typescript files to parse. readTypeScriptModules.basePath = path.resolve(__dirname, '../../..'); // Register basePath used for resolving paths to javascript files to parse. Unused in our case, but needs to exist. diff --git a/packages/neo-one-website/src/utils/getDocs.ts b/packages/neo-one-website/src/utils/getDocs.ts index 9b7d97f26a..fc30b265fd 100644 --- a/packages/neo-one-website/src/utils/getDocs.ts +++ b/packages/neo-one-website/src/utils/getDocs.ts @@ -33,7 +33,7 @@ export const getDocs = async (): Promise => { const [docFileLists, docSectionConfigs] = await Promise.all([ Promise.all(docSections.map(getDocSection)), getDocSectionConfigs(docSections), - ]); + ] as const); const docsBare = _.flatten(docFileLists); const docs = addAdjacent(docsBare); diff --git a/packages/neo-one-website/src/utils/getReferences.ts b/packages/neo-one-website/src/utils/getReferences.ts index 827aea378c..d648ff36ee 100644 --- a/packages/neo-one-website/src/utils/getReferences.ts +++ b/packages/neo-one-website/src/utils/getReferences.ts @@ -71,7 +71,8 @@ const getLinksFromModule = async (currentPath: string, dirName: string): Promise }; const getLinks = async (): Promise<{ readonly [moduleName: string]: ModuleLinksPaths }> => { - const moduleNames = await fs.readdir(BASE_PATH); + const moduleNamesIn = await fs.readdir(BASE_PATH); + const moduleNames = moduleNamesIn.filter((moduleName) => moduleName.startsWith('neo-one')); return moduleNames.reduce(async (acc, moduleName) => { const moduleLinks = await getLinksFromModule(BASE_PATH, moduleName); @@ -360,15 +361,16 @@ export const getReferences = async () => { type: 'All', content: { type: 'referenceItems', - value: _.sortBy(refItems.filter((item) => item !== undefined), [(item) => (item as ReferenceItem).name]).map( - (item) => ({ - title: (item as ReferenceItem).name, - slug: (item as ReferenceItem).slug, - content: { type: 'referenceItem', value: item }, - current: slug, - sidebar: getSidebar(links), - }), - ), + value: _.sortBy( + refItems.filter((item) => item !== undefined), + [(item) => (item as ReferenceItem).name], + ).map((item) => ({ + title: (item as ReferenceItem).name, + slug: (item as ReferenceItem).slug, + content: { type: 'referenceItem', value: item }, + current: slug, + sidebar: getSidebar(links), + })), }, current: slug, sidebar: getSidebar(links), diff --git a/packages/neo-one-website/src/utils/processors/textProcessor.ts b/packages/neo-one-website/src/utils/processors/textProcessor.ts index 4d73a9e606..575505dcc5 100644 --- a/packages/neo-one-website/src/utils/processors/textProcessor.ts +++ b/packages/neo-one-website/src/utils/processors/textProcessor.ts @@ -1,4 +1,5 @@ // tslint:disable only-arrow-functions no-object-mutation no-any +import ts from 'typescript'; const extractTextWithoutComments = (declaration: ts.Declaration) => declaration diff --git a/static.config.js b/packages/neo-one-website/static.config.js similarity index 81% rename from static.config.js rename to packages/neo-one-website/static.config.js index 4bdc805988..b8ff9ea3af 100644 --- a/static.config.js +++ b/packages/neo-one-website/static.config.js @@ -2,21 +2,20 @@ import path from 'path'; import _ from 'lodash'; require('ts-node/register/transpile-only'); -const { getCourses } = require('./packages/neo-one-website/src/loaders/coursesLoader'); -const { getDocs } = require('./packages/neo-one-website/src/utils/getDocs'); -const { getTutorial } = require('./packages/neo-one-website/src/utils/getTutorial'); -const { getBlogs } = require('./packages/neo-one-website/src/utils/getBlogs'); -const { getReferences } = require('./packages/neo-one-website/src/utils/getReferences'); +const { getCourses } = require('./src/loaders/coursesLoader'); +const { getDocs } = require('./src/utils/getDocs'); +const { getTutorial } = require('./src/utils/getTutorial'); +const { getBlogs } = require('./src/utils/getBlogs'); +const { getReferences } = require('./src/utils/getReferences'); -const ROOT_DIR = path.resolve(__dirname); -const ROOT = path.resolve(ROOT_DIR, 'packages', 'neo-one-website'); +const PACKAGE_DIR = path.resolve(__dirname, '..'); +const ROOT = path.resolve(PACKAGE_DIR, 'neo-one-website'); const getPagePath = (file) => path.resolve(ROOT, 'src', 'pages', file); export default { paths: { root: ROOT, - nodeModules: path.resolve(ROOT_DIR, 'node_modules'), public: 'publicOut', }, entry: path.resolve(ROOT, 'src', 'index'), @@ -24,7 +23,13 @@ export default { title: 'React Static', }), getRoutes: async () => { - const [courses, docs, tutorial, { blogs, blogAll }, references] = await Promise.all([ + const [ + courses, + docs, + tutorial, + { blogs, blogAll }, + references, + ] = await Promise.all([ getCourses(), getDocs(), getTutorial(), @@ -117,7 +122,13 @@ export default { productionSourceMaps: true, disablePreload: true, plugins: [ - path.resolve(ROOT_DIR, 'scripts', 'website', 'webpack', 'plugin'), + path.resolve( + PACKAGE_DIR, + 'neo-one-build-tools-web', + 'dist', + 'webpack', + 'plugin', + ), 'react-static-plugin-emotion', 'react-static-plugin-reach-router', [ diff --git a/packages/neo-one-website/tsconfig.json b/packages/neo-one-website/tsconfig.json new file mode 100644 index 0000000000..06699e675a --- /dev/null +++ b/packages/neo-one-website/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.static.json", + "exclude": ["./courses/**/contracts/*.ts", "./courses/**/tests/*.ts"] +} diff --git a/packages/neo-one-website/tutorial/tutorial.md b/packages/neo-one-website/tutorial/tutorial.md index 02ff91af33..a30b5b2475 100644 --- a/packages/neo-one-website/tutorial/tutorial.md +++ b/packages/neo-one-website/tutorial/tutorial.md @@ -62,28 +62,18 @@ Here's how to setup your local development environment: 3. Install NEOβ€’ONE using either [yarn](https://yarnpkg.com/) ```bash -yarn add @neo-one/suite +yarn add @neo-one/cli @neo-one/client @neo-one/smart-contract @neo-one/smart-contract-test @neo-one/smart-contract-lib @neo-one/smart-contract-typescript-plugin ``` or [npm](https://www.npmjs.com/) -```bash -npm install @neo-one/suite -``` - -alternatively, install the individual packages `@neo-one/suite` wraps for you: - -```bash -yarn add @neo-one/cli @neo-one/client @neo-one/smart-contract @neo-one/smart-contract-test @neo-one/smart-contract-lib @neo-one/smart-contract-typescript-plugin -``` - ```bash npm install @neo-one/cli @neo-one/client @neo-one/smart-contract @neo-one/smart-contract-test @neo-one/smart-contract-lib @neo-one/smart-contract-typescript-plugin ``` 4. Run `yarn neo-one init` or `npx neo-one init` -This command initializes a NEOβ€’ONE project with a `Hello World` smart contract under `neo-one/contracts/HellowWorld.ts`, a unit test under `src/__tests__/HelloWorld.test.ts`, and a config file,`.neo-one.config.ts`. For this tutorial, we will be building a `Token` from the ground up, so you can go ahead and delete the two `HelloWorld` files. We also recommend taking a moment to [setup your editor](/docs/environment-setup#Editor-Setup) to take advantage of inline NEOβ€’ONE compiler diagnostics. +This command initializes a NEOβ€’ONE project with a `Hello World` smart contract under `neo-one/contracts/HelloWorld.ts`, a unit test under `src/__tests__/HelloWorld.test.ts`, and a config file,`.neo-one.config.ts`. For this tutorial, we will be building a `Token` from the ground up, so you can go ahead and delete the two `HelloWorld` files. We also recommend taking a moment to [setup your editor](/docs/environment-setup#Editor-Setup) to take advantage of inline NEOβ€’ONE compiler diagnostics. 5. Review the available [configuration options](/docs/config-options) and update your `.neo-one.config.ts` file as needed. @@ -299,7 +289,7 @@ Unlike methods decorated with `@constant`, normal instance methods may modify co For those of you that have experience with other NEO Smart Contract languages, you may notice that rather than returning `false` we always throw an `Error`. Not only is this more idiomatic TypeScript, but throwing an `Error` also has the side effect of reverting all storage changes. This ensures that when an assertion in an operation fails, there are no erroneous storage changes. Note that when your contract is called from another contract, we will always return `false` to that contract so that it has a chance to react to the failure. We do this because there is not (currently) a way for the calling contract to catch errors. -The main difference for the NEOβ€’ONE client APIs is that methods require relaying a transaction to the blockchain. This makes sense because a non-constant method by definiton mutates storage, and we need to persist those changes to the blockchain. We'll have to wait until the next section to test our `transfer` method since we don't currently have a way of creating tokens. +The main difference for the NEOβ€’ONE client APIs is that non-constant methods require relaying a transaction to the blockchain. This makes sense because a non-constant method by definiton mutates storage, and we need to persist those changes to the blockchain. We'll have to wait until the next section to test our `transfer` method since we don't currently have a way of creating tokens. ### Native Asset Methods diff --git a/packages/neo-one-worker/package.json b/packages/neo-one-worker/package.json index baf79c3f44..773cb4b573 100644 --- a/packages/neo-one-worker/package.json +++ b/packages/neo-one-worker/package.json @@ -3,9 +3,19 @@ "version": "2.3.0", "description": "NEOβ€’ONE web workers.", "main": "./src/index", + "scripts": { + "build": "", + "lint": "node ./node_modules/@neo-one/build-tools/bin/neo-one-lint.js", + "lint:staged": "lint-staged --relative", + "tsc": "node ./node_modules/@neo-one/build-tools/bin/neo-one-tsc.js" + }, + "sideEffects": false, "dependencies": { - "rxjs": "^6.5.2", + "core-js": "^3.2.1", + "rxjs": "^6.5.3", "tslib": "^1.10.0" }, - "sideEffects": false + "devDependencies": { + "@neo-one/build-tools": "^1.0.0" + } } diff --git a/packages/neo-one-worker/src/comlink.ts b/packages/neo-one-worker/src/comlink.ts index db6e2513f8..40355cd230 100644 --- a/packages/neo-one-worker/src/comlink.ts +++ b/packages/neo-one-worker/src/comlink.ts @@ -180,7 +180,7 @@ export function expose(rootObj: Exposable, endpoint: Endpoint | Window): void { throw Error('endpoint does not have all of addEventListener, removeEventListener and postMessage defined'); activateEndpoint(endpoint); - attachMessageHandler(endpoint, async function(event: MessageEvent) { + attachMessageHandler(endpoint, async function (event: MessageEvent) { if (!event.data.id || !event.data.callPath) return; let iresult; const irequest = event.data as InvocationRequest; @@ -363,7 +363,7 @@ function pingPongMessage(endpoint: Endpoint, msg: Object, transferables: Transfe }); } -function cbProxy(cb: CBProxyCallback, callPath: PropertyKey[] = [], target = function() {}): Proxy { +function cbProxy(cb: CBProxyCallback, callPath: PropertyKey[] = [], target = function () {}): Proxy { return new Proxy(target, { construct(_target, argumentsList, proxy) { return cb({ diff --git a/packages/neo-one-worker/src/endpoint.ts b/packages/neo-one-worker/src/endpoint.ts index 67c8f95571..ee0570a031 100644 --- a/packages/neo-one-worker/src/endpoint.ts +++ b/packages/neo-one-worker/src/endpoint.ts @@ -43,7 +43,7 @@ function workerEndpoint(worker: Worker): WorkerEndpoint { return { addEventListener: worker.addEventListener.bind(worker) as any, removeEventListener: worker.removeEventListener.bind(worker) as any, - postMessage: worker.postMessage.bind(worker), + postMessage: worker.postMessage.bind(worker) as any, start: () => { // do nothing }, diff --git a/packages/neo-one-worker/tsconfig.json b/packages/neo-one-worker/tsconfig.json new file mode 100644 index 0000000000..bfb2319087 --- /dev/null +++ b/packages/neo-one-worker/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@neo-one/build-tools/includes/tsconfig.dev.json" +} diff --git a/renovate.json b/renovate.json index 38a0c510b1..47a7b2a26f 100644 --- a/renovate.json +++ b/renovate.json @@ -1,9 +1,7 @@ { - "extends": ["config:base", ":semanticCommits", ":preserveSemverRanges"], - "schedule": ["after 1am and before 5am on every weekday", "every weekend"], + "extends": ["config:base", ":semanticCommits", ":preserveSemverRanges", "group:all"], "timezone": "America/Los_Angeles", "updateNotScheduled": false, - "postUpdateOptions": ["yarnDedupeHighest"], "automerge": true, "major": { "automerge": false diff --git a/rush.json b/rush.json new file mode 100644 index 0000000000..bf0bec6931 --- /dev/null +++ b/rush.json @@ -0,0 +1,414 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/rush.schema.json", + "rushVersion": "5.30.2", + "yarnVersion": "1.19.1", + "nodeSupportedVersionRange": ">=10.13.0 <=12.18.4", + "ensureConsistentVersions": true, + "suppressNodeLtsWarning": true, + "approvedPackagesPolicy": { + "reviewCategories": ["production", "tools", "web"], + "ignoredNpmScopes": ["@types"] + }, + "repository": { + "url": "https://github.com/neo-one-suite/neo-one.git" + }, + "eventHooks": { + "preRushInstall": [], + "postRushInstall": [], + "preRushBuild": [], + "postRushBuild": [] + }, + "projects": [ + { + "packageName": "@neo-one/build-tools", + "projectFolder": "packages/neo-one-build-tools", + "reviewCategory": "tools" + }, + { + "packageName": "@neo-one/build-tests", + "projectFolder": "packages/neo-one-build-tests", + "reviewCategory": "tools" + }, + { + "packageName": "@neo-one/build-tools-web", + "projectFolder": "packages/neo-one-build-tools-web", + "reviewCategory": "tools" + }, + { + "packageName": "@neo-one/cli", + "projectFolder": "packages/neo-one-cli", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" + }, + { + "packageName": "@neo-one/cli-common", + "projectFolder": "packages/neo-one-cli-common", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" + }, + { + "packageName": "@neo-one/cli-common-node", + "projectFolder": "packages/neo-one-cli-common-node", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" + }, + { + "packageName": "@neo-one/client", + "projectFolder": "packages/neo-one-client", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" + }, + { + "packageName": "@neo-one/client-common", + "projectFolder": "packages/neo-one-client-common", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" + }, + { + "packageName": "@neo-one/client-core", + "projectFolder": "packages/neo-one-client-core", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" + }, + { + "packageName": "@neo-one/client-full", + "projectFolder": "packages/neo-one-client-full", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" + }, + { + "packageName": "@neo-one/client-full-common", + "projectFolder": "packages/neo-one-client-full-common", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" + }, + { + "packageName": "@neo-one/client-full-core", + "projectFolder": "packages/neo-one-client-full-core", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" + }, + { + "packageName": "@neo-one/client-switch", + "projectFolder": "packages/neo-one-client-switch", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" + }, + { + "packageName": "@neo-one/developer-tools", + "projectFolder": "packages/neo-one-developer-tools", + "reviewCategory": "production", + "shouldPublish": false, + "versionPolicyName": "CoreReleasePolicy" + }, + { + "packageName": "@neo-one/developer-tools-frame", + "projectFolder": "packages/neo-one-developer-tools-frame", + "reviewCategory": "web" + }, + { + "packageName": "@neo-one/editor", + "projectFolder": "packages/neo-one-editor", + "reviewCategory": "web" + }, + { + "packageName": "@neo-one/editor-server", + "projectFolder": "packages/neo-one-editor-server", + "reviewCategory": "web" + }, + { + "packageName": "@neo-one/http", + "projectFolder": "packages/neo-one-http", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" + }, + { + "packageName": "@neo-one/http-context", + "projectFolder": "packages/neo-one-http-context", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "CoreReleasePolicy" + }, + { + "packageName": "@neo-one/local-browser", + "projectFolder": "packages/neo-one-local-browser", + "reviewCategory": "web" + }, + { + "packageName": "@neo-one/local-browser-worker", + "projectFolder": "packages/neo-one-local-browser-worker", + "reviewCategory": "web" + }, + { + "packageName": "@neo-one/local-singleton", + "projectFolder": "packages/neo-one-local-singleton", + "reviewCategory": "web" + }, + { + "packageName": "@neo-one/logger", + "projectFolder": "packages/neo-one-logger", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/logger-config", + "projectFolder": "packages/neo-one-logger-config", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/node", + "projectFolder": "packages/neo-one-node", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" + }, + { + "packageName": "@neo-one/node-bin", + "projectFolder": "packages/neo-one-node-bin", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" + }, + { + "packageName": "@neo-one/node-blockchain", + "projectFolder": "packages/neo-one-node-blockchain", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" + }, + { + "packageName": "@neo-one/node-browser", + "projectFolder": "packages/neo-one-node-browser", + "reviewCategory": "web" + }, + { + "packageName": "@neo-one/node-browser-worker", + "projectFolder": "packages/neo-one-node-browser-worker", + "reviewCategory": "web" + }, + { + "packageName": "@neo-one/node-consensus", + "projectFolder": "packages/neo-one-node-consensus", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" + }, + { + "packageName": "@neo-one/node-core", + "projectFolder": "packages/neo-one-node-core", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" + }, + { + "packageName": "@neo-one/node-http-rpc", + "projectFolder": "packages/neo-one-node-http-rpc", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" + }, + { + "packageName": "@neo-one/node-native", + "projectFolder": "packages/neo-one-node-native", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" + }, + { + "packageName": "@neo-one/node-neo-settings", + "projectFolder": "packages/neo-one-node-neo-settings", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" + }, + { + "packageName": "@neo-one/node-network", + "projectFolder": "packages/neo-one-node-network", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" + }, + { + "packageName": "@neo-one/node-offline", + "projectFolder": "packages/neo-one-node-offline", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" + }, + { + "packageName": "@neo-one/node-protocol", + "projectFolder": "packages/neo-one-node-protocol", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" + }, + { + "packageName": "@neo-one/node-rpc-handler", + "projectFolder": "packages/neo-one-node-rpc-handler", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" + }, + { + "packageName": "@neo-one/node-storage-cache", + "projectFolder": "packages/neo-one-node-storage-cache", + "reviewCategory": "production", + "shouldPublish": false, + "versionPolicyName": "NodeReleasePolicy" + }, + { + "packageName": "@neo-one/node-storage-common", + "projectFolder": "packages/neo-one-node-storage-common", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" + }, + { + "packageName": "@neo-one/node-storage-levelup", + "projectFolder": "packages/neo-one-node-storage-levelup", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" + }, + { + "packageName": "@neo-one/node-tools", + "projectFolder": "packages/neo-one-node-tools", + "reviewCategory": "production" + }, + { + "packageName": "@neo-one/node-vm", + "projectFolder": "packages/neo-one-node-vm", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "NodeReleasePolicy" + }, + { + "packageName": "@neo-one/react", + "projectFolder": "packages/neo-one-react", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "WebReleasePolicy" + }, + { + "packageName": "@neo-one/react-common", + "projectFolder": "packages/neo-one-react-common", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "WebReleasePolicy" + }, + { + "packageName": "@neo-one/react-core", + "projectFolder": "packages/neo-one-react-core", + "reviewCategory": "production", + "shouldPublish": true, + "versionPolicyName": "WebReleasePolicy" + }, + { + "packageName": "@neo-one/smart-contract", + "projectFolder": "packages/neo-one-smart-contract", + "reviewCategory": "production", + "shouldPublish": false, + "versionPolicyName": "CoreReleasePolicy" + }, + { + "packageName": "@neo-one/smart-contract-codegen", + "projectFolder": "packages/neo-one-smart-contract-codegen", + "reviewCategory": "production", + "shouldPublish": false, + "versionPolicyName": "CoreReleasePolicy" + }, + { + "packageName": "@neo-one/smart-contract-compiler", + "projectFolder": "packages/neo-one-smart-contract-compiler", + "reviewCategory": "production", + "shouldPublish": false, + "versionPolicyName": "CoreReleasePolicy" + }, + { + "packageName": "@neo-one/smart-contract-compiler-node", + "projectFolder": "packages/neo-one-smart-contract-compiler-node", + "reviewCategory": "production", + "shouldPublish": false, + "versionPolicyName": "CoreReleasePolicy" + }, + { + "packageName": "@neo-one/smart-contract-lib", + "projectFolder": "packages/neo-one-smart-contract-lib", + "reviewCategory": "production", + "shouldPublish": false, + "versionPolicyName": "CoreReleasePolicy" + }, + { + "packageName": "@neo-one/smart-contract-test", + "projectFolder": "packages/neo-one-smart-contract-test", + "reviewCategory": "production", + "shouldPublish": false, + "versionPolicyName": "CoreReleasePolicy" + }, + { + "packageName": "@neo-one/smart-contract-test-browser", + "projectFolder": "packages/neo-one-smart-contract-test-browser", + "reviewCategory": "web" + }, + { + "packageName": "@neo-one/smart-contract-test-common", + "projectFolder": "packages/neo-one-smart-contract-test-common", + "reviewCategory": "production", + "shouldPublish": false, + "versionPolicyName": "CoreReleasePolicy" + }, + { + "packageName": "@neo-one/smart-contract-typescript-plugin", + "projectFolder": "packages/neo-one-smart-contract-typescript-plugin", + "reviewCategory": "production", + "shouldPublish": false, + "versionPolicyName": "CoreReleasePolicy" + }, + { + "packageName": "@neo-one/ts-utils", + "projectFolder": "packages/neo-one-ts-utils", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/typescript-concatenator", + "projectFolder": "packages/neo-one-typescript-concatenator", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/utils", + "projectFolder": "packages/neo-one-utils", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/utils-node", + "projectFolder": "packages/neo-one-utils-node", + "reviewCategory": "production", + "shouldPublish": true + }, + { + "packageName": "@neo-one/website", + "projectFolder": "packages/neo-one-website", + "reviewCategory": "web" + }, + { + "packageName": "@neo-one/worker", + "projectFolder": "packages/neo-one-worker", + "reviewCategory": "web" + } + ] +} diff --git a/scripts/DockerfileNode b/scripts/DockerfileNode index 29269cfa4f..f49b54a044 100644 --- a/scripts/DockerfileNode +++ b/scripts/DockerfileNode @@ -3,73 +3,145 @@ FROM neotracker/neo-one-circleci-node@sha256:6f76ab22882896c057d9d805955892f1dee RUN mkdir -p /tmp/neo-one WORKDIR /tmp/neo-one -COPY package.json tsconfig.json lerna.json gulpfile.js yarn.lock LICENSE README.md ./ -COPY tsconfig/ tsconfig -COPY types/ types -COPY packages/neo-one-utils-node/src/ packages/neo-one-utils-node/src -COPY packages/neo-one-utils-node/package.json packages/neo-one-utils-node/ -COPY packages/neo-one-utils/src/ packages/neo-one-utils/src -COPY packages/neo-one-utils/package.json packages/neo-one-utils/ -COPY packages/neo-one-logger/src/ packages/neo-one-logger/src -COPY packages/neo-one-logger/package.json packages/neo-one-logger/ -COPY packages/neo-one-logger-config/src/ packages/neo-one-logger-config/src -COPY packages/neo-one-logger-config/package.json packages/neo-one-logger-config/ -COPY packages/neo-one-cli-common/src/ packages/neo-one-cli-common/src -COPY packages/neo-one-cli-common/package.json packages/neo-one-cli-common/ -COPY packages/neo-one-cli-common-node/src/ packages/neo-one-cli-common-node/src -COPY packages/neo-one-cli-common-node/package.json packages/neo-one-cli-common-node/ -COPY packages/neo-one-client/src/ packages/neo-one-client/src -COPY packages/neo-one-client/package.json packages/neo-one-client/ -COPY packages/neo-one-client-common/src/ packages/neo-one-client-common/src -COPY packages/neo-one-client-common/package.json packages/neo-one-client-common/ -COPY packages/neo-one-client-core/src/ packages/neo-one-client-core/src -COPY packages/neo-one-client-core/package.json packages/neo-one-client-core/ -COPY packages/neo-one-client-full-common/src/ packages/neo-one-client-full-common/src -COPY packages/neo-one-client-full-common/package.json packages/neo-one-client-full-common/ -COPY packages/neo-one-client-full-core/src/ packages/neo-one-client-full-core/src -COPY packages/neo-one-client-full-core/package.json packages/neo-one-client-full-core/ -COPY packages/neo-one-client-full/src/ packages/neo-one-client-full/src -COPY packages/neo-one-client-full/package.json packages/neo-one-client-full/ -COPY packages/neo-one-client-switch/src/ packages/neo-one-client-switch/src -COPY packages/neo-one-client-switch/package.json packages/neo-one-client-switch/ -COPY packages/neo-one-node-bin/src/ packages/neo-one-node-bin/src -COPY packages/neo-one-node-bin/package.json packages/neo-one-node-bin/ -COPY packages/neo-one-node-blockchain/src/ packages/neo-one-node-blockchain/src -COPY packages/neo-one-node-blockchain/package.json packages/neo-one-node-blockchain/ -COPY packages/neo-one-node-consensus/src/ packages/neo-one-node-consensus/src -COPY packages/neo-one-node-consensus/package.json packages/neo-one-node-consensus/ -COPY packages/neo-one-node-core/src/ packages/neo-one-node-core/src -COPY packages/neo-one-node-core/package.json packages/neo-one-node-core/ -COPY packages/neo-one-node-http-rpc/src/ packages/neo-one-node-http-rpc/src -COPY packages/neo-one-node-http-rpc/package.json packages/neo-one-node-http-rpc/ -COPY packages/neo-one-node-neo-settings/src/ packages/neo-one-node-neo-settings/src -COPY packages/neo-one-node-neo-settings/package.json packages/neo-one-node-neo-settings/ -COPY packages/neo-one-node-network/src/ packages/neo-one-node-network/src -COPY packages/neo-one-node-network/package.json packages/neo-one-node-network/ -COPY packages/neo-one-node-offline/src/ packages/neo-one-node-offline/src -COPY packages/neo-one-node-offline/package.json packages/neo-one-node-offline/ -COPY packages/neo-one-node-protocol/src/ packages/neo-one-node-protocol/src -COPY packages/neo-one-node-protocol/package.json packages/neo-one-node-protocol/ -COPY packages/neo-one-node-rpc-handler/src/ packages/neo-one-node-rpc-handler/src -COPY packages/neo-one-node-rpc-handler/package.json packages/neo-one-node-rpc-handler/ -COPY packages/neo-one-node-storage-common/src/ packages/neo-one-node-storage-common/src -COPY packages/neo-one-node-storage-common/package.json packages/neo-one-node-storage-common/ -COPY packages/neo-one-node-storage-levelup/src/ packages/neo-one-node-storage-levelup/src -COPY packages/neo-one-node-storage-levelup/package.json packages/neo-one-node-storage-levelup/ -COPY packages/neo-one-node-vm/src/ packages/neo-one-node-vm/src -COPY packages/neo-one-node-vm/package.json packages/neo-one-node-vm/ -COPY packages/neo-one-node/src/ packages/neo-one-node/src -COPY packages/neo-one-node/package.json packages/neo-one-node/ -COPY packages/neo-one-http/src/ packages/neo-one-http/src -COPY packages/neo-one-http/package.json packages/neo-one-http/ -COPY packages/neo-one-http-context/src/ packages/neo-one-http-context/src -COPY packages/neo-one-http-context/package.json packages/neo-one-http-context/ +COPY rush.json LICENSE README.md ./ +COPY common/config common/config/ +COPY common/scripts common/scripts/ +COPY packages packages/ -RUN sudo yarn install --non-interactive -RUN yarn build:node +RUN sudo node common/scripts/install-run-rush.js install +RUN sudo node common/scripts/install-run-rush.js rebuild -t @neo-one/node-bin # node:12.9.0-buster-slim 2019-08-27 FROM node@sha256:d1cfeb3cc51782d51336e34bd477c5b1b46b32e5f49cd1c3829ef52f0a5250df AS production -RUN mkdir -p neo-one -COPY --from=builder tmp/neo-one/dist/neo-one/ neo-one/ -ENTRYPOINT ["/usr/local/bin/node", "neo-one/packages/neo-one-node-bin/bin/neo-one-node"] + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + libc6 \ + libgcc1 \ + libgssapi-krb5-2 \ + libicu63 \ + libssl1.1 \ + libstdc++6 \ + zlib1g \ + libsnappy-dev \ + && rm -rf /var/lib/apt/lists/* + +# Install .NET Core SDK +RUN dotnet_sdk_version=3.1.403 \ + && curl -SL --output dotnet.tar.gz https://dotnetcli.azureedge.net/dotnet/Sdk/$dotnet_sdk_version/dotnet-sdk-$dotnet_sdk_version-linux-x64.tar.gz \ + && dotnet_sha512='0a0319ee8e9042bf04b6e83211c2d6e44e40e604bff0a133ba0d246d08bff76ebd88918ab5e10e6f7f0d2b504ddeb65c0108c6539bc4fbc4f09e4af3937e88ea' \ + && echo "$dotnet_sha512 dotnet.tar.gz" | sha512sum -c - \ + && mkdir -p /usr/share/dotnet \ + && tar -ozxf dotnet.tar.gz -C /usr/share/dotnet \ + && rm dotnet.tar.gz \ + && ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet \ + && dotnet --version + +RUN mkdir -p /neo-one +WORKDIR /neo-one +COPY --from=builder /tmp/neo-one/packages/neo-one-utils/package.json packages/neo-one-utils/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-utils/dist/cjs packages/neo-one-utils/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-utils/node_modules packages/neo-one-utils/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-client-common/package.json packages/neo-one-client-common/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-client-common/dist/cjs packages/neo-one-client-common/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-client-common/node_modules packages/neo-one-client-common/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-client-full-common/package.json packages/neo-one-client-full-common/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-client-full-common/dist/cjs packages/neo-one-client-full-common/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-client-full-common/node_modules packages/neo-one-client-full-common/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-core/package.json packages/neo-one-node-core/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-core/dist/cjs packages/neo-one-node-core/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-core/node_modules packages/neo-one-node-core/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-vm/package.json packages/neo-one-node-vm/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-vm/dist/cjs packages/neo-one-node-vm/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-vm/node_modules packages/neo-one-node-vm/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-vm/lib packages/neo-one-node-vm/lib/ +COPY --from=builder /tmp/neo-one/packages/neo-one-client-switch/package.json packages/neo-one-client-switch/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-client-switch/dist/cjs packages/neo-one-client-switch/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-client-switch/node_modules packages/neo-one-client-switch/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-client-core/package.json packages/neo-one-client-core/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-client-core/dist/cjs packages/neo-one-client-core/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-client-core/node_modules packages/neo-one-client-core/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-react-core/package.json packages/neo-one-react-core/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-react-core/dist/cjs packages/neo-one-react-core/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-react-core/node_modules packages/neo-one-react-core/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-logger-config/package.json packages/neo-one-logger-config/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-logger-config/dist/cjs packages/neo-one-logger-config/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-logger-config/node_modules packages/neo-one-logger-config/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-client-full-core/package.json packages/neo-one-client-full-core/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-client-full-core/dist/cjs packages/neo-one-client-full-core/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-client-full-core/node_modules packages/neo-one-client-full-core/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-react/package.json packages/neo-one-react/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-react/dist/cjs packages/neo-one-react/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-react/node_modules packages/neo-one-react/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-react-common/package.json packages/neo-one-react-common/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-react-common/dist/cjs packages/neo-one-react-common/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-react-common/node_modules packages/neo-one-react-common/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-logger/package.json packages/neo-one-logger/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-logger/dist/cjs packages/neo-one-logger/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-logger/node_modules packages/neo-one-logger/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-cli-common/package.json packages/neo-one-cli-common/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-cli-common/dist/cjs packages/neo-one-cli-common/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-cli-common/node_modules packages/neo-one-cli-common/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-cli-common-node/package.json packages/neo-one-cli-common-node/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-cli-common-node/dist/cjs packages/neo-one-cli-common-node/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-cli-common-node/node_modules packages/neo-one-cli-common-node/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-http/package.json packages/neo-one-http/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-http/dist/cjs packages/neo-one-http/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-http/node_modules packages/neo-one-http/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-http-context/package.json packages/neo-one-http-context/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-http-context/dist/cjs packages/neo-one-http-context/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-http-context/node_modules packages/neo-one-http-context/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-rpc-handler/package.json packages/neo-one-node-rpc-handler/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-rpc-handler/dist/cjs packages/neo-one-node-rpc-handler/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-rpc-handler/node_modules packages/neo-one-node-rpc-handler/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-consensus/package.json packages/neo-one-node-consensus/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-consensus/dist/cjs packages/neo-one-node-consensus/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-consensus/node_modules packages/neo-one-node-consensus/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-storage-common/package.json packages/neo-one-node-storage-common/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-storage-common/dist/cjs packages/neo-one-node-storage-common/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-storage-common/node_modules packages/neo-one-node-storage-common/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-blockchain/package.json packages/neo-one-node-blockchain/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-blockchain/dist/cjs packages/neo-one-node-blockchain/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-blockchain/node_modules packages/neo-one-node-blockchain/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-http-rpc/package.json packages/neo-one-node-http-rpc/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-http-rpc/dist/cjs packages/neo-one-node-http-rpc/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-http-rpc/node_modules packages/neo-one-node-http-rpc/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-network/package.json packages/neo-one-node-network/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-network/dist/cjs packages/neo-one-node-network/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-network/node_modules packages/neo-one-node-network/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-offline/package.json packages/neo-one-node-offline/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-offline/dist/cjs packages/neo-one-node-offline/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-offline/node_modules packages/neo-one-node-offline/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-protocol/package.json packages/neo-one-node-protocol/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-protocol/dist/cjs packages/neo-one-node-protocol/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-protocol/node_modules packages/neo-one-node-protocol/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-storage-levelup/package.json packages/neo-one-node-storage-levelup/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-storage-levelup/dist/cjs packages/neo-one-node-storage-levelup/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-storage-levelup/node_modules packages/neo-one-node-storage-levelup/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node/package.json packages/neo-one-node/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node/dist/cjs packages/neo-one-node/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node/node_modules packages/neo-one-node/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-neo-settings/package.json packages/neo-one-node-neo-settings/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-neo-settings/dist/cjs packages/neo-one-node-neo-settings/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-neo-settings/node_modules packages/neo-one-node-neo-settings/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-utils-node/package.json packages/neo-one-utils-node/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-utils-node/dist/cjs packages/neo-one-utils-node/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-utils-node/node_modules packages/neo-one-utils-node/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-bin/package.json packages/neo-one-node-bin/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-bin/dist/cjs packages/neo-one-node-bin/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-bin/node_modules packages/neo-one-node-bin/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-bin/bin packages/neo-one-node-bin/bin/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-tools/package.json packages/neo-one-node-tools/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-tools/dist/cjs packages/neo-one-node-tools/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-tools/node_modules packages/neo-one-node-tools/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-tools/bin packages/neo-one-node-tools/bin/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-native/package.json packages/neo-one-node-native/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-native/dist/cjs packages/neo-one-node-native/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-native/node_modules packages/neo-one-node-native/node_modules/ +COPY --from=builder /tmp/neo-one/common/temp/node_modules common/temp/node_modules/ + +ENV EDGE_APP_ROOT /neo-one/packages/neo-one-node-vm/lib/bin/Debug/netcoreapp3.0 +ENV EDGE_USE_CORELR 1 +RUN dotnet build packages/neo-one-node-vm/lib + +ENTRYPOINT ["/usr/local/bin/node", "packages/neo-one-node-bin/bin/neo-one-node.js"] diff --git a/scripts/DockerfileNodeGSUtil b/scripts/DockerfileNodeGSUtil index 541d509530..89aa72422e 100644 --- a/scripts/DockerfileNodeGSUtil +++ b/scripts/DockerfileNodeGSUtil @@ -3,74 +3,147 @@ FROM neotracker/neo-one-circleci-node@sha256:6f76ab22882896c057d9d805955892f1dee RUN mkdir -p /tmp/neo-one WORKDIR /tmp/neo-one -COPY package.json tsconfig.json lerna.json gulpfile.js yarn.lock LICENSE README.md ./ -COPY tsconfig/ tsconfig -COPY types/ types -COPY packages/neo-one-utils-node/src/ packages/neo-one-utils-node/src -COPY packages/neo-one-utils-node/package.json packages/neo-one-utils-node/ -COPY packages/neo-one-utils/src/ packages/neo-one-utils/src -COPY packages/neo-one-utils/package.json packages/neo-one-utils/ -COPY packages/neo-one-logger/src/ packages/neo-one-logger/src -COPY packages/neo-one-logger/package.json packages/neo-one-logger/ -COPY packages/neo-one-logger-config/src/ packages/neo-one-logger-config/src -COPY packages/neo-one-logger-config/package.json packages/neo-one-logger-config/ -COPY packages/neo-one-cli-common/src/ packages/neo-one-cli-common/src -COPY packages/neo-one-cli-common/package.json packages/neo-one-cli-common/ -COPY packages/neo-one-cli-common-node/src/ packages/neo-one-cli-common-node/src -COPY packages/neo-one-cli-common-node/package.json packages/neo-one-cli-common-node/ -COPY packages/neo-one-client/src/ packages/neo-one-client/src -COPY packages/neo-one-client/package.json packages/neo-one-client/ -COPY packages/neo-one-client-common/src/ packages/neo-one-client-common/src -COPY packages/neo-one-client-common/package.json packages/neo-one-client-common/ -COPY packages/neo-one-client-core/src/ packages/neo-one-client-core/src -COPY packages/neo-one-client-core/package.json packages/neo-one-client-core/ -COPY packages/neo-one-client-full-common/src/ packages/neo-one-client-full-common/src -COPY packages/neo-one-client-full-common/package.json packages/neo-one-client-full-common/ -COPY packages/neo-one-client-full-core/src/ packages/neo-one-client-full-core/src -COPY packages/neo-one-client-full-core/package.json packages/neo-one-client-full-core/ -COPY packages/neo-one-client-full/src/ packages/neo-one-client-full/src -COPY packages/neo-one-client-full/package.json packages/neo-one-client-full/ -COPY packages/neo-one-client-switch/src/ packages/neo-one-client-switch/src -COPY packages/neo-one-client-switch/package.json packages/neo-one-client-switch/ -COPY packages/neo-one-node-bin/src/ packages/neo-one-node-bin/src -COPY packages/neo-one-node-bin/package.json packages/neo-one-node-bin/ -COPY packages/neo-one-node-blockchain/src/ packages/neo-one-node-blockchain/src -COPY packages/neo-one-node-blockchain/package.json packages/neo-one-node-blockchain/ -COPY packages/neo-one-node-consensus/src/ packages/neo-one-node-consensus/src -COPY packages/neo-one-node-consensus/package.json packages/neo-one-node-consensus/ -COPY packages/neo-one-node-core/src/ packages/neo-one-node-core/src -COPY packages/neo-one-node-core/package.json packages/neo-one-node-core/ -COPY packages/neo-one-node-http-rpc/src/ packages/neo-one-node-http-rpc/src -COPY packages/neo-one-node-http-rpc/package.json packages/neo-one-node-http-rpc/ -COPY packages/neo-one-node-neo-settings/src/ packages/neo-one-node-neo-settings/src -COPY packages/neo-one-node-neo-settings/package.json packages/neo-one-node-neo-settings/ -COPY packages/neo-one-node-network/src/ packages/neo-one-node-network/src -COPY packages/neo-one-node-network/package.json packages/neo-one-node-network/ -COPY packages/neo-one-node-offline/src/ packages/neo-one-node-offline/src -COPY packages/neo-one-node-offline/package.json packages/neo-one-node-offline/ -COPY packages/neo-one-node-protocol/src/ packages/neo-one-node-protocol/src -COPY packages/neo-one-node-protocol/package.json packages/neo-one-node-protocol/ -COPY packages/neo-one-node-rpc-handler/src/ packages/neo-one-node-rpc-handler/src -COPY packages/neo-one-node-rpc-handler/package.json packages/neo-one-node-rpc-handler/ -COPY packages/neo-one-node-storage-common/src/ packages/neo-one-node-storage-common/src -COPY packages/neo-one-node-storage-common/package.json packages/neo-one-node-storage-common/ -COPY packages/neo-one-node-storage-levelup/src/ packages/neo-one-node-storage-levelup/src -COPY packages/neo-one-node-storage-levelup/package.json packages/neo-one-node-storage-levelup/ -COPY packages/neo-one-node-vm/src/ packages/neo-one-node-vm/src -COPY packages/neo-one-node-vm/package.json packages/neo-one-node-vm/ -COPY packages/neo-one-node/src/ packages/neo-one-node/src -COPY packages/neo-one-node/package.json packages/neo-one-node/ -COPY packages/neo-one-http/src/ packages/neo-one-http/src -COPY packages/neo-one-http/package.json packages/neo-one-http/ -COPY packages/neo-one-http-context/src/ packages/neo-one-http-context/src -COPY packages/neo-one-http-context/package.json packages/neo-one-http-context/ +COPY rush.json LICENSE README.md ./ +COPY common/config common/config/ +COPY common/scripts common/scripts/ +COPY packages packages/ -RUN sudo yarn install --non-interactive -RUN yarn build:node +RUN sudo node common/scripts/install-run-rush.js install +RUN sudo node common/scripts/install-run-rush.js rebuild -t @neo-one/node-bin # node:12.9.0-buster-slim 2019-08-27 FROM node@sha256:d1cfeb3cc51782d51336e34bd477c5b1b46b32e5f49cd1c3829ef52f0a5250df AS production -RUN mkdir -p neo-one -COPY --from=builder tmp/neo-one/dist/neo-one/ neo-one/ + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + libc6 \ + libgcc1 \ + libgssapi-krb5-2 \ + libicu63 \ + libssl1.1 \ + libstdc++6 \ + zlib1g \ + libsnappy-dev \ + && rm -rf /var/lib/apt/lists/* + +# Install .NET Core SDK +RUN dotnet_sdk_version=3.1.403 \ + && curl -SL --output dotnet.tar.gz https://dotnetcli.azureedge.net/dotnet/Sdk/$dotnet_sdk_version/dotnet-sdk-$dotnet_sdk_version-linux-x64.tar.gz \ + && dotnet_sha512='0a0319ee8e9042bf04b6e83211c2d6e44e40e604bff0a133ba0d246d08bff76ebd88918ab5e10e6f7f0d2b504ddeb65c0108c6539bc4fbc4f09e4af3937e88ea' \ + && echo "$dotnet_sha512 dotnet.tar.gz" | sha512sum -c - \ + && mkdir -p /usr/share/dotnet \ + && tar -ozxf dotnet.tar.gz -C /usr/share/dotnet \ + && rm dotnet.tar.gz \ + && ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet \ + && dotnet --version + +RUN mkdir -p /neo-one +WORKDIR /neo-one +COPY --from=builder /tmp/neo-one/packages/neo-one-utils/package.json packages/neo-one-utils/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-utils/dist/cjs packages/neo-one-utils/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-utils/node_modules packages/neo-one-utils/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-client-common/package.json packages/neo-one-client-common/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-client-common/dist/cjs packages/neo-one-client-common/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-client-common/node_modules packages/neo-one-client-common/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-client-full-common/package.json packages/neo-one-client-full-common/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-client-full-common/dist/cjs packages/neo-one-client-full-common/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-client-full-common/node_modules packages/neo-one-client-full-common/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-core/package.json packages/neo-one-node-core/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-core/dist/cjs packages/neo-one-node-core/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-core/node_modules packages/neo-one-node-core/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-vm/package.json packages/neo-one-node-vm/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-vm/dist/cjs packages/neo-one-node-vm/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-vm/node_modules packages/neo-one-node-vm/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-vm/lib packages/neo-one-node-vm/lib/ +COPY --from=builder /tmp/neo-one/packages/neo-one-client-switch/package.json packages/neo-one-client-switch/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-client-switch/dist/cjs packages/neo-one-client-switch/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-client-switch/node_modules packages/neo-one-client-switch/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-client-core/package.json packages/neo-one-client-core/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-client-core/dist/cjs packages/neo-one-client-core/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-client-core/node_modules packages/neo-one-client-core/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-react-core/package.json packages/neo-one-react-core/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-react-core/dist/cjs packages/neo-one-react-core/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-react-core/node_modules packages/neo-one-react-core/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-logger-config/package.json packages/neo-one-logger-config/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-logger-config/dist/cjs packages/neo-one-logger-config/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-logger-config/node_modules packages/neo-one-logger-config/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-client-full-core/package.json packages/neo-one-client-full-core/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-client-full-core/dist/cjs packages/neo-one-client-full-core/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-client-full-core/node_modules packages/neo-one-client-full-core/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-react/package.json packages/neo-one-react/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-react/dist/cjs packages/neo-one-react/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-react/node_modules packages/neo-one-react/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-react-common/package.json packages/neo-one-react-common/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-react-common/dist/cjs packages/neo-one-react-common/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-react-common/node_modules packages/neo-one-react-common/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-logger/package.json packages/neo-one-logger/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-logger/dist/cjs packages/neo-one-logger/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-logger/node_modules packages/neo-one-logger/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-cli-common/package.json packages/neo-one-cli-common/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-cli-common/dist/cjs packages/neo-one-cli-common/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-cli-common/node_modules packages/neo-one-cli-common/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-cli-common-node/package.json packages/neo-one-cli-common-node/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-cli-common-node/dist/cjs packages/neo-one-cli-common-node/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-cli-common-node/node_modules packages/neo-one-cli-common-node/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-http/package.json packages/neo-one-http/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-http/dist/cjs packages/neo-one-http/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-http/node_modules packages/neo-one-http/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-http-context/package.json packages/neo-one-http-context/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-http-context/dist/cjs packages/neo-one-http-context/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-http-context/node_modules packages/neo-one-http-context/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-rpc-handler/package.json packages/neo-one-node-rpc-handler/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-rpc-handler/dist/cjs packages/neo-one-node-rpc-handler/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-rpc-handler/node_modules packages/neo-one-node-rpc-handler/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-consensus/package.json packages/neo-one-node-consensus/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-consensus/dist/cjs packages/neo-one-node-consensus/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-consensus/node_modules packages/neo-one-node-consensus/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-storage-common/package.json packages/neo-one-node-storage-common/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-storage-common/dist/cjs packages/neo-one-node-storage-common/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-storage-common/node_modules packages/neo-one-node-storage-common/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-blockchain/package.json packages/neo-one-node-blockchain/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-blockchain/dist/cjs packages/neo-one-node-blockchain/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-blockchain/node_modules packages/neo-one-node-blockchain/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-http-rpc/package.json packages/neo-one-node-http-rpc/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-http-rpc/dist/cjs packages/neo-one-node-http-rpc/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-http-rpc/node_modules packages/neo-one-node-http-rpc/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-network/package.json packages/neo-one-node-network/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-network/dist/cjs packages/neo-one-node-network/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-network/node_modules packages/neo-one-node-network/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-offline/package.json packages/neo-one-node-offline/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-offline/dist/cjs packages/neo-one-node-offline/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-offline/node_modules packages/neo-one-node-offline/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-protocol/package.json packages/neo-one-node-protocol/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-protocol/dist/cjs packages/neo-one-node-protocol/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-protocol/node_modules packages/neo-one-node-protocol/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-storage-levelup/package.json packages/neo-one-node-storage-levelup/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-storage-levelup/dist/cjs packages/neo-one-node-storage-levelup/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-storage-levelup/node_modules packages/neo-one-node-storage-levelup/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node/package.json packages/neo-one-node/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node/dist/cjs packages/neo-one-node/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node/node_modules packages/neo-one-node/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-neo-settings/package.json packages/neo-one-node-neo-settings/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-neo-settings/dist/cjs packages/neo-one-node-neo-settings/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-neo-settings/node_modules packages/neo-one-node-neo-settings/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-utils-node/package.json packages/neo-one-utils-node/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-utils-node/dist/cjs packages/neo-one-utils-node/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-utils-node/node_modules packages/neo-one-utils-node/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-bin/package.json packages/neo-one-node-bin/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-bin/dist/cjs packages/neo-one-node-bin/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-bin/node_modules packages/neo-one-node-bin/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-bin/bin packages/neo-one-node-bin/bin/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-tools/package.json packages/neo-one-node-tools/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-tools/dist/cjs packages/neo-one-node-tools/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-tools/node_modules packages/neo-one-node-tools/node_modules/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-tools/bin packages/neo-one-node-tools/bin/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-native/package.json packages/neo-one-node-native/package.json +COPY --from=builder /tmp/neo-one/packages/neo-one-node-native/dist/cjs packages/neo-one-node-native/dist/cjs/ +COPY --from=builder /tmp/neo-one/packages/neo-one-node-native/node_modules packages/neo-one-node-native/node_modules/ +COPY --from=builder /tmp/neo-one/common/temp/node_modules common/temp/node_modules/ + RUN apt-get -qqy update && apt-get install -qqy gcc python-dev python-setuptools libffi-dev python-pip && pip install gsutil -ENTRYPOINT ["node", "neo-one/packages/neo-one-node-bin/bin/neo-one-node"] + +ENV EDGE_APP_ROOT /neo-one/packages/neo-one-node-vm/lib/bin/Debug/netcoreapp3.0 +ENV EDGE_USE_CORELR 1 +RUN dotnet build packages/neo-one-node-vm/lib + +ENTRYPOINT ["/usr/local/bin/node", "packages/neo-one-node-bin/bin/neo-one-node.js"] diff --git a/scripts/checkDependencies.ts b/scripts/checkDependencies.ts deleted file mode 100644 index 782b0eeeef..0000000000 --- a/scripts/checkDependencies.ts +++ /dev/null @@ -1,139 +0,0 @@ -// tslint:disable no-console no-any -import execa from 'execa'; -import * as fs from 'fs-extra'; -import _ from 'lodash'; -import * as path from 'path'; - -const log = (value: string | Error) => { - if (value instanceof Error) { - console.error(value); - } else { - console.log(value); - } -}; - -const WHITELIST = new Set(['tslib']); - -const dir = path.resolve(__dirname, '..', 'packages'); - -const checkDependency = async ( - pkg: string, - dependency: string, - dependencies: { readonly [name: string]: string | undefined }, -) => { - if (WHITELIST.has(dependency)) { - return; - } - - if (dependency.startsWith('@types')) { - if (dependencies[dependency.slice('@types/'.length)] === undefined) { - log(`${pkg}: ${dependency} unused`); - } - - return; - } - - try { - await execa('ack', [`["']${dependency}.*['"]`, path.resolve(dir, pkg, 'src')]); - } catch { - log(`${pkg}: ${dependency} unused`); - } -}; - -interface Dependencies { - readonly [name: string]: Set; -} - -const mergeDependencies = (a: Dependencies, b: Dependencies) => { - const mutableOut: { [name: string]: Set } = {}; - - const addVersion = (name: string, version: string) => { - if ((mutableOut[name] as Set | undefined) === undefined) { - mutableOut[name] = new Set(); - } - - mutableOut[name].add(version); - }; - - const addVersions = (name: string, versions: Set) => { - versions.forEach((version) => addVersion(name, version)); - }; - - Object.entries(a).forEach(([name, version]) => addVersions(name, version)); - Object.entries(b).forEach(([name, version]) => addVersions(name, version)); - - return mutableOut; -}; - -const getDependencies = (obj: { readonly [name: string]: string } | undefined): Dependencies => { - if (obj === undefined) { - return {}; - } - - return _.fromPairs( - Object.entries(obj).map(([name, version]) => [ - name, - new Set([version.startsWith('^') ? version.slice(1) : version]), - ]), - ); -}; - -const checkPackageJSON = async (pkg: string, pkgJSONContents: any) => { - const pkgJSON = JSON.parse(pkgJSONContents); - const deps = pkgJSON.dependencies === undefined ? [] : pkgJSON.dependencies; - const devDeps = pkgJSON.devDependencies === undefined ? [] : pkgJSON.devDependencies; - const dependencies = { ...deps, ...devDeps }; - await Promise.all( - Object.keys(dependencies).map(async (dependency) => checkDependency(pkg, dependency, dependencies)), - ); - - Object.entries(dependencies).forEach(([dep, version]) => { - if (!(version as string).startsWith('^')) { - console.log(`${pkg}: ${dep} missing caret`); - } - }); - - if (Object.keys(deps).some((dep) => dep.startsWith('@types'))) { - console.log(`${pkg} contains @types in dependencies`); - } - - return mergeDependencies(getDependencies(pkgJSON.dependencies), getDependencies(pkgJSON.devDependencies)); -}; - -const checkPackage = async (pkg: string) => { - const pkgJSONContents = await fs.readFile(path.resolve(dir, pkg, 'package.json'), 'utf8'); - - return checkPackageJSON(pkg, pkgJSONContents); -}; - -const run = async () => { - log('Checking dependencies...'); - const [packages, pkgJSONContents] = await Promise.all([ - fs.readdir(dir), - fs.readFile(path.resolve(__dirname, '..', 'package.json'), 'utf8'), - ]); - - const depsList = await Promise.all( - packages - .filter((pkg) => pkg.startsWith('neo-one')) - .map(checkPackage) - .concat(checkPackageJSON('root', pkgJSONContents)), - ); - - const allDeps = depsList.reduce(mergeDependencies, {}); - Object.entries(allDeps) - .filter((value) => value[1].size > 1) - .forEach(([name]) => { - log(`${name} inconsistent versions`); - }); -}; - -run() - .then(() => { - log('Done'); - process.exit(0); - }) - .catch((error) => { - log(error); - process.exit(1); - }); diff --git a/scripts/e2e/jestSetup.js b/scripts/e2e/jestSetup.js deleted file mode 100644 index e00f5b68e9..0000000000 --- a/scripts/e2e/jestSetup.js +++ /dev/null @@ -1,19 +0,0 @@ -const { - disableConsoleLogForTest, -} = require('../../dist/neo-one/packages/neo-one-client-switch/common/processConsoleLogMessages'); -const { - setGlobalLogLevel, -} = require('../../dist/neo-one/packages/neo-one-logger/loggers'); - -disableConsoleLogForTest(); -setGlobalLogLevel('silent'); -jest.setTimeout(30 * 1000); -jest.retryTimes(2); - -beforeEach(async () => { - await one.setup(); -}); - -afterEach(async () => { - await one.cleanupTest(); -}); diff --git a/scripts/hooks/checkForUpdates.ts b/scripts/hooks/checkForUpdates.ts deleted file mode 100644 index 88210ba970..0000000000 --- a/scripts/hooks/checkForUpdates.ts +++ /dev/null @@ -1,44 +0,0 @@ -// tslint:disable no-console -import * as appRootDir from 'app-root-dir'; -import execa from 'execa'; - -const changedFilesToArray = (files: string) => files.split('\n'); - -const yarnLock = /yarn\.lock/g; - -const doCheck = async (files: string) => { - const changedFiles = changedFilesToArray(files); - const lockChanged = changedFiles.some((file) => yarnLock.test(file)); - if (lockChanged) { - console.log('yarn.lock changed, executing `yarn install`'); - const childProc = execa('yarn', ['install', '--non-interactive', '--frozen-lockfile'], { - cwd: appRootDir.get(), - }); - - if (childProc.stdout !== null) { - childProc.stdout.pipe(process.stdout); - } - if (childProc.stderr !== null) { - childProc.stderr.pipe(process.stderr); - } - await childProc; - } -}; - -const run = async (gitCommand: string) => { - const splitCommand = gitCommand.split(' '); - const { stdout } = await execa(splitCommand[0], splitCommand.slice(1)); - await doCheck(stdout); -}; - -export const checkForUpdates = (gitCommand: string) => { - run(gitCommand) - .then(() => { - process.exit(0); - }) - .catch((error) => { - console.log('Hook failed, you may need to run `yarn install`'); - console.error(error); - process.exit(0); - }); -}; diff --git a/scripts/hooks/post-checkout.ts b/scripts/hooks/post-checkout.ts deleted file mode 100644 index 2af31ec3ca..0000000000 --- a/scripts/hooks/post-checkout.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { checkForUpdates } from './checkForUpdates'; - -checkForUpdates(`git diff --name-only ${process.argv[2]}`); diff --git a/scripts/hooks/post-merge.ts b/scripts/hooks/post-merge.ts deleted file mode 100644 index 894d0a296a..0000000000 --- a/scripts/hooks/post-merge.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { checkForUpdates } from './checkForUpdates'; - -checkForUpdates('git diff --name-only HEAD@{1} HEAD'); diff --git a/scripts/hooks/post-rewrite.ts b/scripts/hooks/post-rewrite.ts deleted file mode 100644 index 894d0a296a..0000000000 --- a/scripts/hooks/post-rewrite.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { checkForUpdates } from './checkForUpdates'; - -checkForUpdates('git diff --name-only HEAD@{1} HEAD'); diff --git a/scripts/test/jestSetup.js b/scripts/test/jestSetup.js deleted file mode 100644 index 18436f50ca..0000000000 --- a/scripts/test/jestSetup.js +++ /dev/null @@ -1,10 +0,0 @@ -const { disableConsoleLogForTest } = require('@neo-one/client-switch'); -const { setGlobalLogLevel } = require('@neo-one/logger'); - -disableConsoleLogForTest(); -setGlobalLogLevel('silent'); -jest.setTimeout(120 * 1000); - -afterEach(async () => { - await one.cleanupTest(); -}); diff --git a/scripts/try-publish b/scripts/try-publish deleted file mode 100755 index 1a767c6da8..0000000000 --- a/scripts/try-publish +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -set -e -# pwd -package=$(cat package.json | node ../../node_modules/.bin/json name) -version=$(cat package.json | node ../../node_modules/.bin/json version) -published=$(npm info $package@$version version || echo "0") -if [[ "$version" = "$published" ]]; then - echo "⚠️ $package@$version is already published!" -else - echo "πŸ“¦ Publishing: $package@$version (published: $published)" - # Switch to yarn publish --non-interactive once it's released - yarn publish --non-interactive $@ -fi diff --git a/scripts/website/webpack/loaders/tsLoader.ts b/scripts/website/webpack/loaders/tsLoader.ts deleted file mode 100644 index c9a33cc72e..0000000000 --- a/scripts/website/webpack/loaders/tsLoader.ts +++ /dev/null @@ -1,28 +0,0 @@ -import * as path from 'path'; -import { Bundle, Stage } from '../../types'; -import { babelLoader } from './babelLoader'; -import { cacheLoader } from './cacheLoader'; - -const APP_ROOT_DIR = path.resolve(__dirname, '..', '..', '..', '..'); - -export const tsLoader = ({ stage, bundle }: { readonly stage: Stage; readonly bundle: Bundle }) => ({ - test: /\.tsx?$/, - exclude: /node_modules/, - use: [ - cacheLoader({ stage, bundle, name: 'ts' }), - stage === 'dev' || process.env.NEO_ONE_CACHE === 'true' ? 'thread-loader' : undefined, - babelLoader({ stage, bundle }), - { - loader: 'ts-loader', - options: { - transpileOnly: stage === 'dev' || process.env.NEO_ONE_CACHE === 'true', - happyPackMode: stage === 'dev' || process.env.NEO_ONE_CACHE === 'true', - context: APP_ROOT_DIR, - configFile: path.resolve(APP_ROOT_DIR, 'tsconfig.static.json'), - onlyCompileBundledFiles: true, - experimentalFileCaching: true, - experimentalWatchApi: stage === 'dev' || process.env.NEO_ONE_CACHE === 'true', - }, - }, - ].filter((value) => value !== undefined), -}); diff --git a/tsconfig.jest.json b/tsconfig.jest.json deleted file mode 100644 index d1c55ff8ed..0000000000 --- a/tsconfig.jest.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "./tsconfig/tsconfig.es2017.cjs.json" -} diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index f43399b0b2..0000000000 --- a/tsconfig.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": "./packages", - "target": "esnext", - "module": "commonjs", - "moduleResolution": "node", - "lib": ["esnext", "dom"], - "paths": { - "@neo-one/*": ["./neo-one-*/src"], - "bn.js": ["../types/bn.js.d.ts"] - }, - "typeRoots": ["./node_modules/@types", "./types"], - "pretty": true, - "noEmit": true, - "declaration": false, - "allowSyntheticDefaultImports": true, - "resolveJsonModule": false, - "experimentalDecorators": true, - "jsx": "react", - "alwaysStrict": true, - "strict": true, - "skipLibCheck": true, - "noUnusedLocals": false, - "noImplicitReturns": true, - "allowUnusedLabels": false, - "noUnusedParameters": false, - "allowUnreachableCode": false, - "noFallthroughCasesInSwitch": true, - "forceConsistentCasingInFileNames": true - }, - "exclude": [ - "dist", - "packages/neo-one-cli/src/__data__/projects/*/contracts/**/*.ts", - "packages/neo-one-cli/src/__data__/projects/*/neo-one/contracts/**/*.ts", - "packages/neo-one-smart-contract/src/*.d.ts", - "packages/neo-one-smart-contract-lib/src/index.ts", - "packages/neo-one-smart-contract-lib/src/ownership/*.ts", - "packages/neo-one-smart-contract-lib/src/ICO.ts", - "packages/neo-one-smart-contract-lib/src/NEP5Token.ts", - "packages/neo-one-smart-contract-compiler/src/__data__/snippets/**/*.ts", - "packages/*/src/__data__/contracts/**/*.ts", - "packages/*/template/**/*.ts", - "packages/*/template/**/*.tsx", - "packages/neo-one-playground", - "packages/neo-one-website/courses/**/contracts/*.ts", - "cypress" - ] -} diff --git a/tsconfig/tsconfig.es2017.browserify.cjs.json b/tsconfig/tsconfig.es2017.browserify.cjs.json deleted file mode 100644 index bbf5c29518..0000000000 --- a/tsconfig/tsconfig.es2017.browserify.cjs.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "./tsconfig.cjs.json", - "compilerOptions": { - "target": "es2017", - "paths": { - "@neo-one/*-browserify": [ - "./neo-one-*/src" - ], - "bn.js": [ - "../types/bn.js.d.ts" - ] - } - } -} diff --git a/tsconfig/tsconfig.esnext.browserify.esm.json b/tsconfig/tsconfig.esnext.browserify.esm.json deleted file mode 100644 index c258935c5c..0000000000 --- a/tsconfig/tsconfig.esnext.browserify.esm.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "./tsconfig.esm.json", - "compilerOptions": { - "target": "esnext", - "paths": { - "@neo-one/*-esnext-browserify-esm": [ - "./neo-one-*/src" - ], - "bn.js": [ - "../types/bn.js.d.ts" - ] - } - } -} diff --git a/tsconfig/tsconfig.esnext.esm.json b/tsconfig/tsconfig.esnext.esm.json deleted file mode 100644 index 5dc6017844..0000000000 --- a/tsconfig/tsconfig.esnext.esm.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "./tsconfig.esm.json", - "compilerOptions": { - "target": "esnext", - "paths": { - "@neo-one/*-esnext-esm": [ - "./neo-one-*/src" - ], - "bn.js": [ - "../types/bn.js.d.ts" - ] - } - } -} diff --git a/tslint.json b/tslint.json index 2e5362f2ae..88eb1a2976 100644 --- a/tslint.json +++ b/tslint.json @@ -1,31 +1,18 @@ { "extends": ["tslint:all", "tslint-config-prettier"], "rulesDirectory": [ - "tslint-microsoft-contrib", - "./node_modules/tslint-immutable/rules", - "./node_modules/tslint-consistent-codestyle/rules", - "./node_modules/tslint-sonarts/lib/rules/", - "./node_modules/tslint-clean-code/dist/build", - "./node_modules/rxjs-tslint-rules/dist/rules" + "./common/temp/node_modules/tslint-microsoft-contrib", + "./common/temp/node_modules/tslint-immutable/rules", + "./common/temp/node_modules/tslint-consistent-codestyle/rules", + "./common/temp/node_modules/tslint-sonarts/lib/rules/", + "./common/temp/node_modules/tslint-clean-code/dist/build", + "./common/temp/node_modules/rxjs-tslint-rules/dist/rules" ], - "linterOptions": { - "exclude": [ - "./packages/*/package.json", - "./packages/*/template/**/*.ts", - "./packages/*/template/**/*.tsx", - "./packages/neo-one-cli/src/__data__/projects/**/contracts/**/*.ts", - "./packages/neo-one-smart-contract/src/*.d.ts", - "./packages/neo-one-smart-contract-compiler/src/__data__/snippets/**/*.ts", - "./packages/neo-one-smart-contract-lib/src/*.ts", - "./packages/*/src/__data__/contracts/*.ts", - "./packages/neo-one-playground", - "./cypress/**/*" - ] - }, - "defaultSeverity": "warning", + "defaultSeverity": "error", "rules": { "cyclomatic-complexity": false, "no-unused-variable": false, + "no-inferred-empty-object-type": false, "no-duplicate-variable": false, "no-unbound-method": false, "completed-docs": false, @@ -35,7 +22,6 @@ "no-namespace": false, "typedef": false, "no-empty-interface": false, - "no-use-before-declare": false, "no-magic-numbers": false, "prefer-method-signature": false, "restrict-plus-operands": false, @@ -47,6 +33,7 @@ "file-name-casing": [false, "camel-case"], "static-this": false, "strict-comparisons": false, + "no-use-before-declare": null, "no-async-without-await": false, "no-null-undefined-union": false, "array-type": [true, "array-simple"], @@ -126,6 +113,7 @@ "no-collapsible-if": true, "no-unnecessary-else": true, "no-unnecessary-type-annotation": false, + "no-unnecessary-type-assertion": false, "no-unused": [true, "unused-function-expression-name", "unused-class-expression-name", "unused-catch-binding"], "no-var-before-return": true, "prefer-while": true, diff --git a/wallaby.js b/wallaby.js index 0525fd0012..ed4eca5799 100644 --- a/wallaby.js +++ b/wallaby.js @@ -1,61 +1,7 @@ -module.exports = function(wallaby) { - return { - files: [ - { pattern: 'jest/**/*', instrument: false }, - { pattern: 'scripts/serializers/**/*.js', instrument: false }, - { pattern: 'scripts/test/jestSetup.js', instrument: false }, - { pattern: 'package.json', instrument: false }, - { pattern: 'packages/*/package.json', instrument: false }, - { pattern: 'tsconfig.json', instrument: false }, - { pattern: 'packages/*/tsconfig.json', instrument: false }, - 'packages/*/src/**/*.ts?(x)', - 'packages/*/src/**/*.d.ts?(x)', - 'packages/*/src/**/*.snap', - '!packages/neo-one-cli/src/**/*.ts?(x)', - '!packages/*/src/**/*.test.ts?(x)', - '!packages/*/src/__e2e__/**/*', - ], - tests: ['packages/*/src/**/__tests__/**/*.test.ts?(x)'], - env: { - type: 'node', - runner: 'node', - }, - testFramework: 'jest', - compilers: { - '**/*.ts?(x)': wallaby.compilers.typeScript({ - ...require('./tsconfig.json').compilerOptions, - ...require('./tsconfig/tsconfig.build.json').compilerOptions, - ...require('./tsconfig/tsconfig.cjs.json').compilerOptions, - ...require('./tsconfig/tsconfig.es2017.cjs.json').compilerOptions, - ...require('./tsconfig.jest.json').compilerOptions, - }), - }, - preprocessors: { - '**/*.test.js?(x)': (file) => - require('@babel/core').transform(file.content, { - sourceMap: true, - filename: file.path, - plugins: ['babel-plugin-jest-hoist'], - }), - }, - setup: function(wallaby) { - var jestConfig = require('./jest/unit.js'); - jestConfig.moduleNameMapper = { - '^@neo-one/ec-key': '@neo-one/ec-key', - '^@neo-one/boa': '@neo-one/boa', - '^@neo-one/csharp': '@neo-one/csharp', - '^@neo-one/(.+)': wallaby.projectCacheDir + '/packages/neo-one-$1', - }; - jestConfig.transform = {}; - delete jestConfig.rootDir; - wallaby.testFramework.configure(jestConfig); - }, - hints: { - testFileSelection: { - include: /wallaby\.only/, - exclude: /wallaby\.skip/, - }, - ignoreCoverage: /istanbul ignore next/, - }, - }; -}; +module.exports = () => ({ + autoDetect: true, + testFramework: { + path: './common/temp/node_modules', + configFile: './packages/neo-one-build-tests/jest/unit', + }, +});